Skip to content

Commit 9997a53

Browse files
committed
[MERGE #5899 @rajatd] January 2019 servicing update
Merge pull request #5899 from rajatd:servicing/1901
2 parents daa5d25 + 788f17b commit 9997a53

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

lib/Backend/GlobOptFields.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,15 @@ GlobOpt::ProcessFieldKills(IR::Instr *instr, BVSparse<JitArenaAllocator> *bv, bo
456456
}
457457
break;
458458

459+
case Js::OpCode::InitClass:
460+
case Js::OpCode::InitProto:
461+
case Js::OpCode::NewScObjectNoCtor:
462+
if (inGlobOpt)
463+
{
464+
KillObjectHeaderInlinedTypeSyms(this->currentBlock, false);
465+
}
466+
break;
467+
459468
default:
460469
if (instr->UsesAllFields())
461470
{

lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,26 @@ namespace Js
100100
{
101101
return;
102102
}
103+
104+
struct AutoRestoreFlags
105+
{
106+
ThreadContext * ctx;
107+
ImplicitCallFlags savedImplicitCallFlags;
108+
DisableImplicitFlags savedDisableImplicitFlags;
109+
AutoRestoreFlags(ThreadContext *ctx, Js::ImplicitCallFlags implFlags, DisableImplicitFlags disableImplFlags) :
110+
ctx(ctx),
111+
savedImplicitCallFlags(implFlags),
112+
savedDisableImplicitFlags(disableImplFlags)
113+
{
114+
ctx->ClearDisableImplicitFlags();
115+
}
116+
117+
~AutoRestoreFlags()
118+
{
119+
ctx->SetImplicitCallFlags((Js::ImplicitCallFlags)(savedImplicitCallFlags));
120+
ctx->SetDisableImplicitFlags((DisableImplicitFlags)savedDisableImplicitFlags);
121+
}
122+
};
103123

104124
try {
105125
EnsureJsBuiltInByteCode(scriptContext);
@@ -138,19 +158,19 @@ namespace Js
138158
scriptContext->GetThreadContext()->SetNoJsReentrancy(false);
139159
#endif
140160
// Clear disable implicit call bit as initialization code doesn't have any side effect
141-
Js::ImplicitCallFlags saveImplicitCallFlags = scriptContext->GetThreadContext()->GetImplicitCallFlags();
142-
scriptContext->GetThreadContext()->ClearDisableImplicitFlags();
143-
JavascriptFunction::CallRootFunctionInScript(functionGlobal, Js::Arguments(callInfo, args));
144-
scriptContext->GetThreadContext()->SetImplicitCallFlags((Js::ImplicitCallFlags)(saveImplicitCallFlags));
161+
{
162+
AutoRestoreFlags autoRestoreFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags());
163+
JavascriptFunction::CallRootFunctionInScript(functionGlobal, Js::Arguments(callInfo, args));
164+
}
145165

146166
Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode->GetNestedFunctionForExecution(0));
147167
functionBuiltins->SetPrototype(scriptContext->GetLibrary()->nullValue);
148168

149169
// Clear disable implicit call bit as initialization code doesn't have any side effect
150-
saveImplicitCallFlags = scriptContext->GetThreadContext()->GetImplicitCallFlags();
151-
scriptContext->GetThreadContext()->ClearDisableImplicitFlags();
152-
JavascriptFunction::CallRootFunctionInScript(functionBuiltins, Js::Arguments(callInfo, args));
153-
scriptContext->GetThreadContext()->SetImplicitCallFlags((Js::ImplicitCallFlags)(saveImplicitCallFlags));
170+
{
171+
AutoRestoreFlags autoRestoreFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags());
172+
JavascriptFunction::CallRootFunctionInScript(functionBuiltins, Js::Arguments(callInfo, args));
173+
}
154174

155175
InitializePrototypes(scriptContext);
156176
#if DBG_DUMP

0 commit comments

Comments
 (0)