diff options
Diffstat (limited to 'src/jq/execute.zig')
| -rw-r--r-- | src/jq/execute.zig | 36 |
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)); |
