diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-25 18:42:24 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-25 18:42:24 +0900 |
| commit | afb238972816b560b082229ac20cdab64bca8aca (patch) | |
| tree | 1a61e9c0e2f013baa2001008a631780087ef3914 /src | |
| parent | 11ff1132c8116aef2296cc6ebd3c40b5e7e7b43f (diff) | |
| download | zgjq-afb238972816b560b082229ac20cdab64bca8aca.tar.gz zgjq-afb238972816b560b082229ac20cdab64bca8aca.tar.zst zgjq-afb238972816b560b082229ac20cdab64bca8aca.zip | |
implement empty array/object literals
Diffstat (limited to 'src')
| -rw-r--r-- | src/jq/parse.zig | 18 | ||||
| -rw-r--r-- | src/root.zig | 4 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/jq/parse.zig b/src/jq/parse.zig index d197c26..b466bd8 100644 --- a/src/jq/parse.zig +++ b/src/jq/parse.zig @@ -366,6 +366,24 @@ fn parsePrimary(allocator: std.mem.Allocator, parse_allocator: std.mem.Allocator ast.* = .identity; return ast; }, + .bracket_left => { + _ = try tokens.next(); + _ = try tokens.expect(.bracket_right); + const array_value = try allocator.create(jv.Value); + array_value.* = .{ .array = jv.Array.init(allocator) }; + const array_node = try parse_allocator.create(Ast); + array_node.* = .{ .literal = array_value }; + return array_node; + }, + .brace_left => { + _ = try tokens.next(); + _ = try tokens.expect(.brace_right); + const object_value = try allocator.create(jv.Value); + object_value.* = .{ .object = jv.Object.init(allocator) }; + const object_node = try parse_allocator.create(Ast); + object_node.* = .{ .literal = object_value }; + return object_node; + }, .field => |name| { _ = try tokens.next(); const ast = try parse_allocator.create(Ast); diff --git a/src/root.zig b/src/root.zig index 650acdf..f2cc29a 100644 --- a/src/root.zig +++ b/src/root.zig @@ -47,6 +47,10 @@ test "literals" { try testRun("\"\"", "null", "\"\""); try testRun("\"hello\\nworld\"", "null", "\"hello\\nworld\""); try testRun("\"hello\"", "{\"a\":1}", "\"hello\""); + try testRun("[]", "null", "[]"); + try testRun("{}", "null", "{}"); + try testRun("[]", "{\"a\":1}", "[]"); + try testRun("{}", "[1,2,3]", "{}"); } test "identity filter" { |
