about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codegen.zig28
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);