Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.h

    r3b58d91 r3906301  
    200200class UntypedMemberExpr : public Expression {
    201201  public:
    202         UntypedMemberExpr( Expression *member, Expression *aggregate, Expression *_aname = nullptr );
     202        UntypedMemberExpr( std::string member, Expression *aggregate, Expression *_aname = nullptr );
    203203        UntypedMemberExpr( const UntypedMemberExpr &other );
    204204        virtual ~UntypedMemberExpr();
    205205
    206         Expression * get_member() const { return member; }
    207         void set_member( Expression * newValue ) { member = newValue; }
     206        std::string get_member() const { return member; }
     207        void set_member( const std::string &newValue ) { member = newValue; }
    208208        Expression *get_aggregate() const { return aggregate; }
    209209        void set_aggregate( Expression *newValue ) { aggregate = newValue; }
     
    214214        virtual void print( std::ostream &os, int indent = 0 ) const;
    215215  private:
    216         Expression *member;
     216        std::string member;
    217217        Expression *aggregate;
    218218};
     
    618618        CompoundLiteralExpr( Type * type, Initializer * initializer );
    619619        CompoundLiteralExpr( const CompoundLiteralExpr &other );
    620         virtual ~CompoundLiteralExpr();
     620        ~CompoundLiteralExpr();
    621621
    622622        Type * get_type() const { return type; }
     
    651651  private:
    652652        Expression *low, *high;
    653 };
    654 
    655 /// TupleIndexExpr represents an element selection operation on a tuple value, e.g. t.3 after processing by the expression analyzer
    656 class TupleIndexExpr : public Expression {
    657   public:
    658         TupleIndexExpr( Expression * tuple, unsigned int index );
    659         TupleIndexExpr( const TupleIndexExpr &other );
    660         virtual ~TupleIndexExpr();
    661 
    662         Expression * get_tuple() const { return tuple; }
    663         int get_index() const { return index; }
    664         TupleIndexExpr * set_tuple( Expression *newValue ) { tuple = newValue; return this; }
    665         TupleIndexExpr * set_index( unsigned int newValue ) { index = newValue; return this; }
    666 
    667         virtual TupleIndexExpr *clone() const { return new TupleIndexExpr( *this ); }
    668         virtual void accept( Visitor &v ) { v.visit( this ); }
    669         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    670         virtual void print( std::ostream &os, int indent = 0 ) const;
    671   private:
    672         Expression * tuple;
    673         unsigned int index;
    674 };
    675 
    676 /// MemberTupleExpr represents a tuple member selection operation on a struct type, e.g. s.[a, b, c] after processing by the expression analyzer
    677 class MemberTupleExpr : public Expression {
    678   public:
    679         MemberTupleExpr( Expression * member, Expression * aggregate, Expression * _aname = nullptr );
    680         MemberTupleExpr( const MemberTupleExpr &other );
    681         virtual ~MemberTupleExpr();
    682 
    683         Expression * get_member() const { return member; }
    684         Expression * get_aggregate() const { return aggregate; }
    685         MemberTupleExpr * set_member( Expression *newValue ) { member = newValue; return this; }
    686         MemberTupleExpr * set_aggregate( Expression *newValue ) { aggregate = newValue; return this; }
    687 
    688         virtual MemberTupleExpr *clone() const { return new MemberTupleExpr( *this ); }
    689         virtual void accept( Visitor &v ) { v.visit( this ); }
    690         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    691         virtual void print( std::ostream &os, int indent = 0 ) const;
    692   private:
    693         Expression * member;
    694         Expression * aggregate;
    695 };
    696 
    697 /// MultipleAssignExpr represents a multiple assignment operation, where both sides of the assignment have tuple type, e.g. [a, b, c] = [d, e, f];
    698 class MultipleAssignExpr : public Expression {
    699   public:
    700         MultipleAssignExpr( Expression * lhs, Expression * rhs );
    701         MultipleAssignExpr( const MultipleAssignExpr &other );
    702         virtual ~MultipleAssignExpr();
    703 
    704         Expression * get_lhs() const { return lhs; }
    705         Expression * get_rhs() const { return rhs; }
    706         MultipleAssignExpr * set_lhs( Expression *newValue ) { lhs = newValue; return this; }
    707         MultipleAssignExpr * set_rhs( Expression *newValue ) { rhs = newValue; return this; }
    708 
    709         virtual MultipleAssignExpr *clone() const { return new MultipleAssignExpr( *this ); }
    710         virtual void accept( Visitor &v ) { v.visit( this ); }
    711         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    712         virtual void print( std::ostream &os, int indent = 0 ) const;
    713   private:
    714         Expression * lhs;
    715         Expression * rhs;
    716 };
    717 
    718 /// MassAssignExpr represents a mass assignment operations, where the left hand side has tuple type and the right hand side does not, e.g. [a, b, c] = 5.0;
    719 class MassAssignExpr : public Expression {
    720   public:
    721         MassAssignExpr( Expression * tuple, int field );
    722         MassAssignExpr( const MassAssignExpr &other );
    723         virtual ~MassAssignExpr();
    724 
    725         Expression * get_lhs() const { return lhs; }
    726         Expression * get_rhs() const { return rhs; }
    727         MassAssignExpr * set_lhs( Expression *newValue ) { lhs = newValue; return this; }
    728         MassAssignExpr * set_rhs( Expression *newValue ) { rhs = newValue; return this; }
    729 
    730         virtual MassAssignExpr *clone() const { return new MassAssignExpr( *this ); }
    731         virtual void accept( Visitor &v ) { v.visit( this ); }
    732         virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
    733         virtual void print( std::ostream &os, int indent = 0 ) const;
    734   private:
    735         Expression * lhs; // multiple exprs
    736         Expression * rhs; // single expr
    737653};
    738654
Note: See TracChangeset for help on using the changeset viewer.