Main Page Modules Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages
UnificationBasedPtr Class Reference#include <unification.h>
Inheritance diagram for UnificationBasedPtr:
List of all members.
|
Public Types |
enum | Order { Preorder,
Postorder,
Both
} |
| The order in which AST Nodes should be visited. More...
|
enum | Depth { Subtree,
NodeOnly
} |
| Which Nodes in the AST tree should be visited. More...
|
Public Member Functions |
Unify_ECR * | ecr (declNode *decl) const |
Unify_ECR * | ecr (threeAddrNode *alloc_site) const |
UnifyType * | proctype (procNode *p) |
void | createProcBlock (procNode *, memoryModel &, procLocation *) |
virtual void | mark_alloc (stmtNode *stmt, declNode *source_decl, declNode *target_decl) |
void | ensure_no_bottom (Unify_ECR *tao, declNode *decl, UnifyType *parent) |
virtual bool | isField (declNode *f, bool &from_annotation) const |
Unify_ECR * | ecrField (UnifyType *container, declNode *field, bool field_from_annotation) |
Unify_ECR * | ecrDeref (UnifyType *container) |
Alpha * | string_alpha (constNode *con) |
set< Unify_ECR * > | unique_ecr () const |
procNode * | synthetic_proc (declNode *d) |
void | print_ecr () |
|
Methods to get and set fields in the class.
|
Order | order () const |
| Return the order in which Nodes of an AST should be visited.
|
Depth | depth () const |
| Return which Nodes of an AST should be visited.
|
|
These methods define the functions that should be performed when different classes of Nodes are encountered in the AST. The most specific "at_" method that matches a given Node's class will be called.
|
virtual void | at_node (Node *the_node, Order ord) |
virtual void | at_def (defNode *the_def, Order ord) |
virtual void | at_subdecl (subdeclNode *the_subdecl, Order ord) |
virtual void | at_type (typeNode *the_type, Order ord) |
virtual void | at_prim (primNode *the_prim, Order ord) |
virtual void | at_tdef (tdefNode *the_tdef, Order ord) |
virtual void | at_ptr (ptrNode *the_ptr, Order ord) |
virtual void | at_array (arrayNode *the_array, Order ord) |
virtual void | at_func (funcNode *the_func, Order ord) |
virtual void | at_sue (sueNode *the_sue, Order ord) |
virtual void | at_struct (structNode *the_struct, Order ord) |
virtual void | at_union (unionNode *the_union, Order ord) |
virtual void | at_enum (enumNode *the_enum, Order ord) |
virtual void | at_expr (exprNode *the_expr, Order ord) |
virtual void | at_index (indexNode *the_index, Order ord) |
virtual void | at_const (constNode *the_const, Order ord) |
virtual void | at_id (idNode *the_id, Order ord) |
virtual void | at_binary (binaryNode *the_binary, Order ord) |
virtual void | at_unary (unaryNode *the_unary, Order ord) |
virtual void | at_cast (castNode *the_cast, Order ord) |
virtual void | at_comma (commaNode *the_comma, Order ord) |
virtual void | at_ternary (ternaryNode *the_ternary, Order ord) |
virtual void | at_call (callNode *the_call, Order ord) |
virtual void | at_initializer (initializerNode *the_initializer, Order ord) |
virtual void | at_stmt (stmtNode *the_stmt, Order ord) |
virtual void | at_block (blockNode *the_block, Order ord) |
virtual void | at_basicblock (basicblockNode *the_basicblock, Order ord) |
virtual void | at_exprstmt (exprstmtNode *the_exprstmt, Order ord) |
virtual void | at_target (targetNode *the_target, Order ord) |
virtual void | at_label (labelNode *the_label, Order ord) |
virtual void | at_case (caseNode *the_case, Order ord) |
virtual void | at_selection (selectionNode *the_selection, Order ord) |
virtual void | at_if (ifNode *the_if, Order ord) |
virtual void | at_switch (switchNode *the_switch, Order ord) |
virtual void | at_loop (loopNode *the_loop, Order ord) |
virtual void | at_while (whileNode *the_while, Order ord) |
virtual void | at_do (doNode *the_do, Order ord) |
virtual void | at_for (forNode *the_for, Order ord) |
virtual void | at_jump (jumpNode *the_jump, Order ord) |
virtual void | at_goto (gotoNode *the_goto, Order ord) |
virtual void | at_continue (continueNode *the_continue, Order ord) |
virtual void | at_break (breakNode *the_break, Order ord) |
virtual void | at_return (returnNode *the_return, Order ord) |
virtual void | at_attrib (attribNode *the_attrib, Order ord) |
virtual void | at_operand (operandNode *the_oper, Order ord) |
virtual void | at_conditiongoto (conditiongotoNode *the_condgoto, Order ord) |
virtual void | at_text (textNode *the_text, Order ord) |
Static Public Member Functions |
UnificationBasedPtr * | analyze_all (Linker &) |
bool | reachable (UnifyType *src, UnifyTypes &targets, UnifyTypes &visited) |
bool | compatible_type (typeNode *, typeNode *) |
Static Public Attributes |
int | unify_points_to_max = 0 |
Protected Member Functions |
| UnificationBasedPtr (Linker &l) |
void | at_unit (unitNode *u, Order) |
void | at_proc (procNode *, Order) |
void | at_decl (declNode *, Order) |
void | at_suespec (suespecNode *, Order) |
void | at_threeAddr (threeAddrNode *, Order) |
void | at_allocation (threeAddrNode *, Unify_Size) |
void | at_call (threeAddrNode *, Unify_Size) |
void | at_initializer (initializerNode *init, typeNode *init_type, Unify_ECR *init_ecr) |
void | mergeOperand (operandNode *lhs, operandNode *rhs, Unify_Size) |
Alpha * | alpha (operandNode *, Unify_Size) |
Unify_ECR * | ecr (operandNode *, Unify_Size, Unify_Offset **offset=NULL) |
Unify_ECR * | ecr1 (declNode *decl) |
void | join (Alpha *a1, Alpha *a2, bool *recursion_detected=NULL) |
void | join (Unify_ECR *e1, Unify_ECR *e2, bool *recursion_detected=NULL) |
void | join (Lambda *l1, Lambda *l2) |
void | settype (Unify_ECR *e, UnifyType *t) |
void | settype (Lambda *l, int n, int m, Unify_ECR **t, Unify_ECR *r, bool ellipse) |
void | ensure_sim_obj (Unify_ECR *tao, Unify_Size &s) |
Unify_Structure * | ensure_struct_obj (Unify_ECR *tao, suespecNode *sue, bool redo_pending=false) |
void | expand (Unify_ECR *e) |
void | promote (Unify_ECR *e, Unify_Size &s) |
void | collapse (Unify_ECR *e) |
void | make_unknown (Unify_Offset *o) |
void | unless_zero (Unify_Offset *o, Unify_ECR *tao) |
void | cjoin (Unify_Size &s, Unify_ECR *e1, Unify_ECR *e2) |
UnifyType * | unify (UnifyType *t1, UnifyType *t2) |
bool | make_compatible (declSet n, Unify_Structure *s, Unify_ECR *container, bool force=false) |
void | merge_EltMap (UnifyType *t1, UnifyType *t2, Unify_Structure *) |
void | finalize () |
procNode * | create_synthetic_proc (declNode *) |
declNode * | unique_field_defn (declNode *d) |
suespecNode * | field2sue (declNode *d) |
virtual bool | annotation_returns_object (procNode *proc) const |
virtual void | annotation_call_arg (procNode *, int arg, typeNode *, Unify_ECR *) |
virtual void | annotation_call_arg (procNode *, int arg, typeNode *, Alpha *) |
virtual void | annotation_ret_val (procNode *, Unify_ECR *taoR, unitNode *unit) |
virtual void | annotation_init_global (declNode *global) |
Static Protected Member Functions |
bool | is_va_list (declNode *decl) |
Protected Attributes |
TREE map< declNode *, Unify_ECR * > | _ecr |
TREE map< procNode *, UnifyType * > | _proctype |
TREE map< threeAddrNode *,
Unify_ECR * > | _alloc |
TREE map< constNode *, Alpha * > | _string_alpha |
TREE int | _dismantler_tmp |
TREE map< declNode *, suespecNode * > | _field2sue |
TREE map< declNode *, decl_list > | _fieldpos |
TREE set< suespecNode * > | _unique_sue |
TREE set< suespecNode * > | _visited_sue |
TREE map< declNode *, declNode * > | _unique_field_defn |
map< threeAddrNode *, UnifyType * > | _ptr_call |
unitNode * | cur_unit |
procNode * | cur_proc |
bool | inside_call_func |
bool | finalizing |
bool | serve_again |
bool | new_pending |
set< Unify_Pending * > | more_pending |
Linker & | linker |
map< declNode *, procNode * > | _synthetic_proc |
set< procNode * > | _analyzed_proc |
map< declNode *, int > | _assignments |
map< declNode *, bool > | _uses |
Member Enumeration Documentation
enum Walker::Depth [inherited]
|
|
|
Which Nodes in the AST tree should be visited.
- Enumeration values:
-
Subtree |
The entire AST should be traversed. |
NodeOnly |
Only the root Node should be visited. |
Definition at line 155 of file walker.h. |
enum Walker::Order [inherited]
|
|
|
The order in which AST Nodes should be visited.
- Enumeration values:
-
Preorder |
Nodes should be visited before their children. |
Postorder |
Nodes should be visited after their children. |
Both |
Nodes should be visited both before and after their children. |
Definition at line 147 of file walker.h.
Referenced by whileNode::walk(), unitNode::walk(), unionNode::walk(), unaryNode::walk(), threeAddrNode::walk(), textNode::walk(), ternaryNode::walk(), tdefNode::walk(), switchNode::walk(), suespecNode::walk(), subdeclNode::walk(), structNode::walk(), returnNode::walk(), ptrNode::walk(), procNode::walk(), primNode::walk(), operandNode::walk(), metastmtNode::walk(), metaexprNode::walk(), labelNode::walk(), initializerNode::walk(), ifNode::walk(), idNode::walk(), gotoNode::walk(), funcNode::walk(), forNode::walk(), exprstmtNode::walk(), enumNode::walk(), doNode::walk(), declNode::walk(), continueNode::walk(), constNode::walk(), conditiongotoNode::walk(), commaNode::walk(), castNode::walk(), caseNode::walk(), callNode::walk(), breakNode::walk(), blockNode::walk(), binaryNode::walk(), basicblockNode::walk(), attribNode::walk(), and arrayNode::walk(). |
Constructor & Destructor Documentation
UnificationBasedPtr::UnificationBasedPtr |
( |
Linker & |
l |
) |
[inline, protected] |
|
Member Function Documentation
|
Definition at line 1394 of file unification.cc.
References _string_alpha, operandNode::addr(), alpha(), Const, ecr(), Id, constant::is_str(), constant::Str, Unify_Blank, exprNode::value(), and operandNode::var().
Referenced by alpha(), at_call(), at_threeAddr(), mergeOperand(), and unify(). |
UnificationBasedPtr * UnificationBasedPtr::analyze_all |
( |
Linker & |
|
) |
[static] |
|
virtual void UnificationBasedPtr::annotation_call_arg |
( |
procNode * |
, |
|
|
int |
arg, |
|
|
typeNode * |
, |
|
|
Alpha * |
|
|
) |
[inline, protected, virtual] |
|
virtual void UnificationBasedPtr::annotation_call_arg |
( |
procNode * |
, |
|
|
int |
arg, |
|
|
typeNode * |
, |
|
|
Unify_ECR * |
|
|
) |
[inline, protected, virtual] |
|
virtual void UnificationBasedPtr::annotation_init_global |
( |
declNode * |
global |
) |
[inline, protected, virtual] |
|
virtual void UnificationBasedPtr::annotation_ret_val |
( |
procNode * |
, |
|
|
Unify_ECR * |
taoR, |
|
|
unitNode * |
unit |
|
) |
[inline, protected, virtual] |
|
virtual bool UnificationBasedPtr::annotation_returns_object |
( |
procNode * |
proc |
) |
const [inline, protected, virtual] |
|
|
Definition at line 1424 of file unification.cc.
References _alloc, _assignments, _ecr, _uses, at_decl(), ensure_sim_obj(), expand(), Id, inside_call_func, UnifyType::is_bottom(), is_Sim_Obj, Unify_Size::leq(), threeAddrNode::lhs(), settype(), Sim_Obj_Alpha, Sim_Obj_Size, Alpha::tao(), Unify_ECR::type(), Unify_Blank, and operandNode::var().
Referenced by at_call(), and at_threeAddr(). |
virtual void Walker::at_array |
( |
arrayNode * |
the_array, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_attrib |
( |
attribNode * |
the_attrib, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_basicblock |
( |
basicblockNode * |
the_basicblock, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_binary |
( |
binaryNode * |
the_binary, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_block |
( |
blockNode * |
the_block, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_break |
( |
breakNode * |
the_break, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_call |
( |
callNode * |
the_call, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Definition at line 1455 of file unification.cc.
References _ecr, _ptr_call, _synthetic_proc, Lambda::addArg(), alpha(), annotation_call_arg(), annotation_ret_val(), annotation_returns_object(), threeAddrNode::arg_list(), funcNode::args(), at_allocation(), BLANK, cjoin(), Const, Node::coord(), cur_unit, procNode::decl(), decl_list, ecr(), Lambda::ellipsis(), ensure_sim_obj(), expand(), operandNode::fields(), typeNode::follow_tdefs(), Func, Id, operandNode::index(), UnifyType::is_bottom(), Lambda::is_bottom(), is_Sim_Obj, is_va_list(), typeNode::is_void(), join(), Unify_Size::leq(), threeAddrNode::lhs(), linker, Linker::lookup_procedure(), Lambda::m(), Lambda::n(), declNode::no_tdef_type(), UnifyType::objTyp(), operand_list, operand_list_p, Prim, Ptr, funcNode::returns(), threeAddrNode::rhs1(), settype(), Sim_Obj_Alpha, Sim_Obj_Lambda, Sim_Obj_Size, operandNode::star(), T_bottom, Lambda::tao(), Lambda::taoR(), Node::typ(), declNode::type(), Unify_ECR::type(), typeNode::type(), operandNode::type(), and operandNode::var().
Referenced by at_threeAddr(), and finalize(). |
virtual void Walker::at_case |
( |
caseNode * |
the_case, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_cast |
( |
castNode * |
the_cast, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_comma |
( |
commaNode * |
the_comma, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_conditiongoto |
( |
conditiongotoNode * |
the_condgoto, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_const |
( |
constNode * |
the_const, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_continue |
( |
continueNode * |
the_continue, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
void UnificationBasedPtr::at_decl |
( |
declNode * |
, |
|
|
Order |
|
|
) |
[protected, virtual] |
|
|
Reimplemented from Walker.
Definition at line 962 of file unification.cc.
References _assignments, _dismantler_tmp, _ecr, _unique_field_defn, _uses, annotation_init_global(), Array, at_initializer(), at_proc(), declNode::BLOCK, Const, create_synthetic_proc(), cur_proc, debug, procNode::decl(), decl_list, declNode::decl_location(), declNode::Decl_location, ensure_sim_obj(), declNode::ENUM, declNode::EXTERN, declNode::FORMAL, Func, declNode::init(), Initializer, inside_call_func, is_dismantler_tmp, typeNode::is_ellipsis(), is_va_list(), join(), linker, Linker::lookup_symbol(), declNode::name(), typeNode::no_tdef_type(), declNode::no_tdef_type(), Walker::Preorder, declNode::PROC, Sim_Obj_Alpha, declNode::storage_class(), declNode::SU, declNode::TOP, Node::typ(), Unify_ECR::type(), declNode::type(), and declNode::TYPEDEF.
Referenced by at_allocation(), and ecr1(). |
virtual void Walker::at_def |
( |
defNode * |
the_def, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_do |
( |
doNode * |
the_do, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_enum |
( |
enumNode * |
the_enum, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_expr |
( |
exprNode * |
the_expr, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Reimplemented in NodeLocator, and remove_stale_type_walker.
Definition at line 275 of file walker.h.
References Walker::at_node().
Referenced by Walker::at_binary(), Walker::at_call(), Walker::at_cast(), Walker::at_comma(), Walker::at_index(), Walker::at_initializer(), Walker::at_operand(), Walker::at_ternary(), Walker::at_unary(), and metaexprNode::walk(). |
virtual void Walker::at_exprstmt |
( |
exprstmtNode * |
the_exprstmt, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_for |
( |
forNode * |
the_for, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_func |
( |
funcNode * |
the_func, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_goto |
( |
gotoNode * |
the_goto, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_id |
( |
idNode * |
the_id, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Reimplemented in vcgASTWalker, callGraph, RequiresGatherer, clear_ids_walker, id_lookup_walker, Linker, name_mangle_walker, ref_fix_walker, TreeChecker, print_walker, renumber_walker, and count_walker.
Definition at line 284 of file walker.h.
References Walker::at_index().
Referenced by idNode::walk(). |
virtual void Walker::at_if |
( |
ifNode * |
the_if, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_index |
( |
indexNode * |
the_index, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_initializer |
( |
initializerNode * |
the_initializer, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Definition at line 1662 of file unification.cc.
References _string_alpha, Operator::ADDRESS, Array, at_suespec(), BLANK, cjoin(), Const, idNode::decl(), decl_list, decl_list_p, declSet, ecr1(), ensure_sim_obj(), ensure_struct_obj(), Enum, expand(), unaryNode::expr(), expr_list, expr_list_p, initializerNode::exprs(), field2sue(), suespecNode::fields(), typeNode::follow_tdefs(), Func, Unify_Structure::get(), Operator::id(), Id, Initializer, UnifyType::is_bottom(), join(), Unify_Size::leq(), make_compatible(), typeNode::no_tdef_type(), NodeType, UnifyType::objTyp(), Alpha::offset(), unaryNode::op(), Ptr, Sim_Obj_Alpha, Sim_Obj_Size, Unify_Size::sizeOf(), constant::Str, Struct, UnifyType::structure, STRUCTURE, Alpha::tao(), Node::typ(), exprNode::type(), declNode::type(), Unify_ECR::type(), Unary, Unify_Blank, Union, unique_field_defn(), unless_zero(), and exprNode::value().
Referenced by at_decl(). |
virtual void Walker::at_jump |
( |
jumpNode * |
the_jump, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_label |
( |
labelNode * |
the_label, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_loop |
( |
loopNode * |
the_loop, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_node |
( |
Node * |
the_node, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Reimplemented in gcWalker, goto_label_walker, set_container_walker, sue_complete_walker, TreeChecker, and df_number_walker.
Definition at line 223 of file walker.h.
Referenced by Walker::at_def(), Walker::at_expr(), Walker::at_stmt(), Walker::at_text(), Walker::at_type(), and Walker::at_unit(). |
virtual void Walker::at_operand |
( |
operandNode * |
the_oper, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_prim |
( |
primNode * |
the_prim, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
void UnificationBasedPtr::at_proc |
( |
procNode * |
, |
|
|
Order |
|
|
) |
[protected, virtual] |
|
|
Reimplemented from Walker.
Definition at line 856 of file unification.cc.
References _analyzed_proc, _assignments, _ecr, _proctype, _uses, annotation_returns_object(), funcNode::args(), UnifyType::blank, BLANK, cjoin(), cur_proc, procNode::decl(), decl_list, decl_list_p, UnifyType::ecr(), Lambda::ellipsis(), ensure_sim_obj(), expand(), Lambda::is_bottom(), is_Sim_Obj, is_va_list(), typeNode::is_void(), Unify_Size::leq(), linker, Linker::lookup_procedure(), declNode::no_tdef_type(), UnifyType::objTyp(), Unify_Blank::p, Walker::Postorder, Prim, Unify_ECR::proc(), UnifyType::procs(), procNode::return_decl(), funcNode::returns(), Unify_ECR::root(), Unify_Blank::s, settype(), Sim_Obj_Lambda, Sim_Obj_Size, T_bottom, Lambda::tao(), Lambda::taoR(), Node::typ(), Unify_ECR::type(), declNode::type(), Unify_Blank, Unify_ECR::var(), and procNode::walk().
Referenced by at_decl(), and ecr1(). |
virtual void Walker::at_ptr |
( |
ptrNode * |
the_ptr, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_return |
( |
returnNode * |
the_return, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_selection |
( |
selectionNode * |
the_selection, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_stmt |
( |
stmtNode * |
the_stmt, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Reimplemented in NodeLocator, W, init_flowproblem_walker, and LivenessWalker.
Definition at line 308 of file walker.h.
References Walker::at_node().
Referenced by Walker::at_attrib(), Walker::at_block(), Walker::at_exprstmt(), Walker::at_jump(), Walker::at_loop(), Walker::at_selection(), Walker::at_target(), Walker::at_threeAddr(), and metastmtNode::walk(). |
virtual void Walker::at_struct |
( |
structNode * |
the_struct, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_subdecl |
( |
subdeclNode * |
the_subdecl, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_sue |
( |
sueNode * |
the_sue, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
void UnificationBasedPtr::at_suespec |
( |
suespecNode * |
, |
|
|
Order |
|
|
) |
[protected, virtual] |
|
|
Reimplemented from Walker.
Definition at line 808 of file unification.cc.
References _field2sue, _fieldpos, _unique_field_defn, _unique_sue, _visited_sue, Node::coord(), decl_list, decl_list_p, suespecNode::fields(), suespecNode::owner(), Walker::Postorder, Struct, and Coord::to_string().
Referenced by at_initializer(). |
virtual void Walker::at_switch |
( |
switchNode * |
the_switch, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_target |
( |
targetNode * |
the_target, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_tdef |
( |
tdefNode * |
the_tdef, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_ternary |
( |
ternaryNode * |
the_ternary, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_text |
( |
textNode * |
the_text, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Reimplemented from Walker.
Definition at line 1106 of file unification.cc.
References alpha(), at_allocation(), at_call(), ecr(), ensure_sim_obj(), Operator::FUNC_CALL, Id, inside_call_func, is_Sim_Obj, make_unknown(), mergeOperand(), Alpha::offset(), threeAddrNode::op(), Walker::Postorder, Sim_Obj_Alpha, threeAddrNode::sizeof_type(), operandNode::star(), Unify_ECR::type(), Unify_Offset::value(), operandNode::var(), and Unify_Offset::zero. |
virtual void Walker::at_type |
( |
typeNode * |
the_type, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_unary |
( |
unaryNode * |
the_unary, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
virtual void Walker::at_union |
( |
unionNode * |
the_union, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
void UnificationBasedPtr::at_unit |
( |
unitNode * |
u, |
|
|
Order |
|
|
) |
[inline, protected, virtual] |
|
virtual void Walker::at_while |
( |
whileNode * |
the_while, |
|
|
Order |
ord |
|
) |
[inline, virtual, inherited] |
|
|
Definition at line 2349 of file unification.cc.
References Unify_Simple::alpha, Unify_Object::alpha, UnifyType::blank, BLANK, expand(), finalizing, Unify_Structure::fo, Unify_Structure::fto, Unify_Structure::get(), Unify_Pendings::insert(), UnifyType::is_bottom(), join(), Unify_Object::lambda, Unify_Simple::lambda, Unify_Structure::m, make_compatible(), more_pending, new_pending, UnifyType::object, OBJECT, Object_Typ, UnifyType::objTyp(), Unify_Blank::p, Unify_ECR::pending(), Pendings_p, promote(), Unify_ECR::root(), Unify_Object::s, Unify_Structure::s, Unify_Simple::s, Unify_Blank::s, serve_again, Unify_Pendings::set(), settype(), UnifyType::simple, SIMPLE, UnifyType::size(), UnifyType::structure, STRUCTURE, Alpha::tao(), declNode::type(), Unify_ECR::type(), Unify_Blank, Unify_Simple, Unify_Structure, and unique_field_defn().
Referenced by at_call(), at_initializer(), at_proc(), finalize(), mergeOperand(), and settype(). |
void UnificationBasedPtr::collapse |
( |
Unify_ECR * |
e |
) |
[protected] |
|
|
Definition at line 2301 of file unification.cc.
References Unify_Size::leq(), UnifyType::object, OBJECT, UnifyType::objTyp(), Unify_Object::s, settype(), Unify_ECR::type(), unify(), and Unify_Object.
Referenced by ecr(), finalize(), make_unknown(), and unless_zero(). |
|
Definition at line 3150 of file unification.cc.
References Array, Const, Node::coord(), def, arrayNode::dim(), Func, Prim, Ptr, Struct, Tdef, Node::typ(), typeNode::type(), and Union.
Referenced by make_compatible(), and Unify_Structure::Unify_Structure(). |
procNode * UnificationBasedPtr::create_synthetic_proc |
( |
declNode * |
|
) |
[protected] |
|
Depth Walker::depth |
( |
|
) |
const [inline, inherited] |
|
|
Return which Nodes of an AST should be visited.
A value of SubTree specifies that the entire AST should be traversed. A value of NodeOnly specifies that only the root Node in the AST should be visited.
Definition at line 211 of file walker.h.
Referenced by whileNode::walk(), unitNode::walk(), unionNode::walk(), unaryNode::walk(), threeAddrNode::walk(), ternaryNode::walk(), switchNode::walk(), suespecNode::walk(), subdeclNode::walk(), structNode::walk(), returnNode::walk(), ptrNode::walk(), procNode::walk(), operandNode::walk(), metastmtNode::walk(), metaexprNode::walk(), labelNode::walk(), initializerNode::walk(), ifNode::walk(), idNode::walk(), funcNode::walk(), forNode::walk(), exprstmtNode::walk(), enumNode::walk(), doNode::walk(), declNode::walk(), constNode::walk(), conditiongotoNode::walk(), commaNode::walk(), castNode::walk(), caseNode::walk(), callNode::walk(), blockNode::walk(), binaryNode::walk(), basicblockNode::walk(), attribNode::walk(), arrayNode::walk(), and Walker::Walker(). |
|
Definition at line 1227 of file unification.cc.
References operandNode::addr(), Unify_Object::alpha, BLANK, operandNode::cast(), collapse(), Const, idNode::decl(), declSet, ecr(), ecr1(), ensure_sim_obj(), ensure_struct_obj(), field2sue(), operandNode::fields(), Unify_Structure::get(), Id, id_list, id_list_p, operandNode::index(), UnifyType::is_bottom(), is_Sim_Obj, make_compatible(), UnifyType::object, UnifyType::objTyp(), Alpha::offset(), promote(), Sim_Obj_Alpha, Unify_Size::sizeOf(), operandNode::star(), UnifyType::structure, STRUCTURE, Alpha::tao(), Unify_ECR::type(), typeNode::type(), declNode::type(), unique_field_defn(), Unify_Offset::unknown, unless_zero(), Unify_Offset::value(), and operandNode::var(). |
|
Definition at line 1369 of file unification.cc.
References _assignments, _ecr, _uses, at_decl(), at_proc(), cur_proc, declNode::decl_location(), declNode::ENUM, Func, linker, Linker::lookup_procedure(), Unify_ECR::root(), declNode::TOP, Node::typ(), and declNode::type().
Referenced by at_initializer(), and ecr(). |
|
Definition at line 3342 of file unification.cc.
References Unify_Object::alpha, Unify_Simple::alpha, UnifyType::blank, BLANK, UnifyType::block(), Unify_Pending::cjoin, memoryBlock::decl(), UnifyType::ecr(), ensure_sim_obj(), UnifyType::is_bottom(), UnifyType::object, OBJECT, UnifyType::objTyp(), Unify_ECR::pending(), Pendings_p, Unify_Blank::s, Unify_Pendings::set(), UnifyType::simple, SIMPLE, Alpha::tao(), Unify_ECR::type(), and declNode::type().
Referenced by Pointers::assignment_operator(), memoryModel::create_memory_object(), memoryModel::generate_array_elements_for(), memoryModel::initialize_struct(), and Pointers::star_operator(). |
|
Definition at line 3273 of file unification.cc.
References _unique_field_defn, Unify_Object::alpha, BLANK, declSet, UnifyType::ecr(), ensure_struct_obj(), field2sue(), Unify_Structure::fo, Unify_Structure::get(), UnifyType::is_bottom(), make_compatible(), declNode::name(), UnifyType::object, OBJECT, UnifyType::objTyp(), promote(), Unify_Simple::s, UnifyType::simple, SIMPLE, UnifyType::structure, STRUCTURE, Alpha::tao(), and Unify_ECR::type().
Referenced by memoryModel::create_memory_object(), and Pointers::dot_operator(). |
|
Definition at line 2177 of file unification.cc.
References UnifyType::blank, BLANK, expand(), UnifyType::is_bottom(), Unify_Size::leq(), UnifyType::objTyp(), Unify_Blank::p, promote(), Unify_Structure::s, Unify_Simple::s, Unify_Blank::s, settype(), UnifyType::simple, SIMPLE, UnifyType::structure, STRUCTURE, Unify_ECR::type(), and Unify_Simple.
Referenced by at_allocation(), at_call(), at_decl(), at_initializer(), at_proc(), at_threeAddr(), ecr(), ecrDeref(), and mergeOperand(). |
|
Definition at line 2218 of file unification.cc.
References UnifyType::blank, BLANK, UnifyType::block(), Unify_Pending::cjoin, memoryBlock::decl(), EltMap, UnifyType::is_bottom(), Object_Typ, UnifyType::objTyp(), Unify_Blank::p, Unify_ECR::pending(), Pendings_p, promote(), Unify_Blank::s, Unify_Pendings::set(), settype(), UnifyType::structure, STRUCTURE, declNode::type(), Unify_ECR::type(), and Unify_Structure.
Referenced by at_initializer(), ecr(), and ecrField(). |
void UnificationBasedPtr::expand |
( |
Unify_ECR * |
e |
) |
[protected] |
|
void UnificationBasedPtr::finalize |
( |
|
) |
[protected] |
|
|
Definition at line 3180 of file unification.cc.
References _ptr_call, Unify_ECR::allECR(), at_call(), cjoin(), Unify_Pending::cjoin, collapse(), Unify_Pending::collapse, UnifyType::ecr(), finalizing, is_Sim_Obj, join(), Unify_Pending::join_ECR, Unify_Pending::join_Lambda, make_unknown(), Unify_Pending::makeunknown, more_pending, new_pending, OBJECT, Pendings_p, serve_again, Sim_Obj_Lambda, SIMPLE, and Unify_ECR::type().
Referenced by analyze_all(). |
bool UnificationBasedPtr::is_va_list |
( |
declNode * |
decl |
) |
[static, protected] |
|
virtual bool UnificationBasedPtr::isField |
( |
declNode * |
f, |
|
|
bool & |
from_annotation |
|
) |
const [inline, virtual] |
|
void UnificationBasedPtr::join |
( |
Lambda * |
l1, |
|
|
Lambda * |
l2 |
|
) |
[protected] |
|
|
Definition at line 2097 of file unification.cc.
References Lambda::addArg(), Lambda::ellipsis(), Unify_Pendings::insert(), UnifyType::is_bottom(), Lambda::is_bottom(), join(), Unify_Pending::join_Lambda, Lambda::m(), Lambda::n(), new_pending, Lambda::pending(), Pendings_p, Unify_ECR::root(), Unify_Pendings::set(), settype(), Lambda::tao(), Lambda::taoR(), and Unify_ECR::type(). |
void UnificationBasedPtr::join |
( |
Unify_ECR * |
e1, |
|
|
Unify_ECR * |
e2, |
|
|
bool * |
recursion_detected = NULL |
|
) |
[protected] |
|
|
Definition at line 1980 of file unification.cc.
References Unify_Pendings::cleanup(), finalizing, Unify_Pendings::insert(), UnifyType::is_bottom(), join(), more_pending, new_pending, Unify_ECR::pending(), Pendings_p, UnifyType::procs(), Unify_ECR::root(), Unify_Pendings::set(), settype(), Unify_ECR::type(), unify(), and Unify_ECR::Union(). |
void UnificationBasedPtr::join |
( |
Alpha * |
a1, |
|
|
Alpha * |
a2, |
|
|
bool * |
recursion_detected = NULL |
|
) |
[protected] |
|
|
Definition at line 1967 of file unification.cc.
References Unify_Pendings::insert(), make_unknown(), Alpha::offset(), Unify_Offset::pending(), Alpha::tao(), Unify_Offset::value(), and Unify_Offset::zero.
Referenced by at_call(), at_decl(), at_initializer(), cjoin(), finalize(), join(), make_compatible(), merge_EltMap(), mergeOperand(), settype(), and unify(). |
|
Definition at line 2862 of file unification.cc.
References _field2sue, _fieldpos, _unique_field_defn, Unify_Structure::all_str(), compatible_type(), Node::coord(), cur_proc, decl_list, decl_list_p, declSet, suespecNode::fields(), Unify_Structure::fo, Unify_Structure::fto, join(), Unify_Structure::m, suespecNode::owner(), Unify_ECR::root(), Struct, and typeNode::type().
Referenced by at_initializer(), cjoin(), ecr(), ecrField(), and merge_EltMap(). |
void UnificationBasedPtr::make_unknown |
( |
Unify_Offset * |
o |
) |
[protected] |
|
virtual void UnificationBasedPtr::mark_alloc |
( |
stmtNode * |
stmt, |
|
|
declNode * |
source_decl, |
|
|
declNode * |
target_decl |
|
) |
[inline, virtual] |
|
|
Definition at line 1160 of file unification.cc.
References _assignments, _ecr, _uses, operandNode::addr(), alpha(), declNode::BLOCK, operandNode::cast(), cjoin(), Const, declNode::decl_location(), ecr(), ensure_sim_obj(), expand(), operandNode::fields(), Func, Id, operandNode::index(), is_dismantler_tmp, join(), Unify_Size::leq(), Sim_Obj_Alpha, Sim_Obj_Size, operandNode::star(), Unify_ECR::type(), and operandNode::var().
Referenced by at_threeAddr(). |
Order Walker::order |
( |
|
) |
const [inline, inherited] |
|
|
Return the order in which Nodes of an AST should be visited.
Nodes can be visited before their children (Preorder), after their children (Postorder), or both (Both).
Definition at line 203 of file walker.h.
Referenced by df_number_walker::at_node(), whileNode::walk(), unitNode::walk(), unionNode::walk(), unaryNode::walk(), threeAddrNode::walk(), textNode::walk(), ternaryNode::walk(), tdefNode::walk(), switchNode::walk(), suespecNode::walk(), subdeclNode::walk(), structNode::walk(), returnNode::walk(), ptrNode::walk(), procNode::walk(), primNode::walk(), operandNode::walk(), metastmtNode::walk(), metaexprNode::walk(), labelNode::walk(), initializerNode::walk(), ifNode::walk(), idNode::walk(), gotoNode::walk(), funcNode::walk(), forNode::walk(), exprstmtNode::walk(), enumNode::walk(), doNode::walk(), declNode::walk(), continueNode::walk(), constNode::walk(), conditiongotoNode::walk(), commaNode::walk(), castNode::walk(), caseNode::walk(), callNode::walk(), breakNode::walk(), blockNode::walk(), binaryNode::walk(), basicblockNode::walk(), attribNode::walk(), and arrayNode::walk(). |
void UnificationBasedPtr::print_ecr |
( |
|
) |
|
|
|
Definition at line 3443 of file unification.cc.
References _dismantler_tmp, _ecr, Unify_ECR::allECR(), Unify_Simple::alpha, Unify_Object::alpha, Array, procNode::decl(), decl_list_p, declNode::FORMAL, UnifyType::id(), typeNode::is_ellipsis(), is_Sim_Obj, is_va_list(), declNode::name(), UnifyType::object, OBJECT, UnifyType::objTyp(), Unify_ECR::print(), Unify_ECR::proc(), Sim_Obj_Alpha, UnifyType::simple, SIMPLE, Alpha::tao(), declNode::TOP, Unify_ECR::type(), declNode::type(), and Unify_ECR::var().
Referenced by testUnify::run(), and Pointers::run_unification(). |
|
Definition at line 2285 of file unification.cc.
References Unify_Size::leq(), UnifyType::object, OBJECT, UnifyType::objTyp(), Unify_Object::s, settype(), Unify_ECR::type(), unify(), and Unify_Object.
Referenced by cjoin(), ecr(), ecrField(), ensure_sim_obj(), and ensure_struct_obj(). |
|
Definition at line 1902 of file unification.cc.
References UnifyType::block(), cjoin(), Unify_Pending::cjoin, huge_pending, join(), Unify_Pending::join_ECR, Unify_Pending::join_Lambda, Unify_ECR::pending(), Pendings_p, Unify_Pendings::set(), Unify_ECR::type(), and memoryBlock::unifyType().
Referenced by at_allocation(), at_call(), at_proc(), cjoin(), collapse(), ensure_no_bottom(), ensure_sim_obj(), ensure_struct_obj(), expand(), join(), and promote(). |
|
Definition at line 2537 of file unification.cc.
References Unify_Object::alpha, Unify_Simple::alpha, alpha(), UnifyType::blank, BLANK, UnifyType::block(), BOTTOM, UnifyType::ecr(), EltMap, Unify_Parents::equal(), Unify_Size::equal(), Lambda::equal(), Alpha::equal(), FieldOrder, FieldTypeOrder, UnifyType::is_bottom(), is_Sim_Obj, join(), Unify_Object::lambda, Unify_Simple::lambda, merge_EltMap(), memoryBlock::name(), UnifyType::object, OBJECT, Object_Typ, UnifyType::objTyp(), Alpha::offset(), Unify_Blank::p, Unify_Structure::p, Unify_Object::p, Unify_Simple::p, Unify_ECR::root(), Unify_Blank::s, Unify_Structure::s, Unify_Object::s, Unify_Simple::s, Sim_Obj_Alpha, Sim_Obj_Lambda, UnifyType::simple, SIMPLE, UnifyType::structure, STRUCTURE, Alpha::tao(), Unify_ECR::type(), Unify_Object, Unify_Simple, Unify_Structure, Unify_Offset::unknown, and Unify_Offset::value().
Referenced by collapse(), expand(), join(), and promote(). |
set< Unify_ECR * > UnificationBasedPtr::unique_ecr |
( |
|
) |
const |
|
declNode* UnificationBasedPtr::unique_field_defn |
( |
declNode * |
d |
) |
[inline, protected] |
|
Member Data Documentation
set<procNode*> UnificationBasedPtr::_analyzed_proc [protected]
|
|
map<declNode*,int> UnificationBasedPtr::_assignments [protected]
|
|
TREE int UnificationBasedPtr::_dismantler_tmp [protected]
|
|
TREE map<constNode*,Alpha*> UnificationBasedPtr::_string_alpha [protected]
|
|
TREE map<declNode*, declNode*> UnificationBasedPtr::_unique_field_defn [protected]
|
|
TREE set<suespecNode*> UnificationBasedPtr::_unique_sue [protected]
|
|
map<declNode*,bool> UnificationBasedPtr::_uses [protected]
|
|
TREE set<suespecNode*> UnificationBasedPtr::_visited_sue [protected]
|
|
procNode* UnificationBasedPtr::cur_proc [protected]
|
|
unitNode* UnificationBasedPtr::cur_unit [protected]
|
|
bool UnificationBasedPtr::finalizing [protected]
|
|
bool UnificationBasedPtr::inside_call_func [protected]
|
|
Linker& UnificationBasedPtr::linker [protected]
|
|
set<Unify_Pending*> UnificationBasedPtr::more_pending [protected]
|
|
bool UnificationBasedPtr::new_pending [protected]
|
|
bool UnificationBasedPtr::serve_again [protected]
|
|
int UnificationBasedPtr::unify_points_to_max = 0 [static]
|
|
The documentation for this class was generated from the following files:
|