Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.cc

    rb4f8808 r849720f  
    115115        assert( var->get_type() );
    116116        Type * type = var->get_type()->clone();
     117        type->set_lvalue( true );
    117118
    118119        // xxx - doesn't quite work yet - get different alternatives with the same cost
     
    124125        //      long long int value;
    125126        //      if ( decl->valueOf( var, value ) ) {
    126         //              type->set_lvalue( false ); // Would have to move to get_lvalue.
     127        //              type->set_lvalue( false );
    127128        //      }
    128129        // }
     
    383384        sub.apply( res );
    384385        result = res;
     386        result->set_lvalue( true );
    385387        result->get_qualifiers() |= aggregate->result->get_qualifiers();
    386388}
     
    431433                        // if references are still allowed in the AST, dereference returns a reference
    432434                        ret->set_result( new ReferenceType( Type::Qualifiers(), ret->get_result() ) );
     435                } else {
     436                        // references have been removed, in which case dereference returns an lvalue of the base type.
     437                        ret->result->set_lvalue( true );
    433438                }
    434439        }
     
    586591CompoundLiteralExpr::CompoundLiteralExpr( Type * type, Initializer * initializer ) : initializer( initializer ) {
    587592        assert( type && initializer );
     593        type->set_lvalue( true );
    588594        set_result( type );
    589595}
Note: See TracChangeset for help on using the changeset viewer.