diff options
author | Lorenzo Torres <torres@sideros.org> | 2025-03-27 21:44:47 +0100 |
---|---|---|
committer | Lorenzo Torres <torres@sideros.org> | 2025-03-27 21:44:47 +0100 |
commit | 11f6bc2b04fae03a6e81735d4bcebe9505c5d76d (patch) | |
tree | 1f4db0cc1467217582331cab9dc30e6663e0ebbf /src/mods/Parser.zig | |
parent | 1730f1e2980bfa2819c541d9b8a3bc0301b8334e (diff) | |
parent | 6fe4855a67d025c7a283827d566130e1c6ade638 (diff) |
Merge branch 'master' of ssh://git.sideros.org:/git/sideros
Diffstat (limited to 'src/mods/Parser.zig')
-rw-r--r-- | src/mods/Parser.zig | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/mods/Parser.zig b/src/mods/Parser.zig index 2e3c434..6883fd3 100644 --- a/src/mods/Parser.zig +++ b/src/mods/Parser.zig @@ -39,6 +39,8 @@ pub const FunctionScope = enum { const Parser = @This(); pub const Error = error{ + OutOfMemory, + Overflow, invalid_instruction, invalid_magic, invalid_version, @@ -53,6 +55,8 @@ pub const Error = error{ invalid_globaltype, invalid_importdesc, invalid_exportdesc, + double_else, + unresolved_branch, unterminated_wasm, }; @@ -61,8 +65,8 @@ fn warn(self: Parser, s: []const u8) void { std.debug.print("[WARN]: Parsing of {s} unimplemented at byte index {d}\n", .{ s, self.byte_idx }); } -// TODO: remove peek -fn peek(self: Parser) ?u8 { +// TODO: remove peek? +pub fn peek(self: Parser) ?u8 { return if (self.byte_idx < self.bytes.len) self.bytes[self.byte_idx] else null; } @@ -92,6 +96,10 @@ pub fn readI64(self: *Parser) !i64 { return std.leb.readIleb128(i64, self); } +pub fn readI33(self: *Parser) !i33 { + return std.leb.readIleb128(i33, self); +} + pub fn readF32(self: *Parser) !f32 { const bytes = try self.read(@sizeOf(f32)); return std.mem.bytesAsValue(f32, bytes).*; @@ -140,7 +148,7 @@ fn parseVector(self: *Parser, parse_fn: anytype) ![]VectorFnResult(parse_fn) { fn parseNumtype(self: *Parser) !std.wasm.Valtype { return switch (try self.readByte()) { 0x7F => .i32, - 0x7E => .i32, + 0x7E => .i64, 0x7D => .f32, 0x7C => .f64, else => Error.invalid_numtype, @@ -154,7 +162,7 @@ fn parseVectype(self: *Parser) !std.wasm.Valtype { }; } -fn parseReftype(self: *Parser) !std.wasm.RefType { +pub fn parseReftype(self: *Parser) !std.wasm.RefType { return switch (try self.readByte()) { 0x70 => .funcref, 0x6F => .externref, @@ -462,11 +470,13 @@ fn parseCode(self: *Parser) !Func { local_count += l.n; } - _ = try IR.parse(self); + const ir = try IR.parse(self); + const stdout = std.io.getStdOut().writer(); + try ir.print(stdout); const func = Func{ .locals = try self.allocator.alloc(Valtype, local_count), - .code = try self.read(end_idx - self.byte_idx), + .code = &.{}, }; var li: usize = 0; |