diff options
Diffstat (limited to 'src/parse.zig')
-rw-r--r-- | src/parse.zig | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/parse.zig b/src/parse.zig index b509fe7..422b4f5 100644 --- a/src/parse.zig +++ b/src/parse.zig @@ -55,9 +55,9 @@ pub const Stmt = struct { fn format(self: Stmt, writer: anytype, source: []const u8, indent: usize) !void { try writer.writeByteNTimes(' ', indent); return switch (self.type) { - .expr => |expr| writer.print("{};", .{fmt(expr, source, indent)}), + .expr => |expr| writer.print("{}", .{fmt(expr, source, indent)}), .block => |b| writer.print("{}", .{fmt(b, source, indent)}), - .declare_var => |declare_var| writer.print("let {s} = {};", .{ + .declare_var => |declare_var| writer.print("let {s} = {}", .{ declare_var.ident.getIdent(source), fmt(declare_var.value, source, indent), }), @@ -113,7 +113,7 @@ pub const Expr = struct { } }; -const ParseError = error{ OutOfMemory, ExpectedRightParen, UnexpectedToken, ExpectedSemicolon }; +const ParseError = error{ OutOfMemory, ExpectedRightParen, UnexpectedToken }; pub fn block(allocator: Allocator, lexer: *Lexer) !Block { const left_curly = try mustEat(lexer, .left_curly); @@ -135,9 +135,8 @@ pub fn statement(allocator: Allocator, lexer: *Lexer) ParseError!Stmt { const ident = try mustEat(lexer, .identifier); _ = try mustEat(lexer, .equal); const value = try expression(allocator, lexer); - const semicolon = try mustEat(lexer, .semicolon); return .{ - .loc = let.loc.combine(semicolon.loc), + .loc = let.loc.combine(value.loc), .type = .{ .declare_var = .{ .ident = ident.loc, .value = value } }, }; }, @@ -149,11 +148,9 @@ pub fn statement(allocator: Allocator, lexer: *Lexer) ParseError!Stmt { }; }, else => { - var expr = try expression(allocator, lexer); - const semicolon = lexer.next(); - if (semicolon.type != .semicolon) return error.ExpectedSemicolon; + const expr = try expression(allocator, lexer); return .{ - .loc = expr.loc.combine(semicolon.loc), + .loc = expr.loc, .type = .{ .expr = expr }, }; }, |