Ignore:
Timestamp:
Jun 24, 2015, 4:33:13 PM (10 years ago)
Author:
Rob Schluntz <rschlunt@…>
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
Message:

fix label name in label address expression

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/LabelFixer.h

    r94e0864d r1869adf  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Rob Schluntz
    12 // Last Modified On : Fri May 29 15:25:55 2015
    13 // Update Count     : 11
     12// Last Modified On : Tue Jun 23 15:47:25 2015
     13// Update Count     : 28
    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 );
    5556
    5657                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 );
    5860
    5961          private:
    6062                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 );
    6374                        bool used() { return ( usage.empty() ); }
    6475                        bool defined() { return ( definition != 0 ); }
     
    7182                        void set_definition( Statement *def ) { definition = def; }
    7283
    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() ); }
    7697                  private:
    7798                        Label label; 
    7899                        Statement *definition;
    79                         std::list<BranchStmt *> usage;
     100                        std::list<UsageLoc> usage;
    80101                };
    81102                 
    82103                std::map < Label, Entry *> labelTable;
    83104                LabelGenerator *generator;
     105                Statement * currentStatement;
    84106        };
    85107} // namespace ControlStruct
Note: See TracChangeset for help on using the changeset viewer.