- Timestamp:
- Dec 14, 2023, 1:55:49 PM (13 months ago)
- Branches:
- master
- Children:
- ca9d65e
- Parents:
- 610354a (diff), 142930b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ControlStruct/ExceptTranslate.cpp
r610354a r21ad568 482 482 ast::FunctionDecl * terminate_catch, 483 483 ast::FunctionDecl * terminate_match ) { 484 // { 485 // int __handler_index = __cfaehm_try_terminate(`try`, `match`); 486 // if ( __handler_index ) { 487 // `catch`( __handler_index, __cfaehm_get_current_exception() ); 488 // } 489 // } 490 491 ast::ObjectDecl * index = new ast::ObjectDecl( loc, "__handler_index", 492 new ast::BasicType( ast::BasicType::SignedInt ), 493 new ast::SingleInit( loc, 494 new ast::UntypedExpr( loc, 495 new ast::NameExpr( loc, "__cfaehm_try_terminate" ), 496 { 497 new ast::VariableExpr( loc, try_wrapper ), 498 new ast::VariableExpr( loc, terminate_catch ), 499 new ast::VariableExpr( loc, terminate_match ), 500 } 501 ) 502 ) 503 ); 504 505 return new ast::CompoundStmt( loc, { 506 new ast::DeclStmt( loc, index ), 507 new ast::IfStmt( loc, 508 new ast::VariableExpr( loc, index ), 509 new ast::ExprStmt( loc, 510 new ast::UntypedExpr( loc, 511 new ast::VariableExpr( loc, terminate_catch ), 512 { 513 new ast::VariableExpr( loc, index ), 514 new ast::UntypedExpr( loc, 515 new ast::NameExpr( loc, "__cfaehm_get_current_exception" ) 516 ), 517 } 518 ) 519 ) 520 ), 521 } ); 484 // { __cfaehm_try_terminate(`try`, `catch`, `match`); } 485 486 ast::UntypedExpr * caller = new ast::UntypedExpr(loc, new ast::NameExpr(loc, 487 "__cfaehm_try_terminate" ) ); 488 caller->args.push_back( new ast::VariableExpr(loc, try_wrapper ) ); 489 caller->args.push_back( new ast::VariableExpr(loc, terminate_catch ) ); 490 caller->args.push_back( new ast::VariableExpr(loc, terminate_match ) ); 491 492 ast::CompoundStmt * callStmt = new ast::CompoundStmt(loc); 493 callStmt->push_back( new ast::ExprStmt( loc, caller ) ); 494 return callStmt; 522 495 } 523 496
Note: See TracChangeset
for help on using the changeset viewer.