&message, &report, charArgs, ap)) return;
&message, &report, &warning, charArgs, ap)) { return JS_FALSE; }
js_ReportErrorNumberVA(JSContext *cx, uintN flags, JSErrorCallback callback,                       void *userRef, const uintN errorNumber,                       JSBool charArgs, va_list ap){    JSStackFrame *fp;    JSErrorReport report;    char *message;    report.messageArgs = NULL;    report.ucmessage = NULL;    message = NULL;    fp = cx->fp;    if (fp && fp->script && fp->pc) {	report.filename = fp->script->filename;	report.lineno = js_PCToLineNumber(fp->script, fp->pc);    } else {        /*  We can't find out where the error was from the current            frame so see if the next frame has a script/pc combo we            could use */        if (fp && fp->down && fp->down->script && fp->down->pc) {	    report.filename = fp->down->script->filename;	    report.lineno = js_PCToLineNumber(fp->down->script, fp->down->pc);        }        else {	    report.filename = NULL;	    report.lineno = 0;        }    }    /* XXX should fetch line somehow */    report.linebuf = NULL;    report.tokenptr = NULL;    report.flags = flags;    report.errorNumber = errorNumber;    /*     * js_ExpandErrorArguments only sometimes fills these in, so we     * initialize them to clear garbage.     */    report.uclinebuf = NULL;    report.uctokenptr = NULL;    report.ucmessage = NULL;    report.messageArgs = NULL;    if (!js_ExpandErrorArguments(cx, callback, userRef, errorNumber,				 &message, &report, charArgs, ap))	return;    /*     * Check the error report, and set a JavaScript-catchable exception     * if the error is defined to have an associated exception.  If an     * exception is thrown, then the JSREPORT_EXCEPTION flag will be set     * on the error report, and exception-aware hosts should ignore it.     * We set the JSREPORT_EXCEPTION flag for the special case of     * user-thrown exeptions.     */    if (errorNumber == JSMSG_UNCAUGHT_EXCEPTION)        report.flags |= JSREPORT_EXCEPTION;#if JS_HAS_ERROR_EXCEPTIONS    /*     * Only call the error reporter if an exception wasn't raised.     *     * If an exception was raised, then we call the debugErrorHook     * (if present) to give it a chance to see the error before it     * propigates out of scope. This is needed for compatability with     * the old scheme.     */    if (!js_ErrorToException(cx, message, &report))        js_ReportErrorAgain(cx, message, &report);    else if (cx->runtime->debugErrorHook && cx->errorReporter) {        JSDebugErrorHook hook = cx->runtime->debugErrorHook;        /* test local in case debugErrorHook changed on another thread */        if (hook)            hook(cx, message, &report, cx->runtime->debugErrorHookData);    }#else    js_ReportErrorAgain(cx, message, &report);#endif    if (message)	JS_free(cx, message);    if (report.messageArgs) {        int i = 0;        while (report.messageArgs[i])            JS_free(cx, (void *)report.messageArgs[i++]);        JS_free(cx, (void *)report.messageArgs);    }    if (report.ucmessage)        JS_free(cx, (void *)report.ucmessage);}