diff options
author | 2022-01-29 23:52:19 -0800 | |
---|---|---|
committer | 2022-01-29 23:52:19 -0800 | |
commit | 1489e489504839c04b75f66337daf3a58bab5d42 (patch) | |
tree | c47dfbb172b91668d903372ac91188579297a0a5 /src/toml/toml_parser.zig | |
parent | 5922ba29acab512ff0aab51e64199d86f148c020 (diff) | |
download | bun-1489e489504839c04b75f66337daf3a58bab5d42.tar.gz bun-1489e489504839c04b75f66337daf3a58bab5d42.tar.zst bun-1489e489504839c04b75f66337daf3a58bab5d42.zip |
Slight tweaks to TOML parser
Diffstat (limited to 'src/toml/toml_parser.zig')
-rw-r--r-- | src/toml/toml_parser.zig | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/toml/toml_parser.zig b/src/toml/toml_parser.zig index 9fb01882f..8f7130a1a 100644 --- a/src/toml/toml_parser.zig +++ b/src/toml/toml_parser.zig @@ -250,17 +250,24 @@ pub const TOML = struct { pub fn parseAssignment(p: *TOML, obj: *E.Object, allocator: std.mem.Allocator) anyerror!void { p.lexer.allow_double_bracket = false; var rope = try p.parseKey(allocator); - try p.lexer.expectAssignment(); - obj.setRope(rope, p.allocator, try p.parseValue()) catch |err| { - switch (err) { - error.Clobber => { - try p.lexer.addDefaultError("Cannot redefine key"); - return error.SyntaxError; - }, - else => return err, - } - }; + const is_array = p.lexer.token == .t_empty_array; + if (is_array) { + try p.lexer.next(); + } + + try p.lexer.expectAssignment(); + if (!is_array) { + obj.setRope(rope, p.allocator, try p.parseValue()) catch |err| { + switch (err) { + error.Clobber => { + try p.lexer.addDefaultError("Cannot redefine key"); + return error.SyntaxError; + }, + else => return err, + } + }; + } else {} p.lexer.allow_double_bracket = true; } @@ -344,6 +351,11 @@ pub const TOML = struct { try p.lexer.expect(.t_close_brace); return expr; }, + .t_empty_array => { + try p.lexer.next(); + p.lexer.allow_double_bracket = true; + return p.e(E.Array{}, loc); + }, .t_open_bracket => { try p.lexer.next(); var is_single_line = !p.lexer.has_newline_before; |