@@ -70,74 +70,27 @@ fn codegen_inner(
7070 params : arg_tys. iter ( ) . cloned ( ) . map ( AbiParam :: new) . collect ( ) ,
7171 returns : output. into_iter ( ) . map ( AbiParam :: new) . collect ( ) ,
7272 } ;
73-
74- let caller_name = format ! ( "__rust_{}" , method. name) ;
75- let callee_name = kind. fn_name ( method. name ) ;
76-
77- let func_id = module. declare_function ( & caller_name, Linkage :: Export , & sig) . unwrap ( ) ;
78-
79- let callee_func_id = module. declare_function ( & callee_name, Linkage :: Import , & sig) . unwrap ( ) ;
80-
81- let mut ctx = Context :: new ( ) ;
82- ctx. func . signature = sig. clone ( ) ;
83- {
84- let mut func_ctx = FunctionBuilderContext :: new ( ) ;
85- let mut bcx = FunctionBuilder :: new ( & mut ctx. func , & mut func_ctx) ;
86-
87- let block = bcx. create_block ( ) ;
88- bcx. switch_to_block ( block) ;
89- let args = arg_tys
90- . into_iter ( )
91- . map ( |ty| bcx. append_block_param ( block, ty) )
92- . collect :: < Vec < Value > > ( ) ;
93-
94- let callee_func_ref = module. declare_func_in_func ( callee_func_id, & mut bcx. func ) ;
95- let call_inst = bcx. ins ( ) . call ( callee_func_ref, & args) ;
96- let results = bcx. inst_results ( call_inst) . to_vec ( ) ; // Clone to prevent borrow error
97-
98- bcx. ins ( ) . return_ ( & results) ;
99- bcx. seal_all_blocks ( ) ;
100- bcx. finalize ( ) ;
101- }
102- module. define_function ( func_id, & mut ctx) . unwrap ( ) ;
103- unwind_context. add_function ( func_id, & ctx, module. isa ( ) ) ;
73+ crate :: common:: create_wrapper_function (
74+ module,
75+ unwind_context,
76+ sig,
77+ & format ! ( "__rust_{}" , method. name) ,
78+ & kind. fn_name ( method. name ) ,
79+ ) ;
10480 }
10581
10682 let sig = Signature {
10783 call_conv : module. target_config ( ) . default_call_conv ,
10884 params : vec ! [ AbiParam :: new( usize_ty) , AbiParam :: new( usize_ty) ] ,
10985 returns : vec ! [ ] ,
11086 } ;
111-
112- let callee_name = alloc_error_handler_kind. fn_name ( sym:: oom) ;
113-
114- let func_id =
115- module. declare_function ( "__rust_alloc_error_handler" , Linkage :: Export , & sig) . unwrap ( ) ;
116-
117- let callee_func_id = module. declare_function ( & callee_name, Linkage :: Import , & sig) . unwrap ( ) ;
118-
119- let mut ctx = Context :: new ( ) ;
120- ctx. func . signature = sig;
121- {
122- let mut func_ctx = FunctionBuilderContext :: new ( ) ;
123- let mut bcx = FunctionBuilder :: new ( & mut ctx. func , & mut func_ctx) ;
124-
125- let block = bcx. create_block ( ) ;
126- bcx. switch_to_block ( block) ;
127- let args = ( & [ usize_ty, usize_ty] )
128- . iter ( )
129- . map ( |& ty| bcx. append_block_param ( block, ty) )
130- . collect :: < Vec < Value > > ( ) ;
131-
132- let callee_func_ref = module. declare_func_in_func ( callee_func_id, & mut bcx. func ) ;
133- bcx. ins ( ) . call ( callee_func_ref, & args) ;
134-
135- bcx. ins ( ) . trap ( TrapCode :: UnreachableCodeReached ) ;
136- bcx. seal_all_blocks ( ) ;
137- bcx. finalize ( ) ;
138- }
139- module. define_function ( func_id, & mut ctx) . unwrap ( ) ;
140- unwind_context. add_function ( func_id, & ctx, module. isa ( ) ) ;
87+ crate :: common:: create_wrapper_function (
88+ module,
89+ unwind_context,
90+ sig,
91+ "__rust_alloc_error_handler" ,
92+ & alloc_error_handler_kind. fn_name ( sym:: oom) ,
93+ ) ;
14194
14295 let data_id = module. declare_data ( OomStrategy :: SYMBOL , Linkage :: Export , false , false ) . unwrap ( ) ;
14396 let mut data_ctx = DataContext :: new ( ) ;
0 commit comments