Changeset 6d49ea3
- Timestamp:
- Aug 17, 2017, 5:37:20 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 274ce8c
- Parents:
- 936e9f4
- Location:
- src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ControlStruct/ForExprMutator.cc
r936e9f4 r6d49ea3 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : T ue Jul 14 12:14:44 201513 // Update Count : 1 011 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 17 15:32:46 2017 13 // Update Count : 11 14 14 // 15 15 … … 21 21 22 22 namespace ControlStruct { 23 Statement *ForExprMutator::postmutate( IfStmt *ifStmt ) { 24 std::list<Statement *> &init = ifStmt->get_initialization(); 25 if ( init.size() == 0 ) { 26 return ifStmt; 27 } // if 28 29 // create compound statement, move initializers outside, leave _for_ as-is 30 CompoundStmt *block = new CompoundStmt( std::list< Label >() ); 31 std::list<Statement *> &stmts = block->get_kids(); 32 stmts.splice( stmts.end(), init ); 33 34 // add for to the new block 35 stmts.push_back( ifStmt ); 36 return block; 37 } 38 23 39 Statement *ForExprMutator::postmutate( ForStmt *forStmt ) { 24 40 // hoist any initializer declarations to make them C89 (rather than C99) … … 31 47 CompoundStmt *block = new CompoundStmt( std::list< Label >() ); 32 48 std::list<Statement *> &stmts = block->get_kids(); 33 for ( std::list<Statement *>::iterator it = init.begin(); it != init.end(); ++it ) { 34 stmts.push_back( *it ); 35 } // for 49 stmts.splice( stmts.end(), init ); 36 50 37 51 // add for to the new block 38 52 stmts.push_back( forStmt ); 39 forStmt->set_initialization( std::list<Statement *>() );40 53 return block; 41 54 } -
src/ControlStruct/ForExprMutator.h
r936e9f4 r6d49ea3 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 22 09:17:08 201713 // Update Count : 412 // Last Modified On : Thu Aug 17 15:32:48 2017 13 // Update Count : 5 14 14 // 15 15 16 16 #pragma once 17 17 18 class IfStmt; 18 19 class ForStmt; 19 20 class Statement; … … 22 23 class ForExprMutator { 23 24 public: 25 Statement *postmutate( IfStmt * ); 24 26 Statement *postmutate( ForStmt * ); 25 27 }; -
src/Parser/StatementNode.cc
r936e9f4 r6d49ea3 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 16 16:39:43201713 // Update Count : 34 012 // Last Modified On : Thu Aug 17 16:01:31 2017 13 // Update Count : 345 14 14 // 15 15 … … 24 24 #include "SynTree/Expression.h" // for Expression, ConstantExpr 25 25 #include "SynTree/Label.h" // for Label, noLabels 26 #include "SynTree/Declaration.h" 26 27 #include "SynTree/Statement.h" // for Statement, BranchStmt, CaseStmt 27 28 #include "parserutility.h" // for notZeroExpr … … 98 99 } // if 99 100 100 return new IfStmt( noLabels, notZeroExpr( 101 /*ctl->condition 102 ?*/ maybeMoveBuild< Expression >(ctl->condition) 103 /*: new VariableExpr( init.end() )*/ ) 104 , thenb, elseb ); 105 // ret->initialization = init; 106 // delete ctl; 107 // assert( ret ); 108 // return ret; 101 Expression * cond = ctl->condition ? maybeMoveBuild< Expression >(ctl->condition) : new VariableExpr( dynamic_cast<DeclarationWithType *>( dynamic_cast<DeclStmt *>( init.back() )->decl ) ); 102 delete ctl; 103 return new IfStmt( noLabels, notZeroExpr( cond ), thenb, elseb, init ); 109 104 } 110 105 -
src/Parser/parser.yy
r936e9f4 r6d49ea3 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 16 18:09:14201713 // Update Count : 248 512 // Last Modified On : Thu Aug 17 15:52:12 2017 13 // Update Count : 2489 14 14 // 15 15 … … 796 796 797 797 selection_statement: 798 IF '(' if_control_expression ')' statement %prec THEN798 IF '(' push if_control_expression ')' statement %prec THEN 799 799 // explicitly deal with the shift/reduce conflict on if/else 800 { $$ = new StatementNode( build_if( $ 3, $5, nullptr ) ); }801 | IF '(' if_control_expression ')' statement ELSE statement802 { $$ = new StatementNode( build_if( $ 3, $5, $7) ); }800 { $$ = new StatementNode( build_if( $4, $6, nullptr ) ); } 801 | IF '(' push if_control_expression ')' statement ELSE statement 802 { $$ = new StatementNode( build_if( $4, $6, $8 ) ); } 803 803 | SWITCH '(' comma_expression ')' case_clause // CFA 804 804 { $$ = new StatementNode( build_switch( $3, $5 ) ); } … … 823 823 824 824 if_control_expression: 825 comma_expression 825 comma_expression pop 826 826 { $$ = new IfCtl( nullptr, $1 ); } 827 | c_declaration // no semi-col n827 | c_declaration // no semi-colon 828 828 { $$ = new IfCtl( $1, nullptr ); } 829 829 | cfa_declaration // no semi-colon 830 830 { $$ = new IfCtl( $1, nullptr ); } 831 | declaration comma_expression 831 | declaration comma_expression // semi-colon separated 832 832 { $$ = new IfCtl( $1, $2 ); } 833 833 ; -
src/SymTab/Indexer.cc
r936e9f4 r6d49ea3 10 10 // Created On : Sun May 17 21:37:33 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 30 16:38:47201713 // Update Count : 1912 // Last Modified On : Thu Aug 17 16:08:40 2017 13 // Update Count : 20 14 14 // 15 15 … … 351 351 acceptAll( compoundStmt->get_kids(), *this ); 352 352 leaveScope(); 353 } 354 355 void Indexer::visit( IfStmt *ifStmt ) { 356 // for statements introduce a level of scope 357 enterScope(); 358 Visitor::visit( ifStmt ); 359 leaveScope(); 353 360 } 354 361 -
src/SymTab/Indexer.h
r936e9f4 r6d49ea3 10 10 // Created On : Sun May 17 21:38:55 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 22 09:46:34201713 // Update Count : 712 // Last Modified On : Thu Aug 17 16:09:12 2017 13 // Update Count : 8 14 14 // 15 15 … … 45 45 46 46 virtual void visit( CompoundStmt *compoundStmt ); 47 virtual void visit( IfStmt *ifStmt ); 47 48 virtual void visit( ForStmt *forStmt ); 48 49 virtual void visit( CatchStmt *catchStmt ); -
src/SynTree/Mutator.cc
r936e9f4 r6d49ea3 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Mon Jul 24 16:32:00201713 // Update Count : 2 511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 17 15:39:37 2017 13 // Update Count : 27 14 14 // 15 15 … … 114 114 115 115 Statement *Mutator::mutate( IfStmt *ifStmt ) { 116 mutateAll( ifStmt->get_initialization(), *this ); 116 117 ifStmt->set_condition( maybeMutate( ifStmt->get_condition(), *this ) ); 117 118 ifStmt->set_thenPart( maybeMutate( ifStmt->get_thenPart(), *this ) ); -
src/SynTree/Statement.cc
r936e9f4 r6d49ea3 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Mon Aug 14 12:26:00 201713 // Update Count : 6 511 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 17 16:17:20 2017 13 // Update Count : 67 14 14 // 15 15 … … 32 32 using std::endl; 33 33 34 Statement::Statement( std::list<Label> _labels ) : labels( _labels ) {}34 Statement::Statement( std::list<Label> labels ) : labels( labels ) {} 35 35 36 36 void Statement::print( __attribute__((unused)) std::ostream &, __attribute__((unused)) int indent ) const {} … … 38 38 Statement::~Statement() {} 39 39 40 ExprStmt::ExprStmt( std::list<Label> _labels, Expression *_expr ) : Statement( _labels ), expr( _expr ) {}40 ExprStmt::ExprStmt( std::list<Label> labels, Expression *expr ) : Statement( labels ), expr( expr ) {} 41 41 42 42 ExprStmt::ExprStmt( const ExprStmt &other ) : Statement( other ), expr( maybeClone( other.expr ) ) {} … … 88 88 const char *BranchStmt::brType[] = { "Goto", "Break", "Continue" }; 89 89 90 BranchStmt::BranchStmt( std::list<Label> labels, Label _target, Type _type ) throw ( SemanticError ) :91 Statement( labels ), originalTarget( _target ), target( _target ), computedTarget( NULL ), type( _type ) {90 BranchStmt::BranchStmt( std::list<Label> labels, Label target, Type type ) throw ( SemanticError ) : 91 Statement( labels ), originalTarget( target ), target( target ), computedTarget( NULL ), type( type ) { 92 92 //actually this is a syntactic error signaled by the parser 93 93 if ( type == BranchStmt::Goto && target.empty() ) … … 95 95 } 96 96 97 BranchStmt::BranchStmt( std::list<Label> labels, Expression * _computedTarget, Type _type ) throw ( SemanticError ) :98 Statement( labels ), computedTarget( _computedTarget ), type( _type ) {97 BranchStmt::BranchStmt( std::list<Label> labels, Expression *computedTarget, Type type ) throw ( SemanticError ) : 98 Statement( labels ), computedTarget( computedTarget ), type( type ) { 99 99 if ( type != BranchStmt::Goto || computedTarget == 0 ) 100 100 throw SemanticError("Computed target not valid in branch statement"); … … 105 105 } 106 106 107 ReturnStmt::ReturnStmt( std::list<Label> labels, Expression * _expr ) : Statement( labels ), expr( _expr ) {}107 ReturnStmt::ReturnStmt( std::list<Label> labels, Expression *expr ) : Statement( labels ), expr( expr ) {} 108 108 109 109 ReturnStmt::ReturnStmt( const ReturnStmt & other ) : Statement( other ), expr( maybeClone( other.expr ) ) {} … … 122 122 } 123 123 124 IfStmt::IfStmt( std::list<Label> _labels, Expression *_condition, Statement *_thenPart, Statement *_elsePart):125 Statement( _labels ), condition( _condition ), thenPart( _thenPart ), elsePart( _elsePart) {}124 IfStmt::IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart, std::list<Statement *> initialization ): 125 Statement( labels ), condition( condition ), thenPart( thenPart ), elsePart( elsePart ), initialization( initialization ) {} 126 126 127 127 IfStmt::IfStmt( const IfStmt & other ) : 128 Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) {} 128 Statement( other ), condition( maybeClone( other.condition ) ), thenPart( maybeClone( other.thenPart ) ), elsePart( maybeClone( other.elsePart ) ) { 129 cloneAll( other.initialization, initialization ); 130 } 129 131 130 132 IfStmt::~IfStmt() { 133 deleteAll( initialization ); 131 134 delete condition; 132 135 delete thenPart; … … 139 142 condition->print( os, indent + 4 ); 140 143 144 if ( !initialization.empty() ) { 145 os << string( indent + 2, ' ' ) << "initialization: \n"; 146 for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) { 147 os << string( indent + 4, ' ' ); 148 (*it)->print( os, indent + 4 ); 149 } 150 os << endl; 151 } 152 141 153 os << string( indent+2, ' ' ) << "... then: " << endl; 142 154 … … 151 163 } 152 164 153 SwitchStmt::SwitchStmt( std::list<Label> _labels, Expression * _condition, std::list<Statement *> &_statements ):154 Statement( _labels ), condition( _condition ), statements( _statements ) {165 SwitchStmt::SwitchStmt( std::list<Label> labels, Expression * condition, std::list<Statement *> &statements ): 166 Statement( labels ), condition( condition ), statements( statements ) { 155 167 } 156 168 … … 179 191 } 180 192 181 CaseStmt::CaseStmt( std::list<Label> _labels, Expression *_condition, std::list<Statement *> &_statements, bool deflt ) throw ( SemanticError ) :182 Statement( _labels ), condition( _condition ), stmts( _statements ), _isDefault( deflt ) {193 CaseStmt::CaseStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements, bool deflt ) throw ( SemanticError ) : 194 Statement( labels ), condition( condition ), stmts( statements ), _isDefault( deflt ) { 183 195 if ( isDefault() && condition != 0 ) 184 196 throw SemanticError("default with conditions"); … … 216 228 } 217 229 218 WhileStmt::WhileStmt( std::list<Label> labels, Expression *condition _, Statement *body_, bool isDoWhile_):219 Statement( labels ), condition( condition _), body( body_), isDoWhile( isDoWhile_) {230 WhileStmt::WhileStmt( std::list<Label> labels, Expression *condition, Statement *body, bool isDoWhile ): 231 Statement( labels ), condition( condition), body( body), isDoWhile( isDoWhile) { 220 232 } 221 233 … … 238 250 } 239 251 240 ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization _, Expression *condition_, Expression *increment_, Statement *body_):241 Statement( labels ), initialization( initialization _ ), condition( condition_ ), increment( increment_ ), body( body_) {252 ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization, Expression *condition, Expression *increment, Statement *body ): 253 Statement( labels ), initialization( initialization ), condition( condition ), increment( increment ), body( body ) { 242 254 } 243 255 … … 317 329 } 318 330 319 TryStmt::TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<CatchStmt *> & _handlers, FinallyStmt *_finallyBlock ) :320 Statement( labels ), block( tryBlock ), handlers( _handlers ), finallyBlock( _finallyBlock ) {331 TryStmt::TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<CatchStmt *> &handlers, FinallyStmt *finallyBlock ) : 332 Statement( labels ), block( tryBlock ), handlers( handlers ), finallyBlock( finallyBlock ) { 321 333 } 322 334 … … 351 363 } 352 364 353 CatchStmt::CatchStmt( std::list<Label> labels, Kind _kind, Declaration *_decl, Expression *_cond, Statement *_body ) :354 Statement( labels ), kind ( _kind ), decl ( _decl ), cond ( _cond ), body( _body ) {365 CatchStmt::CatchStmt( std::list<Label> labels, Kind kind, Declaration *decl, Expression *cond, Statement *body ) : 366 Statement( labels ), kind ( kind ), decl ( decl ), cond ( cond ), body( body ) { 355 367 } 356 368 … … 389 401 390 402 391 FinallyStmt::FinallyStmt( std::list<Label> labels, CompoundStmt * _block ) : Statement( labels ), block( _block ) {403 FinallyStmt::FinallyStmt( std::list<Label> labels, CompoundStmt *block ) : Statement( labels ), block( block ) { 392 404 assert( labels.empty() ); // finally statement cannot be labeled 393 405 } -
src/SynTree/Statement.h
r936e9f4 r6d49ea3 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 16 16:28:55201713 // Update Count : 7 012 // Last Modified On : Thu Aug 17 15:37:53 2017 13 // Update Count : 72 14 14 // 15 15 … … 127 127 class IfStmt : public Statement { 128 128 public: 129 std::list<Statement *> initialization;130 129 Expression *condition; 131 130 Statement *thenPart; 132 131 Statement *elsePart; 133 134 IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart ); 132 std::list<Statement *> initialization; 133 134 IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart, 135 std::list<Statement *> initialization = std::list<Statement *>() ); 135 136 IfStmt( const IfStmt &other ); 136 137 virtual ~IfStmt(); 137 138 138 139 std::list<Statement *> &get_initialization() { return initialization; } 139 void set_initialization( std::list<Statement *> newValue ) { initialization = newValue; }140 140 Expression *get_condition() { return condition; } 141 141 void set_condition( Expression *newValue ) { condition = newValue; } … … 239 239 240 240 std::list<Statement *> &get_initialization() { return initialization; } 241 void set_initialization( std::list<Statement *> newValue ) { initialization = newValue; }242 241 Expression *get_condition() { return condition; } 243 242 void set_condition( Expression *newValue ) { condition = newValue; } -
src/SynTree/Visitor.cc
r936e9f4 r6d49ea3 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Mon Jul 24 16:30:00201713 // Update Count : 2 711 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 17 15:39:38 2017 13 // Update Count : 29 14 14 // 15 15 … … 99 99 100 100 void Visitor::visit( IfStmt *ifStmt ) { 101 acceptAll( ifStmt->get_initialization(), *this ); 101 102 maybeAccept( ifStmt->get_condition(), *this ); 102 103 maybeAccept( ifStmt->get_thenPart(), *this );
Note: See TracChangeset
for help on using the changeset viewer.