diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-17 18:40:47 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-17 18:40:47 +0900 |
| commit | 22a5d1617e79f176ecfca22d6c72be215f0da8b6 (patch) | |
| tree | 4424a15f2e069aa27312a9e1885d8446ad12bea1 /src/jq/parse.zig | |
| parent | d4bacf19b56c21afc7f2f0b5efb244b072873119 (diff) | |
| download | zgjq-22a5d1617e79f176ecfca22d6c72be215f0da8b6.tar.gz zgjq-22a5d1617e79f176ecfca22d6c72be215f0da8b6.tar.zst zgjq-22a5d1617e79f176ecfca22d6c72be215f0da8b6.zip | |
implement object key access
Diffstat (limited to 'src/jq/parse.zig')
| -rw-r--r-- | src/jq/parse.zig | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/jq/parse.zig b/src/jq/parse.zig index 5269ef5..dc9f6b9 100644 --- a/src/jq/parse.zig +++ b/src/jq/parse.zig @@ -10,12 +10,14 @@ pub const ParseError = error{ pub const AstKind = enum { identity, array_index, + object_key, literal, }; pub const Ast = union(AstKind) { identity, array_index: *Ast, + object_key: []const u8, literal: *jv.Value, pub fn kind(self: @This()) AstKind { @@ -42,6 +44,19 @@ pub fn parse(allocator: std.mem.Allocator, tokens: []const Token) !*Ast { return root; } + if (t2.kind() == .identifier) { + i += 1; + const t3 = tokens[i]; + if (t3.kind() != .end) { + return error.InvalidQuery; + } + const root = try allocator.create(Ast); + root.* = .{ + .object_key = t2.identifier, + }; + return root; + } + if (t2.kind() != .bracket_left) { return error.InvalidQuery; } |
