зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1530412 - Move LazyScript::numClosedOverBindings/numInnerFunctions to normal fields r=jorendorff
These fields will later be moved into LazyScriptData. Differential Revision: https://phabricator.services.mozilla.com/D23400 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
c7e3e10efd
Коммит
281b3d9300
|
@ -272,6 +272,7 @@ static XDRResult XDRRelazificationInfo(XDRState<mode>* xdr, HandleFunction fun,
|
|||
JSContext* cx = xdr->cx();
|
||||
|
||||
uint64_t packedFields;
|
||||
uint32_t numClosedOverBindings;
|
||||
{
|
||||
uint32_t sourceStart = script->sourceStart();
|
||||
uint32_t sourceEnd = script->sourceEnd();
|
||||
|
@ -283,6 +284,7 @@ static XDRResult XDRRelazificationInfo(XDRState<mode>* xdr, HandleFunction fun,
|
|||
|
||||
if (mode == XDR_ENCODE) {
|
||||
packedFields = lazy->packedFieldsForXDR();
|
||||
numClosedOverBindings = lazy->numClosedOverBindings();
|
||||
MOZ_ASSERT(sourceStart == lazy->sourceStart());
|
||||
MOZ_ASSERT(sourceEnd == lazy->sourceEnd());
|
||||
MOZ_ASSERT(toStringStart == lazy->toStringStart());
|
||||
|
@ -303,12 +305,14 @@ static XDRResult XDRRelazificationInfo(XDRState<mode>* xdr, HandleFunction fun,
|
|||
|
||||
MOZ_TRY(xdr->codeUint64(&packedFields));
|
||||
MOZ_TRY(xdr->codeUint32(&numFieldInitializers));
|
||||
MOZ_TRY(xdr->codeUint32(&numClosedOverBindings));
|
||||
|
||||
if (mode == XDR_DECODE) {
|
||||
RootedScriptSourceObject sourceObject(cx, script->sourceObject());
|
||||
lazy.set(LazyScript::CreateForXDR(
|
||||
cx, fun, script, enclosingScope, sourceObject, packedFields,
|
||||
sourceStart, sourceEnd, toStringStart, toStringEnd, lineno, column));
|
||||
cx, numClosedOverBindings, /* numInnerFunctions = */ 0, fun, script,
|
||||
enclosingScope, sourceObject, packedFields, sourceStart, sourceEnd,
|
||||
toStringStart, toStringEnd, lineno, column));
|
||||
if (!lazy) {
|
||||
return xdr->fail(JS::TranscodeResult_Throw);
|
||||
}
|
||||
|
@ -1052,6 +1056,8 @@ XDRResult js::XDRLazyScript(XDRState<mode>* xdr, HandleScope enclosingScope,
|
|||
uint32_t column;
|
||||
uint64_t packedFields;
|
||||
uint32_t numFieldInitializers;
|
||||
uint32_t numClosedOverBindings;
|
||||
uint32_t numInnerFunctions;
|
||||
|
||||
if (mode == XDR_ENCODE) {
|
||||
// Note: it's possible the LazyScript has a non-null script_ pointer
|
||||
|
@ -1073,6 +1079,8 @@ XDRResult js::XDRLazyScript(XDRState<mode>* xdr, HandleScope enclosingScope,
|
|||
} else {
|
||||
numFieldInitializers = UINT32_MAX;
|
||||
}
|
||||
numClosedOverBindings = lazy->numClosedOverBindings();
|
||||
numInnerFunctions = lazy->numInnerFunctions();
|
||||
}
|
||||
|
||||
MOZ_TRY(xdr->codeUint32(&sourceStart));
|
||||
|
@ -1083,11 +1091,14 @@ XDRResult js::XDRLazyScript(XDRState<mode>* xdr, HandleScope enclosingScope,
|
|||
MOZ_TRY(xdr->codeUint32(&column));
|
||||
MOZ_TRY(xdr->codeUint64(&packedFields));
|
||||
MOZ_TRY(xdr->codeUint32(&numFieldInitializers));
|
||||
MOZ_TRY(xdr->codeUint32(&numClosedOverBindings));
|
||||
MOZ_TRY(xdr->codeUint32(&numInnerFunctions));
|
||||
|
||||
if (mode == XDR_DECODE) {
|
||||
lazy.set(LazyScript::CreateForXDR(
|
||||
cx, fun, nullptr, enclosingScope, sourceObject, packedFields,
|
||||
sourceStart, sourceEnd, toStringStart, toStringEnd, lineno, column));
|
||||
cx, numClosedOverBindings, numInnerFunctions, fun, nullptr,
|
||||
enclosingScope, sourceObject, packedFields, sourceStart, sourceEnd,
|
||||
toStringStart, toStringEnd, lineno, column));
|
||||
if (!lazy) {
|
||||
return xdr->fail(JS::TranscodeResult_Throw);
|
||||
}
|
||||
|
@ -4809,14 +4820,18 @@ bool JSScript::formalLivesInArgumentsObject(unsigned argSlot) {
|
|||
return argsObjAliasesFormals() && !formalIsAliased(argSlot);
|
||||
}
|
||||
|
||||
LazyScript::LazyScript(JSFunction* fun, ScriptSourceObject& sourceObject,
|
||||
void* table, uint64_t packedFields, uint32_t sourceStart,
|
||||
LazyScript::LazyScript(uint32_t numClosedOverBindings,
|
||||
uint32_t numInnerFunctions, JSFunction* fun,
|
||||
ScriptSourceObject& sourceObject, void* table,
|
||||
uint64_t packedFields, uint32_t sourceStart,
|
||||
uint32_t sourceEnd, uint32_t toStringStart,
|
||||
uint32_t lineno, uint32_t column)
|
||||
: script_(nullptr),
|
||||
function_(fun),
|
||||
sourceObject_(&sourceObject),
|
||||
table_(table),
|
||||
numClosedOverBindings_(numClosedOverBindings),
|
||||
numInnerFunctions_(numInnerFunctions),
|
||||
packedFields_(packedFields),
|
||||
fieldInitializers_(FieldInitializers::Invalid()),
|
||||
sourceStart_(sourceStart),
|
||||
|
@ -4889,7 +4904,9 @@ uint64_t LazyScript::packedFieldsForXDR() const {
|
|||
}
|
||||
|
||||
/* static */
|
||||
LazyScript* LazyScript::CreateRaw(JSContext* cx, HandleFunction fun,
|
||||
LazyScript* LazyScript::CreateRaw(JSContext* cx, uint32_t numClosedOverBindings,
|
||||
uint32_t numInnerFunctions,
|
||||
HandleFunction fun,
|
||||
HandleScriptSourceObject sourceObject,
|
||||
uint64_t packedFields, uint32_t sourceStart,
|
||||
uint32_t sourceEnd, uint32_t toStringStart,
|
||||
|
@ -4907,8 +4924,8 @@ LazyScript* LazyScript::CreateRaw(JSContext* cx, HandleFunction fun,
|
|||
// Reset runtime flags to obtain a fresh LazyScript.
|
||||
p.hasBeenCloned = false;
|
||||
|
||||
size_t bytes = (p.numClosedOverBindings * sizeof(JSAtom*)) +
|
||||
(p.numInnerFunctions * sizeof(GCPtrFunction));
|
||||
size_t bytes = (numClosedOverBindings * sizeof(JSAtom*)) +
|
||||
(numInnerFunctions * sizeof(GCPtrFunction));
|
||||
|
||||
UniquePtr<uint8_t, JS::FreePolicy> table;
|
||||
if (bytes) {
|
||||
|
@ -4926,8 +4943,9 @@ LazyScript* LazyScript::CreateRaw(JSContext* cx, HandleFunction fun,
|
|||
cx->realm()->scheduleDelazificationForDebugger();
|
||||
|
||||
return new (res)
|
||||
LazyScript(fun, *sourceObject, table.release(), packed, sourceStart,
|
||||
sourceEnd, toStringStart, lineno, column);
|
||||
LazyScript(numClosedOverBindings, numInnerFunctions, fun, *sourceObject,
|
||||
table.release(), packed, sourceStart, sourceEnd, toStringStart,
|
||||
lineno, column);
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
@ -4947,8 +4965,6 @@ LazyScript* LazyScript::Create(JSContext* cx, HandleFunction fun,
|
|||
p.hasThisBinding = false;
|
||||
p.isAsync = false;
|
||||
p.hasRest = false;
|
||||
p.numClosedOverBindings = closedOverBindings.length();
|
||||
p.numInnerFunctions = innerFunctions.length();
|
||||
p.isGenerator = false;
|
||||
p.strict = false;
|
||||
p.bindingsAccessedDynamically = false;
|
||||
|
@ -4961,9 +4977,10 @@ LazyScript* LazyScript::Create(JSContext* cx, HandleFunction fun,
|
|||
p.isBinAST = false;
|
||||
p.parseGoal = uint32_t(parseGoal);
|
||||
|
||||
LazyScript* res =
|
||||
LazyScript::CreateRaw(cx, fun, sourceObject, packedFields, sourceStart,
|
||||
sourceEnd, toStringStart, lineno, column);
|
||||
LazyScript* res = LazyScript::CreateRaw(
|
||||
cx, closedOverBindings.length(), innerFunctions.length(), fun,
|
||||
sourceObject, packedFields, sourceStart, sourceEnd, toStringStart, lineno,
|
||||
column);
|
||||
if (!res) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -4986,11 +5003,11 @@ LazyScript* LazyScript::Create(JSContext* cx, HandleFunction fun,
|
|||
|
||||
/* static */
|
||||
LazyScript* LazyScript::CreateForXDR(
|
||||
JSContext* cx, HandleFunction fun, HandleScript script,
|
||||
HandleScope enclosingScope, HandleScriptSourceObject sourceObject,
|
||||
uint64_t packedFields, uint32_t sourceStart, uint32_t sourceEnd,
|
||||
uint32_t toStringStart, uint32_t toStringEnd, uint32_t lineno,
|
||||
uint32_t column) {
|
||||
JSContext* cx, uint32_t numClosedOverBindings, uint32_t numInnerFunctions,
|
||||
HandleFunction fun, HandleScript script, HandleScope enclosingScope,
|
||||
HandleScriptSourceObject sourceObject, uint64_t packedFields,
|
||||
uint32_t sourceStart, uint32_t sourceEnd, uint32_t toStringStart,
|
||||
uint32_t toStringEnd, uint32_t lineno, uint32_t column) {
|
||||
// Dummy atom which is not a valid property name.
|
||||
RootedAtom dummyAtom(cx, cx->names().comma);
|
||||
|
||||
|
@ -4998,9 +5015,9 @@ LazyScript* LazyScript::CreateForXDR(
|
|||
// holding this lazy script.
|
||||
HandleFunction dummyFun = fun;
|
||||
|
||||
LazyScript* res =
|
||||
LazyScript::CreateRaw(cx, fun, sourceObject, packedFields, sourceStart,
|
||||
sourceEnd, toStringStart, lineno, column);
|
||||
LazyScript* res = LazyScript::CreateRaw(
|
||||
cx, numClosedOverBindings, numInnerFunctions, fun, sourceObject,
|
||||
packedFields, sourceStart, sourceEnd, toStringStart, lineno, column);
|
||||
if (!res) {
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -2976,18 +2976,15 @@ class LazyScript : public gc::TenuredCell {
|
|||
static const uint32_t NumClosedOverBindingsBits = 20;
|
||||
static const uint32_t NumInnerFunctionsBits = 20;
|
||||
|
||||
uint32_t numClosedOverBindings_;
|
||||
uint32_t numInnerFunctions_;
|
||||
|
||||
struct PackedView {
|
||||
uint32_t shouldDeclareArguments : 1;
|
||||
uint32_t hasThisBinding : 1;
|
||||
uint32_t isAsync : 1;
|
||||
uint32_t isBinAST : 1;
|
||||
|
||||
uint32_t numClosedOverBindings : NumClosedOverBindingsBits;
|
||||
|
||||
// -- 32bit boundary --
|
||||
|
||||
uint32_t numInnerFunctions : NumInnerFunctionsBits;
|
||||
|
||||
// N.B. These are booleans but need to be uint32_t to pack correctly on
|
||||
// MSVC. If you add another boolean here, make sure to initialize it in
|
||||
// LazyScript::Create().
|
||||
|
@ -3025,14 +3022,16 @@ class LazyScript : public gc::TenuredCell {
|
|||
uint32_t lineno_;
|
||||
uint32_t column_;
|
||||
|
||||
LazyScript(JSFunction* fun, ScriptSourceObject& sourceObject, void* table,
|
||||
LazyScript(uint32_t numClosedOverBindings, uint32_t numInnerFunctions,
|
||||
JSFunction* fun, ScriptSourceObject& sourceObject, void* table,
|
||||
uint64_t packedFields, uint32_t sourceStart, uint32_t sourceEnd,
|
||||
uint32_t toStringStart, uint32_t lineno, uint32_t column);
|
||||
|
||||
// Create a LazyScript without initializing the closedOverBindings and the
|
||||
// innerFunctions. To be GC-safe, the caller must initialize both vectors
|
||||
// with valid atoms and functions.
|
||||
static LazyScript* CreateRaw(JSContext* cx, HandleFunction fun,
|
||||
static LazyScript* CreateRaw(JSContext* cx, uint32_t numClosedOverBindings,
|
||||
uint32_t numInnerFunctions, HandleFunction fun,
|
||||
HandleScriptSourceObject sourceObject,
|
||||
uint64_t packedData, uint32_t sourceStart,
|
||||
uint32_t sourceEnd, uint32_t toStringStart,
|
||||
|
@ -3062,14 +3061,12 @@ class LazyScript : public gc::TenuredCell {
|
|||
//
|
||||
// The sourceObject and enclosingScope arguments may be null if the
|
||||
// enclosing function is also lazy.
|
||||
static LazyScript* CreateForXDR(JSContext* cx, HandleFunction fun,
|
||||
HandleScript script,
|
||||
HandleScope enclosingScope,
|
||||
HandleScriptSourceObject sourceObject,
|
||||
uint64_t packedData, uint32_t sourceStart,
|
||||
uint32_t sourceEnd, uint32_t toStringStart,
|
||||
uint32_t toStringEnd, uint32_t lineno,
|
||||
uint32_t column);
|
||||
static LazyScript* CreateForXDR(
|
||||
JSContext* cx, uint32_t numClosedOverBindings, uint32_t numInnerFunctions,
|
||||
HandleFunction fun, HandleScript script, HandleScope enclosingScope,
|
||||
HandleScriptSourceObject sourceObject, uint64_t packedData,
|
||||
uint32_t sourceStart, uint32_t sourceEnd, uint32_t toStringStart,
|
||||
uint32_t toStringEnd, uint32_t lineno, uint32_t column);
|
||||
|
||||
static inline JSFunction* functionDelazifying(JSContext* cx,
|
||||
Handle<LazyScript*>);
|
||||
|
@ -3117,10 +3114,10 @@ class LazyScript : public gc::TenuredCell {
|
|||
ScriptSource* maybeForwardedScriptSource() const;
|
||||
bool mutedErrors() const { return scriptSource()->mutedErrors(); }
|
||||
|
||||
uint32_t numClosedOverBindings() const { return p_.numClosedOverBindings; }
|
||||
uint32_t numClosedOverBindings() const { return numClosedOverBindings_; }
|
||||
JSAtom** closedOverBindings() { return (JSAtom**)table_; }
|
||||
|
||||
uint32_t numInnerFunctions() const { return p_.numInnerFunctions; }
|
||||
uint32_t numInnerFunctions() const { return numInnerFunctions_; }
|
||||
GCPtrFunction* innerFunctions() {
|
||||
return (GCPtrFunction*)&closedOverBindings()[numClosedOverBindings()];
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче