# define INTERNAL_GET_ARG_COUNT_PRIVATE(_0, _1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, _9_, _10_, _11_, _12_, _13_, _14_, _15_, _16_, _17_, _18_, _19_, _20_, _21_, _22_, _23_, _24_, _25_, _26_, _27_, _28_, _29_, _30_, _31_, _32_, _33_, _34_, _35_, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, count, ...) count
#endif
-#define _VALS(...) ((WasmValkindBuffer) { GET_ARG_COUNT(__VA_ARGS__), __VA_ARGS__, 0 })
+#define _VALS(...) ((WasmValkindBuffer) { GET_ARG_COUNT(__VA_ARGS__), __VA_ARGS__ })
typedef struct {
u32 count;
#define HEARTBREAK_MODULE_NAME_GEN(m) CONCAT2(__heartbreak_module, m)
#define HEARTBREAK_FUNC_NAME(m, n) CONCAT3(__heartbreak_internal, m, n)
#define HEARTBREAK_DEF_NAME(m, n) CONCAT3(__heartbreak_internal_def, m, n)
-#define HEARTBREAK_IMPORT_NAME(m, n) STRINGIFY1(m) "_" #n
#define HEARTBREAK_PARAM_NAME(m, n) CONCAT3(__heartbreak_internal_param_buffer, m, n)
#define HEARTBREAK_RESULT_NAME(m, n) CONCAT3(__heartbreak_internal_result_buffer, m, n)
+#define HEARTBREAK_IMPORT_NAME(m, n) STRINGIFY1(m) "_" #n
#define HEARTBREAK_DEF(name, params_types, result_types) \
wasm_trap_t* HEARTBREAK_FUNC_NAME(HEARTBREAK_MODULE_NAME, name)(const wasm_val_vec_t* params, wasm_val_vec_t* results); \
\
wasm_trap_t* HEARTBREAK_FUNC_NAME(HEARTBREAK_MODULE_NAME, name)(const wasm_val_vec_t* params, wasm_val_vec_t* results)
-#define HEARTBREAK_FUNC(name) HEARTBREAK_DEF_NAME(HEARTBREAK_MODULE_NAME, name),
-#define HEARTBREAK_MODULE WasmFuncDefinition HEARTBREAK_MODULE_NAME_GEN(HEARTBREAK_MODULE_NAME) [] =
+#define HEARTBREAK_FUNC(name) & HEARTBREAK_DEF_NAME(HEARTBREAK_MODULE_NAME, name),
+#define HEARTBREAK_MODULE WasmFuncDefinition *HEARTBREAK_MODULE_NAME_GEN(HEARTBREAK_MODULE_NAME) [] =
// The Heartbreak modules
-extern WasmFuncDefinition __heartbreak_module_system[];
-extern WasmFuncDefinition __heartbreak_module_graphics[];
-extern WasmFuncDefinition __heartbreak_module_input[];
-extern WasmFuncDefinition __heartbreak_module_window[];
+extern WasmFuncDefinition* __heartbreak_module_system[];
+extern WasmFuncDefinition* __heartbreak_module_graphics[];
+extern WasmFuncDefinition* __heartbreak_module_input[];
+extern WasmFuncDefinition* __heartbreak_module_window[];
#endif
wasm_memory_t* wasm_memory;
wasm_table_t* wasm_func_table;
-void build_heartbreak_imports(WasmFuncDefinition** out_wfds, i32* out_count) {
- static WasmFuncDefinition* modules[] = {
+void build_heartbreak_imports(WasmFuncDefinition*** out_wfds, i32* out_count) {
+ static WasmFuncDefinition** modules[] = {
__heartbreak_module_system,
__heartbreak_module_graphics,
__heartbreak_module_input,
__heartbreak_module_window,
};
- i32 module_count = sizeof(modules) / sizeof(WasmFuncDefinition*);
+ i32 module_count = sizeof(modules) / sizeof(WasmFuncDefinition**);
i32 count = 0;
fori (i, 0, module_count) {
- WasmFuncDefinition* wfd = modules[i];
- while (wfd->name != NULL) {
+ WasmFuncDefinition** wfd = modules[i];
+ while (*wfd != NULL) {
count += 1;
wfd += 1;
}
}
bh_allocator heap_allocator = bh_heap_allocator();
- WasmFuncDefinition* imports = bh_alloc(heap_allocator, sizeof(WasmFuncDefinition) * count);
+ WasmFuncDefinition** imports = bh_alloc(heap_allocator, sizeof(WasmFuncDefinition*) * count);
i32 k = 0;
fori (i, 0, module_count) {
- WasmFuncDefinition* wfd = modules[i];
- while (wfd->name != NULL) {
+ WasmFuncDefinition** wfd = modules[i];
+ while (*wfd != NULL) {
imports[k++] = *wfd;
wfd += 1;
}
wasmer_named_extern_vec_t wasi_imports;
wasi_get_unordered_imports(store, wasm_module, wasi_env, &wasi_imports);
- WasmFuncDefinition* defs;
+ WasmFuncDefinition** defs;
i32 defs_count;
build_heartbreak_imports(&defs, &defs_count);
if (!wasm_name_equals(&heartbreak_name, module_name)) goto bad_import;
fori (j, 0, (i32) defs_count) {
- if (wasm_name_equals_string(import_name, defs[j].name)) {
+ if (wasm_name_equals_string(import_name, defs[j]->name)) {
wasm_valtype_vec_t wasm_params;
- wasm_valtype_vec_new_uninitialized(&wasm_params, defs[j].params->count);
- fori (k, 0, defs[j].params->count) wasm_params.data[k] = wasm_valtype_new(defs[j].params->types[k]);
+ wasm_valtype_vec_new_uninitialized(&wasm_params, defs[j]->params->count);
+ fori (k, 0, defs[j]->params->count) wasm_params.data[k] = wasm_valtype_new(defs[j]->params->types[k]);
wasm_valtype_vec_t wasm_results;
- wasm_valtype_vec_new_uninitialized(&wasm_results, defs[j].results->count);
- fori (k, 0, defs[j].results->count) wasm_results.data[k] = wasm_valtype_new(defs[j].results->types[k]);
+ wasm_valtype_vec_new_uninitialized(&wasm_results, defs[j]->results->count);
+ fori (k, 0, defs[j]->results->count) wasm_results.data[k] = wasm_valtype_new(defs[j]->results->types[k]);
wasm_functype_t* wasm_functype = wasm_functype_new(&wasm_params, &wasm_results);
- wasm_func_t* wasm_func = wasm_func_new(store, wasm_functype, defs[j].func);
+ wasm_func_t* wasm_func = wasm_func_new(store, wasm_functype, defs[j]->func);
import = wasm_func_as_extern(wasm_func);
goto import_found;
}