ok = js_ReportCompileErrorNumber(cx, ts, NULL,
ok = js_ReportCompileErrorNumber(cx, ts,
FunctionBody(JSContext *cx, JSTokenStream *ts, JSFunction *fun,             JSTreeContext *tc){    JSStackFrame *fp, frame;    JSObject *funobj;    uintN oldflags;    JSParseNode *pn;    fp = cx->fp;    funobj = fun->object;    if (!fp || fp->fun != fun || fp->varobj != funobj ||        fp->scopeChain != funobj) {        memset(&frame, 0, sizeof frame);        frame.fun = fun;        frame.varobj = frame.scopeChain = funobj;        frame.down = fp;        cx->fp = &frame;    }    oldflags = tc->flags;    tc->flags &= ~(TCF_RETURN_EXPR | TCF_RETURN_VOID);    tc->flags |= TCF_IN_FUNCTION;    pn = Statements(cx, ts, tc);    /* Check for falling off the end of a function that returns a value. */    if (pn && JS_HAS_STRICT_OPTION(cx) && (tc->flags & TCF_RETURN_EXPR)) {        if (!CheckFinalReturn(pn)) {            JSBool ok;            if (fun->atom) {                char *name = js_GetStringBytes(ATOM_TO_STRING(fun->atom));                ok = js_ReportCompileErrorNumber(cx, ts, NULL,                                                 JSREPORT_WARNING |                                                 JSREPORT_STRICT,                                                 JSMSG_NO_RETURN_VALUE, name);            } else {                ok = js_ReportCompileErrorNumber(cx, ts, NULL,                                                 JSREPORT_WARNING |                                                 JSREPORT_STRICT,                                                 JSMSG_ANON_NO_RETURN_VALUE);            }            if (!ok)                pn = NULL;        }    }    cx->fp = fp;    tc->flags = oldflags | (tc->flags & TCF_FUN_FLAGS);    return pn;}