Changeset b7898ac for src


Ignore:
Timestamp:
Dec 18, 2023, 12:24:06 PM (7 months ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
master
Children:
9fba8e6
Parents:
5546eee4
Message:

Another attempt at fixing execptions. It is very close to the last attempt but the offsets have been updated and checked.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ControlStruct/ExceptTranslate.cpp

    r5546eee4 rb7898ac  
    482482                ast::FunctionDecl * terminate_catch,
    483483                ast::FunctionDecl * terminate_match ) {
    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;
     484        // {
     485        //     int __handler_index = __cfaehm_try_terminate(`try`, `match`);
     486        //     if ( __handler_index ) {
     487        //         `catch`( __handler_index, __cfaehm_get_current_termination() );
     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_match ),
     499                                }
     500                        )
     501                )
     502        );
     503
     504        return new ast::CompoundStmt( loc, {
     505                new ast::DeclStmt( loc, index ),
     506                new ast::IfStmt( loc,
     507                        new ast::VariableExpr( loc, index ),
     508                        new ast::ExprStmt( loc,
     509                                new ast::UntypedExpr( loc,
     510                                        new ast::VariableExpr( loc, terminate_catch ),
     511                                        {
     512                                                new ast::VariableExpr( loc, index ),
     513                                                new ast::UntypedExpr( loc,
     514                                                        new ast::NameExpr( loc, "__cfaehm_get_current_termination" )
     515                                                ),
     516                                        }
     517                                )
     518                        )
     519                ),
     520        } );
    495521}
    496522
Note: See TracChangeset for help on using the changeset viewer.