зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 61de331861af (bug 558058).
This commit is contained in:
Родитель
5c4f856ea3
Коммит
c6710852fc
|
@ -155,8 +155,6 @@ JSThreadData::mark(JSTracer *trc)
|
|||
void
|
||||
JSThreadData::purge(JSContext *cx)
|
||||
{
|
||||
cachedIteratorObject = NULL;
|
||||
|
||||
purgeGCFreeLists();
|
||||
|
||||
js_PurgeGSNCache(&gsnCache);
|
||||
|
|
|
@ -567,12 +567,6 @@ struct JSThreadData {
|
|||
|
||||
jsuword nativeEnumCache[NATIVE_ENUM_CACHE_SIZE];
|
||||
|
||||
/*
|
||||
* One-entry deep cache of iterator objects. We deposit here the last
|
||||
* iterator that was freed in JSOP_ENDITER.
|
||||
*/
|
||||
JSObject *cachedIteratorObject;
|
||||
|
||||
bool init();
|
||||
void finish();
|
||||
void mark(JSTracer *trc);
|
||||
|
|
|
@ -391,19 +391,16 @@ js_ValueToIterator(JSContext *cx, uintN flags, jsval *vp)
|
|||
if (JSVAL_IS_VOID(*vp)) {
|
||||
default_iter:
|
||||
/*
|
||||
* Fail over to the default enumerating native iterator. These objects
|
||||
* never escape, so we don't care for the proper parent or proto to
|
||||
* be set. Furthermore we re-use the last cached iterator object, if
|
||||
* possible.
|
||||
* Fail over to the default enumerating native iterator.
|
||||
*
|
||||
* Create iterobj with a NULL parent to ensure that we use the
|
||||
* correct scope chain to lookup the iterator's constructor. Since
|
||||
* we use the parent slot to keep track of the iterable, we must
|
||||
* fix it up after.
|
||||
*/
|
||||
iterobj = JS_THREAD_DATA(cx)->cachedIteratorObject;
|
||||
if (iterobj) {
|
||||
JS_THREAD_DATA(cx)->cachedIteratorObject = NULL;
|
||||
} else {
|
||||
iterobj = js_NewObjectWithGivenProto(cx, &js_IteratorClass, NULL, NULL);
|
||||
if (!iterobj)
|
||||
return false;
|
||||
}
|
||||
iterobj = js_NewObject(cx, &js_IteratorClass, NULL, NULL);
|
||||
if (!iterobj)
|
||||
return false;
|
||||
|
||||
/* Store in *vp to protect it from GC (callers must root vp). */
|
||||
*vp = OBJECT_TO_JSVAL(iterobj);
|
||||
|
@ -437,7 +434,6 @@ js_CloseIterator(JSContext *cx, jsval v)
|
|||
|
||||
if (clasp == &js_IteratorClass) {
|
||||
js_CloseNativeIterator(cx, obj);
|
||||
JS_THREAD_DATA(cx)->cachedIteratorObject = obj;
|
||||
}
|
||||
#if JS_HAS_GENERATORS
|
||||
else if (clasp == &js_GeneratorClass) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче