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); }
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; }