Bug 1505784 part 1 - Copy immutableFlags_ word in CopyScript instead of copying each flag separately. r=tcampbell

Note: the old code didn't copy the HasNoScriptRval and SelfHosted flags, because
they are set to the correct values in CreateEmptyScriptForClone. That means it's
fine to copy them as part of the flags word.

The only change in behavior is that we now copy the IsLikelyConstructorWrapper
flag as well.

Differential Revision: https://phabricator.services.mozilla.com/D11325

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jan de Mooij 2018-11-08 16:47:14 +00:00
parent 815d536b18
commit 5b18ee9719

View File

@ -4119,31 +4119,17 @@ js::detail::CopyScript(JSContext* cx, HandleScript src, HandleScript dst,
dst->bodyScopeIndex_ = src->bodyScopeIndex_;
dst->funLength_ = src->funLength();
dst->nTypeSets_ = src->nTypeSets();
dst->immutableFlags_ = src->immutableFlags_;
dst->setFlag(ImmutableFlags::HasNonSyntacticScope,
scopes[0]->hasOnChain(ScopeKind::NonSyntactic));
if (src->argumentsHasVarBinding()) {
dst->setArgumentsHasVarBinding();
if (src->analyzedArgsUsage()) {
dst->setNeedsArgsObj(src->needsArgsObj());
}
}
dst->setFlag(ImmutableFlags::HasMappedArgsObj, src->hasMappedArgsObj());
dst->setFlag(ImmutableFlags::FunctionHasThisBinding, src->functionHasThisBinding());
dst->setFlag(ImmutableFlags::FunctionHasExtraBodyVarScope, src->functionHasExtraBodyVarScope());
dst->setFlag(ImmutableFlags::Strict, src->strict());
dst->setFlag(ImmutableFlags::ExplicitUseStrict, src->explicitUseStrict());
dst->setFlag(ImmutableFlags::HasNonSyntacticScope, scopes[0]->hasOnChain(ScopeKind::NonSyntactic));
dst->setFlag(ImmutableFlags::BindingsAccessedDynamically, src->bindingsAccessedDynamically());
dst->setFlag(ImmutableFlags::FunHasExtensibleScope, src->funHasExtensibleScope());
dst->setFlag(ImmutableFlags::FunHasAnyAliasedFormal, src->funHasAnyAliasedFormal());
dst->setFlag(ImmutableFlags::HasSingletons, src->hasSingletons());
dst->setFlag(ImmutableFlags::TreatAsRunOnce, src->treatAsRunOnce());
dst->setFlag(ImmutableFlags::HasInnerFunctions, src->hasInnerFunctions());
dst->setFlag(ImmutableFlags::IsGenerator, src->isGenerator());
dst->setFlag(ImmutableFlags::IsDerivedClassConstructor, src->isDerivedClassConstructor());
dst->setFlag(ImmutableFlags::NeedsHomeObject, src->needsHomeObject());
dst->setFlag(ImmutableFlags::IsDefaultClassConstructor, src->isDefaultClassConstructor());
dst->setFlag(ImmutableFlags::IsAsync, src->isAsync());
dst->setFlag(ImmutableFlags::HasRest, src->hasRest());
dst->setFlag(ImmutableFlags::HideScriptFromDebugger, src->hideScriptFromDebugger());
{
auto array = dst->data_->scopes();