aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jq/execute.zig
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-25 16:14:57 +0900
committernsfisis <nsfisis@gmail.com>2026-01-25 16:14:57 +0900
commit3e78bb75c4b431b0a4d07892aba6a64f11da2210 (patch)
treeb7a8d2a5412c75cd3ace1032db38e6535d3d0a1d /src/jq/execute.zig
parent448c28d596184f39783f8a7813ae73901fce240a (diff)
downloadzgjq-3e78bb75c4b431b0a4d07892aba6a64f11da2210.tar.gz
zgjq-3e78bb75c4b431b0a4d07892aba6a64f11da2210.tar.zst
zgjq-3e78bb75c4b431b0a4d07892aba6a64f11da2210.zip
implement arithmetic operations
Diffstat (limited to 'src/jq/execute.zig')
-rw-r--r--src/jq/execute.zig36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/jq/execute.zig b/src/jq/execute.zig
index 6d4f194..3c83d23 100644
--- a/src/jq/execute.zig
+++ b/src/jq/execute.zig
@@ -198,6 +198,42 @@ pub const Runtime = struct {
const result = lhs + rhs;
try self.values.push(.{ .integer = result });
},
+ .sub => {
+ std.debug.assert(self.values.ensureSize(3));
+
+ _ = self.values.pop();
+ const lhs = try self.values.popInteger();
+ const rhs = try self.values.popInteger();
+ const result = lhs - rhs;
+ try self.values.push(.{ .integer = result });
+ },
+ .mul => {
+ std.debug.assert(self.values.ensureSize(3));
+
+ _ = self.values.pop();
+ const lhs = try self.values.popInteger();
+ const rhs = try self.values.popInteger();
+ const result = lhs * rhs;
+ try self.values.push(.{ .integer = result });
+ },
+ .div => {
+ std.debug.assert(self.values.ensureSize(3));
+
+ _ = self.values.pop();
+ const lhs = try self.values.popInteger();
+ const rhs = try self.values.popInteger();
+ const result = @divTrunc(lhs, rhs);
+ try self.values.push(.{ .integer = result });
+ },
+ .mod => {
+ std.debug.assert(self.values.ensureSize(3));
+
+ _ = self.values.pop();
+ const lhs = try self.values.popInteger();
+ const rhs = try self.values.popInteger();
+ const result = @mod(lhs, rhs);
+ try self.values.push(.{ .integer = result });
+ },
.object_key => |key| {
std.debug.assert(self.values.ensureSize(1));