about summary refs log tree commit diff
path: root/src/evaluator.zig
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-01-19 16:04:08 +0100
committerBaitinq <[email protected]>2025-01-19 16:43:59 +0100
commitf076be1254aa2934402837f44d0271d279ae74c9 (patch)
treee6b3f445aa8578b2bcaa5de2d2d91214755230b9 /src/evaluator.zig
parentFeature: Add support for boolean values (diff)
downloadpry-lang-f076be1254aa2934402837f44d0271d279ae74c9.tar.gz
pry-lang-f076be1254aa2934402837f44d0271d279ae74c9.tar.bz2
pry-lang-f076be1254aa2934402837f44d0271d279ae74c9.zip
Feature: Add basic support for equality expression
Diffstat (limited to 'src/evaluator.zig')
-rw-r--r--src/evaluator.zig12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/evaluator.zig b/src/evaluator.zig
index 39c7235..f35956a 100644
--- a/src/evaluator.zig
+++ b/src/evaluator.zig
@@ -141,10 +141,14 @@ 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);
-                var res: i64 = undefined;
-                if (x.addition) res = lhs.NUMBER + rhs.NUMBER;
-                res = lhs.NUMBER - rhs.NUMBER;
-                return try self.create_variable(.{ .NUMBER = res });
+                if (x.addition) return try self.create_variable(.{ .NUMBER = lhs.NUMBER + rhs.NUMBER });
+                return try self.create_variable(.{ .NUMBER = lhs.NUMBER - rhs.NUMBER });
+            },
+            .EQUALITY_EXPRESSION => |x| {
+                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) });
             },
             .PRIMARY_EXPRESSION => |x| {
                 switch (x) {