Example #1
0
void ByteCodeVisitor::initLocals(BlockNode *blockNode) {
    if (blockNode == 0) return;
    initVars(blockNode->scope());
    for (uint32_t i = 0; i < blockNode->nodes(); ++i) {
        AstNode *n = blockNode->nodeAt(i);
        if (n->isBlockNode()) {
            initLocals(blockNode);
        } else if (n->isIfNode()) {
            IfNode *ifNode = n->asIfNode();
            initLocals(ifNode->thenBlock());
            initLocals(ifNode->elseBlock());
        } else if (n->isWhileNode()) {
            WhileNode *whileNode = n->asWhileNode();
            initLocals(whileNode->loopBlock());
        } else if (n->isForNode()) {
            ForNode *forNode = n->asForNode();
            initLocals(forNode->body());
        }
    }
    initChildFunctions(blockNode->scope());
}