Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/LabelFixer.h

    r1869adf r843054c2  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Rob Schluntz
    12 // Last Modified On : Tue Jun 23 15:47:25 2015
    13 // Update Count     : 28
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Tue May 19 15:31:55 2015
     13// Update Count     : 3
    1414//
    1515
     
    5353                virtual void visit( DeclStmt *stmt ) { visit( (Statement *)stmt ); return Parent::visit( stmt ); }
    5454                virtual void visit( BranchStmt *branchStmt );
    55                 virtual void visit( UntypedExpr *untyped );
    5655
    5756                Label setLabelsDef( std::list< Label > &, Statement *definition );
    58                 template< typename UsageNode >
    59                 void setLabelsUsg( Label, UsageNode *usage = 0 );
     57                Label setLabelsUsg( Label, Statement *usage = 0 );
    6058
    6159          private:
    6260                class Entry {
    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 );
     61                  public:
     62                        Entry( Statement *to = 0, Statement *from = 0 );
    7463                        bool used() { return ( usage.empty() ); }
    7564                        bool defined() { return ( definition != 0 ); }
     
    7766
    7867                        Label get_label() const { return label; }
    79                         void set_label( Label lab ) { label = lab; }
     68                        Statement *get_definition() const { return definition; }
     69                        std::list< Statement *> &get_uses() { return usage; }
    8070
    81                         Statement *get_definition() const { return definition; }
     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() ); }
    8273                        void set_definition( Statement *def ) { definition = def; }
    8374
    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() ); }
     75                        void set_label( Label lab ) { label = lab; }
     76                        Label gset_label() const { return label; }
    9777                  private:
    9878                        Label label; 
    9979                        Statement *definition;
    100                         std::list<UsageLoc> usage;
     80                        std::list<Statement *> usage;
    10181                };
    10282                 
    10383                std::map < Label, Entry *> labelTable;
    10484                LabelGenerator *generator;
    105                 Statement * currentStatement;
    10685        };
    10786} // namespace ControlStruct
Note: See TracChangeset for help on using the changeset viewer.