Bug 757551 - Remove JS_ConstructObject{,WithArguments}. r=dmandelin

This commit is contained in:
Jeff Walden 2012-05-21 16:32:18 -07:00
Родитель 06b8304367
Коммит 8687a19277
3 изменённых файлов: 40 добавлений и 60 удалений

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

@ -3440,49 +3440,6 @@ JS_DeepFreezeObject(JSContext *cx, JSObject *obj)
return true;
}
JS_PUBLIC_API(JSObject *)
JS_ConstructObject(JSContext *cx, JSClass *jsclasp, JSObject *parent)
{
return JS_ConstructObjectWithArguments(cx, jsclasp, parent, 0, NULL);
}
JS_PUBLIC_API(JSObject *)
JS_ConstructObjectWithArguments(JSContext *cx, JSClass *jsclasp, JSObject *parent,
unsigned argc, jsval *argv)
{
AssertNoGC(cx);
CHECK_REQUEST(cx);
assertSameCompartment(cx, parent, JSValueArray(argv, argc));
AutoArrayRooter argtvr(cx, argc, argv);
Class *clasp = Valueify(jsclasp);
if (!clasp)
clasp = &ObjectClass; /* default class is Object */
JSProtoKey protoKey = GetClassProtoKey(clasp);
/* Protect constructor in case a crazy getter for .prototype uproots it. */
RootedValue value(cx);
if (!js_FindClassObject(cx, parent, protoKey, value.address(), clasp))
return NULL;
Value rval;
if (!InvokeConstructor(cx, value, argc, argv, &rval))
return NULL;
/*
* If the instance's class differs from what was requested, throw a type
* error.
*/
if (!rval.isObject() || rval.toObject().getClass() != clasp) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
JSMSG_WRONG_CONSTRUCTOR, clasp->name);
return NULL;
}
return &rval.toObject();
}
static JSBool
LookupPropertyById(JSContext *cx, JSObject *obj, HandleId id, unsigned flags,
JSObject **objp, JSProperty **propp)

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

@ -3975,13 +3975,6 @@ JS_DeepFreezeObject(JSContext *cx, JSObject *obj);
extern JS_PUBLIC_API(JSBool)
JS_FreezeObject(JSContext *cx, JSObject *obj);
extern JS_PUBLIC_API(JSObject *)
JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *parent);
extern JS_PUBLIC_API(JSObject *)
JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *parent,
unsigned argc, jsval *argv);
extern JS_PUBLIC_API(JSObject *)
JS_New(JSContext *cx, JSObject *ctor, unsigned argc, jsval *argv);

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

