diff options
| author | Baitinq <[email protected]> | 2025-02-11 00:13:34 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-02-11 00:13:34 +0100 |
| commit | 4cb45dc920e23e75f4c8d19d4606e0514e13766e (patch) | |
| tree | ba7bc2ab7ef829c284ba427499b1f371ceab27d3 | |
| parent | Codegen: Fix generating equality expressions (diff) | |
| download | interpreter-4cb45dc920e23e75f4c8d19d4606e0514e13766e.tar.gz interpreter-4cb45dc920e23e75f4c8d19d4606e0514e13766e.tar.bz2 interpreter-4cb45dc920e23e75f4c8d19d4606e0514e13766e.zip | |
Codegen: Fix generating unary expressions
| -rw-r--r-- | src/codegen.zig | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index a402124..b24f849 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -399,10 +399,19 @@ pub const CodeGen = struct { }, } - return self.create_variable(.{ - .value = r, - .type = t, - }); + if (name != null) { + const ptr = self.environment.get_variable(name.?) orelse unreachable; + + _ = core.LLVMBuildStore(self.builder, r, ptr.value); + ptr.type = t; + + return ptr; + } else { + return try self.create_variable(.{ + .value = r, + .type = t, + }); + } }, .EQUALITY_EXPRESSION => |exp| { const lhs_value = try self.generate_expression_value(exp.lhs, null); @@ -410,14 +419,19 @@ pub const CodeGen = struct { const cmp = core.LLVMBuildICmp(self.builder, types.LLVMIntPredicate.LLVMIntEQ, lhs_value.value, rhs_value.value, ""); - std.debug.assert(name != null); - - const ptr = self.environment.get_variable(name.?) orelse unreachable; + if (name != null) { + const ptr = self.environment.get_variable(name.?) orelse unreachable; - _ = core.LLVMBuildStore(self.builder, cmp, ptr.value); - ptr.type = core.LLVMInt1Type(); + _ = core.LLVMBuildStore(self.builder, cmp, ptr.value); + ptr.type = core.LLVMInt1Type(); - return ptr; + return ptr; + } else { + return try self.create_variable(.{ + .value = cmp, + .type = core.LLVMInt1Type(), + }); + } }, else => unreachable, }; |