about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-05-18 11:07:50 +0200
committerBaitinq <[email protected]>2025-05-18 11:07:50 +0200
commitcc9a25f26c8c88141faf4b35cfffa3b276c25308 (patch)
tree4e46985c0a3580fa9b564d9cdb8a91b5c04f31c5 /src
parentFeature: Add support for continue statement (diff)
downloadinterpreter-cc9a25f26c8c88141faf4b35cfffa3b276c25308.tar.gz
interpreter-cc9a25f26c8c88141faf4b35cfffa3b276c25308.tar.bz2
interpreter-cc9a25f26c8c88141faf4b35cfffa3b276c25308.zip
Codegen: Don't allow changing types on variable assignment
Diffstat (limited to 'src')
-rw-r--r--src/bootstrap/tokenizer.src8
-rw-r--r--src/codegen.zig4
2 files changed, 6 insertions, 6 deletions
diff --git a/src/bootstrap/tokenizer.src b/src/bootstrap/tokenizer.src
index ff2f5a7..6a88117 100644
--- a/src/bootstrap/tokenizer.src
+++ b/src/bootstrap/tokenizer.src
@@ -5,13 +5,13 @@ extern atoi = (*i8) => i64;
 
 import "!stdlib.src";
 
-let file_size = 0;
-let buf = 0;
+let offset = 0;
 
+let buf = null;
+let file_size = 0;
 
-let offset = 0;
 
-let tokens = 0;
+let tokens = null;
 let tokens_len = 0;
 
 let read_file = (filename: *i8) => *i8 {
diff --git a/src/codegen.zig b/src/codegen.zig
index 33ee3b5..c10c7ec 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -151,6 +151,7 @@ pub const CodeGen = struct {
             }
 
             var ptr: llvm.LLVMValueRef = undefined;
+            var typ = variable.node_type;
             if (assignment_statement.is_declaration) {
                 var x = try self.get_llvm_type(variable.node_type);
                 if (variable.node_type.TYPE == .FUNCTION_TYPE) {
@@ -159,11 +160,10 @@ pub const CodeGen = struct {
                 ptr = llvm.LLVMBuildAlloca(self.builder, x, try std.fmt.allocPrintZ(self.arena, "{s}", .{identifier.name}));
             } else {
                 ptr = self.environment.get_variable(identifier.name).?.value;
+                typ = self.environment.get_variable(identifier.name).?.node_type;
             }
 
-            var typ = variable.node_type;
             if (assignment_statement.is_dereference) {
-                typ = self.environment.get_variable(identifier.name).?.node_type;
                 ptr = llvm.LLVMBuildLoad2(self.builder, try self.get_llvm_type(typ), ptr, "");
             }