diff options
| author | Luuk de Gram <Luukdegram@users.noreply.github.com> | 2021-01-10 18:51:01 +0100 |
|---|---|---|
| committer | Luuk de Gram <Luukdegram@users.noreply.github.com> | 2021-01-15 23:27:38 +0100 |
| commit | bb74f72e97f3d503c4801bb7ca3d6412ad01b28c (patch) | |
| tree | 8fbfc0cd69011f69a6f3a521a5906226435dc62c /src/link | |
| parent | b204ea0349d5a580fc8ba9d8059c520301072072 (diff) | |
| download | zig-bb74f72e97f3d503c4801bb7ca3d6412ad01b28c.tar.gz zig-bb74f72e97f3d503c4801bb7ca3d6412ad01b28c.zip | |
stage2: refactor wasm backend - similar to the other backends
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/Wasm.zig | 27 |
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( |
