Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/AddressExpr.cc

    rb4f8808 rd29fa5f  
    99// Author           : Richard C. Bilson
    1010// Created On       : Sun May 17 23:54:44 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 28 13:13:38 2019
    13 // Update Count     : 10
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Apr 26 12:35:13 2016
     13// Update Count     : 6
    1414//
    1515
     
    4242AddressExpr::AddressExpr( Expression *arg ) : Expression(), arg( arg ) {
    4343        if ( arg->result ) {
    44                 if ( arg->get_lvalue() ) {
     44                if ( arg->result->get_lvalue() ) {
    4545                        // lvalue, retains all layers of reference and gains a pointer inside the references
    4646                        set_result( addrType( arg->result ) );
    4747                } else {
    4848                        // taking address of non-lvalue -- must be a reference, loses one layer of reference
    49                         if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( arg->result ) ) {
    50                                 set_result( addrType( refType->base ) );
    51                         } else {
    52                                 SemanticError( arg->result, "Attempt to take address of non-lvalue expression: " );
    53                         } // if
     49                        ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( arg->result );
     50                        set_result( addrType( refType->base ) );
    5451                }
     52                // result of & is never an lvalue
     53                get_result()->set_lvalue( false );
    5554        }
    5655}
Note: See TracChangeset for help on using the changeset viewer.