get functions to use a new register assignment, since they get new registers now

This commit is contained in:
William Bell
2025-09-02 22:31:01 +01:00
parent c2e0cdc6d6
commit df040adf45
3 changed files with 8 additions and 4 deletions

View File

@@ -1,3 +1,4 @@
let f(i) = do let i = 1000000
while (i) i=i-1 while (i) do
f(1e6) i=i-1
term.log(add)

2
app.py
View File

@@ -1,4 +1,4 @@
i = 10000000 i = 1_000_000
while i: while i:
print(i) print(i)
i=i-1 i=i-1

View File

@@ -14,6 +14,8 @@
size_t translate_parsed_function(Translated *translated, size_t translate_parsed_function(Translated *translated,
ParsedFunction *parsedFunction, ArErr *err) { ParsedFunction *parsedFunction, ArErr *err) {
DArray main_bytecode = translated->bytecode; DArray main_bytecode = translated->bytecode;
uint8_t old_assignment = translated->registerAssignment;
translated->registerAssignment = 1;
darray_init(&translated->bytecode, sizeof(uint8_t)); darray_init(&translated->bytecode, sizeof(uint8_t));
set_registers(translated, 1); set_registers(translated, 1);
translate_parsed(translated, parsedFunction->body, err); translate_parsed(translated, parsedFunction->body, err);
@@ -23,6 +25,7 @@ size_t translate_parsed_function(Translated *translated,
size_t function_bytecode_length = translated->bytecode.size; size_t function_bytecode_length = translated->bytecode.size;
darray_free(&translated->bytecode, NULL); darray_free(&translated->bytecode, NULL);
translated->bytecode = main_bytecode; translated->bytecode = main_bytecode;
translated->registerAssignment = old_assignment;
size_t start = push_instruction_byte(translated, OP_LOAD_FUNCTION); size_t start = push_instruction_byte(translated, OP_LOAD_FUNCTION);
size_t offset = arena_push(&translated->constants, parsedFunction->name, size_t offset = arena_push(&translated->constants, parsedFunction->name,
strlen(parsedFunction->name)); strlen(parsedFunction->name));