Changes in src/SynTree/Statement.cc [6180274:6cebfef]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Statement.cc
r6180274 r6cebfef 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Feb 2 20:19:33 202213 // Update Count : 9011 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Jan 20 16:03:00 2020 13 // Update Count : 71 14 14 // 15 15 … … 29 29 #include "SynTree/Label.h" // for Label, operator<< 30 30 31 using namespace std;32 33 34 Statement::Statement( const list<Label> & labels ) : labels( labels ) {}35 36 void Statement::print( ostream & os, Indenter indent ) const {31 using std::string; 32 using std::endl; 33 34 Statement::Statement( const std::list<Label> & labels ) : labels( labels ) {} 35 36 void Statement::print( std::ostream & os, Indenter indent ) const { 37 37 if ( ! labels.empty() ) { 38 38 os << indent << "... Labels: {"; … … 54 54 } 55 55 56 void ExprStmt::print( ostream & os, Indenter indent ) const {57 os << "Expression Statement:" << endl << indent +1;58 expr->print( os, indent +1 );59 } 60 61 62 AsmStmt::AsmStmt( bool voltile, Expression * instruction, const list<Expression *> output, const list<Expression *> input, const list<ConstantExpr *> clobber, constlist<Label> gotolabels ) : Statement(), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {}56 void ExprStmt::print( std::ostream & os, Indenter indent ) const { 57 os << "Expression Statement:" << endl << indent+1; 58 expr->print( os, indent+1 ); 59 } 60 61 62 AsmStmt::AsmStmt( bool voltile, Expression * instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ) : Statement(), voltile( voltile ), instruction( instruction ), output( output ), input( input ), clobber( clobber ), gotolabels( gotolabels ) {} 63 63 64 64 AsmStmt::AsmStmt( const AsmStmt & other ) : Statement( other ), voltile( other.voltile ), instruction( maybeClone( other.instruction ) ), gotolabels( other.gotolabels ) { … … 75 75 } 76 76 77 void AsmStmt::print( ostream & os, Indenter indent ) const {77 void AsmStmt::print( std::ostream & os, Indenter indent ) const { 78 78 os << "Assembler Statement:" << endl; 79 os << indent +1 << "instruction: " << endl << indent;80 instruction->print( os, indent +1 );79 os << indent+1 << "instruction: " << endl << indent; 80 instruction->print( os, indent+1 ); 81 81 if ( ! output.empty() ) { 82 os << endl << indent +1 << "output: " << endl;83 printAll( output, os, indent +1 );82 os << endl << indent+1 << "output: " << endl; 83 printAll( output, os, indent+1 ); 84 84 } // if 85 85 if ( ! input.empty() ) { 86 os << indent +1 << "input: " << endl;87 printAll( input, os, indent +1 );86 os << indent+1 << "input: " << endl; 87 printAll( input, os, indent+1 ); 88 88 } // if 89 89 if ( ! clobber.empty() ) { 90 os << indent +1 << "clobber: " << endl;91 printAll( clobber, os, indent +1 );90 os << indent+1 << "clobber: " << endl; 91 printAll( clobber, os, indent+1 ); 92 92 } // if 93 93 } 94 94 95 95 96 DirectiveStmt::DirectiveStmt( const st ring & directive ) : Statement(), directive( directive ) {}97 98 void DirectiveStmt::print( ostream & os, Indenter ) const {96 DirectiveStmt::DirectiveStmt( const std::string & directive ) : Statement(), directive( directive ) {} 97 98 void DirectiveStmt::print( std::ostream & os, Indenter ) const { 99 99 os << "GCC Directive:" << directive << endl; 100 100 } … … 120 120 } 121 121 122 void BranchStmt::print( ostream & os, Indenter indent ) const {123 assert f(type < BranchStmts, "CFA internal error: invalid branch statement");122 void BranchStmt::print( std::ostream & os, Indenter indent ) const { 123 assert(type < 5); 124 124 os << "Branch (" << brType[type] << ")" << endl ; 125 if ( target != "" ) os << indent +1 << "with target: " << target << endl;126 if ( originalTarget != "" ) os << indent +1 << "with original target: " << originalTarget << endl;127 if ( computedTarget != nullptr ) os << indent +1 << "with computed target: " << computedTarget << endl;125 if ( target != "" ) os << indent+1 << "with target: " << target << endl; 126 if ( originalTarget != "" ) os << indent+1 << "with original target: " << originalTarget << endl; 127 if ( computedTarget != nullptr ) os << indent+1 << "with computed target: " << computedTarget << endl; 128 128 } 129 129 … … 136 136 } 137 137 138 void ReturnStmt::print( ostream & os, Indenter indent ) const {138 void ReturnStmt::print( std::ostream & os, Indenter indent ) const { 139 139 os << "Return Statement, returning: "; 140 140 if ( expr != nullptr ) { 141 os << endl << indent +1;142 expr->print( os, indent +1 );143 } 144 os << endl; 145 } 146 147 IfStmt::IfStmt( Expression * condition, Statement * then , Statement * else_, constlist<Statement *> initialization ):148 Statement(), condition( condition ), then ( then ), else_( else_), initialization( initialization ) {}141 os << endl << indent+1; 142 expr->print( os, indent+1 ); 143 } 144 os << endl; 145 } 146 147 IfStmt::IfStmt( Expression * condition, Statement * thenPart, Statement * elsePart, std::list<Statement *> initialization ): 148 Statement(), condition( condition ), thenPart( thenPart ), elsePart( elsePart ), initialization( initialization ) {} 149 149 150 150 IfStmt::IfStmt( const IfStmt & other ) : 151 Statement( other ), condition( maybeClone( other.condition ) ), then ( maybeClone( other.then ) ), else_( maybeClone( other.else_) ) {151 Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) { 152 152 cloneAll( other.initialization, initialization ); 153 153 } … … 156 156 deleteAll( initialization ); 157 157 delete condition; 158 delete then ;159 delete else _;160 } 161 162 void IfStmt::print( ostream & os, Indenter indent ) const {158 delete thenPart; 159 delete elsePart; 160 } 161 162 void IfStmt::print( std::ostream & os, Indenter indent ) const { 163 163 os << "If on condition: " << endl; 164 os << indent +1;165 condition->print( os, indent +1 );164 os << indent+1; 165 condition->print( os, indent+1 ); 166 166 167 167 if ( !initialization.empty() ) { 168 168 os << indent << "... with initialization: \n"; 169 169 for ( const Statement * stmt : initialization ) { 170 os << indent +1;171 stmt->print( os, indent +1 );170 os << indent+1; 171 stmt->print( os, indent+1 ); 172 172 } 173 173 os << endl; … … 176 176 os << indent << "... then: " << endl; 177 177 178 os << indent +1;179 then ->print( os, indent +1 );180 181 if ( else _!= nullptr ) {178 os << indent+1; 179 thenPart->print( os, indent+1 ); 180 181 if ( elsePart != nullptr ) { 182 182 os << indent << "... else: " << endl; 183 os << indent +1;184 else _->print( os, indent +1 );183 os << indent+1; 184 elsePart->print( os, indent+1 ); 185 185 } // if 186 186 } 187 187 188 SwitchStmt::SwitchStmt( Expression * condition, const list<Statement *> & statements ):188 SwitchStmt::SwitchStmt( Expression * condition, const std::list<Statement *> & statements ): 189 189 Statement(), condition( condition ), statements( statements ) { 190 190 } … … 201 201 } 202 202 203 void SwitchStmt::print( ostream & os, Indenter indent ) const {203 void SwitchStmt::print( std::ostream & os, Indenter indent ) const { 204 204 os << "Switch on condition: "; 205 205 condition->print( os ); … … 207 207 208 208 for ( const Statement * stmt : statements ) { 209 stmt->print( os, indent +1 );210 } 211 } 212 213 CaseStmt::CaseStmt( Expression * condition, const list<Statement *> & statements, bool deflt ) throw ( SemanticErrorException ) :214 209 stmt->print( os, indent+1 ); 210 } 211 } 212 213 CaseStmt::CaseStmt( Expression * condition, const std::list<Statement *> & statements, bool deflt ) throw ( SemanticErrorException ) : 214 Statement(), condition( condition ), stmts( statements ), _isDefault( deflt ) { 215 215 if ( isDefault() && condition != nullptr ) SemanticError( condition, "default case with condition: " ); 216 216 } 217 217 218 218 CaseStmt::CaseStmt( const CaseStmt & other ) : 219 219 Statement( other ), condition( maybeClone(other.condition ) ), _isDefault( other._isDefault ) { 220 220 cloneAll( other.stmts, stmts ); 221 221 } … … 226 226 } 227 227 228 CaseStmt * CaseStmt::makeDefault( const list<Label> & labels,list<Statement *> stmts ) {228 CaseStmt * CaseStmt::makeDefault( const std::list<Label> & labels, std::list<Statement *> stmts ) { 229 229 CaseStmt * stmt = new CaseStmt( nullptr, stmts, true ); 230 230 stmt->labels = labels; … … 232 232 } 233 233 234 void CaseStmt::print( ostream & os, Indenter indent ) const {234 void CaseStmt::print( std::ostream & os, Indenter indent ) const { 235 235 if ( isDefault() ) os << indent << "Default "; 236 236 else { … … 241 241 242 242 for ( Statement * stmt : stmts ) { 243 os << indent + 1; 244 stmt->print( os, indent + 1 ); 245 } 246 } 247 248 WhileDoStmt::WhileDoStmt( Expression * condition, Statement * body, const list< Statement * > & initialization, bool isDoWhile ): 249 Statement(), condition( condition ), body( body ), else_( nullptr ), initialization( initialization ), isDoWhile( isDoWhile) { 250 } 251 252 WhileDoStmt::WhileDoStmt( Expression * condition, Statement * body, Statement * else_, const list< Statement * > & initialization, bool isDoWhile ): 253 Statement(), condition( condition), body( body ), else_( else_ ), initialization( initialization ), isDoWhile( isDoWhile) { 254 } 255 256 WhileDoStmt::WhileDoStmt( const WhileDoStmt & other ): 243 os << indent+1; 244 stmt->print( os, indent+1 ); 245 } 246 } 247 248 WhileStmt::WhileStmt( Expression * condition, Statement * body, std::list< Statement * > & initialization, bool isDoWhile ): 249 Statement(), condition( condition), body( body), initialization( initialization ), isDoWhile( isDoWhile) { 250 } 251 252 WhileStmt::WhileStmt( const WhileStmt & other ): 257 253 Statement( other ), condition( maybeClone( other.condition ) ), body( maybeClone( other.body ) ), isDoWhile( other.isDoWhile ) { 258 254 } 259 255 260 While DoStmt::~WhileDoStmt() {256 WhileStmt::~WhileStmt() { 261 257 delete body; 262 258 delete condition; 263 259 } 264 260 265 void While DoStmt::print(ostream & os, Indenter indent ) const {261 void WhileStmt::print( std::ostream & os, Indenter indent ) const { 266 262 os << "While on condition: " << endl ; 267 condition->print( os, indent +1 );263 condition->print( os, indent+1 ); 268 264 269 265 os << indent << "... with body: " << endl; 270 266 271 if ( body != nullptr ) body->print( os, indent +1 );272 } 273 274 ForStmt::ForStmt( const list<Statement *> initialization, Expression * condition, Expression * increment, Statement * body, Statement * else_):275 Statement(), initialization( initialization ), condition( condition ), increment( increment ), body( body ) , else_( else_ ){267 if ( body != nullptr ) body->print( os, indent+1 ); 268 } 269 270 ForStmt::ForStmt( std::list<Statement *> initialization, Expression * condition, Expression * increment, Statement * body ): 271 Statement(), initialization( initialization ), condition( condition ), increment( increment ), body( body ) { 276 272 } 277 273 278 274 ForStmt::ForStmt( const ForStmt & other ): 279 Statement( other ), condition( maybeClone( other.condition ) ), increment( maybeClone( other.increment ) ), body( maybeClone( other.body ) ) , else_( maybeClone( other.else_ ) ){275 Statement( other ), condition( maybeClone( other.condition ) ), increment( maybeClone( other.increment ) ), body( maybeClone( other.body ) ) { 280 276 cloneAll( other.initialization, initialization ); 281 277 … … 287 283 delete increment; 288 284 delete body; 289 delete else_; 290 } 291 292 void ForStmt::print( ostream & os, Indenter indent ) const { 285 } 286 287 void ForStmt::print( std::ostream & os, Indenter indent ) const { 293 288 Statement::print( os, indent ); // print labels 294 289 … … 298 293 os << indent << "... initialization: \n"; 299 294 for ( Statement * stmt : initialization ) { 300 os << indent +1;301 stmt->print( os, indent +1 );295 os << indent+1; 296 stmt->print( os, indent+1 ); 302 297 } 303 298 } 304 299 305 300 if ( condition != nullptr ) { 306 os << indent << "... condition: \n" << indent +1;307 condition->print( os, indent +1 );301 os << indent << "... condition: \n" << indent+1; 302 condition->print( os, indent+1 ); 308 303 } 309 304 310 305 if ( increment != nullptr ) { 311 os << "\n" << indent << "... increment: \n" << indent +1;312 increment->print( os, indent +1 );306 os << "\n" << indent << "... increment: \n" << indent+1; 307 increment->print( os, indent+1 ); 313 308 } 314 309 315 310 if ( body != nullptr ) { 316 os << "\n" << indent << "... with body: \n" << indent + 1; 317 body->print( os, indent + 1 ); 318 } 319 320 if ( else_ != nullptr ) { 321 os << "\n" << indent << "... with body: \n" << indent + 1; 322 else_->print( os, indent + 1 ); 311 os << "\n" << indent << "... with body: \n" << indent+1; 312 body->print( os, indent+1 ); 323 313 } 324 314 os << endl; … … 339 329 } 340 330 341 void ThrowStmt::print( ostream & os, Indenter indent) const {331 void ThrowStmt::print( std::ostream & os, Indenter indent) const { 342 332 if ( target ) os << "Non-Local "; 343 333 os << "Throw Statement, raising: "; 344 expr->print(os, indent +1);334 expr->print(os, indent+1); 345 335 if ( target ) { 346 336 os << "... at: "; 347 target->print(os, indent +1);348 } 349 } 350 351 TryStmt::TryStmt( CompoundStmt * tryBlock, constlist<CatchStmt *> & handlers, FinallyStmt * finallyBlock ) :337 target->print(os, indent+1); 338 } 339 } 340 341 TryStmt::TryStmt( CompoundStmt * tryBlock, std::list<CatchStmt *> & handlers, FinallyStmt * finallyBlock ) : 352 342 Statement(), block( tryBlock ), handlers( handlers ), finallyBlock( finallyBlock ) { 353 343 } … … 363 353 } 364 354 365 void TryStmt::print( ostream & os, Indenter indent ) const {355 void TryStmt::print( std::ostream & os, Indenter indent ) const { 366 356 os << "Try Statement" << endl; 367 os << indent << "... with block:" << endl << indent +1;368 block->print( os, indent +1 );357 os << indent << "... with block:" << endl << indent+1; 358 block->print( os, indent+1 ); 369 359 370 360 // handlers 371 361 os << indent << "... and handlers:" << endl; 372 362 for ( const CatchStmt * stmt : handlers ) { 373 os << indent +1;374 stmt->print( os, indent +1 );363 os << indent+1; 364 stmt->print( os, indent+1 ); 375 365 } 376 366 377 367 // finally block 378 368 if ( finallyBlock != nullptr ) { 379 os << indent << "... and finally:" << endl << indent +1;380 finallyBlock->print( os, indent +1 );369 os << indent << "... and finally:" << endl << indent+1; 370 finallyBlock->print( os, indent+1 ); 381 371 } // if 382 372 } … … 396 386 } 397 387 398 void CatchStmt::print( ostream & os, Indenter indent ) const {388 void CatchStmt::print( std::ostream & os, Indenter indent ) const { 399 389 os << "Catch " << ((Terminate == kind) ? "Terminate" : "Resume") << " Statement" << endl; 400 390 401 391 os << indent << "... catching: "; 402 decl->printShort( os, indent +1 );392 decl->printShort( os, indent+1 ); 403 393 os << endl; 404 394 405 395 if ( cond ) { 406 os << indent << "... with conditional:" << endl << indent +1;407 cond->print( os, indent +1 );396 os << indent << "... with conditional:" << endl << indent+1; 397 cond->print( os, indent+1 ); 408 398 } 409 399 410 400 os << indent << "... with block:" << endl; 411 os << indent +1;412 body->print( os, indent +1 );401 os << indent+1; 402 body->print( os, indent+1 ); 413 403 } 414 404 … … 424 414 } 425 415 426 void FinallyStmt::print( ostream & os, Indenter indent ) const {416 void FinallyStmt::print( std::ostream & os, Indenter indent ) const { 427 417 os << "Finally Statement" << endl; 428 os << indent << "... with block:" << endl << indent +1;429 block->print( os, indent +1 );418 os << indent << "... with block:" << endl << indent+1; 419 block->print( os, indent+1 ); 430 420 } 431 421 … … 439 429 } 440 430 441 void SuspendStmt::print( ostream & os, Indenter indent ) const {431 void SuspendStmt::print( std::ostream & os, Indenter indent ) const { 442 432 os << "Suspend Statement"; 443 433 switch (type) { … … 496 486 } 497 487 498 void WaitForStmt::print( ostream & os, Indenter indent ) const {488 void WaitForStmt::print( std::ostream & os, Indenter indent ) const { 499 489 os << "Waitfor Statement" << endl; 500 490 indent += 1; … … 531 521 532 522 533 WithStmt::WithStmt( const list< Expression * > & exprs, Statement * stmt ) : Declaration("", noStorageClasses, LinkageSpec::Cforall), exprs( exprs ), stmt( stmt ) {}523 WithStmt::WithStmt( const std::list< Expression * > & exprs, Statement * stmt ) : Declaration("", noStorageClasses, LinkageSpec::Cforall), exprs( exprs ), stmt( stmt ) {} 534 524 WithStmt::WithStmt( const WithStmt & other ) : Declaration( other ), stmt( maybeClone( other.stmt ) ) { 535 525 cloneAll( other.exprs, exprs ); … … 540 530 } 541 531 542 void WithStmt::print( ostream & os, Indenter indent ) const {532 void WithStmt::print( std::ostream & os, Indenter indent ) const { 543 533 os << "With statement" << endl; 544 534 os << indent << "... with expressions: " << endl; 545 printAll( exprs, os, indent +1 );546 os << indent << "... with statement:" << endl << indent +1;547 stmt->print( os, indent +1 );548 } 549 550 551 NullStmt::NullStmt( const list<Label> & labels ) : Statement( labels ) {552 } 553 554 void NullStmt::print( ostream & os, Indenter indent ) const {535 printAll( exprs, os, indent+1 ); 536 os << indent << "... with statement:" << endl << indent+1; 537 stmt->print( os, indent+1 ); 538 } 539 540 541 NullStmt::NullStmt( const std::list<Label> & labels ) : Statement( labels ) { 542 } 543 544 void NullStmt::print( std::ostream & os, Indenter indent ) const { 555 545 os << "Null Statement" << endl; 556 546 Statement::print( os, indent ); … … 568 558 } 569 559 570 void ImplicitCtorDtorStmt::print( ostream & os, Indenter indent ) const {560 void ImplicitCtorDtorStmt::print( std::ostream & os, Indenter indent ) const { 571 561 os << "Implicit Ctor Dtor Statement" << endl; 572 562 os << indent << "... with Ctor/Dtor: "; 573 callStmt->print( os, indent +1);574 os << endl; 575 } 576 577 MutexStmt::MutexStmt( Statement * stmt, constlist<Expression *> mutexObjs )563 callStmt->print( os, indent+1); 564 os << endl; 565 } 566 567 MutexStmt::MutexStmt( Statement * stmt, std::list<Expression *> mutexObjs ) 578 568 : Statement(), stmt( stmt ), mutexObjs( mutexObjs ) { } 579 569 … … 587 577 } 588 578 589 void MutexStmt::print( ostream & os, Indenter indent ) const {579 void MutexStmt::print( std::ostream & os, Indenter indent ) const { 590 580 os << "Mutex Statement" << endl; 591 581 os << indent << "... with Expressions: " << endl; 592 582 for (auto * obj : mutexObjs) { 593 os << indent +1;594 obj->print( os, indent +1);583 os << indent+1; 584 obj->print( os, indent+1); 595 585 os << endl; 596 586 } 597 os << indent << "... with Statement: " << endl << indent +1;598 stmt->print( os, indent +1 );587 os << indent << "... with Statement: " << endl << indent+1; 588 stmt->print( os, indent+1 ); 599 589 } 600 590
Note:
See TracChangeset
for help on using the changeset viewer.