From bb74f72e97f3d503c4801bb7ca3d6412ad01b28c Mon Sep 17 00:00:00 2001 From: Luuk de Gram Date: Sun, 10 Jan 2021 18:51:01 +0100 Subject: stage2: refactor wasm backend - similar to the other backends --- src/link/Wasm.zig | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/link') 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( -- cgit v1.2.3