Merge from mozilla-central.

This commit is contained in:
David Anderson
2012-05-03 11:40:52 -07:00
759 changed files with 57637 additions and 19520 deletions

View File

@@ -962,7 +962,7 @@ js::CloseIterator(JSContext *cx, JSObject *obj)
bool
js::UnwindIteratorForException(JSContext *cx, JSObject *obj)
{
Value v = cx->getPendingException();
RootedVarValue v(cx, cx->getPendingException());
cx->clearPendingException();
if (!CloseIterator(cx, obj))
return false;
@@ -1001,7 +1001,7 @@ js::UnwindIteratorForUncatchableException(JSContext *cx, JSObject *obj)
*/
template<typename StringPredicate>
static bool
SuppressDeletedPropertyHelper(JSContext *cx, JSObject *obj, StringPredicate predicate)
SuppressDeletedPropertyHelper(JSContext *cx, HandleObject obj, StringPredicate predicate)
{
JSObject *iterobj = cx->enumerators;
while (iterobj) {
@@ -1081,25 +1081,25 @@ SuppressDeletedPropertyHelper(JSContext *cx, JSObject *obj, StringPredicate pred
}
class SingleStringPredicate {
JSFlatString *str;
Handle<JSFlatString*> str;
public:
SingleStringPredicate(JSFlatString *str) : str(str) {}
SingleStringPredicate(JSContext *cx, Handle<JSFlatString*> str) : str(str) {}
bool operator()(JSFlatString *str) { return EqualStrings(str, this->str); }
bool matchesAtMostOne() { return true; }
};
bool
js_SuppressDeletedProperty(JSContext *cx, JSObject *obj, jsid id)
js_SuppressDeletedProperty(JSContext *cx, HandleObject obj, jsid id)
{
JSFlatString *str = IdToString(cx, id);
RootedVar<JSFlatString*> str(cx, IdToString(cx, id));
if (!str)
return false;
return SuppressDeletedPropertyHelper(cx, obj, SingleStringPredicate(str));
return SuppressDeletedPropertyHelper(cx, obj, SingleStringPredicate(cx, str));
}
bool
js_SuppressDeletedElement(JSContext *cx, JSObject *obj, uint32_t index)
js_SuppressDeletedElement(JSContext *cx, HandleObject obj, uint32_t index)
{
jsid id;
if (!IndexToId(cx, index, &id))
@@ -1122,7 +1122,7 @@ class IndexRangePredicate {
};
bool
js_SuppressDeletedElements(JSContext *cx, JSObject *obj, uint32_t begin, uint32_t end)
js_SuppressDeletedElements(JSContext *cx, HandleObject obj, uint32_t begin, uint32_t end)
{
return SuppressDeletedPropertyHelper(cx, obj, IndexRangePredicate(begin, end));
}
@@ -1130,7 +1130,7 @@ js_SuppressDeletedElements(JSContext *cx, JSObject *obj, uint32_t begin, uint32_
const uint32_t CLOSED_INDEX = UINT32_MAX;
JSObject *
ElementIteratorObject::create(JSContext *cx, JSObject *obj)
ElementIteratorObject::create(JSContext *cx, HandleObject obj)
{
JS_ASSERT(obj);
JSObject *iterobj = NewObjectWithGivenProto(cx, &ElementIteratorClass, NULL, obj);
@@ -1162,14 +1162,16 @@ ElementIteratorObject::setIndex(uint32_t index)
bool
ElementIteratorObject::iteratorNext(JSContext *cx, Value *vp)
{
RootedVar<ElementIteratorObject*> self(cx, this);
uint32_t i, length;
RootedVarObject obj(cx, getTargetObject());
if (!js_GetLengthProperty(cx, obj, &length))
goto error;
i = getIndex();
i = self->getIndex();
if (i >= length) {
setIndex(CLOSED_INDEX);
self->setIndex(CLOSED_INDEX);
vp->setMagic(JS_NO_ITER_VALUE);
return true;
}
@@ -1179,11 +1181,11 @@ ElementIteratorObject::iteratorNext(JSContext *cx, Value *vp)
goto error;
/* On success, bump the index. */
setIndex(i + 1);
self->setIndex(i + 1);
return true;
error:
setIndex(CLOSED_INDEX);
self->setIndex(CLOSED_INDEX);
return false;
}
@@ -1449,7 +1451,7 @@ js_NewGenerator(JSContext *cx)
JS_ASSERT(stackfp->base() == cx->regs().sp);
JS_ASSERT(stackfp->actualArgs() <= stackfp->formalArgs());
GlobalObject *global = &stackfp->global();
RootedVar<GlobalObject*> global(cx, &stackfp->global());
JSObject *proto = global->getOrCreateGeneratorPrototype(cx);
if (!proto)
return NULL;
@@ -1737,9 +1739,9 @@ static JSFunctionSpec generator_methods[] = {
#endif /* JS_HAS_GENERATORS */
static bool
InitIteratorClass(JSContext *cx, GlobalObject *global)
InitIteratorClass(JSContext *cx, Handle<GlobalObject*> global)
{
JSObject *iteratorProto = global->createBlankPrototype(cx, &IteratorClass);
RootedVarObject iteratorProto(cx, global->createBlankPrototype(cx, &IteratorClass));
if (!iteratorProto)
return false;
@@ -1751,7 +1753,8 @@ InitIteratorClass(JSContext *cx, GlobalObject *global)
iteratorProto->setNativeIterator(ni);
JSFunction *ctor = global->createConstructor(cx, Iterator, CLASS_ATOM(cx, Iterator), 2);
RootedVarFunction ctor(cx);
ctor = global->createConstructor(cx, Iterator, CLASS_ATOM(cx, Iterator), 2);
if (!ctor)
return false;
@@ -1764,22 +1767,22 @@ InitIteratorClass(JSContext *cx, GlobalObject *global)
return DefineConstructorAndPrototype(cx, global, JSProto_Iterator, ctor, iteratorProto);
}
bool
GlobalObject::initGeneratorClass(JSContext *cx)
/* static */ bool
GlobalObject::initGeneratorClass(JSContext *cx, Handle<GlobalObject*> global)
{
#if JS_HAS_GENERATORS
JSObject *proto = createBlankPrototype(cx, &GeneratorClass);
RootedVarObject proto(cx, global->createBlankPrototype(cx, &GeneratorClass));
if (!proto || !DefinePropertiesAndBrand(cx, proto, NULL, generator_methods))
return false;
setReservedSlot(GENERATOR_PROTO, ObjectValue(*proto));
global->setReservedSlot(GENERATOR_PROTO, ObjectValue(*proto));
#endif
return true;
}
static JSObject *
InitStopIterationClass(JSContext *cx, GlobalObject *global)
InitStopIterationClass(JSContext *cx, Handle<GlobalObject*> global)
{
JSObject *proto = global->createBlankPrototype(cx, &StopIterationClass);
RootedVarObject proto(cx, global->createBlankPrototype(cx, &StopIterationClass));
if (!proto || !proto->freeze(cx))
return NULL;
@@ -1797,7 +1800,7 @@ js_InitIteratorClasses(JSContext *cx, JSObject *obj)
{
JS_ASSERT(obj->isNative());
GlobalObject *global = &obj->asGlobal();
RootedVar<GlobalObject*> global(cx, &obj->asGlobal());
/*
* Bail if Iterator has already been initialized. We test for Iterator
@@ -1811,7 +1814,7 @@ js_InitIteratorClasses(JSContext *cx, JSObject *obj)
if (iter)
return iter;
if (!InitIteratorClass(cx, global) || !global->initGeneratorClass(cx))
if (!InitIteratorClass(cx, global) || !GlobalObject::initGeneratorClass(cx, global))
return NULL;
return InitStopIterationClass(cx, global);
}