aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
Diffstat (limited to 'src/link')
-rw-r--r--src/link/Wasm.zig27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig
index 576be2d306..c5e86ada3d 100644
--- a/src/link/Wasm.zig
+++ b/src/link/Wasm.zig
@@ -118,10 +118,29 @@ pub fn updateDecl(self: *Wasm, module: *Module, decl: *Module.Decl) !void {
var managed_functype = fn_data.functype.toManaged(self.base.allocator);
var managed_code = fn_data.code.toManaged(self.base.allocator);
- try codegen.genFunctype(&managed_functype, decl);
- try codegen.genCode(&managed_code, decl);
- fn_data.functype = managed_functype.toUnmanaged();
- fn_data.code = managed_code.toUnmanaged();
+
+ var code = codegen.Code{
+ .gpa = self.base.allocator,
+ .values = codegen.ValueTable.init(self.base.allocator),
+ .bytes = managed_code,
+ .func_type_data = managed_functype,
+ .decl = decl,
+ .err_msg = undefined,
+ };
+ defer code.values.deinit();
+
+ // generate the 'code' section for the function declaration
+ code.gen() catch |err| switch (err) {
+ error.CodegenFail => {
+ decl.analysis = .codegen_failure;
+ try module.failed_decls.put(module.gpa, decl, code.err_msg);
+ return;
+ },
+ else => |e| return err,
+ };
+
+ fn_data.functype = code.func_type_data.toUnmanaged();
+ fn_data.code = code.bytes.toUnmanaged();
}
pub fn updateDeclExports(