コード例 #1
0
ファイル: class_scope.cpp プロジェクト: orok/hhvm
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
  }
}
コード例 #2
0
ファイル: construct.cpp プロジェクト: andyanx/hhvm
 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;
 }