From 4cb45dc920e23e75f4c8d19d4606e0514e13766e Mon Sep 17 00:00:00 2001 From: Baitinq Date: Tue, 11 Feb 2025 00:13:34 +0100 Subject: Codegen: Fix generating unary expressions --- src/codegen.zig | 34 ++++++++++++++++++++++++---------- 1 file 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, }; -- cgit 1.4.1