Changes in src/ControlStruct/LabelFixer.h [843054c2:1869adf]
- File:
-
- 1 edited
-
src/ControlStruct/LabelFixer.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ControlStruct/LabelFixer.h
r843054c2 r1869adf 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Tue May 19 15:31:55 201513 // Update Count : 311 // Last Modified By : Rob Schluntz 12 // 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 Label setLabelsUsg( Label, Statement *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, Statement *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 ); } … … 66 77 67 78 Label get_label() const { return label; } 79 void set_label( Label lab ) { label = lab; } 80 68 81 Statement *get_definition() const { return definition; } 69 std::list< Statement *> &get_uses() { return usage; }70 71 void add_use ( Statement *use ) { usage.push_back( use ); }72 void add_uses ( std::list<Statement *> uses ) { usage.insert( usage.end(), uses.begin(), uses.end() ); }73 82 void set_definition( Statement *def ) { definition = def; } 74 83 75 void set_label( Label lab ) { label = lab; } 76 Label gset_label() const { return label; } 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() ); } 77 97 private: 78 98 Label label; 79 99 Statement *definition; 80 std::list< Statement *> usage;100 std::list<UsageLoc> usage; 81 101 }; 82 102 83 103 std::map < Label, Entry *> labelTable; 84 104 LabelGenerator *generator; 105 Statement * currentStatement; 85 106 }; 86 107 } // namespace ControlStruct
Note:
See TracChangeset
for help on using the changeset viewer.