diff --git a/source/toy_compiler.c b/source/toy_compiler.c index cdcf53d..39667cc 100644 --- a/source/toy_compiler.c +++ b/source/toy_compiler.c @@ -763,6 +763,19 @@ static unsigned int writeInstructionForThen(Toy_Bytecode** mb, Toy_AstForThen as emitString(mb, ast.condBranch->iterable.left->varDeclare.name); + //BUGFIX: shadow the iterable's name + EMIT_BYTE(mb, code, TOY_OPCODE_READ); + EMIT_BYTE(mb, code, TOY_VALUE_NULL); + EMIT_BYTE(mb, code, 0); + EMIT_BYTE(mb, code, 0); + + EMIT_BYTE(mb, code, TOY_OPCODE_DECLARE); + EMIT_BYTE(mb, code, TOY_VALUE_NULL); + EMIT_BYTE(mb, code, TOY_VALUE_AS_STRING(ast.condBranch->iterable.right->varAccess.child->value.value)->info.length); + EMIT_BYTE(mb, code, true); //check for constness + + emitString(mb, TOY_VALUE_AS_STRING(ast.condBranch->iterable.right->varAccess.child->value.value)); + //write the body writeBytecodeFromAst(mb, ast.thenBranch); diff --git a/source/toy_vm.c b/source/toy_vm.c index d8c3edc..7f1d6f1 100644 --- a/source/toy_vm.c +++ b/source/toy_vm.c @@ -482,6 +482,7 @@ static void processEliminate(Toy_VM* vm) { } static void processIterate(Toy_VM* vm) { + //URGENT: finish this //ITERATE on [-2] based on type, with [-1] as counter //then delegate to processJump