From afb238972816b560b082229ac20cdab64bca8aca Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 25 Jan 2026 18:42:24 +0900 Subject: implement empty array/object literals --- src/jq/parse.zig | 18 ++++++++++++++++++ src/root.zig | 4 ++++ 2 files changed, 22 insertions(+) (limited to 'src') 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" { -- cgit v1.3-1-g0d28