diff --git a/Build/NuGet/.pack-version b/Build/NuGet/.pack-version index bcc565f2b49..de1a208d561 100644 --- a/Build/NuGet/.pack-version +++ b/Build/NuGet/.pack-version @@ -1 +1 @@ -1.11.18 +1.11.19 diff --git a/lib/Backend/GlobOptBailOut.cpp b/lib/Backend/GlobOptBailOut.cpp index f168545b3b2..21b0c7753b6 100644 --- a/lib/Backend/GlobOptBailOut.cpp +++ b/lib/Backend/GlobOptBailOut.cpp @@ -1204,7 +1204,8 @@ GlobOpt::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * s NeedBailOnImplicitCallForLiveValues(block, isForwardPass) || NeedBailOnImplicitCallForCSE(block, isForwardPass) || NeedBailOnImplicitCallWithFieldOpts(block->loop, hasLiveFields) || - NeedBailOnImplicitCallForArrayCheckHoist(block, isForwardPass) + NeedBailOnImplicitCallForArrayCheckHoist(block, isForwardPass) || + (instr->HasBailOutInfo() && (instr->GetBailOutKind() & IR::BailOutMarkTempObject) != 0) ) && (!instr->HasTypeCheckBailOut() && MayNeedBailOnImplicitCall(instr, src1Val, src2Val))) { diff --git a/lib/Common/ChakraCoreVersion.h b/lib/Common/ChakraCoreVersion.h index c8447b9a39e..5f649c36959 100644 --- a/lib/Common/ChakraCoreVersion.h +++ b/lib/Common/ChakraCoreVersion.h @@ -17,7 +17,7 @@ // ChakraCore version number definitions (used in ChakraCore binary metadata) #define CHAKRA_CORE_MAJOR_VERSION 1 #define CHAKRA_CORE_MINOR_VERSION 11 -#define CHAKRA_CORE_PATCH_VERSION 18 +#define CHAKRA_CORE_PATCH_VERSION 19 #define CHAKRA_CORE_VERSION_RELEASE_QFE 0 // Redundant with PATCH_VERSION. Keep this value set to 0. // ------------- diff --git a/lib/Runtime/ByteCode/ScopeInfo.cpp b/lib/Runtime/ByteCode/ScopeInfo.cpp index eb64b4a411e..b0f924c9f0f 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.cpp +++ b/lib/Runtime/ByteCode/ScopeInfo.cpp @@ -194,6 +194,23 @@ namespace Js ScopeInfo * scopeInfo = ScopeInfo::SaveScopeInfo(byteCodeGenerator, currentScope, byteCodeGenerator->GetScriptContext()); if (scopeInfo != nullptr) { + if (funcInfo->root->IsDeclaredInParamScope()) + { + FuncInfo* func = byteCodeGenerator->GetEnclosingFuncInfo(); + Assert(func); + + if (func->IsBodyAndParamScopeMerged()) + { + Assert(currentScope == func->GetParamScope() && currentScope->GetScopeType() == ScopeType_Parameter); + Assert(scopeInfo->GetScopeType() == ScopeType_Parameter); + Assert(func->GetBodyScope()); + + // If the current function is nested in the param scope of it's enclosing function we may have + // skipped the body scope and in may not be the scope stack but the body scope might still be + // in the frame display and we will need to account for it. See ByteCodeGenerateor::FindScopeForSym. + scopeInfo->mustInstantiate = func->GetBodyScope()->GetMustInstantiate(); + } + } funcInfo->byteCodeFunction->SetScopeInfo(scopeInfo); } }