This commit is contained in:
caandt 2025-06-09 23:33:50 -05:00
parent da4484d4f5
commit e6ef9e16d7
2 changed files with 7 additions and 7 deletions

View file

@ -78,7 +78,7 @@ fn infix_seq(parser: *Parser, precedence: u32, lhs: *const Expr, _: Token) Error
fn infix_assign(parser: *Parser, precedence: u32, lhs: *const Expr, tok: Token) Error!*const Expr { fn infix_assign(parser: *Parser, precedence: u32, lhs: *const Expr, tok: Token) Error!*const Expr {
var rhs = try parser.parse_expr(precedence); var rhs = try parser.parse_expr(precedence);
if (tok.kind != op_kind("=")) { if (tok.kind != op_kind("=")) {
rhs = try parser.make_expr(.{ .binop = .{ .lhs = lhs, .rhs = rhs, .op = tok }}); rhs = try parser.make_expr(.{ .binop = .{ .lhs = lhs, .rhs = rhs, .op = tok } });
} }
return try parser.make_expr(.{ .assign = .{ .lhs = lhs, .rhs = rhs } }); return try parser.make_expr(.{ .assign = .{ .lhs = lhs, .rhs = rhs } });
} }

View file

@ -45,9 +45,9 @@ pub const sz_inst = union(enum) {
if (@TypeOf(n) == void) { if (@TypeOf(n) == void) {
try writer.print("[{s}]", .{@tagName(value)}); try writer.print("[{s}]", .{@tagName(value)});
} else { } else {
try writer.print("[{s} {}]", .{@tagName(value), n}); try writer.print("[{s} {}]", .{ @tagName(value), n });
} }
} },
} }
} }
}; };
@ -80,7 +80,7 @@ const sz_code_tmp = struct {
const name = src[a.start..a.end]; const name = src[a.start..a.end];
const i = try self.name.getOrPutValue(name, self.vars.items.len); const i = try self.name.getOrPutValue(name, self.vars.items.len);
if (self.vars.items.len == i.value_ptr.*) { if (self.vars.items.len == i.value_ptr.*) {
try self.vars.append(.{.tag = .err}); try self.vars.append(.{ .tag = .err });
} }
try self.bc.append(.{ .push_var = @truncate(i.value_ptr.*) }); try self.bc.append(.{ .push_var = @truncate(i.value_ptr.*) });
}, },
@ -117,12 +117,12 @@ const sz_code_tmp = struct {
fn append_assign(self: *sz_code_tmp, src: []const u8, expr: *const Expr) !void { fn append_assign(self: *sz_code_tmp, src: []const u8, expr: *const Expr) !void {
switch (expr.*) { switch (expr.*) {
.atom => |a| { .atom => |a| {
switch(a.kind) { switch (a.kind) {
.name => { .name => {
const name = src[a.start..a.end]; const name = src[a.start..a.end];
const i = try self.name.getOrPutValue(name, self.vars.items.len); const i = try self.name.getOrPutValue(name, self.vars.items.len);
if (self.vars.items.len == i.value_ptr.*) { if (self.vars.items.len == i.value_ptr.*) {
try self.vars.append(.{.tag = .err}); try self.vars.append(.{ .tag = .err });
} }
try self.bc.append(.{ .pop_var = @truncate(i.value_ptr.*) }); try self.bc.append(.{ .pop_var = @truncate(i.value_ptr.*) });
}, },
@ -137,7 +137,7 @@ const sz_code_tmp = struct {
pub fn compile(allocator: std.mem.Allocator, src: []const u8) !sz_code { pub fn compile(allocator: std.mem.Allocator, src: []const u8) !sz_code {
var p = try parse.Parser.init(allocator); var p = try parse.Parser.init(allocator);
const expr = try p.parse(src); const expr = try p.parse(src);
var code = sz_code_tmp{ .consts = std.ArrayList(sz_obj).init(allocator), .vars = std.ArrayList(sz_obj).init(allocator), .bc = std.ArrayList(sz_inst).init(allocator), .name = std.StringHashMap(usize).init(allocator)}; var code = sz_code_tmp{ .consts = std.ArrayList(sz_obj).init(allocator), .vars = std.ArrayList(sz_obj).init(allocator), .bc = std.ArrayList(sz_inst).init(allocator), .name = std.StringHashMap(usize).init(allocator) };
try code.append(src, expr); try code.append(src, expr);
try code.clean_stack(expr); try code.clean_stack(expr);
return code.finalize(); return code.finalize();