diff options
| author | Baitinq <[email protected]> | 2025-07-14 21:11:56 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-07-14 21:11:56 +0200 |
| commit | 631520a21c9b8a4e7febaae47f740dd1110b4731 (patch) | |
| tree | 770fdeb4476466bb4ddc5a3fe68948307e04b545 | |
| parent | Boostrap: Support codegen for simple type (diff) | |
| download | pry-lang-631520a21c9b8a4e7febaae47f740dd1110b4731.tar.gz pry-lang-631520a21c9b8a4e7febaae47f740dd1110b4731.tar.bz2 pry-lang-631520a21c9b8a4e7febaae47f740dd1110b4731.zip | |
Boostrap: Improvements
| -rw-r--r-- | src/bootstrap/codegen.pry | 19 | ||||
| -rw-r--r-- | src/bootstrap/main.pry | 2 | ||||
| -rw-r--r-- | src/bootstrap/parser.pry | 2 | ||||
| -rw-r--r-- | src/bootstrap/tokenizer.pry | 2 |
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 { |