diff --git a/js/src/jsiter.cpp b/js/src/jsiter.cpp index f455a173c30..c7be59ec369 100644 --- a/js/src/jsiter.cpp +++ b/js/src/jsiter.cpp @@ -468,7 +468,7 @@ RegisterEnumerator(JSContext *cx, JSObject *iterobj, NativeIterator *ni) cx->enumerators = iterobj; JS_ASSERT(!(ni->flags & JSITER_ACTIVE)); - ni->flags |= (JSITER_ACTIVE | JSITER_REUSABLE); + ni->flags |= JSITER_ACTIVE; } } @@ -788,7 +788,7 @@ js_CloseIterator(JSContext *cx, JSObject *obj) /* Remove enumerators from the active list, which is a stack. */ NativeIterator *ni = obj->getNativeIterator(); - if (ni->flags & JSITER_REUSABLE) { + if (ni->flags & JSITER_ENUMERATE) { JS_ASSERT(cx->enumerators == obj); cx->enumerators = ni->next; @@ -882,10 +882,6 @@ SuppressDeletedPropertyHelper(JSContext *cx, JSObject *obj, IdPredicate predicat memmove(idp, idp + 1, (props_end - (idp + 1)) * sizeof(jsid)); ni->props_end = ni->end() - 1; } - - /* Don't reuse modified native iterators. */ - ni->flags &= (~JSITER_REUSABLE); - if (predicate.matchesAtMostOne()) break; } diff --git a/js/src/jsiter.h b/js/src/jsiter.h index 7b113f9e345..90c9fa458b7 100644 --- a/js/src/jsiter.h +++ b/js/src/jsiter.h @@ -64,7 +64,6 @@ * Not serialized by XDR. */ #define JSITER_ACTIVE 0x1000 -#define JSITER_REUSABLE 0x2000 namespace js { diff --git a/js/src/methodjit/Compiler.cpp b/js/src/methodjit/Compiler.cpp index d0a9a13d98b..bde5d0506d5 100644 --- a/js/src/methodjit/Compiler.cpp +++ b/js/src/methodjit/Compiler.cpp @@ -4224,10 +4224,10 @@ mjit::Compiler::iterEnd() Address flagAddr(T1, offsetof(NativeIterator, flags)); masm.loadPtr(flagAddr, T2); - /* Test for (flags & REUSABLE). */ - Jump notReusable = masm.branchTest32(Assembler::Zero, T2, - Imm32(JSITER_REUSABLE)); - stubcc.linkExit(notReusable, Uses(1)); + /* Test for (flags == ENUMERATE | ACTIVE). */ + Jump notEnumerate = masm.branch32(Assembler::NotEqual, T2, + Imm32(JSITER_ENUMERATE | JSITER_ACTIVE)); + stubcc.linkExit(notEnumerate, Uses(1)); /* Clear active bit. */ masm.and32(Imm32(~JSITER_ACTIVE), T2);