Construct error objects to consolidate their default property setting; this entails adding JS_ConstructObjectWithArguments (123177, r=rginda, sr=shaver).

This commit is contained in:
brendan%mozilla.org 2002-02-14 07:25:34 +00:00
Родитель 9b86156535
Коммит aba15fbd2d
7 изменённых файлов: 46 добавлений и 43 удалений

Просмотреть файл

@ -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);