diff options
| author | Baitinq <[email protected]> | 2025-06-28 00:17:18 +0200 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-06-28 00:17:18 +0200 |
| commit | af150fb67db0d694b9d9bfd1e1796f0e671441b8 (patch) | |
| tree | b30db72360c24cc86189ab5788411a271de7b10f | |
| parent | Bootstrap: Parser: Parse function calls (diff) | |
| download | pry-lang-af150fb67db0d694b9d9bfd1e1796f0e671441b8.tar.gz pry-lang-af150fb67db0d694b9d9bfd1e1796f0e671441b8.tar.bz2 pry-lang-af150fb67db0d694b9d9bfd1e1796f0e671441b8.zip | |
Bootstrap: Codegen: start working on function calls
| -rw-r--r-- | examples/-1.pry | 5 | ||||
| -rw-r--r-- | src/bootstrap/codegen.pry | 24 |
2 files changed, 28 insertions, 1 deletions
diff --git a/examples/-1.pry b/examples/-1.pry index 5093a7e..03bac03 100644 --- a/examples/-1.pry +++ b/examples/-1.pry @@ -1,8 +1,11 @@ /* HELLO! Welcome to the unnamed language */ -extern printf = (*i8, varargs) => void; +let putchar = () => i64 { + return 0; +}; let main = () => i64 { + putchar(); return 7; }; diff --git a/src/bootstrap/codegen.pry b/src/bootstrap/codegen.pry index 3a809fe..d02baa5 100644 --- a/src/bootstrap/codegen.pry +++ b/src/bootstrap/codegen.pry @@ -35,6 +35,16 @@ let environment_drop_scope = (e: *Environment) => void { return; }; +/* TODO: */ +let environment_add_variale = (e: *Environment, name: *i8, variable: *Variable) => void { + return; +}; + +/* TODO: */ +let environment_set_variale = (e: *Environment, name: *i8, varbiable: *Variable) => void { + return; +}; + 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)); @@ -340,6 +350,9 @@ let codegen_generate_assignment_statement = (c: *codegen, stmt: *NODE_ASSIGNMENT printf("XX %s\n", identifier); let variable = codegen_generate_expression_value(c, prhs, identifier); assert(variable != cast(*Variable, null)); + + /* TODO IMPORTANT: Add variable to variables */ + return 0; }; @@ -372,6 +385,13 @@ let codegen_generate_return_statement = (c: *codegen, stmt: *NODE_RETURN_STATEME return 0; }; +let codegen_generate_function_call_statement = (c: *codegen, stmt: *NODE_FUNCTION_CALL_STATEMENT_DATA) => i64 { + printf("LELELEL\n"); + assert(false); + + return 0; +}; + let codegen_generate_statement = (c: *codegen, statement: *Node) => i64 { let stmt = *statement; @@ -382,6 +402,10 @@ let codegen_generate_statement = (c: *codegen, statement: *Node) => i64 { if stmt.type == NODE_RETURN_STATEMENT { return codegen_generate_return_statement(c, cast(*NODE_RETURN_STATEMENT_DATA, stmt.data)); }; + + if stmt.type == NODE_FUNCTION_CALL_STATEMENT { + return codegen_generate_function_call_statement(c, cast(*NODE_FUNCTION_CALL_STATEMENT_DATA, stmt.data)); + }; printf("ASSERT 3 %d\n", stmt.type); assert(false); |