Skip to content

Commit bac6d8c

Browse files
committed
WIP
1 parent 5805d7d commit bac6d8c

3 files changed

Lines changed: 118 additions & 78 deletions

File tree

samples/wamr/main.cpp

Lines changed: 104 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -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());
@@ -179,83 +179,109 @@ int main()
179179
call_and(true, false);
180180
call_and(true, true);
181181

182-
using add_func_t = func_t<float64_t(float64_t, float64_t)>;
183-
auto add_func = wasm_runtime_lookup_function(module_inst, "example:sample/floats#add");
184-
add_func_t call_add = [&](float64_t input1, float64_t input2) -> float64_t
185-
{
186-
using params_t = ValTrait<add_func_t>::params_t;
187-
using results_t = ValTrait<add_func_t>::results_t;
188-
189-
auto inputs = toWamr(lower_flat_values(liftLowerContext, MAX_FLAT_PARAMS, params_t{input1, input2}));
190-
auto output_size = 1;
191-
wasm_val_t outputs[output_size];
192-
auto call_result = wasm_runtime_call_wasm_a(exec_env, add_func, output_size, outputs, inputs.size(), inputs.data());
193-
auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, outputs)));
194-
std::cout << "add_func(" << input1 << ", " << input2 << "): " << result << std::endl;
195-
return result;
196-
};
197-
call_add(3.1, 0.2);
198-
199-
using reverse_func_t = func_t<string_t(string_t)>;
200-
auto reverse_func = wasm_runtime_lookup_function(module_inst, "example:sample/strings#reverse");
201-
auto reverse_cleanup_func = wasm_runtime_lookup_function(module_inst, "cabi_post_example:sample/strings#reverse");
202-
reverse_func_t call_reverse = [&](string_t input1) -> string_t
203-
{
204-
auto flat_ft_lower = func::flatten<reverse_func_t>(liftLowerContext, func::ContextType::Lower);
205-
auto flat_ft_lift = func::flatten<reverse_func_t>(liftLowerContext, func::ContextType::Lift);
206-
207-
using params_t = ValTrait<reverse_func_t>::params_t;
208-
using results_t = ValTrait<reverse_func_t>::results_t;
209-
210-
auto inputs = toWamr(lower_flat_values(liftLowerContext, MAX_FLAT_PARAMS, params_t{input1}));
211-
auto output_size = 1;
212-
wasm_val_t outputs[output_size];
213-
auto call_result = wasm_runtime_call_wasm_a(exec_env, reverse_func, output_size, outputs, inputs.size(), inputs.data());
214-
auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, outputs)));
215-
std::cout << "reverse_string(" << input1 << "): " << result << std::endl;
216-
return result;
217-
};
218-
auto call_reverse_result = call_reverse("Hello World!");
219-
call_reverse(call_reverse_result);
220-
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>
225-
{
226-
using params_t = ValTrait<reverse_tuple_func_t>::params_t;
227-
using results_t = ValTrait<reverse_tuple_func_t>::results_t;
228-
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;
248-
249-
auto inputs = toWamr(lower_flat_values(liftLowerContext, MAX_FLAT_PARAMS, params_t{a}));
250-
auto output_size = 1;
251-
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());
253-
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);
256-
return result;
257-
};
258-
auto call_list_filter_bool_result = call_list_filter_bool({{false}, {"Hello World!"}});
182+
// using add_func_t = func_t<float64_t(float64_t, float64_t)>;
183+
// auto add_func = wasm_runtime_lookup_function(module_inst, "example:sample/floats#add");
184+
// add_func_t call_add = [&](float64_t input1, float64_t input2) -> float64_t
185+
// {
186+
// using params_t = ValTrait<add_func_t>::params_t;
187+
// using results_t = ValTrait<add_func_t>::results_t;
188+
189+
// auto inputs = toWamr(lower_flat_values<params_t>(liftLowerContext, MAX_FLAT_PARAMS, {input1, input2}));
190+
// auto output_size = 1;
191+
// wasm_val_t outputs[output_size];
192+
// auto call_result = wasm_runtime_call_wasm_a(exec_env, add_func, output_size, outputs, inputs.size(), inputs.data());
193+
// auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, outputs)));
194+
// std::cout << "add_func(" << input1 << ", " << input2 << "): " << result << std::endl;
195+
// return result;
196+
// };
197+
// call_add(3.1, 0.2);
198+
199+
// using reverse_func_t = func_t<string_t(string_t)>;
200+
// auto reverse_func = wasm_runtime_lookup_function(module_inst, "example:sample/strings#reverse");
201+
// auto reverse_cleanup_func = wasm_runtime_lookup_function(module_inst, "cabi_post_example:sample/strings#reverse");
202+
// reverse_func_t call_reverse = [&](string_t input1) -> string_t
203+
// {
204+
// auto flat_ft_lower = func::flatten<reverse_func_t>(liftLowerContext, func::ContextType::Lower);
205+
// auto flat_ft_lift = func::flatten<reverse_func_t>(liftLowerContext, func::ContextType::Lift);
206+
207+
// using params_t = ValTrait<reverse_func_t>::params_t;
208+
// using results_t = ValTrait<reverse_func_t>::results_t;
209+
210+
// auto inputs = toWamr(lower_flat_values<params_t>(liftLowerContext, MAX_FLAT_PARAMS, {input1}));
211+
// auto output_size = 1;
212+
// wasm_val_t outputs[output_size];
213+
// auto call_result = wasm_runtime_call_wasm_a(exec_env, reverse_func, output_size, outputs, inputs.size(), inputs.data());
214+
// auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, outputs)));
215+
// std::cout << "reverse_string(" << input1 << "): " << result << std::endl;
216+
// return result;
217+
// };
218+
// auto call_reverse_result = call_reverse("Hello World!");
219+
// call_reverse(call_reverse_result);
220+
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
228+
// {
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);
231+
232+
// using params_t = ValTrait<lots_func_t>::params_t;
233+
// using results_t = ValTrait<lots_func_t>::results_t;
234+
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();
237+
// auto output_size = 1;
238+
// wasm_val_t outputs[output_size];
239+
// auto call_result = wasm_runtime_call_wasm_a(exec_env, lots_func, output_size, outputs, inputs.size(), inputs.data());
240+
// auto result = std::get<0>(lift_flat_values<results_t>(liftLowerContext, MAX_FLAT_RESULTS, fromWamr<results_t>(output_size, 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;
243+
// return result;
244+
// };
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);

