Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.h

    r849720f re67991f  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Aug 15 13:46:00 2019
    13 // Update Count     : 54
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Mon Feb 18 18:29:51 2019
     13// Update Count     : 49
    1414//
    1515
     
    7171        const Type * get_result() const { return result; }
    7272        void set_result( Type * newValue ) { result = newValue; }
    73         virtual bool get_lvalue() const;
    7473
    7574        TypeSubstitution * get_env() const { return env; }
     
    9998        virtual ~ApplicationExpr();
    10099
    101         bool get_lvalue() const final;
    102 
    103100        Expression * get_function() const { return function; }
    104101        void set_function( Expression * newValue ) { function = newValue; }
     
    123120        UntypedExpr( const UntypedExpr & other );
    124121        virtual ~UntypedExpr();
    125 
    126         bool get_lvalue() const final;
    127122
    128123        Expression * get_function() const { return function; }
     
    213208        virtual ~CastExpr();
    214209
    215         bool get_lvalue() const final;
    216 
    217210        Expression * get_arg() const { return arg; }
    218211        void set_arg( Expression * newValue ) { arg = newValue; }
     
    275268        virtual ~UntypedMemberExpr();
    276269
    277         bool get_lvalue() const final;
    278 
    279270        Expression * get_member() const { return member; }
    280271        void set_member( Expression * newValue ) { member = newValue; }
     
    300291        virtual ~MemberExpr();
    301292
    302         bool get_lvalue() const final;
    303 
    304293        DeclarationWithType * get_member() const { return member; }
    305294        void set_member( DeclarationWithType * newValue ) { member = newValue; }
     
    324313        VariableExpr( const VariableExpr & other );
    325314        virtual ~VariableExpr();
    326 
    327         bool get_lvalue() const final;
    328315
    329316        DeclarationWithType * get_var() const { return var; }
     
    476463};
    477464
     465/// AttrExpr represents an @attribute expression (like sizeof, but user-defined)
     466class AttrExpr : public Expression {
     467  public:
     468        Expression * attr;
     469        Expression * expr;
     470        Type * type;
     471        bool isType;
     472
     473        AttrExpr(Expression * attr, Expression * expr );
     474        AttrExpr( const AttrExpr & other );
     475        AttrExpr( Expression * attr, Type * type );
     476        virtual ~AttrExpr();
     477
     478        Expression * get_attr() const { return attr; }
     479        void set_attr( Expression * newValue ) { attr = newValue; }
     480        Expression * get_expr() const { return expr; }
     481        void set_expr( Expression * newValue ) { expr = newValue; }
     482        Type * get_type() const { return type; }
     483        void set_type( Type * newValue ) { type = newValue; }
     484        bool get_isType() const { return isType; }
     485        void set_isType( bool newValue ) { isType = newValue; }
     486
     487        virtual AttrExpr * clone() const override { return new AttrExpr( * this ); }
     488        virtual void accept( Visitor & v ) override { v.visit( this ); }
     489        virtual void accept( Visitor & v ) const override { v.visit( this ); }
     490        virtual Expression * acceptMutator( Mutator & m ) override { return m.mutate( this ); }
     491        virtual void print( std::ostream & os, Indenter indent = {} ) const override;
     492};
     493
    478494/// LogicalExpr represents a short-circuit boolean expression (&& or ||)
    479495class LogicalExpr : public Expression {
     
    512528        ConditionalExpr( const ConditionalExpr & other );
    513529        virtual ~ConditionalExpr();
    514 
    515         bool get_lvalue() const final;
    516530
    517531        Expression * get_arg1() const { return arg1; }
     
    539553        virtual ~CommaExpr();
    540554
    541         bool get_lvalue() const final;
    542 
    543555        Expression * get_arg1() const { return arg1; }
    544556        void set_arg1( Expression * newValue ) { arg1 = newValue; }
     
    627639        ~ConstructorExpr();
    628640
    629         bool get_lvalue() const final;
    630 
    631641        Expression * get_callExpr() const { return callExpr; }
    632642        void set_callExpr( Expression * newValue ) { callExpr = newValue; }
     
    647657        CompoundLiteralExpr( const CompoundLiteralExpr & other );
    648658        virtual ~CompoundLiteralExpr();
    649 
    650         bool get_lvalue() const final;
    651659
    652660        Initializer * get_initializer() const { return initializer; }
     
    707715        virtual ~TupleExpr();
    708716
    709         bool get_lvalue() const final;
    710 
    711717        std::list<Expression*>& get_exprs() { return exprs; }
    712718
     
    727733        TupleIndexExpr( const TupleIndexExpr & other );
    728734        virtual ~TupleIndexExpr();
    729 
    730         bool get_lvalue() const final;
    731735
    732736        Expression * get_tuple() const { return tuple; }
     
    778782        StmtExpr( const StmtExpr & other );
    779783        virtual ~StmtExpr();
    780 
    781         bool get_lvalue() const final;
    782784
    783785        CompoundStmt * get_statements() const { return statements; }
Note: See TracChangeset for help on using the changeset viewer.