зеркало из https://github.com/mozilla/gecko-dev.git
Bug 707051 - Change MarkChildren for shapes (r=igor)
This commit is contained in:
Родитель
cdcefde2ca
Коммит
b6c68659bd
|
@ -4183,7 +4183,7 @@ JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp)
|
||||||
JS_ASSERT(shape->isEmptyShape());
|
JS_ASSERT(shape->isEmptyShape());
|
||||||
*idp = JSID_VOID;
|
*idp = JSID_VOID;
|
||||||
} else {
|
} else {
|
||||||
iterobj->setPrivate(const_cast<Shape *>(shape->previous()));
|
iterobj->setPrivate(const_cast<Shape *>(shape->previous().get()));
|
||||||
*idp = shape->propid();
|
*idp = shape->propid();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -735,6 +735,7 @@ restart:
|
||||||
else if (JS_UNLIKELY(JSID_IS_OBJECT(id)))
|
else if (JS_UNLIKELY(JSID_IS_OBJECT(id)))
|
||||||
PushMarkStack(gcmarker, JSID_TO_OBJECT(id));
|
PushMarkStack(gcmarker, JSID_TO_OBJECT(id));
|
||||||
|
|
||||||
|
/* We need the loop here to prevent unbounded recursion. */
|
||||||
shape = shape->previous();
|
shape = shape->previous();
|
||||||
if (shape && shape->markIfUnmarked(gcmarker->getMarkColor()))
|
if (shape && shape->markIfUnmarked(gcmarker->getMarkColor()))
|
||||||
goto restart;
|
goto restart;
|
||||||
|
@ -974,13 +975,11 @@ MarkChildren(JSTracer *trc, JSScript *script)
|
||||||
void
|
void
|
||||||
MarkChildren(JSTracer *trc, const Shape *shape)
|
MarkChildren(JSTracer *trc, const Shape *shape)
|
||||||
{
|
{
|
||||||
restart:
|
|
||||||
MarkBaseShapeUnbarriered(trc, shape->base(), "base");
|
MarkBaseShapeUnbarriered(trc, shape->base(), "base");
|
||||||
MarkIdUnbarriered(trc, shape->maybePropid(), "propid");
|
MarkIdUnbarriered(trc, shape->maybePropid(), "propid");
|
||||||
|
|
||||||
shape = shape->previous();
|
if (shape->previous())
|
||||||
if (shape)
|
MarkShape(trc, shape->previous(), "parent");
|
||||||
goto restart;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -592,7 +592,7 @@ struct Shape : public js::gc::Cell
|
||||||
return !(flags & NON_NATIVE);
|
return !(flags & NON_NATIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
const js::Shape *previous() const {
|
const HeapPtrShape &previous() const {
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче