|
| static bool | either_is_string (const exprt &lhs, const exprt &rhs) |
| static bool | is_constant_char_array (const exprt &expr) |
| static exprt | char_pointer_of (const exprt &expr) |
| static bool | raises_on_none_operand (const std::string &op) |
| | Operators that CPython rejects outright when either operand is None: the arithmetic and ordering ones.
|
| static std::string | python_operator_symbol (const std::string &op) |
| | Python source spelling of an AST operator name, for diagnostics that quote the operator the way CPython does.
|
| static bool | is_constant_index (const nlohmann::json &slice) |
| static bool | only_read_by_constant_index (const nlohmann::json &node, const std::string &name) |
| | True when every read of name in node indexes it by a constant, so no statement can replace one of its elements.
|
| static std::string | folded_list_element (const nlohmann::json &module, const nlohmann::json &node) |
| | The element node reads when the preprocessor folded list[i] to a copy of that element, or "" unless the list is one module-level literal whose elements are never replaced.
|
| static std::string | sole_object_owner (const nlohmann::json &module, const nlohmann::json &node) |
| | The module-level name that owns the object node denotes, or "" when that is not provable from the AST.
|
| static identity_kind | identity_kind_of (const expr2tc &operand, bool user_class_pointer) |
| | A code-typed operand is the def itself only when it is a symbol: a call's result merely carries the code type.
|
| static expr2tc | function_identity (const expr2tc &lhs, const expr2tc &rhs, identity_kind lhs_kind, identity_kind rhs_kind) |
| | is with a function on one side, or nil when neither side is a function.
|
| static bool | may_hold_class (const exprt &expr) |
| static bool | is_type_call (const nlohmann::json &node) |
| static bool | undecided_side (const std::optional< std::string > &cls, const nlohmann::json &node, const exprt &expr) |
| | Whether an operand the fold could not resolve to a class may still be one: an unresolved type(x) denotes a class, and since a class object is lowered to a string, so may a name typed as a string or erased to void * (say a parameter).
|
| static void | refuse_possible_class (const std::optional< std::string > &resolved, const nlohmann::json &node, const exprt &expr) |
The module-level name that owns the object node denotes, or "" when that is not provable from the AST.
Each name on the way must be bound exactly once in the whole module, by a top-level statement, and every name but the owner by name = other_name. Such a name holds one object for the whole run, so two names with one owner are the same object, whatever the value is modelled as: a str is copied on assignment (#8412). A folded list element, or a name bound to one, is owned by that element.