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