Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.h

    rd29fa5f rfa16264  
    3636        Type * result;
    3737        TypeSubstitution * env;
     38        Expression * argName; // if expression is used as an argument, it can be "designated" by this name
    3839        bool extension = false;
    3940
    40         Expression();
     41        Expression( Expression * _aname = nullptr );
    4142        Expression( const Expression & other );
    4243        virtual ~Expression();
     
    4546        const Type * get_result() const { return result; }
    4647        void set_result( Type * newValue ) { result = newValue; }
     48        bool has_result() const { return result != nullptr; }
    4749
    4850        TypeSubstitution * get_env() const { return env; }
    4951        void set_env( TypeSubstitution * newValue ) { env = newValue; }
     52        Expression * get_argName() const { return argName; }
     53        void set_argName( Expression * name ) { argName = name; }
    5054        bool get_extension() const { return extension; }
    5155        Expression * set_extension( bool exten ) { extension = exten; return this; }
     
    5458        virtual void accept( Visitor & v ) override = 0;
    5559        virtual Expression * acceptMutator( Mutator & m ) override = 0;
    56         virtual void print( std::ostream & os, Indenter indent = {} ) const override;
     60        virtual void print( std::ostream & os, int indent = 0 ) const override;
    5761};
    5862
     
    97101        virtual void accept( Visitor & v ) { v.visit( this ); }
    98102        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    99         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     103        virtual void print( std::ostream & os, int indent = 0 ) const;
    100104};
    101105
     
    108112        std::list<Expression*> args;
    109113
    110         UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() );
     114        UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >(), Expression *_aname = nullptr );
    111115        UntypedExpr( const UntypedExpr & other );
    112116        virtual ~UntypedExpr();
     
    115119        void set_function( Expression * newValue ) { function = newValue; }
    116120
     121        void set_args( std::list<Expression *> & listArgs ) { args = listArgs; }
    117122        std::list<Expression*>::iterator begin_args() { return args.begin(); }
    118123        std::list<Expression*>::iterator end_args() { return args.end(); }
     
    125130        virtual void accept( Visitor & v ) { v.visit( this ); }
    126131        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    127         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     132        virtual void print( std::ostream & os, int indent = 0 ) const;
     133        virtual void printArgs(std::ostream & os, int indent = 0) const;
    128134};
    129135
     
    133139        std::string name;
    134140
    135         NameExpr( std::string name );
     141        NameExpr( std::string name, Expression *_aname = nullptr );
    136142        NameExpr( const NameExpr & other );
    137143        virtual ~NameExpr();
     
    143149        virtual void accept( Visitor & v ) { v.visit( this ); }
    144150        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    145         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     151        virtual void print( std::ostream & os, int indent = 0 ) const;
    146152};
    147153
     
    154160        Expression * arg;
    155161
    156         AddressExpr( Expression * arg );
     162        AddressExpr( Expression * arg, Expression *_aname = nullptr );
    157163        AddressExpr( const AddressExpr & other );
    158164        virtual ~AddressExpr();
     
    164170        virtual void accept( Visitor & v ) { v.visit( this ); }
    165171        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    166         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     172        virtual void print( std::ostream & os, int indent = 0 ) const;
    167173};
    168174
     
    180186        virtual void accept( Visitor & v ) { v.visit( this ); }
    181187        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    182         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     188        virtual void print( std::ostream & os, int indent = 0 ) const;
    183189};
    184190
     
    188194        Expression * arg;
    189195
    190         CastExpr( Expression * arg );
    191         CastExpr( Expression * arg, Type * toType );
     196        CastExpr( Expression * arg, Expression *_aname = nullptr );
     197        CastExpr( Expression * arg, Type * toType, Expression *_aname = nullptr );
    192198        CastExpr( const CastExpr & other );
    193199        virtual ~CastExpr();
     
    199205        virtual void accept( Visitor & v ) { v.visit( this ); }
    200206        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    201         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     207        virtual void print( std::ostream & os, int indent = 0 ) const;
    202208};
    203209
     
    217223        virtual void accept( Visitor & v ) { v.visit( this ); }
    218224        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    219         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     225        virtual void print( std::ostream & os, int indent = 0 ) const;
    220226};
    221227
     
    226232        Expression * aggregate;
    227233
    228         UntypedMemberExpr( Expression * member, Expression * aggregate );
     234        UntypedMemberExpr( Expression * member, Expression * aggregate, Expression *_aname = nullptr );
    229235        UntypedMemberExpr( const UntypedMemberExpr & other );
    230236        virtual ~UntypedMemberExpr();
     
    238244        virtual void accept( Visitor & v ) { v.visit( this ); }
    239245        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    240         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     246        virtual void print( std::ostream & os, int indent = 0 ) const;
    241247};
    242248
     
    248254        Expression * aggregate;
    249255
    250         MemberExpr( DeclarationWithType * member, Expression * aggregate );
     256        MemberExpr( DeclarationWithType * member, Expression * aggregate, Expression *_aname = nullptr );
    251257        MemberExpr( const MemberExpr & other );
    252258        virtual ~MemberExpr();
     
    260266        virtual void accept( Visitor & v ) { v.visit( this ); }
    261267        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    262         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     268        virtual void print( std::ostream & os, int indent = 0 ) const;
    263269};
    264270
     
    269275        DeclarationWithType * var;
    270276
    271         VariableExpr( DeclarationWithType * var );
     277        VariableExpr( DeclarationWithType * var, Expression *_aname = nullptr );
    272278        VariableExpr( const VariableExpr & other );
    273279        virtual ~VariableExpr();
     
    281287        virtual void accept( Visitor & v ) { v.visit( this ); }
    282288        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    283         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     289        virtual void print( std::ostream & os, int indent = 0 ) const;
    284290};
    285291
     
    289295        Constant constant;
    290296
    291         ConstantExpr( Constant constant );
     297        ConstantExpr( Constant constant, Expression *_aname = nullptr );
    292298        ConstantExpr( const ConstantExpr & other );
    293299        virtual ~ConstantExpr();
     
    299305        virtual void accept( Visitor & v ) { v.visit( this ); }
    300306        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    301         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     307        virtual void print( std::ostream & os, int indent = 0 ) const;
    302308};
    303309
     
    309315        bool isType;
    310316
    311         SizeofExpr( Expression * expr );
     317        SizeofExpr( Expression * expr, Expression *_aname = nullptr );
    312318        SizeofExpr( const SizeofExpr & other );
    313         SizeofExpr( Type * type );
     319        SizeofExpr( Type * type, Expression *_aname = nullptr );
    314320        virtual ~SizeofExpr();
    315321
     
    324330        virtual void accept( Visitor & v ) { v.visit( this ); }
    325331        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    326         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     332        virtual void print( std::ostream & os, int indent = 0 ) const;
    327333};
    328334
     
    334340        bool isType;
    335341
    336         AlignofExpr( Expression * expr );
     342        AlignofExpr( Expression * expr, Expression *_aname = nullptr );
    337343        AlignofExpr( const AlignofExpr & other );
    338         AlignofExpr( Type * type );
     344        AlignofExpr( Type * type, Expression *_aname = nullptr );
    339345        virtual ~AlignofExpr();
    340346
     
    349355        virtual void accept( Visitor & v ) { v.visit( this ); }
    350356        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    351         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     357        virtual void print( std::ostream & os, int indent = 0 ) const;
    352358};
    353359
     
    358364        std::string member;
    359365
    360         UntypedOffsetofExpr( Type * type, const std::string & member );
     366        UntypedOffsetofExpr( Type * type, const std::string & member, Expression *_aname = nullptr );
    361367        UntypedOffsetofExpr( const UntypedOffsetofExpr & other );
    362368        virtual ~UntypedOffsetofExpr();
     
    370376        virtual void accept( Visitor & v ) { v.visit( this ); }
    371377        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    372         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     378        virtual void print( std::ostream & os, int indent = 0 ) const;
    373379};
    374380
     
    379385        DeclarationWithType * member;
    380386
    381         OffsetofExpr( Type * type, DeclarationWithType * member );
     387        OffsetofExpr( Type * type, DeclarationWithType * member, Expression *_aname = nullptr );
    382388        OffsetofExpr( const OffsetofExpr & other );
    383389        virtual ~OffsetofExpr();
     
    391397        virtual void accept( Visitor & v ) { v.visit( this ); }
    392398        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    393         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     399        virtual void print( std::ostream & os, int indent = 0 ) const;
    394400};
    395401
     
    399405        StructInstType * type;
    400406
    401         OffsetPackExpr( StructInstType * type );
     407        OffsetPackExpr( StructInstType * type_, Expression * aname_ = 0 );
    402408        OffsetPackExpr( const OffsetPackExpr & other );
    403409        virtual ~OffsetPackExpr();
     
    409415        virtual void accept( Visitor & v ) { v.visit( this ); }
    410416        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    411         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     417        virtual void print( std::ostream & os, int indent = 0 ) const;
    412418};
    413419
     
    420426        bool isType;
    421427
    422         AttrExpr(Expression * attr, Expression * expr );
     428        AttrExpr(Expression * attr, Expression * expr, Expression *_aname = nullptr );
    423429        AttrExpr( const AttrExpr & other );
    424         AttrExpr( Expression * attr, Type * type );
     430        AttrExpr( Expression * attr, Type * type, Expression *_aname = nullptr );
    425431        virtual ~AttrExpr();
    426432
     
    437443        virtual void accept( Visitor & v ) { v.visit( this ); }
    438444        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    439         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     445        virtual void print( std::ostream & os, int indent = 0 ) const;
    440446};
    441447
     
    446452        Expression * arg2;
    447453
    448         LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true );
     454        LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true, Expression *_aname = nullptr );
    449455        LogicalExpr( const LogicalExpr & other );
    450456        virtual ~LogicalExpr();
     
    459465        virtual void accept( Visitor & v ) { v.visit( this ); }
    460466        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    461         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     467        virtual void print( std::ostream & os, int indent = 0 ) const;
    462468
    463469  private:
     
    472478        Expression * arg3;
    473479
    474         ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 );
     480        ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3, Expression *_aname = nullptr );
    475481        ConditionalExpr( const ConditionalExpr & other );
    476482        virtual ~ConditionalExpr();
     
    486492        virtual void accept( Visitor & v ) { v.visit( this ); }
    487493        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    488         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     494        virtual void print( std::ostream & os, int indent = 0 ) const;
    489495};
    490496
     
    495501        Expression * arg2;
    496502
    497         CommaExpr( Expression * arg1, Expression * arg2 );
     503        CommaExpr( Expression * arg1, Expression * arg2, Expression *_aname = nullptr );
    498504        CommaExpr( const CommaExpr & other );
    499505        virtual ~CommaExpr();
     
    507513        virtual void accept( Visitor & v ) { v.visit( this ); }
    508514        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    509         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     515        virtual void print( std::ostream & os, int indent = 0 ) const;
    510516};
    511517
     
    525531        virtual void accept( Visitor & v ) { v.visit( this ); }
    526532        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    527         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     533        virtual void print( std::ostream & os, int indent = 0 ) const;
    528534};
    529535
     
    551557        virtual void accept( Visitor & v ) { v.visit( this ); }
    552558        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    553         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     559        virtual void print( std::ostream & os, int indent = 0 ) const;
    554560
    555561        // https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Machine-Constraints.html#Machine-Constraints
     
    579585        virtual void accept( Visitor & v ) { v.visit( this ); }
    580586        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    581         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     587        virtual void print( std::ostream & os, int indent = 0 ) const;
    582588};
    583589
     
    597603        virtual void accept( Visitor & v ) { v.visit( this ); }
    598604        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    599         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     605        virtual void print( std::ostream & os, int indent = 0 ) const;
    600606};
    601607
     
    615621        virtual void accept( Visitor & v ) { v.visit( this ); }
    616622        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    617         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     623        virtual void print( std::ostream & os, int indent = 0 ) const;
    618624};
    619625
     
    634640        virtual void accept( Visitor & v ) { v.visit( this ); }
    635641        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    636         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     642        virtual void print( std::ostream & os, int indent = 0 ) const;
    637643};
    638644
     
    642648        std::list<Expression*> exprs;
    643649
    644         UntypedTupleExpr( const std::list< Expression * > & exprs );
     650        UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
    645651        UntypedTupleExpr( const UntypedTupleExpr & other );
    646652        virtual ~UntypedTupleExpr();
     
    651657        virtual void accept( Visitor & v ) { v.visit( this ); }
    652658        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    653         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     659        virtual void print( std::ostream & os, int indent = 0 ) const;
    654660};
    655661
     
    659665        std::list<Expression*> exprs;
    660666
    661         TupleExpr( const std::list< Expression * > & exprs );
     667        TupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
    662668        TupleExpr( const TupleExpr & other );
    663669        virtual ~TupleExpr();
     
    668674        virtual void accept( Visitor & v ) { v.visit( this ); }
    669675        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    670         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     676        virtual void print( std::ostream & os, int indent = 0 ) const;
    671677};
    672678
     
    689695        virtual void accept( Visitor & v ) { v.visit( this ); }
    690696        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    691         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     697        virtual void print( std::ostream & os, int indent = 0 ) const;
    692698};
    693699
     
    697703        StmtExpr * stmtExpr = nullptr;
    698704
    699         TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls );
     705        TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls, Expression * _aname = nullptr );
    700706        TupleAssignExpr( const TupleAssignExpr & other );
    701707        virtual ~TupleAssignExpr();
     
    707713        virtual void accept( Visitor & v ) { v.visit( this ); }
    708714        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    709         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     715        virtual void print( std::ostream & os, int indent = 0 ) const;
    710716};
    711717
     
    730736        virtual void accept( Visitor & v ) { v.visit( this ); }
    731737        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    732         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     738        virtual void print( std::ostream & os, int indent = 0 ) const;
    733739};
    734740
     
    757763        virtual void accept( Visitor & v ) { v.visit( this ); }
    758764        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    759         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     765        virtual void print( std::ostream & os, int indent = 0 ) const;
    760766
    761767private:
     
    791797        virtual void accept( Visitor & v ) { v.visit( this ); }
    792798        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    793         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     799        virtual void print( std::ostream & os, int indent = 0 ) const;
    794800};
    795801
     
    812818        virtual void accept( Visitor & v ) { v.visit( this ); }
    813819        virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
    814         virtual void print( std::ostream & os, Indenter indent = {} ) const;
     820        virtual void print( std::ostream & os, int indent = 0 ) const;
    815821};
    816822
Note: See TracChangeset for help on using the changeset viewer.