@@ -3794,14 +3794,25 @@ fn trans_call(in_cx: &@block_ctxt, f: &@ast::expr,
3794
3794
ret rslt( bcx, retval) ;
3795
3795
}
3796
3796
3797
+ fn invoke ( bcx : & @block_ctxt , llfn : ValueRef ,
3798
+ llargs : & [ ValueRef ] ) -> result {
3799
+ ret invoke_ ( bcx, llfn, llargs, Invoke ) ;
3800
+ }
3801
+
3797
3802
fn invoke_fastcall ( bcx : & @block_ctxt , llfn : ValueRef ,
3798
3803
llargs : & [ ValueRef ] ) -> result {
3804
+ ret invoke_ ( bcx, llfn, llargs, FastInvoke ) ;
3805
+ }
3799
3806
3807
+ fn invoke_ ( bcx : & @block_ctxt , llfn : ValueRef ,
3808
+ llargs : & [ ValueRef ] ,
3809
+ invoker : fn ( & @block_ctxt , ValueRef , & [ ValueRef ] ,
3810
+ BasicBlockRef , BasicBlockRef ) -> ValueRef ) -> result {
3800
3811
let normal_bcx = new_sub_block_ctxt ( bcx, "normal return" ) ;
3801
3812
let unwind_bcx = new_sub_block_ctxt ( bcx, "unwind" ) ;
3802
- let retval = FastInvoke ( bcx, llfn, llargs,
3803
- normal_bcx. llbb ,
3804
- unwind_bcx. llbb ) ;
3813
+ let retval = invoker ( bcx, llfn, llargs,
3814
+ normal_bcx. llbb ,
3815
+ unwind_bcx. llbb ) ;
3805
3816
trans_landing_pad ( unwind_bcx) ;
3806
3817
ret rslt( normal_bcx, retval) ;
3807
3818
}
@@ -4291,7 +4302,7 @@ fn trans_fail_value(cx: &@block_ctxt, sp_opt: &option::t<span>,
4291
4302
let V_str = PointerCast ( cx, V_fail_str , T_ptr ( T_i8 ( ) ) ) ;
4292
4303
V_filename = PointerCast ( cx, V_filename , T_ptr ( T_i8 ( ) ) ) ;
4293
4304
let args = [ cx. fcx . lltaskptr , V_str , V_filename , C_int ( V_line ) ] ;
4294
- Call ( cx, bcx_ccx ( cx) . upcalls . _fail , args) ;
4305
+ let cx = invoke ( cx, bcx_ccx ( cx) . upcalls . _fail , args) . bcx ;
4295
4306
Unreachable ( cx) ;
4296
4307
ret rslt( cx, C_nil ( ) ) ;
4297
4308
}
0 commit comments