diff options
| author | Baitinq <[email protected]> | 2025-01-22 00:25:22 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-01-22 00:25:22 +0100 |
| commit | 6d1d1355379feb3273c3634adfc50a1876c40314 (patch) | |
| tree | d5302638c8569a4d0905ef1fd4ef1b4e39e6a2de /src/evaluator.zig | |
| parent | Feature: Add support for while statements (diff) | |
| download | interpreter-6d1d1355379feb3273c3634adfc50a1876c40314.tar.gz interpreter-6d1d1355379feb3273c3634adfc50a1876c40314.tar.bz2 interpreter-6d1d1355379feb3273c3634adfc50a1876c40314.zip | |
Feature: Add support for division and multiplication
Diffstat (limited to 'src/evaluator.zig')
| -rw-r--r-- | src/evaluator.zig | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/evaluator.zig b/src/evaluator.zig index 9e89fc4..9f8b61f 100644 --- a/src/evaluator.zig +++ b/src/evaluator.zig @@ -165,6 +165,13 @@ pub const Evaluator = struct { if (x.addition) return try self.create_variable(.{ .NUMBER = lhs.NUMBER + rhs.NUMBER }); return try self.create_variable(.{ .NUMBER = lhs.NUMBER - rhs.NUMBER }); }, + .MULTIPLICATIVE_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); + if (x.multiplication) return try self.create_variable(.{ .NUMBER = lhs.NUMBER * rhs.NUMBER }); + return try self.create_variable(.{ .NUMBER = @divFloor(lhs.NUMBER, rhs.NUMBER) }); + }, .UNARY_EXPRESSION => |x| { const val = try self.get_expression_value(x.expression) orelse return EvaluatorError.EvaluationError; std.debug.assert(val.* == .BOOLEAN); |