virtual void visitBlockNode(BlockNode* node) { _output << " {" << endl; blockEnter(); insideBlock(node); blockExit(); indent(); _output << "}"; }
void Parser::forStat() { consume(TK_for); syms->enterBlock(false); CERR(TOKEN != TK_NAME, E_FOR_NAME, VNIL); Value name = lexer->info.name; int slot = syms->localsTop(); advance(); consume(':'+TK_EQUAL); patchOrEmitMove(slot+2, slot+2, expr(slot+2)); consume(':'); patchOrEmitMove(slot+3, slot+1, expr(slot+3)); int pos1 = emitHole(); int pos2 = HERE; syms->set(name, slot); syms->addLocalsTop(2); insideBlock(); emitJump(HERE, LOOP, VAL_REG(slot), pos2); emitJump(pos1, FOR, VAL_REG(slot), HERE); syms->exitBlock(false); }
bool Parser::block() { syms->enterBlock(false); bool ret = insideBlock(); syms->exitBlock(false); return ret; }