mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1135100 - Don't update GC thing pointers that haven't changed after marking r=terrence
This commit is contained in:
parent
0eab49fe54
commit
1092db39e8
@ -691,14 +691,18 @@ MarkIdInternal(JSTracer *trc, jsid *id)
|
||||
{
|
||||
if (JSID_IS_STRING(*id)) {
|
||||
JSString *str = JSID_TO_STRING(*id);
|
||||
JSString *prior = str;
|
||||
trc->setTracingLocation((void *)id);
|
||||
MarkInternal(trc, &str);
|
||||
*id = NON_INTEGER_ATOM_TO_JSID(reinterpret_cast<JSAtom *>(str));
|
||||
if (str != prior)
|
||||
*id = NON_INTEGER_ATOM_TO_JSID(reinterpret_cast<JSAtom *>(str));
|
||||
} else if (JSID_IS_SYMBOL(*id)) {
|
||||
JS::Symbol *sym = JSID_TO_SYMBOL(*id);
|
||||
JS::Symbol *prior = sym;
|
||||
trc->setTracingLocation((void *)id);
|
||||
MarkInternal(trc, &sym);
|
||||
*id = SYMBOL_TO_JSID(sym);
|
||||
if (sym != prior)
|
||||
*id = SYMBOL_TO_JSID(sym);
|
||||
} else {
|
||||
/* Unset realLocation manually if we do not call MarkInternal. */
|
||||
trc->unsetTracingLocation();
|
||||
@ -755,14 +759,22 @@ MarkValueInternal(JSTracer *trc, Value *v)
|
||||
MOZ_ASSERT(v->toGCThing());
|
||||
void *thing = v->toGCThing();
|
||||
trc->setTracingLocation((void *)v);
|
||||
MarkKind(trc, &thing, v->gcKind());
|
||||
if (v->isString()) {
|
||||
v->setString((JSString *)thing);
|
||||
JSString *str = static_cast<JSString*>(thing);
|
||||
MarkInternal(trc, &str);
|
||||
if (str != thing)
|
||||
v->setString(str);
|
||||
} else if (v->isObject()) {
|
||||
v->setObjectOrNull((JSObject *)thing);
|
||||
JSObject *obj = static_cast<JSObject*>(thing);
|
||||
MarkInternal(trc, &obj);
|
||||
if (obj != thing)
|
||||
v->setObjectOrNull(obj);
|
||||
} else {
|
||||
MOZ_ASSERT(v->isSymbol());
|
||||
v->setSymbol((JS::Symbol *)thing);
|
||||
JS::Symbol *sym = static_cast<JS::Symbol*>(thing);
|
||||
MarkInternal(trc, &sym);
|
||||
if (sym != thing)
|
||||
v->setSymbol(sym);
|
||||
}
|
||||
} else {
|
||||
/* Unset realLocation manually if we do not call MarkInternal. */
|
||||
|
Loading…
Reference in New Issue
Block a user