Bug 828248 - Part a: Pass MutableHandleId to ValueToId and DoubleIndexToId; r=sfink

This commit is contained in:
Ms2ger 2013-01-11 09:43:00 +01:00
Родитель 61c6473b48
Коммит d43e8bee85
14 изменённых файлов: 61 добавлений и 42 удалений

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

@ -72,7 +72,7 @@ obj_propertyIsEnumerable(JSContext *cx, unsigned argc, Value *vp)
/* Step 1. */
RootedId id(cx);
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), id.address()))
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), &id))
return false;
/* Step 2. */
@ -382,7 +382,7 @@ DefineAccessor(JSContext *cx, unsigned argc, Value *vp)
}
RootedId id(cx);
if (!ValueToId(cx, args[0], id.address()))
if (!ValueToId(cx, args[0], &id))
return false;
RootedObject descObj(cx, NewBuiltinClassInstance(cx, &ObjectClass));
@ -434,7 +434,7 @@ obj_lookupGetter(JSContext *cx, unsigned argc, Value *vp)
CallArgs args = CallArgsFromVp(argc, vp);
RootedId id(cx);
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), id.address()))
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), &id))
return JS_FALSE;
RootedObject obj(cx, ToObject(cx, args.thisv()));
if (!obj)
@ -470,7 +470,7 @@ obj_lookupSetter(JSContext *cx, unsigned argc, Value *vp)
CallArgs args = CallArgsFromVp(argc, vp);
RootedId id(cx);
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), id.address()))
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), &id))
return JS_FALSE;
RootedObject obj(cx, ToObject(cx, args.thisv()));
if (!obj)
@ -575,7 +575,7 @@ obj_watch(JSContext *cx, unsigned argc, Value *vp)
return false;
RootedId propid(cx);
if (!ValueToId(cx, args[0], propid.address()))
if (!ValueToId(cx, args[0], &propid))
return false;
RootedObject obj(cx, ToObject(cx, args.thisv()));
@ -603,7 +603,7 @@ obj_unwatch(JSContext *cx, unsigned argc, Value *vp)
if (!obj)
return false;
args.rval().setUndefined();
jsid id;
RootedId id(cx);
if (argc != 0) {
if (!ValueToId(cx, args[0], &id))
return false;
@ -623,7 +623,7 @@ obj_hasOwnProperty(JSContext *cx, unsigned argc, Value *vp)
/* Step 1. */
RootedId id(cx);
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), id.address()))
if (!ValueToId(cx, args.length() ? args[0] : UndefinedValue(), &id))
return false;
/* Step 2. */
@ -740,7 +740,7 @@ obj_getOwnPropertyDescriptor(JSContext *cx, unsigned argc, Value *vp)
if (!GetFirstArgumentAsObject(cx, argc, vp, "Object.getOwnPropertyDescriptor", &obj))
return JS_FALSE;
RootedId id(cx);
if (!ValueToId(cx, argc >= 2 ? vp[3] : UndefinedValue(), id.address()))
if (!ValueToId(cx, argc >= 2 ? vp[3] : UndefinedValue(), &id))
return JS_FALSE;
return GetOwnPropertyDescriptor(cx, obj, id, vp);
}
@ -828,7 +828,7 @@ obj_defineProperty(JSContext *cx, unsigned argc, Value *vp)
return false;
RootedId id(cx);
if (!ValueToId(cx, argc >= 2 ? vp[3] : UndefinedValue(), id.address()))
if (!ValueToId(cx, argc >= 2 ? vp[3] : UndefinedValue(), &id))
return JS_FALSE;
const Value descval = argc >= 3 ? vp[4] : UndefinedValue();

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

@ -3152,7 +3152,13 @@ JS_ValueToId(JSContext *cx, jsval valueArg, jsid *idp)
AssertHeapIsIdle(cx);
CHECK_REQUEST(cx);
assertSameCompartment(cx, value);
return ValueToId(cx, value, idp);
RootedId id(cx);
if (!ValueToId(cx, value, &id))
return false;
*idp = id;
return true;
}
JS_PUBLIC_API(JSBool)

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

