Changeset bdd516a for translator/Parser/ExpressionNode.cc
- Timestamp:
- Apr 28, 2015, 4:21:36 PM (9 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- 42e2ad7
- Parents:
- ad17ba6a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
translator/Parser/ExpressionNode.cc
rad17ba6a rbdd516a 16 16 ExpressionNode::ExpressionNode() : ParseNode(), argName( 0 ) {} 17 17 18 ExpressionNode::ExpressionNode( string *name_) : ParseNode( *name_ ), argName( 0 ) {18 ExpressionNode::ExpressionNode( string *name_) : ParseNode( *name_ ), argName( 0 ) { 19 19 delete name_; 20 20 } … … 25 25 } else { 26 26 argName = 0; 27 } 27 } // if 28 28 } 29 29 30 30 ExpressionNode * ExpressionNode::set_asArgName( std::string *aName ) { 31 argName = new VarRefNode( aName);31 argName = new VarRefNode( aName ); 32 32 return this; 33 33 } … … 40 40 void ExpressionNode::printDesignation( std::ostream &os, int indent ) const { 41 41 if ( argName ) { 42 os << string(' ', indent ) << "(designated by: ";43 argName->printOneLine( os, indent );42 os << string(' ', indent ) << "(designated by: "; 43 argName->printOneLine( os, indent ); 44 44 os << ")" << std::endl; 45 } 45 } // if 46 46 } 47 47 … … 52 52 } 53 53 54 void NullExprNode::print( std::ostream & os, int indent) const {55 printDesignation( os);54 void NullExprNode::print( std::ostream & os, int indent ) const { 55 printDesignation( os ); 56 56 os << "null expression"; 57 57 } 58 58 59 void NullExprNode::printOneLine( std::ostream & os, int indent) const {60 printDesignation( os);59 void NullExprNode::printOneLine( std::ostream & os, int indent ) const { 60 printDesignation( os ); 61 61 os << "null"; 62 62 } … … 66 66 } 67 67 68 CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp){69 return new CommaExprNode( this, exp );68 CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ){ 69 return new CommaExprNode( this, exp ); 70 70 } 71 71 72 72 // enum ConstantNode::Type = { Integer, Float, Character, String, Range } 73 73 74 ConstantNode::ConstantNode( void) : ExpressionNode(), sign(true), longs(0), size(0) {}75 76 ConstantNode::ConstantNode( string *name_) : ExpressionNode(name_), sign(true), longs(0), size(0) {}77 78 ConstantNode::ConstantNode( Type t, string *inVal) : type(t), sign(true), longs(0), size(0) {74 ConstantNode::ConstantNode( void ) : ExpressionNode(), sign( true ), longs(0), size(0) {} 75 76 ConstantNode::ConstantNode( string *name_) : ExpressionNode( name_), sign( true ), longs(0), size(0) {} 77 78 ConstantNode::ConstantNode( Type t, string *inVal ) : type( t ), sign( true ), longs(0), size(0) { 79 79 if ( inVal ) { 80 80 value = *inVal; … … 82 82 } else { 83 83 value = ""; 84 } 85 86 classify( value);84 } // if 85 86 classify( value ); 87 87 } 88 88 … … 96 96 } 97 97 98 void ConstantNode::classify( std::string &str){99 switch ( type){98 void ConstantNode::classify( std::string &str ){ 99 switch ( type ){ 100 100 case Integer: 101 101 case Float: … … 105 105 int i = str.length() - 1; 106 106 107 while ( i >= 0 && !isxdigit( c = str.at(i--)) )107 while ( i >= 0 && !isxdigit( c = str.at( i--)) ) 108 108 sfx += c; 109 109 … … 111 111 112 112 // get rid of underscores 113 value.erase( remove(value.begin(), value.end(), '_'), value.end());114 115 std::transform( sfx.begin(), sfx.end(), sfx.begin(), tolower_hack);113 value.erase( remove( value.begin(), value.end(), '_'), value.end()); 114 115 std::transform( sfx.begin(), sfx.end(), sfx.begin(), tolower_hack ); 116 116 117 117 if ( sfx.find("ll") != string::npos ){ 118 118 longs = 2; 119 } else if ( sfx.find("l") != string::npos ){119 } else if ( sfx.find("l") != string::npos ){ 120 120 longs = 1; 121 } 122 123 assert(( longs >= 0) && (longs <= 2));121 } // if 122 123 assert(( longs >= 0) && ( longs <= 2)); 124 124 125 125 if ( sfx.find("u") != string::npos ) … … 131 131 { 132 132 // remove underscores from hex and oct escapes 133 if ( str.substr(1,2) == "\\x")134 value.erase( remove(value.begin(), value.end(), '_'), value.end());133 if ( str.substr(1,2) == "\\x") 134 value.erase( remove( value.begin(), value.end(), '_'), value.end()); 135 135 136 136 break; … … 142 142 } 143 143 144 ConstantNode::Type ConstantNode::get_type( void) const {144 ConstantNode::Type ConstantNode::get_type( void ) const { 145 145 return type; 146 146 } … … 148 148 ConstantNode *ConstantNode::append( std::string *newValue ) { 149 149 if ( newValue ) { 150 if ( type == String){150 if ( type == String ){ 151 151 std::string temp = *newValue; 152 152 value.resize( value.size() - 1 ); … … 156 156 157 157 delete newValue; 158 } 158 } // if 159 159 return this; 160 160 } 161 161 162 void ConstantNode::printOneLine( std::ostream &os, int indent ) const {163 os << string( indent, ' ');164 printDesignation( os);162 void ConstantNode::printOneLine( std::ostream &os, int indent ) const { 163 os << string( indent, ' '); 164 printDesignation( os ); 165 165 166 166 switch ( type ) { … … 185 185 } 186 186 187 void ConstantNode::print( std::ostream &os, int indent ) const {187 void ConstantNode::print( std::ostream &os, int indent ) const { 188 188 printOneLine( os, indent ); 189 189 os << endl; … … 194 194 BasicType *bt; 195 195 196 switch ( get_type()){196 switch ( get_type()){ 197 197 case Integer: 198 198 /* Cfr. standard 6.4.4.1 */ 199 //bt.set_kind( BasicType::SignedInt);200 bt = new BasicType( q, BasicType::SignedInt);199 //bt.set_kind( BasicType::SignedInt ); 200 bt = new BasicType( q, BasicType::SignedInt ); 201 201 break; 202 202 case Float: 203 bt = new BasicType( q, BasicType::Float);203 bt = new BasicType( q, BasicType::Float ); 204 204 break; 205 205 case Character: 206 bt = new BasicType( q, BasicType::Char);206 bt = new BasicType( q, BasicType::Char ); 207 207 break; 208 208 case String: … … 210 210 ArrayType *at; 211 211 std::string value = get_value(); 212 at = new ArrayType( q, new BasicType(q, BasicType::Char),213 new ConstantExpr( Constant( new BasicType( q, BasicType::SignedInt),212 at = new ArrayType( q, new BasicType( q, BasicType::Char ), 213 new ConstantExpr( Constant( new BasicType( q, BasicType::SignedInt ), 214 214 toString( value.size() - 1 ) ) ), // account for '\0' 215 215 false, false ); 216 return new ConstantExpr( Constant( at, value), maybeBuild< Expression >( get_argName() ) );216 return new ConstantExpr( Constant( at, value ), maybeBuild< Expression >( get_argName() ) ); 217 217 } 218 return new ConstantExpr( Constant( bt, get_value()), maybeBuild< Expression >( get_argName() ) );219 } 220 221 VarRefNode::VarRefNode() : isLabel( false) {}222 223 VarRefNode::VarRefNode( string *name_, bool labelp) : ExpressionNode(name_), isLabel(labelp) {}218 return new ConstantExpr( Constant( bt, get_value()), maybeBuild< Expression >( get_argName() ) ); 219 } 220 221 VarRefNode::VarRefNode() : isLabel( false ) {} 222 223 VarRefNode::VarRefNode( string *name_, bool labelp ) : ExpressionNode( name_), isLabel( labelp ) {} 224 224 225 225 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) { … … 230 230 } 231 231 232 void VarRefNode::printOneLine( std::ostream &os, int indent ) const {233 printDesignation( os);232 void VarRefNode::printOneLine( std::ostream &os, int indent ) const { 233 printDesignation( os ); 234 234 os << get_name() << ' '; 235 235 } 236 236 237 void VarRefNode::print( std::ostream &os, int indent ) const {238 printDesignation( os);239 os << '\r' << string( indent, ' ') << "Referencing: ";237 void VarRefNode::print( std::ostream &os, int indent ) const { 238 printDesignation( os ); 239 os << '\r' << string( indent, ' ') << "Referencing: "; 240 240 os << "Variable: " << get_name(); 241 241 os << endl; 242 242 } 243 243 244 OperatorNode::OperatorNode( Type t) : type(t) {}244 OperatorNode::OperatorNode( Type t ) : type( t ) {} 245 245 246 246 OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) { … … 249 249 OperatorNode::~OperatorNode() {} 250 250 251 OperatorNode::Type OperatorNode::get_type( void) const{251 OperatorNode::Type OperatorNode::get_type( void ) const{ 252 252 return type; 253 253 } 254 254 255 255 void OperatorNode::printOneLine( std::ostream &os, int indent ) const { 256 printDesignation( os);256 printDesignation( os ); 257 257 os << OpName[ type ] << ' '; 258 258 } 259 259 260 260 void OperatorNode::print( std::ostream &os, int indent ) const{ 261 printDesignation( os);262 os << '\r' << string( indent, ' ') << "Operator: " << OpName[type] << endl;261 printDesignation( os ); 262 os << '\r' << string( indent, ' ') << "Operator: " << OpName[type] << endl; 263 263 return; 264 264 } 265 265 266 std::string OperatorNode::get_typename( void) const{267 return string( OpName[ type ]);266 std::string OperatorNode::get_typename( void ) const{ 267 return string( OpName[ type ]); 268 268 } 269 269 … … 282 282 }; 283 283 284 CompositeExprNode::CompositeExprNode( void) : ExpressionNode(), function( 0 ), arguments( 0 ) {285 } 286 287 CompositeExprNode::CompositeExprNode( string *name_) : ExpressionNode(name_), function( 0 ), arguments( 0 ) {288 } 289 290 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args):291 function( f), arguments(args) {292 } 293 294 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2):295 function( f), arguments(arg1) {296 arguments->set_link( arg2);284 CompositeExprNode::CompositeExprNode( void ) : ExpressionNode(), function( 0 ), arguments( 0 ) { 285 } 286 287 CompositeExprNode::CompositeExprNode( string *name_) : ExpressionNode( name_), function( 0 ), arguments( 0 ) { 288 } 289 290 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ): 291 function( f ), arguments( args ) { 292 } 293 294 CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2): 295 function( f ), arguments( arg1) { 296 arguments->set_link( arg2); 297 297 } 298 298 … … 303 303 arguments->set_link( cur->clone() ); 304 304 } else { 305 arguments = ( ExpressionNode*)cur->clone();306 } 305 arguments = ( ExpressionNode*)cur->clone(); 306 } // if 307 307 cur = cur->get_link(); 308 308 } … … 333 333 std::list<Expression *> args; 334 334 335 buildList( get_args(), args);336 337 if ( ! ( op = dynamic_cast<OperatorNode *>( function)) ) {335 buildList( get_args(), args ); 336 337 if ( ! ( op = dynamic_cast<OperatorNode *>( function )) ) { 338 338 // a function as opposed to an operator 339 return new UntypedExpr( function->build(), args, maybeBuild< Expression >( get_argName() ));339 return new UntypedExpr( function->build(), args, maybeBuild< Expression >( get_argName() )); 340 340 } else { 341 switch ( op->get_type()){341 switch ( op->get_type()){ 342 342 case OperatorNode::Incr: 343 343 case OperatorNode::Decr: … … 412 412 case OperatorNode::Cast: 413 413 { 414 TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args());414 TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()); 415 415 assert( arg ); 416 416 417 417 DeclarationNode *decl_node = arg->get_decl(); 418 ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link());418 ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link()); 419 419 420 420 Type *targetType = decl_node->buildType(); … … 423 423 return new CastExpr( expr_node->build(), maybeBuild< Expression >( get_argName() ) ); 424 424 } else { 425 return new CastExpr( expr_node->build(),targetType, maybeBuild< Expression >( get_argName() ) );426 } 425 return new CastExpr( expr_node->build(),targetType, maybeBuild< Expression >( get_argName() ) ); 426 } // if 427 427 } 428 428 case OperatorNode::FieldSel: … … 430 430 assert( args.size() == 2 ); 431 431 432 NameExpr *member = dynamic_cast<NameExpr *>(args.back()); 433 // TupleExpr *memberTup = dynamic_cast<TupleExpr *>(args.back()); 434 435 if ( member != 0 ) 436 { 437 UntypedMemberExpr *ret = new UntypedMemberExpr(member->get_name(), args.front()); 438 delete member; 439 return ret; 440 } 432 NameExpr *member = dynamic_cast<NameExpr *>( args.back()); 433 // TupleExpr *memberTup = dynamic_cast<TupleExpr *>( args.back()); 434 435 if ( member != 0 ) { 436 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), args.front()); 437 delete member; 438 return ret; 441 439 /* else if ( memberTup != 0 ) 442 440 { 443 UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front());441 UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front()); 444 442 delete member; 445 443 return ret; 446 444 } */ 447 else445 } else 448 446 assert( false ); 449 447 } … … 452 450 assert( args.size() == 2 ); 453 451 454 NameExpr *member = dynamic_cast<NameExpr *>( args.back()); // modify for Tuples xxx452 NameExpr *member = dynamic_cast<NameExpr *>( args.back()); // modify for Tuples xxx 455 453 assert( member != 0 ); 456 454 … … 458 456 deref->get_args().push_back( args.front() ); 459 457 460 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref);458 UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref ); 461 459 delete member; 462 460 return ret; … … 465 463 case OperatorNode::SizeOf: 466 464 { 467 /// bool isSizeOf = ( op->get_type() == OperatorNode::SizeOf);468 469 if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {470 return new SizeofExpr( arg->get_decl()->buildType());465 /// bool isSizeOf = ( op->get_type() == OperatorNode::SizeOf ); 466 467 if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) { 468 return new SizeofExpr( arg->get_decl()->buildType()); 471 469 } else { 472 return new SizeofExpr( args.front());473 } 470 return new SizeofExpr( args.front()); 471 } // if 474 472 } 475 473 case OperatorNode::Attr: 476 474 { 477 VarRefNode *var = dynamic_cast<VarRefNode *>( get_args());475 VarRefNode *var = dynamic_cast<VarRefNode *>( get_args()); 478 476 assert( var ); 479 477 if ( !get_args()->get_link() ) { 480 return new AttrExpr( var->build(), (Expression*)0);481 } else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link()) ) {482 return new AttrExpr( var->build(), arg->get_decl()->buildType());478 return new AttrExpr( var->build(), ( Expression*)0); 479 } else if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()->get_link()) ) { 480 return new AttrExpr( var->build(), arg->get_decl()->buildType()); 483 481 } else { 484 return new AttrExpr( var->build(), args.back());485 } 482 return new AttrExpr( var->build(), args.back()); 483 } // if 486 484 } 487 485 case OperatorNode::CompLit: … … 490 488 case OperatorNode::Or: 491 489 case OperatorNode::And: 492 assert( args.size() == 2);493 return new LogicalExpr( notZeroExpr( args.front() ), notZeroExpr( args.back() ), ( op->get_type() == OperatorNode::And) );490 assert( args.size() == 2); 491 return new LogicalExpr( notZeroExpr( args.front() ), notZeroExpr( args.back() ), ( op->get_type() == OperatorNode::And ) ); 494 492 case OperatorNode::Cond: 495 493 { 496 assert( args.size() == 3);494 assert( args.size() == 3); 497 495 std::list< Expression* >::const_iterator i = args.begin(); 498 496 Expression *arg1 = notZeroExpr( *i++ ); … … 505 503 case OperatorNode::Comma: 506 504 { 507 assert( args.size() == 2);505 assert( args.size() == 2); 508 506 std::list< Expression* >::const_iterator i = args.begin(); 509 507 Expression *ret = *i++; … … 527 525 } 528 526 529 void CompositeExprNode::printOneLine( std::ostream &os, int indent) const {530 printDesignation( os);527 void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const { 528 printDesignation( os ); 531 529 os << "( "; 532 530 function->printOneLine( os, indent ); 533 for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {531 for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) { 534 532 cur->printOneLine( os, indent ); 535 533 } … … 537 535 } 538 536 539 void CompositeExprNode::print( std::ostream &os, int indent) const {540 printDesignation( os);541 os << '\r' << string( indent, ' ') << "Application of: " << endl;537 void CompositeExprNode::print( std::ostream &os, int indent ) const { 538 printDesignation( os ); 539 os << '\r' << string( indent, ' ') << "Application of: " << endl; 542 540 function->print( os, indent + ParseNode::indent_by ); 543 541 544 os << '\r' << string( indent, ' ') ;542 os << '\r' << string( indent, ' ') ; 545 543 if ( arguments ) { 546 544 os << "... on arguments: " << endl; 547 arguments->printList( os, indent + ParseNode::indent_by);545 arguments->printList( os, indent + ParseNode::indent_by ); 548 546 } else 549 547 os << "... on no arguments: " << endl; 550 548 } 551 549 552 void CompositeExprNode::set_function( ExpressionNode *f){550 void CompositeExprNode::set_function( ExpressionNode *f ){ 553 551 function = f; 554 552 } 555 553 556 void CompositeExprNode::set_args( ExpressionNode *args){554 void CompositeExprNode::set_args( ExpressionNode *args ){ 557 555 arguments = args; 558 556 } 559 557 560 ExpressionNode *CompositeExprNode::get_function( void) const {558 ExpressionNode *CompositeExprNode::get_function( void ) const { 561 559 return function; 562 560 } 563 561 564 ExpressionNode *CompositeExprNode::get_args( void) const {562 ExpressionNode *CompositeExprNode::get_args( void ) const { 565 563 return arguments; 566 564 } 567 565 568 void CompositeExprNode::add_arg( ExpressionNode *arg){569 if ( arguments)570 arguments->set_link( arg);566 void CompositeExprNode::add_arg( ExpressionNode *arg ){ 567 if ( arguments ) 568 arguments->set_link( arg ); 571 569 else 572 set_args( arg);573 } 574 575 CommaExprNode::CommaExprNode(): CompositeExprNode( new OperatorNode(OperatorNode::Comma)) {}576 577 CommaExprNode::CommaExprNode( ExpressionNode *exp) : CompositeExprNode( new OperatorNode(OperatorNode::Comma), exp ) {578 } 579 580 CommaExprNode::CommaExprNode( ExpressionNode *exp1, ExpressionNode *exp2) : CompositeExprNode(new OperatorNode(OperatorNode::Comma), exp1, exp2) {581 } 582 583 CommaExprNode *CommaExprNode::add_to_list( ExpressionNode *exp){584 add_arg( exp);570 set_args( arg ); 571 } 572 573 CommaExprNode::CommaExprNode(): CompositeExprNode( new OperatorNode( OperatorNode::Comma )) {} 574 575 CommaExprNode::CommaExprNode( ExpressionNode *exp ) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp ) { 576 } 577 578 CommaExprNode::CommaExprNode( ExpressionNode *exp1, ExpressionNode *exp2) : CompositeExprNode( new OperatorNode( OperatorNode::Comma ), exp1, exp2) { 579 } 580 581 CommaExprNode *CommaExprNode::add_to_list( ExpressionNode *exp ){ 582 add_arg( exp ); 585 583 586 584 return this; … … 590 588 } 591 589 592 ValofExprNode::ValofExprNode( StatementNode *s): body(s) {}590 ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {} 593 591 594 592 ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) { … … 600 598 601 599 void ValofExprNode::print( std::ostream &os, int indent ) const { 602 printDesignation( os);603 os << string( indent, ' ') << "Valof Expression:" << std::endl;604 get_body()->print( os, indent + 4);600 printDesignation( os ); 601 os << string( indent, ' ') << "Valof Expression:" << std::endl; 602 get_body()->print( os, indent + 4); 605 603 } 606 604 … … 613 611 } 614 612 615 ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr) throw (SemanticError) : condition(cond), change(incr) {613 ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) { 616 614 if ( init_ == 0 ) 617 615 init = 0; … … 620 618 ExpressionNode *exp; 621 619 622 if (( decl = dynamic_cast<DeclarationNode *>(init_)) != 0)623 init = new StatementNode( decl);624 else if (( exp = dynamic_cast<ExpressionNode *>(init_)) != 0)625 init = new StatementNode( StatementNode::Exp, exp);620 if (( decl = dynamic_cast<DeclarationNode *>( init_)) != 0) 621 init = new StatementNode( decl ); 622 else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0) 623 init = new StatementNode( StatementNode::Exp, exp ); 626 624 else 627 625 throw SemanticError("Error in for control expression"); … … 646 644 647 645 void ForCtlExprNode::print( std::ostream &os, int indent ) const{ 648 os << string( indent,' ') << "For Control Expression -- : " << endl;649 650 os << "\r" << string( indent + 2,' ') << "initialization: ";651 if ( init != 0)652 init->print( os, indent + 4);653 654 os << "\n\r" << string( indent + 2,' ') << "condition: ";655 if ( condition != 0)656 condition->print( os, indent + 4);657 os << "\n\r" << string( indent + 2,' ') << "increment: ";658 if ( change != 0)659 change->print( os, indent + 4);646 os << string( indent,' ') << "For Control Expression -- : " << endl; 647 648 os << "\r" << string( indent + 2,' ') << "initialization: "; 649 if ( init != 0) 650 init->print( os, indent + 4); 651 652 os << "\n\r" << string( indent + 2,' ') << "condition: "; 653 if ( condition != 0) 654 condition->print( os, indent + 4); 655 os << "\n\r" << string( indent + 2,' ') << "increment: "; 656 if ( change != 0) 657 change->print( os, indent + 4); 660 658 } 661 659 … … 664 662 } 665 663 666 TypeValueNode::TypeValueNode( DeclarationNode *decl)664 TypeValueNode::TypeValueNode( DeclarationNode *decl ) 667 665 : decl( decl ) { 668 666 } … … 676 674 } 677 675 678 void TypeValueNode::print( std::ostream &os, int indent) const {676 void TypeValueNode::print( std::ostream &os, int indent ) const { 679 677 os << std::string( indent, ' ' ) << "Type:"; 680 get_decl()->print( os, indent + 2);681 } 682 683 void TypeValueNode::printOneLine( std::ostream &os, int indent) const {678 get_decl()->print( os, indent + 2); 679 } 680 681 void TypeValueNode::printOneLine( std::ostream &os, int indent ) const { 684 682 os << "Type:"; 685 get_decl()->print( os, indent + 2);683 get_decl()->print( os, indent + 2); 686 684 } 687 685 … … 690 688 { 691 689 OperatorNode *op; 692 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && (op->get_type() == OperatorNode::Comma) )690 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) 693 691 { 694 692 if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) ) … … 707 705 if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) { 708 706 OperatorNode *op = 0; 709 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && (op->get_type() == OperatorNode::TupleC) )707 if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) ) 710 708 return composite->get_args(); 711 709 }
Note: See TracChangeset
for help on using the changeset viewer.