mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1165486 - Detect with scopes at parse time using the static scope chain instead of treating it as a polluted global. (r=luke)
This commit is contained in:
parent
3c634f08a1
commit
fdea290a47
@ -634,6 +634,15 @@ FunctionBox::FunctionBox(ExclusiveContext* cx, ObjectBox* traceListHead, JSFunct
|
||||
FunctionBox* parent = outerpc->sc->asFunctionBox();
|
||||
if (parent && parent->inWith)
|
||||
inWith = true;
|
||||
} else {
|
||||
// This is like the above case, but when inside eval.
|
||||
//
|
||||
// For example:
|
||||
//
|
||||
// with(o) { eval("(function() { g(); })();"); }
|
||||
//
|
||||
// In this case, the static scope chain tells us the presence of with.
|
||||
inWith = outerpc->sc->asGlobalSharedContext()->inWith();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -280,6 +280,14 @@ class GlobalSharedContext : public SharedContext
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool inWith() const {
|
||||
for (StaticScopeIter<CanGC> it(context, topStaticScope_); !it.done(); it++) {
|
||||
if (it.type() == StaticScopeIter<CanGC>::With)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class FunctionBox : public ObjectBox, public SharedContext
|
||||
|
Loading…
Reference in New Issue
Block a user