Implemented scopes

This commit is contained in:
2024-10-27 13:44:09 +11:00
parent d22b18ed17
commit c5206daaea
10 changed files with 90 additions and 9 deletions

View File

@@ -410,8 +410,22 @@ static void writeRoutineCode(Toy_Routine** rt, Toy_Ast* ast) {
//determine how to write each instruction based on the Ast
switch(ast->type) {
case TOY_AST_BLOCK:
if (ast->block.innerScope) {
EMIT_BYTE(rt, code, TOY_OPCODE_SCOPE_PUSH);
EMIT_BYTE(rt, code, 0);
EMIT_BYTE(rt, code, 0);
EMIT_BYTE(rt, code, 0);
}
writeRoutineCode(rt, ast->block.child);
writeRoutineCode(rt, ast->block.next);
if (ast->block.innerScope) {
EMIT_BYTE(rt, code, TOY_OPCODE_SCOPE_POP);
EMIT_BYTE(rt, code, 0);
EMIT_BYTE(rt, code, 0);
EMIT_BYTE(rt, code, 0);
}
break;
case TOY_AST_VALUE: