aboutsummaryrefslogtreecommitdiff
path: root/src/toml/toml_parser.zig
diff options
context:
space:
mode:
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;