зеркало из https://github.com/mozilla/gecko-dev.git
Construct error objects to consolidate their default property setting; this entails adding JS_ConstructObjectWithArguments (123177, r=rginda, sr=shaver).
This commit is contained in:
Родитель
9b86156535
Коммит
aba15fbd2d
|
@ -2000,7 +2000,17 @@ JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto,
|
|||
CHECK_REQUEST(cx);
|
||||
if (!clasp)
|
||||
clasp = &js_ObjectClass; /* default class is Object */
|
||||
return js_ConstructObject(cx, clasp, proto, parent);
|
||||
return js_ConstructObject(cx, clasp, proto, parent, 0, NULL);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *proto,
|
||||
JSObject *parent, uintN argc, jsval *argv)
|
||||
{
|
||||
CHECK_REQUEST(cx);
|
||||
if (!clasp)
|
||||
clasp = &js_ObjectClass; /* default class is Object */
|
||||
return js_ConstructObject(cx, clasp, proto, parent, argc, argv);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
|
|
|
@ -878,6 +878,10 @@ extern JS_PUBLIC_API(JSObject *)
|
|||
JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto,
|
||||
JSObject *parent);
|
||||
|
||||
extern JS_PUBLIC_API(JSObject *)
|
||||
JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *proto,
|
||||
JSObject *parent, uintN argc, jsval *argv);
|
||||
|
||||
extern JS_PUBLIC_API(JSObject *)
|
||||
JS_DefineObject(JSContext *cx, JSObject *obj, const char *name, JSClass *clasp,
|
||||
JSObject *proto, uintN attrs);
|
||||
|
|
|
@ -408,6 +408,12 @@ Exception(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|||
older = JS_SetErrorReporter(cx, NULL);
|
||||
state = JS_SaveExceptionState(cx);
|
||||
}
|
||||
#ifdef __GNUC__ /* suppress bogus gcc warnings */
|
||||
else {
|
||||
older = NULL;
|
||||
state = NULL;
|
||||
}
|
||||
#endif
|
||||
callerid = ATOM_KEY(cx->runtime->atomState.callerAtom);
|
||||
|
||||
JS_ASSERT(cx->fp);
|
||||
|
@ -765,10 +771,12 @@ JSBool
|
|||
js_ErrorToException(JSContext *cx, const char *message, JSErrorReport *reportp)
|
||||
{
|
||||
JSErrNum errorNumber;
|
||||
JSObject *errObject, *errProto;
|
||||
JSExnType exn;
|
||||
JSObject *errObject, *errProto;
|
||||
uintN argc;
|
||||
jsval *argv;
|
||||
void *mark;
|
||||
JSExnPrivate *privateData;
|
||||
JSString *msgstr, *fnamestr;
|
||||
|
||||
/* Find the exception index associated with this error. */
|
||||
JS_ASSERT(reportp);
|
||||
|
@ -822,44 +830,25 @@ js_ErrorToException(JSContext *cx, const char *message, JSErrorReport *reportp)
|
|||
}
|
||||
|
||||
/*
|
||||
* Use js_NewObject instead of js_ConstructObject, because
|
||||
* js_ConstructObject seems to require a frame.
|
||||
* Use js_ConstructObject to compute the stack property and any other
|
||||
* default properties or private data.
|
||||
*/
|
||||
errObject = js_NewObject(cx, &ExceptionClass, errProto, NULL);
|
||||
if (reportp) {
|
||||
argv = JS_PushArguments(cx, &mark, "ssu",
|
||||
message, reportp->filename, reportp->lineno);
|
||||
argc = 3;
|
||||
} else {
|
||||
argv = JS_PushArguments(cx, &mark, "s", message);
|
||||
argc = 1;
|
||||
}
|
||||
if (!argv)
|
||||
return JS_FALSE;
|
||||
errObject = js_ConstructObject(cx, &ExceptionClass, errProto, NULL,
|
||||
argc, argv);
|
||||
JS_PopArguments(cx, mark);
|
||||
if (!errObject)
|
||||
return JS_FALSE;
|
||||
|
||||
/* Store 'message' as a javascript-visible value. */
|
||||
msgstr = JS_NewStringCopyZ(cx, message);
|
||||
if (!msgstr)
|
||||
return JS_FALSE;
|
||||
if (!JS_DefineProperty(cx, errObject, js_message_str,
|
||||
STRING_TO_JSVAL(msgstr), NULL, NULL,
|
||||
JSPROP_ENUMERATE)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
if (reportp) {
|
||||
if (reportp->filename) {
|
||||
fnamestr = JS_NewStringCopyZ(cx, reportp->filename);
|
||||
if (!fnamestr)
|
||||
return JS_FALSE;
|
||||
/* Store 'filename' as a javascript-visible value. */
|
||||
if (!JS_DefineProperty(cx, errObject, js_filename_str,
|
||||
STRING_TO_JSVAL(fnamestr), NULL, NULL,
|
||||
JSPROP_ENUMERATE)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
/* Store 'lineno' as a javascript-visible value. */
|
||||
if (!JS_DefineProperty(cx, errObject, js_lineno_str,
|
||||
INT_TO_JSVAL((int)reportp->lineno), NULL,
|
||||
NULL, JSPROP_ENUMERATE)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Construct a new copy of the error report, and store it in the
|
||||
* exception objects' private data. We can't use the error report
|
||||
|
|
|
@ -3451,7 +3451,7 @@ js_Interpret(JSContext *cx, jsval *result)
|
|||
*/
|
||||
SAVE_SP(fp);
|
||||
parent = js_ConstructObject(cx, &js_ObjectClass, NULL,
|
||||
fp->scopeChain);
|
||||
fp->scopeChain, 0, NULL);
|
||||
if (!parent) {
|
||||
ok = JS_FALSE;
|
||||
goto out;
|
||||
|
|
|
@ -1725,7 +1725,7 @@ FindConstructor(JSContext *cx, JSObject *scope, const char *name, jsval *vp)
|
|||
|
||||
JSObject *
|
||||
js_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto,
|
||||
JSObject *parent)
|
||||
JSObject *parent, uintN argc, jsval *argv)
|
||||
{
|
||||
jsval cval, rval;
|
||||
JSObject *obj, *ctor;
|
||||
|
@ -1754,7 +1754,7 @@ js_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto,
|
|||
if (!obj)
|
||||
return NULL;
|
||||
|
||||
if (!js_InternalConstruct(cx, obj, cval, 0, NULL, &rval))
|
||||
if (!js_InternalConstruct(cx, obj, cval, argc, argv, &rval))
|
||||
goto bad;
|
||||
return JSVAL_IS_OBJECT(rval) ? JSVAL_TO_OBJECT(rval) : obj;
|
||||
bad:
|
||||
|
|
|
@ -292,7 +292,7 @@ js_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent);
|
|||
|
||||
extern JSObject *
|
||||
js_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto,
|
||||
JSObject *parent);
|
||||
JSObject *parent, uintN argc, jsval *argv);
|
||||
|
||||
extern void
|
||||
js_FinalizeObject(JSContext *cx, JSObject *obj);
|
||||
|
|
|
@ -1136,7 +1136,7 @@ match_glob(JSContext *cx, jsint count, GlobData *data)
|
|||
mdata = (MatchData *)data;
|
||||
arrayobj = mdata->arrayobj;
|
||||
if (!arrayobj) {
|
||||
arrayobj = js_ConstructObject(cx, &js_ArrayClass, NULL, NULL);
|
||||
arrayobj = js_ConstructObject(cx, &js_ArrayClass, NULL, NULL, 0, NULL);
|
||||
if (!arrayobj)
|
||||
return JS_FALSE;
|
||||
mdata->arrayobj = arrayobj;
|
||||
|
@ -1758,7 +1758,7 @@ str_split(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
|||
return JS_FALSE;
|
||||
argv[-1] = STRING_TO_JSVAL(str);
|
||||
|
||||
arrayobj = js_ConstructObject(cx, &js_ArrayClass, NULL, NULL);
|
||||
arrayobj = js_ConstructObject(cx, &js_ArrayClass, NULL, NULL, 0, NULL);
|
||||
if (!arrayobj)
|
||||
return JS_FALSE;
|
||||
*rval = OBJECT_TO_JSVAL(arrayobj);
|
||||
|
|
Загрузка…
Ссылка в новой задаче