refactor: statement parsing

This commit is contained in:
Fernando Araoz 2025-01-27 19:49:06 -05:00
parent 9374caa7ed
commit 3671c221a9

View File

@ -29,26 +29,16 @@ pub const Statement = struct {
}; };
errdefer allocator.destroy(vardef); errdefer allocator.destroy(vardef);
var parse_failed = false; if (try vardef.init(tokens, pos, allocator)) |vardef_end| {
const vardef_end = vardef.init(tokens, pos, allocator) catch |err| switch (err) { // variable definition parsed
error.Unmatched => blk: { // return the parsed variable definition
parse_failed = true; target.* = .{
break :blk 0; .alloc = allocator,
}, .value = .{ .variableBinding = vardef },
else => { };
return err; return vardef_end;
},
};
if (vardef_end) |v| {
if (!parse_failed) {
// return the parsed variable definition
target.* = .{
.alloc = allocator,
.value = .{ .variableBinding = vardef },
};
return v;
}
} }
// TODO: handle other errors of vardef parsing
// fail // fail
return ParseError.Unmatched; return ParseError.Unmatched;