@@ -166,7 +166,7 @@ int main()
166166 using params_t = ValTrait<and_func_t >::params_t ;
167167 using results_t = ValTrait<and_func_t >::results_t ;
168168
169- auto inputs = toWamr (lower_flat_values (liftLowerContext, MAX_FLAT_PARAMS, params_t {a, b}));
169+ auto inputs = toWamr (lower_flat_values< params_t > (liftLowerContext, MAX_FLAT_PARAMS, {a, b}));
170170 auto output_size = 1 ;
171171 wasm_val_t outputs[output_size];
172172 auto call_result = wasm_runtime_call_wasm_a (exec_env, and_func, output_size, outputs, inputs.size (), inputs.data ());
@@ -186,7 +186,7 @@ int main()
186186 using params_t = ValTrait<add_func_t >::params_t ;
187187 using results_t = ValTrait<add_func_t >::results_t ;
188188
189- auto inputs = toWamr (lower_flat_values (liftLowerContext, MAX_FLAT_PARAMS, params_t {input1, input2}));
189+ auto inputs = toWamr (lower_flat_values< params_t > (liftLowerContext, MAX_FLAT_PARAMS, {input1, input2}));
190190 auto output_size = 1 ;
191191 wasm_val_t outputs[output_size];
192192 auto call_result = wasm_runtime_call_wasm_a (exec_env, add_func, output_size, outputs, inputs.size (), inputs.data ());
@@ -207,7 +207,7 @@ int main()
207207 using params_t = ValTrait<reverse_func_t >::params_t ;
208208 using results_t = ValTrait<reverse_func_t >::results_t ;
209209
210- auto inputs = toWamr (lower_flat_values (liftLowerContext, MAX_FLAT_PARAMS, params_t {input1}));
210+ auto inputs = toWamr (lower_flat_values< params_t > (liftLowerContext, MAX_FLAT_PARAMS, {input1}));
211211 auto output_size = 1 ;
212212 wasm_val_t outputs[output_size];
213213 auto call_result = wasm_runtime_call_wasm_a (exec_env, reverse_func, output_size, outputs, inputs.size (), inputs.data ());
@@ -218,44 +218,70 @@ int main()
218218 auto call_reverse_result = call_reverse (" Hello World!" );
219219 call_reverse (call_reverse_result);
220220
221- using reverse_tuple_func_t = func_t <tuple_t <string_t , bool_t >(tuple_t <bool_t , string_t >)>;
222- auto reverse_tuple_func = wasm_runtime_lookup_function (module_inst, " example:sample/tuples#reverse" );
223- auto reverse_tuple_cleanup_func = wasm_runtime_lookup_function (module_inst, " cabi_post_example:sample/tuples#reverse" );
224- reverse_tuple_func_t call_reverse_tuple = [&](tuple_t <bool_t , string_t > a) -> tuple_t <string_t , bool_t >
221+ using lots_func_t = func_t <uint32_t (
222+ string_t , string_t , string_t , string_t , string_t , string_t , string_t , string_t ,
223+ string_t , string_t , string_t , string_t , string_t , string_t , string_t , string_t , string_t )>;
224+ auto lots_func = wasm_runtime_lookup_function (module_inst, " example:sample/strings#lots" );
225+ auto lots_cleanup_func = wasm_runtime_lookup_function (module_inst, " cabi_post_example:sample/strings#lots" );
226+ lots_func_t call_lots = [&](string_t p1, string_t p2, string_t p3, string_t p4, string_t p5, string_t p6, string_t p7, string_t p8,
227+ string_t p9, string_t p10, string_t p11, string_t p12, string_t p13, string_t p14, string_t p15, string_t p16, string_t p17) -> uint32_t
225228 {
226- using params_t = ValTrait< reverse_tuple_func_t >:: params_t ;
227- using results_t = ValTrait< reverse_tuple_func_t >:: results_t ;
229+ auto flat_ft_lower = func::flatten< lots_func_t >(liftLowerContext, func::ContextType::Lower) ;
230+ auto flat_ft_lift = func::flatten< lots_func_t >(liftLowerContext, func::ContextType::Lift) ;
228231
229- auto inputs = toWamr (lower_flat_values (liftLowerContext, MAX_FLAT_PARAMS, params_t {a}));
230- auto output_size = 1 ;
231- wasm_val_t outputs[output_size];
232- auto call_result = wasm_runtime_call_wasm_a (exec_env, reverse_tuple_func, output_size, outputs, inputs.size (), inputs.data ());
233- auto result = std::get<0 >(lift_flat_values<results_t >(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t >(output_size, outputs)));
234- std::cout << " reverse_tuple(" << std::get<0 >(a) << " , " << std::get<1 >(a) << " ): " << std::get<0 >(result) << " , " << std::get<1 >(result) << std::endl;
235- call_result = wasm_runtime_call_wasm_a (exec_env, reverse_tuple_cleanup_func, 0 , nullptr , 1 , outputs);
236- return result;
237- };
238- auto call_reverse_tuple_result = call_reverse_tuple ({false , " Hello World!" });
239- // call_reverse_tuple({std::get<1>(call_reverse_tuple_result), std::get<0>(call_reverse_tuple_result}));
240-
241- using list_filter_bool_func_t = func_t <list_t <string_t >(list_t <variant_t <bool_t , string_t >>)>;
242- auto list_filter_bool_func = wasm_runtime_lookup_function (module_inst, " example:sample/lists#filter-bool" );
243- auto list_filter_bool_cleanup_func = wasm_runtime_lookup_function (module_inst, " cabi_post_example:sample/lists#filter-bool" );
244- auto call_list_filter_bool = [&](list_t <variant_t <bool_t , string_t >> a) -> list_t <string_t >
245- {
246- using params_t = ValTrait<list_filter_bool_func_t >::params_t ;
247- using results_t = ValTrait<list_filter_bool_func_t >::results_t ;
232+ using params_t = ValTrait<lots_func_t >::params_t ;
233+ using results_t = ValTrait<lots_func_t >::results_t ;
248234
249- auto inputs = toWamr (lower_flat_values (liftLowerContext, MAX_FLAT_PARAMS, params_t {a}));
235+ auto inputs = toWamr (lower_flat_values<params_t >(liftLowerContext, MAX_FLAT_PARAMS, {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17}));
236+ auto inputs_size = inputs.size ();
250237 auto output_size = 1 ;
251238 wasm_val_t outputs[output_size];
252- auto call_result = wasm_runtime_call_wasm_a (exec_env, list_filter_bool_func , output_size, outputs, inputs.size (), inputs.data ());
239+ auto call_result = wasm_runtime_call_wasm_a (exec_env, lots_func , output_size, outputs, inputs.size (), inputs.data ());
253240 auto result = std::get<0 >(lift_flat_values<results_t >(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t >(output_size, outputs)));
254- std::cout << " list_filter_bool (" << a. size () << " ): " << result. size () << std::endl;
255- call_result = wasm_runtime_call_wasm_a (exec_env, list_filter_bool_cleanup_func, 0 , nullptr , 1 , outputs) ;
241+ std::cout << " lots_string (" << p1 << " , " << p2 << " , " << p3 << " , " << p4 << " , " << p5 << " , " << p6 << " , " << p7 << " , " << p8
242+ << " , " << p9 << " , " << p10 << " , " << p11 << " , " << p12 << " , " << p13 << " , " << p14 << " , " << p15 << " , " << p16 << " , " << p17 << " ): " << result << std::endl ;
256243 return result;
257244 };
258- auto call_list_filter_bool_result = call_list_filter_bool ({{false }, {" Hello World!" }});
245+ auto call_lots_result = call_lots (" p1" , " p2" , " p3" , " p4" , " p5" , " p6" , " p7" , " p8" , " p9" , " p10" , " p11" , " p12" , " p13" , " p14" , " p15" , " p16" , " p17" );
246+
247+ // using reverse_tuple_func_t = func_t<tuple_t<string_t, bool_t>(tuple_t<bool_t, string_t>)>;
248+ // auto reverse_tuple_func = wasm_runtime_lookup_function(module_inst, "example:sample/tuples#reverse");
249+ // auto reverse_tuple_cleanup_func = wasm_runtime_lookup_function(module_inst, "cabi_post_example:sample/tuples#reverse");
250+ // reverse_tuple_func_t call_reverse_tuple = [&](tuple_t<bool_t, string_t> a) -> tuple_t<string_t, bool_t>
251+ // {
252+ // using params_t = ValTrait<reverse_tuple_func_t>::params_t;
253+ // using results_t = ValTrait<reverse_tuple_func_t>::results_t;
254+
255+ // auto inputs = toWamr(lower_flat_values<params_t>(liftLowerContext, 100 + MAX_FLAT_PARAMS, {a}));
256+ // auto output_size = 1;
257+ // wasm_val_t outputs[output_size];
258+ // auto call_result = wasm_runtime_call_wasm_a(exec_env, reverse_tuple_func, output_size, outputs, inputs.size(), inputs.data());
259+ // auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, outputs)));
260+ // std::cout << "reverse_tuple(" << std::get<0>(a) << ", " << std::get<1>(a) << "): " << std::get<0>(result) << ", " << std::get<1>(result) << std::endl;
261+ // call_result = wasm_runtime_call_wasm_a(exec_env, reverse_tuple_cleanup_func, 0, nullptr, 1, outputs);
262+ // return result;
263+ // };
264+ // auto call_reverse_tuple_result = call_reverse_tuple({false, "Hello World!"});
265+ // // call_reverse_tuple({std::get<1>(call_reverse_tuple_result), std::get<0>(call_reverse_tuple_result}));
266+
267+ // using list_filter_bool_func_t = func_t<list_t<string_t>(list_t<variant_t<bool_t, string_t>>)>;
268+ // auto list_filter_bool_func = wasm_runtime_lookup_function(module_inst, "example:sample/lists#filter-bool");
269+ // auto list_filter_bool_cleanup_func = wasm_runtime_lookup_function(module_inst, "cabi_post_example:sample/lists#filter-bool");
270+ // auto call_list_filter_bool = [&](list_t<variant_t<bool_t, string_t>> a) -> list_t<string_t>
271+ // {
272+ // using params_t = ValTrait<list_filter_bool_func_t>::params_t;
273+ // using results_t = ValTrait<list_filter_bool_func_t>::results_t;
274+
275+ // auto inputs = toWamr(lower_flat_values<params_t>(liftLowerContext, MAX_FLAT_PARAMS, {a}));
276+ // auto output_size = 1;
277+ // wasm_val_t outputs[output_size];
278+ // auto call_result = wasm_runtime_call_wasm_a(exec_env, list_filter_bool_func, output_size, outputs, inputs.size(), inputs.data());
279+ // auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, outputs)));
280+ // std::cout << "list_filter_bool(" << a.size() << "): " << result.size() << std::endl;
281+ // call_result = wasm_runtime_call_wasm_a(exec_env, list_filter_bool_cleanup_func, 0, nullptr, 1, outputs);
282+ // return result;
283+ // };
284+ // auto call_list_filter_bool_result = call_list_filter_bool({{false}, {"Hello World!"}});
259285
260286 wasm_runtime_destroy_exec_env (exec_env);
261287 wasm_runtime_deinstantiate (module_inst);
0 commit comments