aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jq/execute.zig
diff options
context:
space:
mode:
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));