diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-01 20:43:22 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-03 00:13:51 +0900 |
| commit | beff4b6048cc3783d538769a307f8e679a33894c (patch) | |
| tree | bd1bd3e6aff00cf2f9030262d674adef047672ff /src/jq/parse.zig | |
| parent | 7712c1d10ec45349c1cd6e66281b7d602350065d (diff) | |
| download | zgjq-beff4b6048cc3783d538769a307f8e679a33894c.tar.gz zgjq-beff4b6048cc3783d538769a307f8e679a33894c.tar.zst zgjq-beff4b6048cc3783d538769a307f8e679a33894c.zip | |
implement array iteration
Diffstat (limited to 'src/jq/parse.zig')
| -rw-r--r-- | src/jq/parse.zig | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/jq/parse.zig b/src/jq/parse.zig index ad64824..17138ae 100644 --- a/src/jq/parse.zig +++ b/src/jq/parse.zig @@ -20,6 +20,7 @@ pub const AstKind = enum { pipe, comma, construct_array, + each, }; pub const BinaryOp = enum { @@ -56,6 +57,7 @@ pub const Ast = union(AstKind) { pipe: struct { lhs: *Ast, rhs: *Ast }, comma: struct { lhs: *Ast, rhs: *Ast }, construct_array: struct { items: *Ast }, + each: struct { base: *Ast }, pub fn kind(self: @This()) AstKind { return self; @@ -400,6 +402,13 @@ const Parser = struct { fn parseSuffix(self: *Self, base: *Ast) Error!*Ast { _ = try self.tokens.expect(.bracket_left); + // Handle [] form. + if (self.tokens.consumeIf(.bracket_right)) { + const ast = try self.compile_allocator.create(Ast); + ast.* = .{ .each = .{ .base = base } }; + return ast; + } + // Handle [:to] form. if (self.tokens.consumeIf(.colon)) { const to_expr = try self.parseQuery(); |
