Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Statement.h

    ra61fea9a rde62360d  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun  3 11:55:15 2015
    13 // Update Count     : 6
     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);
     
    240244        virtual void accept( Visitor &v ) { v.visit( this ); }
    241245        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    242         virtual void print( std::ostream &os, int indent = 0 );
     246        virtual void print( std::ostream &os, int indent = 0 ) const;
    243247  private:
    244248        static const char *brType[];
     
    260264        virtual void accept( Visitor &v ) { v.visit( this ); }
    261265        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    262         virtual void print( std::ostream &os, int indent = 0 );
     266        virtual void print( std::ostream &os, int indent = 0 ) const;
    263267  private:
    264268        Expression *expr;
     
    276280        virtual void accept( Visitor &v ) { v.visit( this ); }
    277281        virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    278         virtual void print( std::ostream &os, int indent = 0 );
     282        virtual void print( std::ostream &os, int indent = 0 ) const;
    279283       
    280284  private:
     
    297301        virtual void accept( Visitor &v ) { v.visit( this ); }
    298302        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    299         virtual void print( std::ostream &os, int indent = 0 );
     303        virtual void print( std::ostream &os, int indent = 0 ) const;
    300304       
    301305  private:
     
    319323        virtual void accept( Visitor &v ) { v.visit( this ); }
    320324        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    321         virtual void print( std::ostream &os, int indent = 0 );
     325        virtual void print( std::ostream &os, int indent = 0 ) const;
    322326       
    323327  private:
     
    338342        virtual void accept( Visitor &v ) { v.visit( this ); }
    339343        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    340         virtual void print( std::ostream &os, int indent = 0 );
     344        virtual void print( std::ostream &os, int indent = 0 ) const;
    341345  private:
    342346        CompoundStmt *block;
     
    357361        virtual void accept( Visitor &v ) { v.visit( this ); }
    358362        virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    359         virtual void print( std::ostream &os, int indent = 0 );
     363        virtual void print( std::ostream &os, int indent = 0 ) const;
    360364  private:
    361365        Declaration *decl;
Note: See TracChangeset for help on using the changeset viewer.