@ -491,6 +491,37 @@ NewXMLAttributeName(JSContext *cx, JSLinearString *uri, JSLinearString *prefix,
return obj;
}
static JSObject *
ConstructObjectWithArguments(JSContext *cx, Class *clasp, JSObject *parent,
unsigned argc, jsval *argv)
{
assertSameCompartment(cx, parent, JSValueArray(argv, argc));
AutoArrayRooter argtvr(cx, argc, argv);
JSProtoKey protoKey = GetClassProtoKey(clasp);
/* Protect constructor in case a crazy getter for .prototype uproots it. */
RootedValue value(cx);
if (!js_FindClassObject(cx, parent, protoKey, value.address(), clasp))
return NULL;
Value rval;
if (!InvokeConstructor(cx, value, argc, argv, &rval))
return NULL;
/*
* If the instance's class differs from what was requested, throw a type
* error.
*/
if (!rval.isObject() || rval.toObject().getClass() != clasp) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
JSMSG_WRONG_CONSTRUCTOR, clasp->name);
return NULL;
}
return &rval.toObject();
}
JSObject *
js_ConstructXMLQNameObject(JSContext *cx, const Value &nsval, const Value &lnval)
{
@ -508,7 +539,7 @@ js_ConstructXMLQNameObject(JSContext *cx, const Value &nsval, const Value &lnval
argv[0] = nsval;
}
argv[1] = lnval;
return JS_ConstructObjectWithArguments(cx, Jsvalify(&QNameClass), NULL, 2, argv);
return ConstructObjectWithArguments(cx, &QNameClass, NULL, 2, argv);
}
static JSBool
@ -2250,7 +2281,7 @@ GetNamespace(JSContext *cx, JSObject *qn, const JSXMLArray<JSObject> *inScopeNSe
if (!match) {
argv[0] = prefix ? STRING_TO_JSVAL(prefix) : JSVAL_VOID;
argv[1] = STRING_TO_JSVAL(uri);
ns = JS_ConstructObjectWithArguments(cx, Jsvalify(&NamespaceClass), NULL, 2, argv);
ns = ConstructObjectWithArguments(cx, &NamespaceClass, NULL, 2, argv);
if (!ns)
return NULL;
match = ns;
@ -2929,7 +2960,7 @@ ToXMLName(JSContext *cx, jsval v, jsid *funidp)
construct:
v = STRING_TO_JSVAL(name);
obj = JS_ConstructObjectWithArguments(cx, Jsvalify(&QNameClass), NULL, 1, &v);
obj = ConstructObjectWithArguments(cx, &QNameClass, NULL, 1, &v);
if (!obj)
return NULL;
@ -6713,7 +6744,7 @@ xml_setName(JSContext *cx, unsigned argc, jsval *vp)
}
}
nameqn = JS_ConstructObjectWithArguments(cx, Jsvalify(&QNameClass), NULL, 1, &name);
nameqn = ConstructObjectWithArguments(cx, &QNameClass, NULL, 1, &name);
if (!nameqn)
return JS_FALSE;
@ -6818,8 +6849,7 @@ xml_setNamespace(JSContext *cx, unsigned argc, jsval *vp)
if (!JSXML_HAS_NAME(xml))
return JS_TRUE;
ns = JS_ConstructObjectWithArguments(cx, Jsvalify(&NamespaceClass), NULL,
argc == 0 ? 0 : 1, vp + 2);
ns = ConstructObjectWithArguments(cx, &NamespaceClass, NULL, argc == 0 ? 0 : 1, vp + 2);
if (!ns)
return JS_FALSE;
vp[0] = OBJECT_TO_JSVAL(ns);
@ -6827,7 +6857,7 @@ xml_setNamespace(JSContext *cx, unsigned argc, jsval *vp)
qnargv[0] = OBJECT_TO_JSVAL(ns);
qnargv[1] = OBJECT_TO_JSVAL(xml->name);
qn = JS_ConstructObjectWithArguments(cx, Jsvalify(&QNameClass), NULL, 2, qnargv);
qn = ConstructObjectWithArguments(cx, &QNameClass, NULL, 2, qnargv);
if (!qn)
return JS_FALSE;
@ -7569,7 +7599,7 @@ js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp)
obj = tmp;
}
ns = JS_ConstructObjectWithArguments(cx, Jsvalify(&NamespaceClass), NULL, 0, NULL);
ns = ConstructObjectWithArguments(cx, &NamespaceClass, NULL, 0, NULL);
if (!ns)
return JS_FALSE;
v = OBJECT_TO_JSVAL(ns);
@ -7587,7 +7617,7 @@ js_SetDefaultXMLNamespace(JSContext *cx, const Value &v)
Value argv[2];
argv[0].setString(cx->runtime->emptyString);
argv[1] = v;
JSObject *ns = JS_ConstructObjectWithArguments(cx, Jsvalify(&NamespaceClass), NULL, 2, argv);
JSObject *ns = ConstructObjectWithArguments(cx, &NamespaceClass, NULL, 2, argv);
if (!ns)
return JS_FALSE;
@ -7705,7 +7735,7 @@ js_FindXMLProperty(JSContext *cx, const Value &nameval, JSObject **objp, jsid *i
nameobj = &nameval.toObject();
if (nameobj->getClass() == &AnyNameClass) {
v = STRING_TO_JSVAL(cx->runtime->atomState.starAtom);
nameobj = JS_ConstructObjectWithArguments(cx, Jsvalify(&QNameClass), NULL, 1, &v);
nameobj = ConstructObjectWithArguments(cx, &QNameClass, NULL, 1, &v);
if (!nameobj)
return JS_FALSE;
} else {