aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jq/execute.zig
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-26 23:39:48 +0900
committernsfisis <nsfisis@gmail.com>2026-01-26 23:39:48 +0900
commitc2a92de7fa1af4fc058f8e5e8317fb67a6df18ef (patch)
treeb9a423eb1c4be33baf4f2f386afb0e2adc7a96f9 /src/jq/execute.zig
parentc524ef71e6e33495ec682558d3e4eb05648a72c9 (diff)
downloadzgjq-c2a92de7fa1af4fc058f8e5e8317fb67a6df18ef.tar.gz
zgjq-c2a92de7fa1af4fc058f8e5e8317fb67a6df18ef.tar.zst
zgjq-c2a92de7fa1af4fc058f8e5e8317fb67a6df18ef.zip
implement // operator
Diffstat (limited to 'src/jq/execute.zig')
-rw-r--r--src/jq/execute.zig13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/jq/execute.zig b/src/jq/execute.zig
index f2bfe8c..0565004 100644
--- a/src/jq/execute.zig
+++ b/src/jq/execute.zig
@@ -328,6 +328,19 @@ pub const Runtime = struct {
const result = try jv.ops.compare(lhs, rhs, .ge);
try self.values.push(.{ .bool = result });
},
+ .alt => {
+ std.debug.assert(self.values.ensureSize(3));
+
+ _ = self.values.pop();
+ const lhs = self.values.pop();
+ const rhs = self.values.pop();
+ const is_falsy = switch (lhs) {
+ .null => true,
+ .bool => |b| !b,
+ else => false,
+ };
+ try self.values.push(if (is_falsy) rhs else lhs);
+ },
.@"const" => |idx| {
std.debug.assert(self.values.ensureSize(1));