@@ -222,13 +222,11 @@ impl<'a> Func<'a> {
222
222
match results. as_slice ( ) {
223
223
[ ] => Ok ( ( ) . into_value ( ) ) ,
224
224
[ result] => result. to_ruby_value ( store) ,
225
- _ => {
226
- let array = RArray :: with_capacity ( results. len ( ) ) ;
227
- for result in results {
228
- array. push ( result. to_ruby_value ( store) ?) ?;
229
- }
230
- Ok ( array. as_value ( ) )
231
- }
225
+ _ => results
226
+ . into_iter ( )
227
+ . map ( |result| result. to_ruby_value ( store) )
228
+ . collect :: < Result < RArray , _ > > ( )
229
+ . map ( |ary| ary. as_value ( ) ) ,
232
230
}
233
231
}
234
232
}
@@ -270,15 +268,15 @@ pub fn make_func_closure(
270
268
let wrapped_caller = Obj :: wrap ( Caller :: new ( caller_impl) ) ;
271
269
let store_context = StoreContextValue :: from ( wrapped_caller) ;
272
270
273
- let rparams = RArray :: with_capacity ( params. len ( ) + 1 ) ;
274
- rparams. push ( wrapped_caller. as_value ( ) ) . unwrap ( ) ;
275
-
276
- for ( i, param) in params. iter ( ) . enumerate ( ) {
277
- let rparam = param
271
+ let params_iter = params. iter ( ) . enumerate ( ) . map ( |( i, param) | {
272
+ param
278
273
. to_ruby_value ( & store_context)
279
- . map_err ( |e| wasmtime:: Error :: msg ( format ! ( "invalid argument at index {i}: {e}" ) ) ) ?;
280
- rparams. push ( rparam) . unwrap ( ) ;
281
- }
274
+ . map_err ( |e| wasmtime:: Error :: msg ( format ! ( "invalid argument at index {i}: {e}" ) ) )
275
+ } ) ;
276
+
277
+ let rparams = std:: iter:: once ( Ok ( wrapped_caller. as_value ( ) ) )
278
+ . chain ( params_iter)
279
+ . collect :: < Result < RArray , _ > > ( ) ?;
282
280
283
281
let ruby = Ruby :: get ( ) . unwrap ( ) ;
284
282
let callable = ruby. get_inner ( callable) ;
0 commit comments