Changes in src/Parser/StatementNode.cc [7f5566b:1db21619]
- File:
-
- 1 edited
-
src/Parser/StatementNode.cc (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/StatementNode.cc
r7f5566b r1db21619 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 30 14:39:39201513 // Update Count : 13012 // Last Modified On : Thu Jul 16 16:20:24 2015 13 // Update Count : 30 14 14 // 15 15 … … 36 36 StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {} 37 37 38 StatementNode::StatementNode( const string *name ) : ParseNode( name), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}38 StatementNode::StatementNode( const string *name_ ) : ParseNode( name_ ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {} 39 39 40 40 StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), isCatchRest ( false ) { … … 60 60 } 61 61 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 this->control = ( t == Default ) ? 0 : control; 62 StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block_ ) : 63 type( t ), control( ctrl_label ), block( block_), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) { 64 if ( t == Default ) 65 control = 0; 64 66 } 65 67 66 StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {} 68 StatementNode::StatementNode( Type t, string *_target ) : 69 type( t ), control( 0 ), block( 0 ), labels( 0 ), target(_target ), decl( 0 ), isCatchRest ( false ) {} 67 70 68 71 StatementNode::~StatementNode() { … … 110 113 if ( control && e ) 111 114 control->add_to_list( e ); // xxx - check this 115 112 116 return this; 113 117 } … … 138 142 139 143 void StatementNode::print( std::ostream &os, int indent ) const { 140 if ( ! labels.empty() ) {144 if ( ! labels.empty()) { 141 145 std::list<std::string>::const_iterator i; 142 146 … … 164 168 if ( decl ) { 165 169 os << string( indent + ParseNode::indent_by, ' ' ) << "Declaration: " << endl; 166 decl->print( os, indent + 2 *ParseNode::indent_by );170 decl->print( os, indent + 2*ParseNode::indent_by ); 167 171 } else if ( isCatchRest ) { 168 172 os << string( indent + ParseNode::indent_by, ' ' ) << "Catches the rest " << endl; … … 172 176 } // if 173 177 if ( control ) { 174 os << string( indent + ParseNode::indent_by, ' ' ) << " Control: " << endl;175 control->printList( os, indent + 2 *ParseNode::indent_by );178 os << string( indent + ParseNode::indent_by, ' ' ) << "Expression: " << endl; 179 control->printList( os, indent + 2*ParseNode::indent_by ); 176 180 } // if 177 181 if ( block ) { 178 182 os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl; 179 block->printList( os, indent + 2 *ParseNode::indent_by );183 block->printList( os, indent + 2*ParseNode::indent_by ); 180 184 } // if 181 185 if ( target ) { … … 307 311 return new FinallyStmt( labs, block ); 308 312 } 309 case Asm:310 assert( false );311 313 default: 312 314 // shouldn't be here … … 314 316 } // switch 315 317 } 316 317 318 318 319 CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {} … … 359 360 } 360 361 361 362 AsmStmtNode::AsmStmtNode( Type t, bool voltile, ConstantNode *instruction, ExpressionNode *output, ExpressionNode *input, ConstantNode *clobber, LabelNode *gotolabels ) :363 StatementNode( t ), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ) {364 if ( gotolabels ) {365 this->gotolabels = gotolabels->get_labels();366 delete gotolabels;367 } // if368 }369 370 AsmStmtNode::~AsmStmtNode() {371 delete instruction; delete output; delete input; delete clobber;372 }373 374 void AsmStmtNode::print( std::ostream &os, int indent ) const {375 StatementNode::print( os, indent ); // print statement labels376 os << string( indent + ParseNode::indent_by, ' ' ) << "volatile:" << voltile << endl;377 if ( instruction ) {378 os << string( indent + ParseNode::indent_by, ' ' ) << "Instruction:" << endl;379 instruction->printList( os, indent + 2 * ParseNode::indent_by );380 } // if381 if ( output ) {382 os << string( indent + ParseNode::indent_by, ' ' ) << "Output:" << endl;383 output->printList( os, indent + 2 * ParseNode::indent_by );384 } // if385 if ( input ) {386 os << string( indent + ParseNode::indent_by, ' ' ) << "Input:" << endl;387 input->printList( os, indent + 2 * ParseNode::indent_by );388 } // if389 if ( clobber ) {390 os << string( indent + ParseNode::indent_by, ' ' ) << "Clobber:" << endl;391 clobber->printList( os, indent + 2 * ParseNode::indent_by );392 } // if393 if ( ! gotolabels.empty() ) {394 os << string( indent + ParseNode::indent_by, ' ' ) << "Goto Labels:" << endl;395 os << string( indent + 2 * ParseNode::indent_by, ' ' );396 for ( std::list<std::string>::const_iterator i = gotolabels.begin();; ) {397 os << *i;398 i++;399 if ( i == gotolabels.end() ) break;400 os << ", ";401 }402 os << endl;403 } // if404 }405 406 Statement *AsmStmtNode::build() const {407 std::list<Label> labs;408 409 if ( ! get_labels().empty() ) {410 std::back_insert_iterator< std::list<Label> > lab_it( labs );411 copy( get_labels().begin(), get_labels().end(), lab_it );412 } // if413 414 std::list< Expression * > out, in;415 std::list< ConstantExpr * > clob;416 buildList( output, out );417 buildList( input, in );418 buildList( clobber, clob );419 std::list< Label > gotolabs = gotolabels;420 return new AsmStmt( labs, voltile, (ConstantExpr *)maybeBuild< Expression >( instruction ), out, in, clob, gotolabs );421 }422 423 424 362 void NullStmtNode::print( ostream &os, int indent ) const { 425 363 os << string( indent, ' ' ) << "Null Statement:" << endl;
Note:
See TracChangeset
for help on using the changeset viewer.