bool
frontend::AnalyzeFunctions(Parser *parser, StackFrame *callerFrame)
{
    TreeContext *tc = parser->tc;
    SharedContext *sc = tc->sc;
    if (!tc->functionList)
        return true;
    if (!MarkExtensibleScopeDescendants(sc->context, tc->functionList, false))
        return false;
    bool isDirectEval = !!callerFrame;
    bool isHeavyweight = false;
    SetFunctionKinds(tc->functionList, &isHeavyweight, sc->inFunction(), isDirectEval);
    if (isHeavyweight)
        sc->setFunIsHeavyweight();
    return true;
}