* between the two.
* between toplevel compilation and other types.
js_ReportCompileErrorNumber(JSContext *cx, JSTokenStream *ts, uintN flags,                      const uintN errorNumber, ...){    va_list ap;    jschar *limit, lastc;    JSErrorReporter onError;    JSErrorReport report;    JSString *linestr;    char *message;    report.errorNumber = errorNumber;    report.messageArgs = NULL;    report.ucmessage = NULL;    message = NULL;    va_start(ap, errorNumber);    if (!js_ExpandErrorArguments(cx, NULL, errorNumber, &message, &report, ap))        return;    va_end(ap);    PR_ASSERT(ts->linebuf.limit < ts->linebuf.base + JS_LINE_LIMIT);    limit = ts->linebuf.limit;    lastc = limit[-1];    if (lastc == '\n')	limit[-1] = 0;    onError = cx->errorReporter;    if (onError) {	report.filename = ts->filename;	report.lineno = ts->lineno;	linestr = js_NewStringCopyZ(cx, ts->linebuf.base, 0);	report.linebuf  = linestr			  ? JS_GetStringBytes(linestr)			  : NULL;	report.tokenptr = linestr			  ? report.linebuf + (ts->token.ptr - ts->linebuf.base)			  : NULL;	report.uclinebuf = ts->linebuf.base;	report.uctokenptr = ts->token.ptr;        report.flags = flags;        /*         * If there's a runtime exception type associated with this error         * number, set that as the pending exception.  For errors occuring at         * compile time, this is very likely to be a JSEXN_SYNTAXERR.  If an         * exception is thrown, then the JSREPORT_EXCEPTION flag will be set in         * report.flags.  Proper behavior for error reporters is probably to         * ignore this for all but toplevel compilation errors.         * XXXmccabe it's still at issue if there's a public API to distinguish         * between the two.         * XXX it'd probably be best if there was only one call to this         * function, but there seem to be two error reporter call points.         */        (void)js_ErrorToException(cx, &report);	(*onError)(cx, message, &report);#if !defined XP_PC || !defined _MSC_VER || _MSC_VER > 800    } else {	if (!(ts->flags & TSF_INTERACTIVE))	    fprintf(stderr, "JavaScript %s: ",                    JSREPORT_IS_WARNING(flags) ? "warning" : "error");	if (ts->filename)	    fprintf(stderr, "%s, ", ts->filename);	if (ts->lineno)	    fprintf(stderr, "line %u: ", ts->lineno);	fprintf(stderr, "%s:\n%s\n",message,                js_DeflateString(cx, ts->linebuf.base,                                 ts->linebuf.limit - ts->linebuf.base));        #endif    }    if (lastc == '\n')	limit[-1] = lastc;    if (message) free(message);    if (report.messageArgs) free(report.messageArgs);}