inline bool ForOfIterator::nextFromOptimizedArray(MutableHandleValue vp, bool* done) { MOZ_ASSERT(index != NOT_ARRAY); if (!CheckForInterrupt(cx_)) return false; ArrayObject* arr = &iterator->as<ArrayObject>(); if (index >= arr->length()) { vp.setUndefined(); *done = true; return true; } *done = false; // Try to get array element via direct access. if (index < arr->getDenseInitializedLength()) { vp.set(arr->getDenseElement(index)); if (!vp.isMagic(JS_ELEMENTS_HOLE)) { ++index; return true; } } return GetElement(cx_, iterator, iterator, index++, vp); }