aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorLuuk de Gram <Luukdegram@users.noreply.github.com>2021-01-10 18:51:01 +0100
committerLuuk de Gram <Luukdegram@users.noreply.github.com>2021-01-15 23:27:38 +0100
commitbb74f72e97f3d503c4801bb7ca3d6412ad01b28c (patch)
tree8fbfc0cd69011f69a6f3a521a5906226435dc62c /src/link
parentb204ea0349d5a580fc8ba9d8059c520301072072 (diff)
downloadzig-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.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(