Bug 839376 (part 5) - Make ObjectClassIs take a HandleObject. r=sfink.

--HG--
extra : rebase_source : 2a2f9863a2e2ef2419e28a9167cde8a255003cd0
This commit is contained in:
Nicholas Nethercote 2013-02-11 21:01:45 -08:00
parent 17eaab9c51
commit d61924d4cc
6 changed files with 24 additions and 24 deletions

View File

@ -4671,7 +4671,7 @@ JS_IsArrayObject(JSContext *cx, JSObject *objArg)
{
RootedObject obj(cx, objArg);
assertSameCompartment(cx, obj);
return ObjectClassIs(*obj, ESClass_Array, cx);
return ObjectClassIs(obj, ESClass_Array, cx);
}
JS_PUBLIC_API(JSBool)

View File

@ -2052,7 +2052,7 @@ js::array_concat(JSContext *cx, unsigned argc, Value *vp)
HandleValue v = HandleValue::fromMarkedLocation(&p[i]);
if (v.isObject()) {
RootedObject obj(cx, &v.toObject());
if (ObjectClassIs(*obj, ESClass_Array, cx)) {
if (ObjectClassIs(obj, ESClass_Array, cx)) {
uint32_t alength;
if (!GetLengthProperty(cx, obj, &alength))
return false;

View File

@ -1769,18 +1769,18 @@ DefineConstructorAndPrototype(JSContext *cx, Handle<GlobalObject*> global,
}
inline bool
ObjectClassIs(JSObject &obj, ESClassValue classValue, JSContext *cx)
ObjectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx)
{
if (JS_UNLIKELY(obj.isProxy()))
return Proxy::objectClassIs(&obj, classValue, cx);
if (JS_UNLIKELY(obj->isProxy()))
return Proxy::objectClassIs(obj, classValue, cx);
switch (classValue) {
case ESClass_Array: return obj.isArray();
case ESClass_Number: return obj.isNumber();
case ESClass_String: return obj.isString();
case ESClass_Boolean: return obj.isBoolean();
case ESClass_RegExp: return obj.isRegExp();
case ESClass_ArrayBuffer: return obj.isArrayBuffer();
case ESClass_Array: return obj->isArray();
case ESClass_Number: return obj->isNumber();
case ESClass_String: return obj->isString();
case ESClass_Boolean: return obj->isBoolean();
case ESClass_RegExp: return obj->isRegExp();
case ESClass_ArrayBuffer: return obj->isArrayBuffer();
}
JS_NOT_REACHED("bad classValue");
return false;
@ -1791,7 +1791,8 @@ IsObjectWithClass(const Value &v, ESClassValue classValue, JSContext *cx)
{
if (!v.isObject())
return false;
return ObjectClassIs(v.toObject(), classValue, cx);
js::RootedObject obj(cx, &v.toObject());
return ObjectClassIs(obj, classValue, cx);
}
static JS_ALWAYS_INLINE bool

View File

@ -327,7 +327,7 @@ PreprocessValue(JSContext *cx, HandleObject holder, KeyType key, MutableHandleVa
/* Step 4. */
if (vp.get().isObject()) {
JSObject &obj = vp.get().toObject();
RootedObject obj(cx, &vp.get().toObject());
if (ObjectClassIs(obj, ESClass_Number, cx)) {
double d;
if (!ToNumber(cx, vp, &d))
@ -339,8 +339,7 @@ PreprocessValue(JSContext *cx, HandleObject holder, KeyType key, MutableHandleVa
return false;
vp.set(StringValue(str));
} else if (ObjectClassIs(obj, ESClass_Boolean, cx)) {
RootedObject nobj(cx, &obj);
if (!BooleanGetPrimitiveValue(cx, nobj, vp.address()))
if (!BooleanGetPrimitiveValue(cx, obj, vp.address()))
return false;
JS_ASSERT(vp.get().isBoolean());
}
@ -572,7 +571,7 @@ Str(JSContext *cx, const Value &v, StringifyContext *scx)
scx->depth++;
JSBool ok;
if (ObjectClassIs(v.toObject(), ESClass_Array, cx))
if (ObjectClassIs(obj, ESClass_Array, cx))
ok = JA(cx, obj, scx);
else
ok = JO(cx, obj, scx);
@ -595,7 +594,7 @@ js_Stringify(JSContext *cx, MutableHandleValue vp, JSObject *replacer_, Value sp
if (replacer) {
if (replacer->isCallable()) {
/* Step 4a(i): use replacer to transform values. */
} else if (ObjectClassIs(*replacer, ESClass_Array, cx)) {
} else if (ObjectClassIs(replacer, ESClass_Array, cx)) {
/*
* Step 4b: The spec algorithm is unhelpfully vague about the exact
* steps taken when the replacer is an array, regarding the exact
@ -655,9 +654,8 @@ js_Stringify(JSContext *cx, MutableHandleValue vp, JSObject *replacer_, Value sp
return false;
}
} else if (v.isString() ||
(v.isObject() &&
(ObjectClassIs(v.toObject(), ESClass_String, cx) ||
ObjectClassIs(v.toObject(), ESClass_Number, cx))))
IsObjectWithClass(v, ESClass_String, cx) ||
IsObjectWithClass(v, ESClass_Number, cx))
{
/* Step 4b(iv)(3), 4b(iv)(5). */
if (!ValueToId<CanGC>(cx, v, &id))
@ -682,12 +680,12 @@ js_Stringify(JSContext *cx, MutableHandleValue vp, JSObject *replacer_, Value sp
/* Step 5. */
if (space.isObject()) {
RootedObject spaceObj(cx, &space.toObject());
if (ObjectClassIs(*spaceObj, ESClass_Number, cx)) {
if (ObjectClassIs(spaceObj, ESClass_Number, cx)) {
double d;
if (!ToNumber(cx, space, &d))
return false;
space = NumberValue(d);
} else if (ObjectClassIs(*spaceObj, ESClass_String, cx)) {
} else if (ObjectClassIs(spaceObj, ESClass_String, cx)) {
JSString *str = ToStringSlow<CanGC>(cx, space);
if (!str)
return false;

View File

@ -476,7 +476,8 @@ bool
DirectProxyHandler::objectClassIs(JSObject *proxy, ESClassValue classValue,
JSContext *cx)
{
return ObjectClassIs(*GetProxyTargetObject(proxy), classValue, cx);
RootedObject obj(cx, GetProxyTargetObject(proxy));
return ObjectClassIs(obj, classValue, cx);
}
JSString *

View File

@ -1949,7 +1949,7 @@ class TypedArrayTemplate
fromBuffer(JSContext *cx, HandleObject bufobj, int32_t byteOffsetInt, int32_t lengthInt,
HandleObject proto)
{
if (!ObjectClassIs(*bufobj, ESClass_ArrayBuffer, cx)) {
if (!ObjectClassIs(bufobj, ESClass_ArrayBuffer, cx)) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_TYPED_ARRAY_BAD_ARGS);
return NULL; // must be arrayBuffer
}