void ClassScope::informClosuresAboutScopeClone( ConstructPtr root, FunctionScopePtr outerScope, AnalysisResultPtr ar) { if (!root) { return; } for (int i = 0; i < root->getKidCount(); i++) { ConstructPtr cons = root->getNthKid(i); ClosureExpressionPtr closure = dynamic_pointer_cast<ClosureExpression>(cons); if (!closure) { informClosuresAboutScopeClone(cons, outerScope, ar); continue; } FunctionStatementPtr func = closure->getClosureFunction(); HPHP::FunctionScopePtr funcScope = func->getFunctionScope(); assert(funcScope->isClosure()); funcScope->addClonedTraitOuterScope(outerScope); // Don't need to recurse } }
int after(ConstructRawPtr cp) { if (m_showEnds) { int s = m_spc; while (s > 0) { int n = s > 10 ? 10 : s; std::cout << (" "+10-n); s -= n; } std::cout << "<<"; cp->dumpNode(0, m_ar); } m_spc -= 2; // HACK: dump the closure function as a "child" of the // closure expression ClosureExpressionPtr c = dynamic_pointer_cast<ClosureExpression>(cp); if (c) { c->getClosureFunction()->dump(m_spc, m_ar); } return WalkContinue; }