about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-06-06 00:36:46 +0200
committerBaitinq <[email protected]>2025-06-06 00:37:15 +0200
commitd512b33da51e2a94690cf145d05479d6ec4860f6 (patch)
tree25718d478612ae98cc64943f2236ac6b7e873cf0
parentBootstrap: Codegen: Create bindings for llvm types (diff)
downloadpry-lang-d512b33da51e2a94690cf145d05479d6ec4860f6.tar.gz
pry-lang-d512b33da51e2a94690cf145d05479d6ec4860f6.tar.bz2
pry-lang-d512b33da51e2a94690cf145d05479d6ec4860f6.zip
Feature: Typecheck on struct field assignment
-rw-r--r--src/bootstrap/llvm.src2
-rw-r--r--src/bootstrap/parser.src2
-rw-r--r--src/bootstrap/tokenizer.src4
-rw-r--r--src/codegen.zig2
4 files changed, 6 insertions, 4 deletions
diff --git a/src/bootstrap/llvm.src b/src/bootstrap/llvm.src
index 42f1a5b..4e78f5a 100644
--- a/src/bootstrap/llvm.src
+++ b/src/bootstrap/llvm.src
@@ -266,7 +266,7 @@ let LLVMTargetRef = newtype *void;
 
 extern LLVMModuleCreateWithName = (*i8) => LLVMModuleRef;
 extern LLVMGetGlobalContext = () => LLVMContextRef;
-extern LLVMCreateBuilder = () => LLVMBuilderRef; /* TODO: Create types */
+extern LLVMCreateBuilder = () => LLVMBuilderRef;
 extern LLVMDisposeModule = (LLVMModuleRef) => void;
 extern LLVMShutdown = () => void;
 extern LLVMDisposeBuilder = (LLVMBuilderRef) => void;
diff --git a/src/bootstrap/parser.src b/src/bootstrap/parser.src
index 9ee53f6..7e2836d 100644
--- a/src/bootstrap/parser.src
+++ b/src/bootstrap/parser.src
@@ -253,7 +253,7 @@ let parser_parse_primary_expression = (p: *parser) => *Node {
 
 	if (*tok).type == TOKEN_IDENTIFIER {
 	    let d = cast(*NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, arena_alloc((*p).arena, sizeof(NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA)));
-	    (*d).name = (*tok).data;
+	    (*d).name = cast(*i8, (*tok).data);
 	    (*d).type = cast(*Node, null); /* TODO */
 	    let n = Node{};
 	    n.type = NODE_PRIMARY_EXPRESSION_IDENTIFIER;
diff --git a/src/bootstrap/tokenizer.src b/src/bootstrap/tokenizer.src
index 814a377..70ec1bb 100644
--- a/src/bootstrap/tokenizer.src
+++ b/src/bootstrap/tokenizer.src
@@ -517,7 +517,7 @@ let tokenizer_init = (alloc: *arena, file: slice) => *tokenizer {
 	let t = cast(*tokenizer, arena_alloc(alloc, sizeof(tokenizer)));
 	(*t).arena = alloc;
 	(*t).offset = 0;
-	(*t).buf = file.data;
+	(*t).buf = cast(*i8, file.data);
 	(*t).buf_len = file.data_len;
 
 	println("File size: %d", (*t).buf_len);
@@ -547,7 +547,7 @@ let tokenizer_tokenize = (t: *tokenizer) => slice {
 	print_tokens(tokens, tokens_len);
 
 	let res = slice{};
-	res.data = tokens;
+	res.data = cast(*void, tokens);
 	res.data_len = tokens_len;
 	return res;
 };
diff --git a/src/codegen.zig b/src/codegen.zig
index 8f2b9fa..0cc2367 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -215,6 +215,8 @@ pub const CodeGen = struct {
                 const x = try self.get_struct_field(xd, name);
 
                 const variable = try self.generate_expression_value(assignment_statement.rhs, null);
+                std.debug.print("7TYP {s}: {any} vs {any} -- {any}\n", .{ name, x.type, variable.node_type.TYPE, variable.node });
+                std.debug.assert(self.compare_types(x.type, variable.node_type, assignment_statement.is_dereference));
                 _ = llvm.LLVMBuildStore(self.builder, variable.value, x.value);
             },
             else => unreachable,