diff options
| author | Baitinq <[email protected]> | 2025-03-09 00:46:07 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-03-09 00:46:07 +0100 |
| commit | 7dda19a956a19aeaa25fc23d8815dac250b4ae8a (patch) | |
| tree | e84d34665c922b4babc23837a6549a79ab9c9d1c /src/evaluator.zig | |
| parent | Feature: Add support for GT and LT operators (diff) | |
| download | pry-lang-7dda19a956a19aeaa25fc23d8815dac250b4ae8a.tar.gz pry-lang-7dda19a956a19aeaa25fc23d8815dac250b4ae8a.tar.bz2 pry-lang-7dda19a956a19aeaa25fc23d8815dac250b4ae8a.zip | |
Feature: Add support for mod operator
Diffstat (limited to 'src/evaluator.zig')
| -rw-r--r-- | src/evaluator.zig | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/evaluator.zig b/src/evaluator.zig index 43380a1..fef08a2 100644 --- a/src/evaluator.zig +++ b/src/evaluator.zig @@ -177,8 +177,11 @@ pub const Evaluator = struct { const lhs = try self.get_expression_value(x.lhs) orelse return EvaluatorError.EvaluationError; const rhs = try self.get_expression_value(x.rhs) orelse return EvaluatorError.EvaluationError; std.debug.assert(lhs.* == .NUMBER and rhs.* == .NUMBER); - if (x.multiplication) return try self.create_variable(.{ .NUMBER = lhs.NUMBER * rhs.NUMBER }); - return try self.create_variable(.{ .NUMBER = @divFloor(lhs.NUMBER, rhs.NUMBER) }); + switch (x.typ) { + .MUL => return try self.create_variable(.{ .NUMBER = lhs.NUMBER * rhs.NUMBER }), + .DIV => return try self.create_variable(.{ .NUMBER = @divFloor(lhs.NUMBER, rhs.NUMBER) }), + .MOD => return try self.create_variable(.{ .NUMBER = @rem(lhs.NUMBER, rhs.NUMBER) }), + } }, .UNARY_EXPRESSION => |x| { const val = try self.get_expression_value(x.expression) orelse return EvaluatorError.EvaluationError; @@ -193,7 +196,11 @@ pub const Evaluator = struct { const lhs = try self.get_expression_value(x.lhs) orelse return EvaluatorError.EvaluationError; const rhs = try self.get_expression_value(x.rhs) orelse return EvaluatorError.EvaluationError; std.debug.assert(lhs.* == .NUMBER and rhs.* == .NUMBER); //TODO: Generic - return try self.create_variable(.{ .BOOLEAN = (lhs.NUMBER == rhs.NUMBER) }); + switch (x.typ) { + .EQ => return try self.create_variable(.{ .BOOLEAN = (lhs.NUMBER == rhs.NUMBER) }), + .GT => return try self.create_variable(.{ .BOOLEAN = (lhs.NUMBER > rhs.NUMBER) }), + .LT => return try self.create_variable(.{ .BOOLEAN = (lhs.NUMBER < rhs.NUMBER) }), + } }, .PRIMARY_EXPRESSION => |x| { switch (x) { |