Ignore:
Timestamp:
Jun 26, 2015, 4:00:26 PM (10 years ago)
Author:
Aaron Moss <a3moss@…>
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:
0df292b, e0ff3e6
Parents:
eb50842 (diff), 1869adf (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge pointer to pointer to qualified fix into master

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/LabelFixer.h

    reb50842 r937e51d  
    99// Author           : Rodolfo G. Esteves
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue May 19 15:31:55 2015
    13 // Update Count     : 3
     11// Last Modified By : Rob Schluntz
     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                 Label setLabelsUsg( Label, Statement *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, 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 );
    6374                        bool used() { return ( usage.empty() ); }
    6475                        bool defined() { return ( definition != 0 ); }
     
    6677
    6778                        Label get_label() const { return label; }
     79                        void set_label( Label lab ) { label = lab; }
     80
    6881                        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() ); }
    7382                        void set_definition( Statement *def ) { definition = def; }
    7483
    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() ); }
    7797                  private:
    7898                        Label label; 
    7999                        Statement *definition;
    80                         std::list<Statement *> usage;
     100                        std::list<UsageLoc> usage;
    81101                };
    82102                 
    83103                std::map < Label, Entry *> labelTable;
    84104                LabelGenerator *generator;
     105                Statement * currentStatement;
    85106        };
    86107} // namespace ControlStruct
Note: See TracChangeset for help on using the changeset viewer.