about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-07-14 21:11:56 +0200
committerBaitinq <[email protected]>2025-07-14 21:11:56 +0200
commit631520a21c9b8a4e7febaae47f740dd1110b4731 (patch)
tree770fdeb4476466bb4ddc5a3fe68948307e04b545
parentBoostrap: Support codegen for simple type (diff)
downloadpry-lang-631520a21c9b8a4e7febaae47f740dd1110b4731.tar.gz
pry-lang-631520a21c9b8a4e7febaae47f740dd1110b4731.tar.bz2
pry-lang-631520a21c9b8a4e7febaae47f740dd1110b4731.zip
Boostrap: Improvements
-rw-r--r--src/bootstrap/codegen.pry19
-rw-r--r--src/bootstrap/main.pry2
-rw-r--r--src/bootstrap/parser.pry2
-rw-r--r--src/bootstrap/tokenizer.pry2
4 files changed, 7 insertions, 18 deletions
diff --git a/src/bootstrap/codegen.pry b/src/bootstrap/codegen.pry
index 06efda5..253a13e 100644
--- a/src/bootstrap/codegen.pry
+++ b/src/bootstrap/codegen.pry
@@ -42,6 +42,7 @@ let environment_get_variable = (e: *Environment, name: *i8) => *Variable {
 	while i > 0 {
 		i = i - 1;
 		let scope = *(((*e).scope_stack + cast(**Scope, i)));
+		assert(scope != cast(*Scope, null));
 		let v = cast(*Variable, hashmap_get((*scope).variables, name));
 		if v != cast(*Variable, null) {
 			if variable == cast(*Variable, null) {
@@ -57,11 +58,8 @@ let environment_get_variable = (e: *Environment, name: *i8) => *Variable {
 };
 
 let environment_add_variable = (e: *Environment, name: *i8, variable: *Variable) => void {
-	printf("B4 XXXX %d\n", (*e).scope_stack_len);
 	let top_scope = *(((*e).scope_stack + cast(**Scope, (*e).scope_stack_len - 1)));
-	printf("XXXX %d\n", (*e).scope_stack_len);
 	hashmap_put((*top_scope).variables, name, cast(*void, variable));
-	printf("XXXXY\n");
 
 	return;
 };
@@ -75,7 +73,7 @@ let environment_set_variable = (e: *Environment, name: *i8, variable: *Variable)
 
 let environment_init = (alloc: *arena) => *Environment {
 	let e = cast(*Environment, arena_alloc(alloc, sizeof(Environment)));
-	(*e).scope_stack = cast(**Scope, arena_alloc(alloc, sizeof(*Scope) * 20));
+	(*e).scope_stack = cast(**Scope, arena_alloc(alloc, sizeof(*Scope) * 40));
 	(*e).scope_stack_len = 0;
 	(*e).arena = alloc;
 
@@ -220,7 +218,6 @@ let codegen_get_llvm_type = (c: *codegen, node: *Node) => *LLVMTypeRef {
 		let function_type = LLVMFunctionType(*retur_type, paramtypes, paramtypes_len, is_varargs);
 		let r = cast(*LLVMTypeRef, arena_alloc((*c).arena, sizeof(LLVMTypeRef)));
 		*r = function_type;
-		printf("FUNCTION\n");
 		return r;
 	};
 
@@ -373,8 +370,6 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 	if ((*expression).type == NODE_PRIMARY_EXPRESSION_NUMBER) {
 		let n = (*cast(*NODE_PRIMARY_EXPRESSION_NUMBER_DATA, (*expression).data)).value;
 		
-		printf("X: %d\n", n);
-
 		let node_type = Node{};
 		node_type.type = NODE_TYPE_SIMPLE_TYPE;
 
@@ -420,10 +415,8 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 	};
 	
 	if ((*expression).type == NODE_PRIMARY_EXPRESSION_STRING) {
-		printf("THIS8\n");
 		let str = (*cast(*NODE_PRIMARY_EXPRESSION_STRING_DATA, (*expression).data)).value;
 		
-		printf("X string: %s\n", str);
 		let x = LLVMBuildGlobalStringPtr((*c).builder, str, "");
 
 		let inner_type_data = cast(*NODE_TYPE_SIMPLE_TYPE_DATA, arena_alloc((*c).arena, sizeof(NODE_TYPE_SIMPLE_TYPE_DATA)));
@@ -938,7 +931,6 @@ let codegen_generate_assignment_statement = (c: *codegen, stmt: *NODE_ASSIGNMENT
 
 	if (lhs.type == NODE_PRIMARY_EXPRESSION_IDENTIFIER) {
 		let identifier = (*cast(*NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, lhs.data)).name;
-		printf("XX %s\n", identifier);
 		let variable = codegen_generate_expression_value(c, prhs, identifier);
 		assert(variable != cast(*Variable, null));
 
@@ -1035,11 +1027,9 @@ let codegen_generate_assignment_statement = (c: *codegen, stmt: *NODE_ASSIGNMENT
 };
 
 let codegen_generate_return_statement = (c: *codegen, stmt: *NODE_RETURN_STATEMENT_DATA) => i64 {
-	printf("HELLO!\n");
 	let expression = (*stmt).expression;
 
 	if expression == cast(*Node, null) {
-		printf("RETURN VOID!\n");
 		LLVMBuildRetVoid((*c).builder);
 		return 0;
 	};
@@ -1063,7 +1053,7 @@ let get_function_return_type = (ic: *codegen, fun: *Node) => *Node {
 		let d = cast(*NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, (*fun).data);
 		let f = environment_get_variable((*ic).environment, (*d).name);
 		if f == cast(*Variable, null) {
-			printf("NO variable: %s\n", (*d).name);
+			printf("NO variable 2: %s\n", (*d).name);
 			assert(false);
 		};
 		let f_type = (*f).node_type;
@@ -1074,7 +1064,6 @@ let get_function_return_type = (ic: *codegen, fun: *Node) => *Node {
 		let d = cast(*NODE_TYPE_FUNCTION_TYPE_DATA, (*fun).data);
 		return (*d).retur_type;
 	};
-	printf("HMM %d\n", (*fun).type);
 	assert(false);
 	return cast(*Node, null);
 };
@@ -1091,7 +1080,7 @@ let codegen_generate_function_call_statement = (c: *codegen, statement: *Node) =
 		let ident = (*cast(*NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, (*expression).data));
 		function = environment_get_variable((*c).environment, ident.name);
 		if function == cast(*Variable, null) {
-			printf("NO variable: %s\n", ident.name);
+			printf("NO variable 1: %s\n", ident.name);
 			assert(false);
 		};
 
diff --git a/src/bootstrap/main.pry b/src/bootstrap/main.pry
index 347b63c..835f4c4 100644
--- a/src/bootstrap/main.pry
+++ b/src/bootstrap/main.pry
@@ -40,7 +40,7 @@ let main = (argc: i64, argv: **i8) => i64 {
 
 	printf("%s\n", filename);
 
-	let alloc = arena_init(99999999999);
+	let alloc = arena_init(1024 * 1024 * 1024);
 
 	let file = read_file(filename, alloc);
 
diff --git a/src/bootstrap/parser.pry b/src/bootstrap/parser.pry
index f77bc77..47b1918 100644
--- a/src/bootstrap/parser.pry
+++ b/src/bootstrap/parser.pry
@@ -1430,7 +1430,7 @@ let parser_parse_statement = (p: *parser) => *Node {
 
 /* Program ::= Statement+ */
 let parse_program = (p: *parser) => *Node {
-	let nodes = cast(**Node, arena_alloc((*p).arena, sizeof(*Node) * 1000));
+	let nodes = cast(**Node, arena_alloc((*p).arena, sizeof(*Node) * 50000));
 
 	let i = 0;
 	while (*p).offset < (*p).tokens_len {
diff --git a/src/bootstrap/tokenizer.pry b/src/bootstrap/tokenizer.pry
index a2cafb4..ddc2cef 100644
--- a/src/bootstrap/tokenizer.pry
+++ b/src/bootstrap/tokenizer.pry
@@ -528,7 +528,7 @@ let tokenizer_init = (alloc: *arena, file: slice) => *tokenizer {
 };
 
 let tokenizer_tokenize = (t: *tokenizer) => slice {
-	let tokens = cast(*token, arena_alloc((*t).arena, sizeof(token) * 1000)); /* why does it not care about type here */
+	let tokens = cast(*token, arena_alloc((*t).arena, sizeof(token) * 40000)); /* why does it not care about type here */
 	let tokens_len = 0;
 
 	while true {