コード例 #1
0
ファイル: ext_std_variable.cpp プロジェクト: vlajos/hhvm
static const Func* arGetContextFunc(const ActRec* ar) {
  if (ar == nullptr) {
    return nullptr;
  }
  if (ar->m_func->isPseudoMain() || ar->m_func->isBuiltin()) {
    // Pseudomains inherit the context of their caller
    auto const context = g_context.getNoCheck();
    ar = context->getPrevVMStateUNSAFE(ar);
    while (ar != nullptr &&
             (ar->m_func->isPseudoMain() || ar->m_func->isBuiltin())) {
      ar = context->getPrevVMStateUNSAFE(ar);
    }
    if (ar == nullptr) {
      return nullptr;
    }
  }
  return ar->m_func;
}
コード例 #2
0
ファイル: debugger_proxy.cpp プロジェクト: Debug-Orz/hhvm
int DebuggerProxy::getRealStackDepth() {
  TRACE(2, "DebuggerProxy::getRealStackDepth\n");
  int depth = 0;
  auto const context = g_context.getNoCheck();
  auto fp = vmfp();
  if (!fp) return 0;

  while (fp != nullptr) {
    fp = context->getPrevVMStateUNSAFE(fp, nullptr, nullptr);
    depth++;
  }
  return depth;
}