diff options
| -rw-r--r-- | examples/1.src | 2 | ||||
| -rw-r--r-- | src/codegen.zig | 28 |
2 files changed, 17 insertions, 13 deletions
diff --git a/examples/1.src b/examples/1.src index 7c4b8a5..cb29345 100644 --- a/examples/1.src +++ b/examples/1.src @@ -1,7 +1,7 @@ let main = () => { let i = 4; - printf(i); + print(i); return 0; }; 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); |