diff options
Diffstat (limited to 'src/wasm-binary-writer-spec.c')
-rw-r--r-- | src/wasm-binary-writer-spec.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/wasm-binary-writer-spec.c b/src/wasm-binary-writer-spec.c index b76529e6..1185c0d3 100644 --- a/src/wasm-binary-writer-spec.c +++ b/src/wasm-binary-writer-spec.c @@ -223,11 +223,27 @@ static WasmFunc* append_nullary_func(WasmAllocator* allocator, WasmModule* module, WasmType result_type, WasmStringSlice export_name) { + WasmFuncType* func_type; + WasmFuncSignature sig; + WASM_ZERO_MEMORY(sig); + sig.result_type = result_type; + int sig_index = wasm_get_func_type_index_by_sig(module, &sig); + if (sig_index == -1) { + WasmLocation loc; + WASM_ZERO_MEMORY(loc); + func_type = wasm_append_implicit_func_type(allocator, &loc, module, &sig); + sig_index = module->func_types.size - 1; + } else { + func_type = module->func_types.data[sig_index]; + } + WasmModuleField* func_field = append_module_field(allocator, module, WASM_MODULE_FIELD_TYPE_FUNC); WasmFunc* func = &func_field->func; - func->decl.flags = WASM_FUNC_DECLARATION_FLAG_HAS_SIGNATURE; - func->decl.sig.result_type = result_type; + func->decl.flags = WASM_FUNC_DECLARATION_FLAG_HAS_FUNC_TYPE; + func->decl.type_var.type = WASM_VAR_TYPE_INDEX; + func->decl.type_var.index = sig_index; + func->decl.sig = func_type->sig; int func_index = module->funcs.size - 1; WasmModuleField* export_field = |