Changeset ca78437
- Timestamp:
- Jun 12, 2017, 1:41:06 PM (6 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:
- 465ed18
- Parents:
- cfaabe2c
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ParseNode.h
rcfaabe2c rca78437 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thu Jun 17 16:23:00 201713 // Update Count : 77 812 // Last Modified On : Mon Jun 12 13:00:00 2017 13 // Update Count : 779 14 14 // 15 15 … … 396 396 Statement * build_resume_at( ExpressionNode * ctl , ExpressionNode * target ); 397 397 Statement * build_try( StatementNode * try_stmt, StatementNode * catch_stmt, StatementNode * finally_stmt ); 398 Statement * build_catch( DeclarationNode * decl, StatementNode * stmt, bool catchAny = false);398 Statement * build_catch( CatchStmt::Kind kind, DeclarationNode *decl, ExpressionNode *cond, StatementNode *body ); 399 399 Statement * build_finally( StatementNode * stmt ); 400 400 Statement * build_compound( StatementNode * first ); -
src/Parser/StatementNode.cc
rcfaabe2c rca78437 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thu Jun 8 16:16:00 201713 // Update Count : 32 812 // Last Modified On : Mon Jun 12 13:03:00 2017 13 // Update Count : 329 14 14 // 15 15 … … 181 181 return new TryStmt( noLabels, tryBlock, branches, finallyBlock ); 182 182 } 183 Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny ) {184 std::list< Statement * > branches; 185 buildMoveList< Statement, StatementNode >( stmt, branches );186 assert( branches.size() == 1 ); 187 return new CatchStmt( noLabels, maybeMoveBuild< Declaration >(decl), branches.front(), catchAny);183 Statement *build_catch( CatchStmt::Kind kind, DeclarationNode *decl, ExpressionNode *cond, StatementNode *body ) { 184 std::list< Statement * > branches; 185 buildMoveList< Statement, StatementNode >( body, branches ); 186 assert( branches.size() == 1 ); 187 return new CatchStmt( noLabels, kind, maybeMoveBuild< Declaration >(decl), maybeMoveBuild< Expression >(cond), branches.front() ); 188 188 } 189 189 Statement *build_finally( StatementNode *stmt ) { -
src/Parser/parser.yy
rcfaabe2c rca78437 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jun 10 07:58:44201713 // Update Count : 240 112 // Last Modified On : Mon Jun 12 12:59:00 2017 13 // Update Count : 2402 14 14 // 15 15 … … 960 960 handler_clause: 961 961 CATCH '(' push push exception_declaration pop ')' compound_statement pop 962 { $$ = new StatementNode( build_catch( $5, $8 ) ); }962 { $$ = new StatementNode( build_catch( CatchStmt::Terminate, $5, nullptr, $8 ) ); } 963 963 | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop 964 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }964 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Terminate, $6, nullptr, $9 ) ) ); } 965 965 | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 966 { $$ = new StatementNode( build_catch( $5, $8 ) ); }966 { $$ = new StatementNode( build_catch( CatchStmt::Resume, $5, nullptr, $8 ) ); } 967 967 | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 968 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }968 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Resume, $6, nullptr, $9 ) ) ); } 969 969 ; 970 970 -
src/SynTree/Statement.cc
rcfaabe2c rca78437 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 08 16:22:00 201713 // Update Count : 6 312 // Last Modified On : Mon Jun 12 10:37:00 2017 13 // Update Count : 64 14 14 // 15 15 … … 344 344 } 345 345 346 CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) :347 Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) {346 CatchStmt::CatchStmt( std::list<Label> labels, Kind _kind, Declaration *_decl, Expression *_cond, Statement *_body ) : 347 Statement( labels ), kind ( _kind ), decl ( _decl ), cond ( _cond ), body( _body ) { 348 348 } 349 349 350 350 CatchStmt::CatchStmt( const CatchStmt & other ) : 351 Statement( other ), decl ( maybeClone( other.decl ) ), body( maybeClone( other.body ) ), catchRest ( other.catchRest) {351 Statement( other ), kind ( other.kind ), decl ( maybeClone( other.decl ) ), cond ( maybeClone( other.cond ) ), body( maybeClone( other.body ) ) { 352 352 } 353 353 … … 358 358 359 359 void CatchStmt::print( std::ostream &os, int indent ) const { 360 os << "Catch Statement" << endl;360 os << "Catch " << ((Terminate == kind) ? "Terminate" : "Resume") << " Statement" << endl; 361 361 362 362 os << string( indent, ' ' ) << "... catching" << endl; … … 364 364 decl->printShort( os, indent + 4 ); 365 365 os << endl; 366 } else if ( catchRest ) 367 os << string( indent + 4 , ' ' ) << "the rest" << endl; 366 } 368 367 else 369 368 os << string( indent + 4 , ' ' ) << ">>> Error: this catch clause must have a declaration <<<" << endl; -
src/SynTree/Statement.h
rcfaabe2c rca78437 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 08 18:39:00 201713 // Update Count : 6 612 // Last Modified On : Mon Jun 12 13:35:00 2017 13 // Update Count : 67 14 14 // 15 15 … … 293 293 enum Kind { Terminate, Resume }; 294 294 295 ThrowStmt( std::list<Label> labels, Kind kind, Expression * expr, 296 Expression * target = nullptr ); 295 ThrowStmt( std::list<Label> labels, Kind kind, Expression * expr, Expression * target = nullptr ); 297 296 ThrowStmt( const ThrowStmt &other ); 298 297 virtual ~ThrowStmt(); 299 300 298 301 299 Kind get_kind() { return kind; } … … 341 339 class CatchStmt : public Statement { 342 340 public: 343 CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false ); 341 enum Kind { Terminate, Resume }; 342 343 CatchStmt( std::list<Label> labels, Kind kind, Declaration *decl, 344 Expression *cond, Statement *body ); 344 345 CatchStmt( const CatchStmt &other ); 345 346 virtual ~CatchStmt(); 346 347 348 Kind get_kind() { return kind; } 347 349 Declaration *get_decl() { return decl; } 348 350 void set_decl( Declaration *newValue ) { decl = newValue; } 349 351 Expression *get_cond() { return cond; } 352 void set_cond( Expression *newCond ) { cond = newCond; } 350 353 Statement *get_body() { return body; } 351 354 void set_body( Statement *newValue ) { body = newValue; } … … 357 360 358 361 private: 362 Kind kind; 359 363 Declaration *decl; 364 Expression *cond; 360 365 Statement *body; 361 bool catchRest;362 366 }; 363 367 -
tools/cfa.nanorc
rcfaabe2c rca78437 33 33 ## Update/Redistribute 34 34 # GCC builtins 35 ##color cyan "__attribute__[[:space:]]*\(\([^)]*\)\)" "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__" 35 color cyan "__attribute__[[:space:]]*\(\([^()]*(\([^()]*\)[^()]*)*\)\)" 36 ##color cyan "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__" 36 37 37 38 # Preprocesser Directives
Note: See TracChangeset
for help on using the changeset viewer.