зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1017154 - Move RegExpShared read barriers around some more, r=billm.
This commit is contained in:
Родитель
c290fa45ec
Коммит
b0e6d07516
|
@ -102,14 +102,6 @@ RegExpObjectBuilder::build(HandleAtom source, RegExpFlag flags)
|
|||
return reobj_->init(cx, source, flags) ? reobj_.get() : nullptr;
|
||||
}
|
||||
|
||||
static inline void
|
||||
MaybeTraceRegExpShared(JSContext *cx, RegExpShared *shared)
|
||||
{
|
||||
Zone *zone = cx->zone();
|
||||
if (zone->needsBarrier())
|
||||
shared->trace(zone->barrierTracer());
|
||||
}
|
||||
|
||||
RegExpObject *
|
||||
RegExpObjectBuilder::clone(Handle<RegExpObject *> other)
|
||||
{
|
||||
|
@ -138,10 +130,6 @@ RegExpObjectBuilder::clone(Handle<RegExpObject *> other)
|
|||
if (!other->getShared(cx->asJSContext(), &g))
|
||||
return nullptr;
|
||||
|
||||
// Copying a RegExpShared from one object to another requires a read
|
||||
// barrier, as the shared pointer in an object may be weak.
|
||||
MaybeTraceRegExpShared(cx->asJSContext(), g.re());
|
||||
|
||||
Rooted<JSAtom *> source(cx, other->getSource());
|
||||
return build(source, *g);
|
||||
}
|
||||
|
@ -228,6 +216,29 @@ VectorMatchPairs::allocOrExpandArray(size_t pairCount)
|
|||
|
||||
/* RegExpObject */
|
||||
|
||||
static inline void
|
||||
MaybeTraceRegExpShared(JSContext *cx, RegExpShared *shared)
|
||||
{
|
||||
Zone *zone = cx->zone();
|
||||
if (zone->needsBarrier())
|
||||
shared->trace(zone->barrierTracer());
|
||||
}
|
||||
|
||||
bool
|
||||
RegExpObject::getShared(JSContext *cx, RegExpGuard *g)
|
||||
{
|
||||
if (RegExpShared *shared = maybeShared()) {
|
||||
// Fetching a RegExpShared from an object requires a read
|
||||
// barrier, as the shared pointer might be weak.
|
||||
MaybeTraceRegExpShared(cx, shared);
|
||||
|
||||
g->init(*shared);
|
||||
return true;
|
||||
}
|
||||
|
||||
return createShared(cx, g);
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
RegExpObject::trace(JSTracer *trc, JSObject *obj)
|
||||
{
|
||||
|
|
|
@ -453,18 +453,7 @@ class RegExpObject : public JSObject
|
|||
bool multiline() const { return getFixedSlot(MULTILINE_FLAG_SLOT).toBoolean(); }
|
||||
bool sticky() const { return getFixedSlot(STICKY_FLAG_SLOT).toBoolean(); }
|
||||
|
||||
void shared(RegExpGuard *g) const {
|
||||
JS_ASSERT(maybeShared() != nullptr);
|
||||
g->init(*maybeShared());
|
||||
}
|
||||
|
||||
bool getShared(JSContext *cx, RegExpGuard *g) {
|
||||
if (RegExpShared *shared = maybeShared()) {
|
||||
g->init(*shared);
|
||||
return true;
|
||||
}
|
||||
return createShared(cx, g);
|
||||
}
|
||||
bool getShared(JSContext *cx, RegExpGuard *g);
|
||||
|
||||
void setShared(RegExpShared &shared) {
|
||||
JS_ASSERT(!maybeShared());
|
||||
|
|
Загрузка…
Ссылка в новой задаче