about summary refs log tree commit diff
path: root/src/bootstrap/codegen.pry
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-07-12 17:55:48 +0200
committerBaitinq <[email protected]>2025-07-12 20:35:05 +0200
commitef0cc269bd1b4745aa22cea0241a0f48886b03b4 (patch)
treebabf1c8b6bedf0dcccf130a27b7fba4573cb38e8 /src/bootstrap/codegen.pry
parentBoostrap: Implement import (diff)
downloadpry-lang-ef0cc269bd1b4745aa22cea0241a0f48886b03b4.tar.gz
pry-lang-ef0cc269bd1b4745aa22cea0241a0f48886b03b4.tar.bz2
pry-lang-ef0cc269bd1b4745aa22cea0241a0f48886b03b4.zip
Boostrap: Clean
Diffstat (limited to 'src/bootstrap/codegen.pry')
-rw-r--r--src/bootstrap/codegen.pry78
1 files changed, 17 insertions, 61 deletions
diff --git a/src/bootstrap/codegen.pry b/src/bootstrap/codegen.pry
index 6d5b1c8..0bc11f3 100644
--- a/src/bootstrap/codegen.pry
+++ b/src/bootstrap/codegen.pry
@@ -21,18 +21,15 @@ let Environment = struct {
 };
 
 let environment_create_scope = (e: *Environment) => void {
-	printf("CREATE SCOPE!!!!!!!!!!!: %d\n", (*e).scope_stack_len);
 	let scope = cast(*Scope, arena_alloc((*e).arena, sizeof(Scope)));
 	(*scope).variables = hashmap_init(16, (*e).arena);
 	(*((*e).scope_stack + cast(**Scope, (*e).scope_stack_len))) = scope;
 	(*e).scope_stack_len = (*e).scope_stack_len + 1;
-	printf("AFTER SCOPE!!!!!!!!!!!: %d\n", (*e).scope_stack_len);
 
 	return;
 };
 
 let environment_drop_scope = (e: *Environment) => void {
-	printf("DROP SCOPE!!!!!!!!!!!\n");
 	(*e).scope_stack_len = (*e).scope_stack_len - 1;
 
 	return;
@@ -178,9 +175,7 @@ let codegen_get_llvm_type = (c: *codegen, node: *Node) => *LLVMTypeRef {
 	if (*node).type == NODE_TYPE_FUNCTION_TYPE {
 		let function_type = *cast(*NODE_TYPE_FUNCTION_TYPE_DATA, (*node).data);
 		let retur_type = codegen_get_llvm_type(c, function_type.retur_type);
-		if retur_type == cast(*LLVMTypeRef, null) {
-			return cast(*LLVMTypeRef, null);
-		};
+		assert(retur_type != cast(*LLVMTypeRef, null));
 		let paramtypes = cast(*LLVMTypeRef, arena_alloc((*c).arena, sizeof(LLVMTypeRef) * 20));
 		let paramtypes_len = 0;
 		let is_varargs = 0;
@@ -197,9 +192,7 @@ let codegen_get_llvm_type = (c: *codegen, node: *Node) => *LLVMTypeRef {
 				};
 			};
 			let typ = codegen_get_llvm_type(c, param);
-			if typ == cast(*LLVMTypeRef, null) {
-				return cast(*LLVMTypeRef, null);
-			};
+			assert(typ != cast(*LLVMTypeRef, null));
 			if (*param).type == NODE_TYPE_FUNCTION_TYPE {
 				*typ = LLVMPointerType(*typ, 0);
 			};
@@ -219,9 +212,7 @@ let codegen_get_llvm_type = (c: *codegen, node: *Node) => *LLVMTypeRef {
 	if (*node).type == NODE_TYPE_POINTER_TYPE {
 		let pointer_type = *cast(*NODE_TYPE_POINTER_TYPE_DATA, (*node).data);
 		let inner_type = codegen_get_llvm_type(c, pointer_type.type);
-		if inner_type == cast(*LLVMTypeRef, null) {
-			return cast(*LLVMTypeRef, null);
-		};
+		assert(inner_type != cast(*LLVMTypeRef, null));
 		let r = cast(*LLVMTypeRef, arena_alloc((*c).arena, sizeof(LLVMTypeRef)));
 		*r = LLVMPointerType(*inner_type, 0);
 		return r;
@@ -338,10 +329,7 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 		/* TODO */
 		assert((*v_type).type != NODE_TYPE_FUNCTION_TYPE);
 		let param_type = codegen_get_llvm_type(c, v_type);
-		if param_type == cast(*LLVMTypeRef, null) {
-			printf("LEL4\n");
-			return cast(*Variable, null);
-		};
+		assert(param_type != cast(*LLVMTypeRef, null));
 		if (*v_type).type == NODE_TYPE_FUNCTION_TYPE {
 			(*param_type) = LLVMPointerType(*param_type, 0);
 		};
@@ -376,10 +364,7 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 				};
 			};
 			let llvm_param_type = codegen_get_llvm_type(c, param_type);
-			if llvm_param_type == cast(*LLVMTypeRef, null) {
-				printf("LEL3\n");
-				return cast(*Variable, null);
-			};
+			assert(llvm_param_type != cast(*LLVMTypeRef, null));
 			if (*param_type).type == NODE_TYPE_FUNCTION_TYPE {
                         	(*llvm_param_type) = LLVMPointerType(*llvm_param_type, 0);
 			};
@@ -390,10 +375,7 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 		};
 
 		let retur_type = codegen_get_llvm_type(c, function_definition.retur_type);
-		if retur_type == cast(*LLVMTypeRef, null) {
-			printf("LEL2\n");
-			return cast(*Variable, null);
-		};
+		assert(retur_type != cast(*LLVMTypeRef, null));
 
 		let function_type = LLVMFunctionType(*retur_type, llvm_param_types, i, 0);
 		let function = LLVMAddFunction((*c).llvm_module, name, function_type);
@@ -445,10 +427,7 @@ let codegen_generate_expression_value = (c: *codegen, expression: *Node, name: *
 			v.stack_level = cast(*i64, null);
 			v.node = param_node;
 			v.node_type = param_type;
-let xx =codegen_create_variable(c, v);
-		printf("THERE %s\n", param.name);
-			environment_add_variable((*c).environment, param.name, xx);
-		printf("HERE\n");
+			environment_add_variable((*c).environment, param.name, codegen_create_variable(c, v));
 			parameters_index = parameters_index + 1;
 		};
 
@@ -481,13 +460,9 @@ let xx =codegen_create_variable(c, v);
 	if ((*expression).type == NODE_EQUALITY_EXPRESSION) {
 		let exp = (*(cast(*NODE_EQUALITY_EXPRESSION_DATA, (*expression).data)));
 		let lhs_value = codegen_generate_expression_value(c, exp.lhs, cast(*i8, null));
-		if lhs_value == cast(*Variable, null) {
-			return cast(*Variable, null);
-		};
+		assert(lhs_value != cast(*Variable, null));
 		let rhs_value = codegen_generate_expression_value(c, exp.rhs, cast(*i8, null));
-		if rhs_value == cast(*Variable, null) {
-			return cast(*Variable, null);
-		};
+		assert(rhs_value != cast(*Variable, null));
 
 		/* TODO: compare types */
 		let op = -1;
@@ -530,13 +505,9 @@ let xx =codegen_create_variable(c, v);
 	if ((*expression).type == NODE_ADDITIVE_EXPRESSION) {
 		let exp = (*(cast(*NODE_ADDITIVE_EXPRESSION_DATA, (*expression).data)));
 		let lhs_value = codegen_generate_expression_value(c, exp.lhs, cast(*i8, null));
-		if lhs_value == cast(*Variable, null) {
-			return cast(*Variable, null);
-		};
+		assert(lhs_value != cast(*Variable, null));
 		let rhs_value = codegen_generate_expression_value(c, exp.rhs, cast(*i8, null));
-		if rhs_value == cast(*Variable, null) {
-			return cast(*Variable, null);
-		};
+		assert(rhs_value != cast(*Variable, null));
 
 		/* TODO: Compare types */
 
@@ -577,9 +548,7 @@ let xx =codegen_create_variable(c, v);
 	if ((*expression).type == NODE_UNARY_EXPRESSION) {
 		let exp = (*(cast(*NODE_UNARY_EXPRESSION_DATA, (*expression).data)));
 		let k = codegen_generate_expression_value(c, exp.expression, cast(*i8, null));
-		if k == cast(*Variable, null) {
-			return cast(*Variable, null);
-		};
+		assert(k != cast(*Variable, null));
 
 		let r = cast(LLVMValueRef, null);
 		let typ = (*k).node_type;
@@ -614,9 +583,7 @@ let xx =codegen_create_variable(c, v);
 			let n = (*k).node_type;
 			typ = (*cast(*NODE_TYPE_POINTER_TYPE_DATA, (*n).data)).type;
 			let ptr_type = codegen_get_llvm_type(c, typ);
-			if ptr_type == cast(*LLVMTypeRef, null) {
-				return cast(*Variable, null);
-			};
+			assert(ptr_type != cast(*LLVMTypeRef, null));
                         r = LLVMBuildLoad2((*c).builder, *ptr_type, (*k).value, "");
 		};
 
@@ -632,10 +599,7 @@ let xx =codegen_create_variable(c, v);
 		/* TODO: Check if already exists */
 
 		let function_type = codegen_get_llvm_type(c, expression);
-		if function_type == cast(*LLVMTypeRef, null) {
-			printf("LOL\n");
-			return cast(*Variable, null);
-		};
+		assert(function_type != cast(*LLVMTypeRef, null));
 		let function = LLVMAddFunction((*c).llvm_module, name, *function_type);
 		let v = Variable{};
 		v.value = function;
@@ -750,9 +714,7 @@ let codegen_generate_return_statement = (c: *codegen, stmt: *NODE_RETURN_STATEME
 	};
 
 	let val = codegen_generate_expression_value(c, expression, cast(*i8, null));
-	if val == cast(*Variable, null) {
-		return 1;
-	};
+	assert(val != cast(*Variable, null));
 
 	/* TODO: Check type */
 
@@ -808,10 +770,7 @@ let codegen_generate_function_call_statement = (c: *codegen, statement: *Node) =
 	while i < (*stmt).arguments_len {
 		let argument = (*((*stmt).arguments + cast(**Node, i))); /* TODO */
 		let arg = codegen_generate_expression_value(c, argument, cast(*i8, null));
-		if arg == cast(*Variable, null) {
-			printf("BAD\n");
-			assert(false);
-		};
+		assert(arg != cast(*Variable, null));
 		/* TODO: Typecheck */
 
 		(*(arguments + cast(*LLVMValueRef, i))) = (*arg).value;
@@ -820,10 +779,7 @@ let codegen_generate_function_call_statement = (c: *codegen, statement: *Node) =
 	};
 
 	let function_type = codegen_get_llvm_type(c, (*function).node_type);
-	if function_type == cast(*LLVMTypeRef, null) {
-		printf("FN Type\n");
-		assert(false);
-	};
+	assert(function_type != cast(*LLVMTypeRef, null));
 
 	let res = LLVMBuildCall2((*c).builder, *function_type, (*function).value, arguments, i, "");