Changes in src/Parser/StatementNode.cc [658fafe4:7f5566b]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/StatementNode.cc
r658fafe4 r7f5566b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // StatementNode.cc -- 7 // StatementNode.cc -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 12 17:21:02 201613 // Update Count : 13 312 // Last Modified On : Thu Jul 30 14:39:39 2015 13 // Update Count : 130 14 14 // 15 15 … … 22 22 #include "SynTree/Expression.h" 23 23 #include "parseutility.h" 24 #include " Common/utility.h"24 #include "utility.h" 25 25 26 26 using namespace std; 27 27 28 28 const char *StatementNode::StType[] = { 29 "Exp", "If", "Switch", "Case", "Default", "Choose", "Fallthru", 30 "While", "Do", "For", 29 "Exp", "If", "Switch", "Case", "Default", "Choose", "Fallthru", 30 "While", "Do", "For", 31 31 "Goto", "Continue", "Break", "Return", "Throw", 32 32 "Try", "Catch", "Finally", "Asm", … … 62 62 StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) { 63 63 this->control = ( t == Default ) ? 0 : control; 64 } 64 } 65 65 66 66 StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {} … … 74 74 75 75 StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) { 76 StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s ); 76 StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s ); 77 77 ret->addDeclaration( d ); 78 78 ret->setCatchRest( catchRestP ); … … 101 101 StatementNode *StatementNode::add_label( const std::string *l ) { 102 102 if ( l != 0 ) { 103 labels.push_front( *l ); 103 labels.push_front( *l ); 104 104 delete l; 105 105 } // if … … 107 107 } 108 108 109 //StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {110 //if ( control && e )111 //control->add_to_list( e ); // xxx - check this112 //return this;113 //}109 StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) { 110 if ( control && e ) 111 control->add_to_list( e ); // xxx - check this 112 return this; 113 } 114 114 115 115 StatementNode *StatementNode::append_block( StatementNode *stmt ) { … … 156 156 control->print( os, indent ); 157 157 os << endl; 158 } else 158 } else 159 159 os << string( indent, ' ' ) << "Null Statement" << endl; 160 160 break; … … 177 177 if ( block ) { 178 178 os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl; 179 block->printList( os, indent + 2 * ParseNode::indent_by ); 179 block->printList( os, indent + 2 * ParseNode::indent_by ); 180 180 } // if 181 181 if ( target ) { … … 222 222 branches.pop_front(); 223 223 } // if 224 return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );224 return new IfStmt( labs, notZeroExpr( get_control()->build() ), thenb, elseb ); 225 225 } 226 226 case While: 227 227 assert( branches.size() == 1 ); 228 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );228 return new WhileStmt( labs, notZeroExpr( get_control()->build() ), branches.front() ); 229 229 case Do: 230 230 assert( branches.size() == 1 ); 231 return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );231 return new WhileStmt( labs, notZeroExpr( get_control()->build() ), branches.front(), true ); 232 232 case For: 233 233 { … … 244 244 Expression *cond = 0; 245 245 if ( ctl->get_condition() != 0 ) 246 cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );246 cond = notZeroExpr( ctl->get_condition()->build() ); 247 247 248 248 Expression *incr = 0; 249 249 if ( ctl->get_change() != 0 ) 250 incr = maybeBuild<Expression>(ctl->get_change());250 incr = ctl->get_change()->build(); 251 251 252 252 return new ForStmt( labs, init, cond, incr, branches.front() ); 253 253 } 254 254 case Switch: 255 return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches ); 256 case Case: 257 return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches ); 255 return new SwitchStmt( labs, get_control()->build(), branches ); 256 case Choose: 257 return new ChooseStmt( labs, get_control()->build(), branches ); 258 case Fallthru: 259 return new FallthruStmt( labs ); 260 case Case: 261 return new CaseStmt( labs, get_control()->build(), branches ); 258 262 case Default: 259 263 return new CaseStmt( labs, 0, branches, true ); … … 262 266 if ( get_target() == "" ) { // computed goto 263 267 assert( get_control() != 0 ); 264 return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );268 return new BranchStmt( labs, get_control()->build(), BranchStmt::Goto ); 265 269 } // if 266 270 … … 390 394 os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl; 391 395 os << string( indent + 2 * ParseNode::indent_by, ' ' ); 392 for ( std::list< Label>::const_iterator i = gotolabels.begin();; ) {396 for ( std::list<std::string>::const_iterator i = gotolabels.begin();; ) { 393 397 os << *i; 394 398 i++; … … 417 421 } 418 422 423 424 void NullStmtNode::print( ostream &os, int indent ) const { 425 os << string( indent, ' ' ) << "Null Statement:" << endl; 426 } 427 428 Statement *NullStmtNode::build() const { 429 return new NullStmt; 430 } 431 419 432 // Local Variables: // 420 433 // tab-width: 4 //
Note:
See TracChangeset
for help on using the changeset viewer.