Changeset 1869adf for src/ControlStruct/LabelFixer.h
- Timestamp:
- Jun 24, 2015, 4:33:13 PM (10 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- 721f17a, 937e51d
- Parents:
- 94e0864d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ControlStruct/LabelFixer.h
r94e0864d r1869adf 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri May 29 15:25:55 201513 // Update Count : 1112 // Last Modified On : Tue Jun 23 15:47:25 2015 13 // Update Count : 28 14 14 // 15 15 … … 53 53 virtual void visit( DeclStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); } 54 54 virtual void visit( BranchStmt *branchStmt ); 55 virtual void visit( UntypedExpr *untyped ); 55 56 56 57 Label setLabelsDef( std::list< Label > &, Statement *definition ); 57 void setLabelsUsg( Label, BranchStmt *usage = 0 ); 58 template< typename UsageNode > 59 void setLabelsUsg( Label, UsageNode *usage = 0 ); 58 60 59 61 private: 60 62 class Entry { 61 public: 62 Entry( Statement *to = 0, BranchStmt *from = 0 ); 63 public: 64 union UsageLoc { 65 Statement * stmt; 66 Expression * expr; 67 68 void accept( Visitor &visitor ); 69 }; 70 71 Entry( Statement *to ) : definition( to ) {} 72 Entry( Statement *to, Statement *from ); 73 Entry( Statement *to, Expression *from ); 63 74 bool used() { return ( usage.empty() ); } 64 75 bool defined() { return ( definition != 0 ); } … … 71 82 void set_definition( Statement *def ) { definition = def; } 72 83 73 std::list< BranchStmt *> &get_uses() { return usage; } 74 void add_use ( BranchStmt *use ) { usage.push_back( use ); } 75 void add_uses ( std::list<BranchStmt *> uses ) { usage.insert( usage.end(), uses.begin(), uses.end() ); } 84 std::list< UsageLoc > &get_uses() { return usage; } 85 void add_use( Statement *use ) { 86 UsageLoc loc; 87 loc.stmt = use; 88 usage.push_back( loc ); 89 } 90 void add_use( Expression *use ) { 91 UsageLoc loc; 92 loc.expr = use; 93 usage.push_back( loc ); 94 } 95 96 void add_uses ( Entry &other ) { usage.insert( usage.end(), other.usage.begin(), usage.end() ); } 76 97 private: 77 98 Label label; 78 99 Statement *definition; 79 std::list< BranchStmt *> usage;100 std::list<UsageLoc> usage; 80 101 }; 81 102 82 103 std::map < Label, Entry *> labelTable; 83 104 LabelGenerator *generator; 105 Statement * currentStatement; 84 106 }; 85 107 } // namespace ControlStruct
Note: See TracChangeset
for help on using the changeset viewer.