コード例 #1
0
ファイル: analyze.cpp プロジェクト: Debug-Orz/hhvm
FuncAnalysis do_analyze(const Index& index,
                        Context const ctx,
                        ClassAnalysis* clsAnalysis,
                        const std::vector<Type>* knownArgs) {
  CollectedInfo collect { index, ctx, clsAnalysis, nullptr };
  return do_analyze_collect(index, ctx, collect, clsAnalysis, knownArgs);
}
コード例 #2
0
ファイル: analyze.cpp プロジェクト: simonwelsh/hhvm
FuncAnalysis do_analyze(const Index& index,
                        Context const inputCtx,
                        ClassAnalysis* clsAnalysis,
                        const std::vector<Type>* knownArgs,
                        CollectionOpts opts) {
  auto const ctx = adjust_closure_context(inputCtx);
  CollectedInfo collect {
    index, ctx, clsAnalysis, nullptr, opts
  };

  auto ret = do_analyze_collect(index, ctx, collect, clsAnalysis, knownArgs);
  if (ctx.func->name == s_86cinit.get() && !knownArgs) {
    // We need to try to resolve any dynamic constants
    size_t idx = 0;
    for (auto const& c : ctx.cls->constants) {
      if (c.val && c.val->m_type == KindOfUninit) {
        auto const fa = analyze_func_inline(index, ctx, { sval(c.name) });
        if (auto const val = tv(fa.inferredReturn)) {
          ret.resolvedConstants.emplace_back(idx, *val);
        }
      }
      ++idx;
    }
  }
  return ret;
}