Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Statement.h

    r843054c2 rde62360d  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon May 18 10:57:40 2015
    13 // Update Count     : 2
     12// Last Modified On : Tue Jun 23 11:44:27 2015
     13// Update Count     : 20
    1414//
    1515
     
    2828
    2929        std::list<Label> & get_labels() { return labels; }
     30        const std::list<Label> & get_labels() const { return labels; }
    3031
    3132        virtual Statement *clone() const = 0;
    3233        virtual void accept( Visitor &v ) = 0;
    3334        virtual Statement *acceptMutator( Mutator &m ) = 0;
    34         virtual void print( std::ostream &os, int indent = 0 );
     35        virtual void print( std::ostream &os, int indent = 0 ) const;
    3536  protected:
    3637        std::list<Label> labels;
     
    4849        virtual void accept( Visitor &v ) { v.visit( this ); }
    4950        virtual CompoundStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    50         virtual void print( std::ostream &os, int indent = 0 );
     51        virtual void print( std::ostream &os, int indent = 0 ) const;
    5152  private:
    5253        std::list<Statement*> kids;
     
    6465        virtual void accept( Visitor &v ) { v.visit( this ); }
    6566        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    66         virtual void print( std::ostream &os, int indent = 0 );
     67        virtual void print( std::ostream &os, int indent = 0 ) const;
    6768  private:
    6869        Expression *expr;
     
    8485        virtual void accept( Visitor &v ) { v.visit( this ); }
    8586        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    86         virtual void print( std::ostream &os, int indent = 0 );
     87        virtual void print( std::ostream &os, int indent = 0 ) const;
    8788  private:
    8889        Expression *condition;
     
    106107
    107108        virtual SwitchStmt *clone() const { return new SwitchStmt( *this ); }
    108         virtual void print( std::ostream &os, int indent = 0 );
     109        virtual void print( std::ostream &os, int indent = 0 ) const;
    109110  private:
    110111        Expression * condition;
     
    127128
    128129        virtual ChooseStmt *clone() const { return new ChooseStmt( *this ); }
    129         virtual void print( std::ostream &os, int indent = 0 );
     130        virtual void print( std::ostream &os, int indent = 0 ) const;
    130131  private:
    131132        Expression *condition;
     
    141142
    142143        virtual FallthruStmt *clone() const { return new FallthruStmt( *this ); }
    143         virtual void print( std::ostream &os, int indent = 0 );
     144        virtual void print( std::ostream &os, int indent = 0 ) const;
    144145};
    145146
     
    150151        virtual ~CaseStmt();
    151152
    152         bool isDefault() { return _isDefault; }
     153        static CaseStmt * makeDefault( std::list<Label> labels = std::list<Label>(),
     154                std::list<Statement *> stmts = std::list<Statement *>() );
     155
     156        bool isDefault() const { return _isDefault; }
    153157        void set_default(bool b) { _isDefault = b; }
    154158
     
    163167
    164168        virtual CaseStmt *clone() const { return new CaseStmt( *this ); }
    165         virtual void print( std::ostream &os, int indent = 0 );
     169        virtual void print( std::ostream &os, int indent = 0 ) const;
    166170  private:
    167171        Expression * condition;
     
    186190        virtual void accept( Visitor &v ) { v.visit( this ); }
    187191        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    188         virtual void print( std::ostream &os, int indent = 0 );
     192        virtual void print( std::ostream &os, int indent = 0 ) const;
    189193  private:
    190194        Expression *condition;
     
    211215        virtual void accept( Visitor &v ) { v.visit( this ); }
    212216        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    213         virtual void print( std::ostream &os, int indent = 0 );
     217        virtual void print( std::ostream &os, int indent = 0 ) const;
    214218  private:
    215219        Statement *initialization;
     
    221225class BranchStmt : public Statement {
    222226  public:
    223         enum Type { Goto = 0 , Break, Continue };
     227        enum Type { Goto = 0, Break, Continue };
    224228
    225229        BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError);
     
    227231        virtual ~BranchStmt() {}
    228232
     233        Label get_originalTarget() { return originalTarget; }
    229234        Label get_target() { return target; }
    230235        void set_target( Label newValue ) { target = newValue; }
     
    239244        virtual void accept( Visitor &v ) { v.visit( this ); }
    240245        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    241         virtual void print( std::ostream &os, int indent = 0 );
     246        virtual void print( std::ostream &os, int indent = 0 ) const;
    242247  private:
    243248        static const char *brType[];
     249        Label originalTarget;  // can give better error messages if we remember the label name that the user entered
    244250        Label target;
    245251        Expression *computedTarget;
     
    258264        virtual void accept( Visitor &v ) { v.visit( this ); }
    259265        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    260         virtual void print( std::ostream &os, int indent = 0 );
     266        virtual void print( std::ostream &os, int indent = 0 ) const;
    261267  private:
    262268        Expression *expr;
     
    274280        virtual void accept( Visitor &v ) { v.visit( this ); }
    275281        virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    276         virtual void print( std::ostream &os, int indent = 0 );
     282        virtual void print( std::ostream &os, int indent = 0 ) const;
    277283       
    278284  private:
     
    295301        virtual void accept( Visitor &v ) { v.visit( this ); }
    296302        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    297         virtual void print( std::ostream &os, int indent = 0 );
     303        virtual void print( std::ostream &os, int indent = 0 ) const;
    298304       
    299305  private:
     
    317323        virtual void accept( Visitor &v ) { v.visit( this ); }
    318324        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    319         virtual void print( std::ostream &os, int indent = 0 );
     325        virtual void print( std::ostream &os, int indent = 0 ) const;
    320326       
    321327  private:
     
    336342        virtual void accept( Visitor &v ) { v.visit( this ); }
    337343        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    338         virtual void print( std::ostream &os, int indent = 0 );
     344        virtual void print( std::ostream &os, int indent = 0 ) const;
    339345  private:
    340346        CompoundStmt *block;
     
    355361        virtual void accept( Visitor &v ) { v.visit( this ); }
    356362        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    357         virtual void print( std::ostream &os, int indent = 0 );
     363        virtual void print( std::ostream &os, int indent = 0 ) const;
    358364  private:
    359365        Declaration *decl;
Note: See TracChangeset for help on using the changeset viewer.