diff options
| author | Baitinq <[email protected]> | 2025-02-11 00:17:48 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-02-11 00:17:48 +0100 |
| commit | f8e20d8d834b155a9476b4244ef01229a3a1e79d (patch) | |
| tree | 1eafc25d797e36dab8191283a442f5caa53e2e16 /src/codegen.zig | |
| parent | Codegen: Fix generating unary expressions (diff) | |
| download | interpreter-f8e20d8d834b155a9476b4244ef01229a3a1e79d.tar.gz interpreter-f8e20d8d834b155a9476b4244ef01229a3a1e79d.tar.bz2 interpreter-f8e20d8d834b155a9476b4244ef01229a3a1e79d.zip | |
Codegen: Fix generating binop expressions
Diffstat (limited to '')
| -rw-r--r-- | src/codegen.zig | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index b24f849..7c1045f 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -355,13 +355,15 @@ pub const CodeGen = struct { result = core.LLVMBuildSub(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; } - std.debug.assert(name != null); - - const ptr = self.environment.get_variable(name.?) orelse unreachable; - _ = core.LLVMBuildStore(self.builder, result, ptr.value); - ptr.type = core.LLVMInt64Type(); + if (name != null) { + const ptr = self.environment.get_variable(name.?) orelse unreachable; + _ = core.LLVMBuildStore(self.builder, result, ptr.value); + ptr.type = core.LLVMInt64Type(); - return ptr; + return ptr; + } else { + return try self.create_variable(.{ .value = result, .type = core.LLVMInt64Type() }); + } }, .MULTIPLICATIVE_EXPRESSION => |exp| { const lhs_value = try self.generate_expression_value(exp.lhs, null); @@ -374,13 +376,15 @@ pub const CodeGen = struct { result = core.LLVMBuildSDiv(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError; } - std.debug.assert(name != null); - - const ptr = self.environment.get_variable(name.?) orelse unreachable; - _ = core.LLVMBuildStore(self.builder, result, ptr.value); - ptr.type = core.LLVMInt64Type(); + if (name != null) { + const ptr = self.environment.get_variable(name.?) orelse unreachable; + _ = core.LLVMBuildStore(self.builder, result, ptr.value); + ptr.type = core.LLVMInt64Type(); - return ptr; + return ptr; + } else { + return try self.create_variable(.{ .value = result, .type = core.LLVMInt64Type() }); + } }, .UNARY_EXPRESSION => |exp| { const k = try self.generate_expression_value(exp.expression, null); |