Changes in src/SynTree/Expression.cc [487845d7:0690350]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Expression.cc
r487845d7 r0690350 83 83 } 84 84 85 long long int ConstantExpr::intValue() const { 86 if ( BasicType * basicType = dynamic_cast< BasicType * >( result ) ) { 87 if ( basicType->isInteger() ) { 88 return get_constant()->get_ival(); 89 } 90 } else if ( dynamic_cast< OneType * >( result ) ) { 91 return 1; 92 } else if ( dynamic_cast< ZeroType * >( result ) ) { 93 return 0; 94 } 95 throw SemanticError( "Constant expression of non-integral type ", this ); 96 } 97 85 98 VariableExpr::VariableExpr( DeclarationWithType *_var ) : Expression(), var( _var ) { 86 99 assert( var ); … … 95 108 // assert( inst->baseEnum ); 96 109 // EnumDecl * decl = inst->baseEnum; 97 // for ( Declaration * member : decl->members ) { 98 // if ( member == _var ) { 99 // type->set_lvalue( false ); 100 // } 110 // long long int value; 111 // if ( decl->valueOf( var, value ) ) { 112 // type->set_lvalue( false ); 101 113 // } 102 114 // } … … 403 415 } else { 404 416 // references have been removed, in which case dereference returns an lvalue of the base type. 405 ret-> get_result()->set_lvalue( true );417 ret->result->set_lvalue( true ); 406 418 } 407 419 } … … 589 601 if ( ! body.empty() ) { 590 602 if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( body.back() ) ) { 591 set_result( maybeClone( exprStmt->get_expr()->get_result() ));603 result = maybeClone( exprStmt->expr->result ); 592 604 } 593 605 } 594 606 // ensure that StmtExpr has a result type 595 607 if ( ! result ) { 596 set_result( new VoidType( Type::Qualifiers()) );608 result = new VoidType( Type::Qualifiers() ); 597 609 } 598 610 }
Note:
See TracChangeset
for help on using the changeset viewer.