aboutsummaryrefslogtreecommitdiff
path: root/src/toml/toml_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-01-29 23:52:19 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-01-29 23:52:19 -0800
commit1489e489504839c04b75f66337daf3a58bab5d42 (patch)
treec47dfbb172b91668d903372ac91188579297a0a5 /src/toml/toml_parser.zig
parent5922ba29acab512ff0aab51e64199d86f148c020 (diff)
downloadbun-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.zig32
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;