@@ -117,7 +117,7 @@ template <typename F>
117117func_t <F> attach (const wasm_module_inst_t &module_inst, const wasm_exec_env_t &exec_env, LiftLowerContext &liftLowerContext, const char *name)
118118{
119119 using params_t = typename ValTrait<func_t <F>>::params_t ;
120- using results_t = typename ValTrait<func_t <F>>::results_t ;
120+ using result_t = typename ValTrait<func_t <F>>::result_t ;
121121
122122 wasm_function_inst_t guest_func = wasm_runtime_lookup_function (module_inst, name);
123123 wasm_function_inst_t guest_cleanup_func = wasm_runtime_lookup_function (module_inst, (std::string (" cabi_post_" ) + name).c_str ());
@@ -130,7 +130,7 @@ func_t<F> attach(const wasm_module_inst_t &module_inst, const wasm_exec_env_t &e
130130 {std::forward<decltype (args)>(args)...});
131131 std::vector<wasm_val_t > inputs = toWamr (lowered_args);
132132
133- constexpr size_t output_size = std::tuple_size< results_t >::value;
133+ constexpr size_t output_size = std::is_same< result_t , void >::value ? 0 : 1 ;
134134 wasm_val_t outputs[output_size];
135135
136136 bool success = wasm_runtime_call_wasm_a (exec_env, guest_func,
@@ -144,15 +144,15 @@ func_t<F> attach(const wasm_module_inst_t &module_inst, const wasm_exec_env_t &e
144144 liftLowerContext.trap (exception ? exception : " Unknown WAMR execution error" );
145145 }
146146
147- WasmValVector flat_results = fromWamr<results_t >(output_size, outputs);
148- auto output = lift_flat_values<results_t >(liftLowerContext, MAX_FLAT_RESULTS, flat_results);
147+ WasmValVector flat_results = fromWamr<result_t >(output_size, outputs);
148+ auto output = lift_flat_values<result_t >(liftLowerContext, MAX_FLAT_RESULTS, flat_results);
149149
150150 if (guest_cleanup_func)
151151 {
152152 wasm_runtime_call_wasm_a (exec_env, guest_cleanup_func, 0 , nullptr , output_size, outputs);
153153 }
154154
155- return std::get< 0 >( output) ;
155+ return output;
156156 };
157157}
158158
0 commit comments