@ -276,10 +276,10 @@ JSObject::arrayGetOwnDataElement(JSContext *cx, size_t i, Value *vp)
}
bool
DoubleIndexToId(JSContext *cx, double index, jsid *id)
DoubleIndexToId(JSContext *cx, double index, MutableHandleId id)
{
if (index == uint32_t(index))
return IndexToId(cx, uint32_t(index), id);
return IndexToId(cx, uint32_t(index), id.address());
return ValueToId(cx, DoubleValue(index), id);
}
@ -295,7 +295,7 @@ DoGetElement(JSContext *cx, HandleObject obj, double index, JSBool *hole, Mutabl
{
RootedId id(cx);
if (!DoubleIndexToId(cx, index, id.address()))
if (!DoubleIndexToId(cx, index, &id))
return false;
RootedObject obj2(cx);
@ -432,7 +432,7 @@ SetArrayElement(JSContext *cx, HandleObject obj, double index, HandleValue v)
}
RootedId id(cx);
if (!DoubleIndexToId(cx, index, id.address()))
if (!DoubleIndexToId(cx, index, &id))
return false;
RootedValue tmp(cx, v);
@ -1342,7 +1342,7 @@ JSObject::makeDenseArraySlow(JSContext *cx, HandleObject obj)
uint32_t next = 0;
for (uint32_t i = 0; i < arrayInitialized; i++) {
/* Dense array indexes can always fit in a jsid. */
jsid id;
RootedId id(cx);
JS_ALWAYS_TRUE(ValueToId(cx, Int32Value(i), &id));
if (elems[i].isMagic(JS_ARRAY_HOLE))
@ -1719,7 +1719,7 @@ InitArrayElements(JSContext *cx, HandleObject obj, uint32_t start, uint32_t coun
Value idval = DoubleValue(MAX_ARRAY_INDEX + 1);
do {
value = *vector++;
if (!ValueToId(cx, idval, id.address()) ||
if (!ValueToId(cx, idval, &id) ||
!JSObject::setGeneric(cx, obj, obj, id, &value, true)) {
return false;
}

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

@ -48,19 +48,19 @@ ToAtom(JSContext *cx, const js::Value &v)
}
inline bool
ValueToId(JSContext* cx, JSObject *obj, const Value &v, jsid *idp)
ValueToId(JSContext* cx, JSObject *obj, const Value &v, MutableHandleId idp)
{
int32_t i;
if (ValueFitsInInt32(v, &i) && INT_FITS_IN_JSID(i)) {
*idp = INT_TO_JSID(i);
idp.set(INT_TO_JSID(i));
return true;
}
return InternNonIntElementId(cx, obj, v, idp);
return InternNonIntElementId(cx, obj, v, idp.address());
}
inline bool
ValueToId(JSContext* cx, const Value &v, jsid *idp)
ValueToId(JSContext* cx, const Value &v, MutableHandleId idp)
{
return ValueToId(cx, NULL, v, idp);
}

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

@ -454,7 +454,12 @@ JSCompartment::wrapId(JSContext *cx, jsid *idp)
RootedValue value(cx, IdToValue(*idp));
if (!wrap(cx, value.address()))
return false;
return ValueToId(cx, value.get(), idp);
RootedId id(cx);
if (!ValueToId(cx, value.get(), &id))
return false;
*idp = id;
return true;
}
bool

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

@ -261,7 +261,7 @@ JS_SetWatchPoint(JSContext *cx, JSObject *obj_, jsid id,
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_CANT_WATCH_PROP);
return false;
} else {
if (!ValueToId(cx, IdToValue(id), propid.address()))
if (!ValueToId(cx, IdToValue(id), &propid))
return false;
}

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

@ -1629,7 +1629,7 @@ END_CASE(JSOP_AND)
#define FETCH_ELEMENT_ID(obj, n, id) \
JS_BEGIN_MACRO \
const Value &idval_ = regs.sp[n]; \
if (!ValueToId(cx, obj, idval_, id.address())) \
if (!ValueToId(cx, obj, idval_, &id)) \
goto error; \
JS_END_MACRO

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

@ -1107,7 +1107,7 @@ SuppressDeletedPropertyHelper(JSContext *cx, HandleObject obj, StringPredicate p
RootedObject obj2(cx);
RootedShape prop(cx);
RootedId id(cx);
if (!ValueToId(cx, StringValue(*idp), id.address()))
if (!ValueToId(cx, StringValue(*idp), &id))
return false;
if (!JSObject::lookupGeneric(cx, proto, id, &obj2, &prop))
return false;
@ -1238,7 +1238,7 @@ js_IteratorMore(JSContext *cx, HandleObject iterobj, MutableHandleValue rval)
if (ni) {
JS_ASSERT(!ni->isKeyIter());
RootedId id(cx);
if (!ValueToId(cx, StringValue(*ni->current()), id.address()))
if (!ValueToId(cx, StringValue(*ni->current()), &id))
return false;
ni->incCursor();
RootedObject obj(cx, ni->obj);

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

@ -644,7 +644,7 @@ js_Stringify(JSContext *cx, MutableHandleValue vp, JSObject *replacer_, Value sp
if (!JSObject::getElement(cx, replacer, replacer, i, &v))
return false;
jsid id;
RootedId id(cx);
if (v.isNumber()) {
/* Step 4b(iv)(4). */
int32_t n;

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

@ -702,7 +702,7 @@ ArrayToIdVector(JSContext *cx, const Value &array, AutoIdVector &props)
return false;
if (!JSObject::getElement(cx, obj, obj, n, &v))
return false;
jsid id;
RootedId id(cx);
if (!ValueToId(cx, v, &id))
return false;
if (!props.append(id))
@ -1484,7 +1484,7 @@ ArrayToIdVector(JSContext *cx, HandleObject proxy, HandleObject target, HandleVa
// step ii
RootedId id(cx);
if (!ValueToId(cx, v, id.address()))
if (!ValueToId(cx, v, &id))
return false;
// step iii

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

@ -1,6 +1,5 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@ -278,8 +277,13 @@ Shape::getUserId(JSContext *cx, jsid *idp) const
#endif
if (self->hasShortID()) {
int16_t id = self->shortid();
if (id < 0)
return ValueToId(cx, Int32Value(id), idp);
if (id < 0) {
RootedId rootedId(cx);
if (!ValueToId(cx, Int32Value(id), &rootedId))
return false;
*idp = rootedId;
return true;
}
*idp = INT_TO_JSID(id);
} else {
*idp = self->propid();

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

@ -576,7 +576,7 @@ Reify(JSContext *cx, JSCompartment *origin, Value *vp)
if (!keys.reserve(length))
return false;
for (size_t i = 0; i < length; ++i) {
jsid id;
RootedId id(cx);
if (!ValueToId(cx, StringValue(ni->begin()[i]), &id))
return false;
keys.infallibleAppend(id);

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

@ -5528,10 +5528,14 @@ ValueToIdForXML(JSContext *cx, jsval v, jsid *idp)
{
if (JSVAL_IS_INT(v)) {
int32_t i = JSVAL_TO_INT(v);
if (INT_FITS_IN_JSID(i))
if (INT_FITS_IN_JSID(i)) {
*idp = INT_TO_JSID(i);
else if (!ValueToId(cx, v, idp))
return JS_FALSE;
} else {
RootedId id(cx);
if (!ValueToId(cx, v, &id))
return JS_FALSE;
*idp = id;
}
} else if (JSVAL_IS_STRING(v)) {
JSAtom *atom = AtomizeString(cx, JSVAL_TO_STRING(v));
if (!atom)
@ -5885,7 +5889,7 @@ xml_hasOwnProperty(JSContext *cx, unsigned argc, jsval *vp)
}
RootedId id(cx);
if (!ValueToId(cx, name, id.address()))
if (!ValueToId(cx, name, &id))
return false;
RootedObject obj2(cx);

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

@ -109,7 +109,7 @@ ReportObjectRequired(JSContext *cx)
bool
ValueToIdentifier(JSContext *cx, const Value &v, MutableHandleId id)
{
if (!ValueToId(cx, v, id.address()))
if (!ValueToId(cx, v, id))
return false;
if (!JSID_IS_ATOM(id) || !IsIdentifier(JSID_TO_ATOM(id))) {
RootedValue val(cx, v);
@ -3043,7 +3043,7 @@ DebuggerScript_getAllOffsets(JSContext *cx, unsigned argc, Value *vp)
RootedId id(cx);
offsets = NewDenseEmptyArray(cx);
if (!offsets ||
!ValueToId(cx, NumberValue(lineno), id.address()))
!ValueToId(cx, NumberValue(lineno), &id))
{
return false;
}
@ -4098,7 +4098,7 @@ DebuggerObject_getOwnPropertyDescriptor(JSContext *cx, unsigned argc, Value *vp)
THIS_DEBUGOBJECT_OWNER_REFERENT(cx, argc, vp, "getOwnPropertyDescriptor", args, dbg, obj);
RootedId id(cx);
if (!ValueToId(cx, argc >= 1 ? args[0] : UndefinedValue(), id.address()))
if (!ValueToId(cx, argc >= 1 ? args[0] : UndefinedValue(), &id))
return false;
/* Bug: This can cause the debuggee to run! */
@ -4189,7 +4189,7 @@ DebuggerObject_defineProperty(JSContext *cx, unsigned argc, Value *vp)
REQUIRE_ARGC("Debugger.Object.defineProperty", 2);
RootedId id(cx);
if (!ValueToId(cx, args[0], id.address()))
if (!ValueToId(cx, args[0], &id))
return false;
const Value &descval = args[1];