samples/wasm/main.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "sample.h"
22

33
#include <cstdlib>
4+
#include <cstring>
45

56
bool exports_example_sample_booleans_and(bool a, bool b)
67
{
@@ -22,6 +23,13 @@ void exports_example_sample_strings_reverse(sample_string_t *a, sample_string_t
2223
}
2324
}
2425

26+
uint32_t exports_example_sample_strings_lots(sample_string_t *p1, sample_string_t *p2, sample_string_t *p3, sample_string_t *p4, sample_string_t *p5, sample_string_t *p6, sample_string_t *p7, sample_string_t *p8, sample_string_t *p9, sample_string_t *p10, sample_string_t *p11, sample_string_t *p12, sample_string_t *p13, sample_string_t *p14, sample_string_t *p15, sample_string_t *p16, sample_string_t *p17)
27+
{
28+
// Calculate total length
29+
return p1->len + p2->len + p3->len + p4->len + p5->len + p6->len + p7->len + p8->len +
30+
p9->len + p10->len + p11->len + p12->len + p13->len + p14->len + p15->len + p16->len + p17->len;
31+
}
32+
2533
void exports_example_sample_tuples_reverse(sample_tuple2_bool_string_t *a, sample_tuple2_string_bool_t *ret)
2634
{
2735
ret->f1 = !a->f0;

samples/wasm/sample.wit

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ interface floats {
1212

1313
interface strings {
1414
reverse: func(a: string) -> string;
15+
lots: func(
16+
p1: string, p2: string, p3: string, p4: string, p5: string,
17+
p6: string, p7: string, p8: string, p9: string, p10: string,
18+
p11: string, p12: string, p13: string, p14: string, p15: string,
19+
p16: string, p17: string
20+
) -> u32;
1521
}
1622

1723
interface tuples {

0 commit comments

Comments
 (0)