diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-25 16:14:57 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-25 16:14:57 +0900 |
| commit | 3e78bb75c4b431b0a4d07892aba6a64f11da2210 (patch) | |
| tree | b7a8d2a5412c75cd3ace1032db38e6535d3d0a1d /src/jq/execute.zig | |
| parent | 448c28d596184f39783f8a7813ae73901fce240a (diff) | |
| download | zgjq-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.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)); |
