Skip to content

Commit f7da4b1

Browse files
authored
Merge branch 'master' into wasm.simd.tests
2 parents fcb9787 + 77074f1 commit f7da4b1

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
@@ -447,6 +447,15 @@ GlobOpt::ProcessFieldKills(IR::Instr *instr, BVSparse<JitArenaAllocator> *bv, bo
447447
}
448448
break;
449449

450+
case Js::OpCode::InitClass:
451+
case Js::OpCode::InitProto:
452+
case Js::OpCode::NewScObjectNoCtor:
453+
if (inGlobOpt)
454+
{
455+
KillObjectHeaderInlinedTypeSyms(this->currentBlock, false);
456+
}
457+
break;
458+
450459
default:
451460
if (instr->UsesAllFields())
452461
{

lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,26 @@ namespace Js
131131
return;
132132
}
133133

134+
struct AutoRestoreFlags
135+
{
136+
ThreadContext * ctx;
137+
ImplicitCallFlags savedImplicitCallFlags;
138+
DisableImplicitFlags savedDisableImplicitFlags;
139+
AutoRestoreFlags(ThreadContext *ctx, Js::ImplicitCallFlags implFlags, DisableImplicitFlags disableImplFlags) :
140+
ctx(ctx),
141+
savedImplicitCallFlags(implFlags),
142+
savedDisableImplicitFlags(disableImplFlags)
143+
{
144+
ctx->ClearDisableImplicitFlags();
145+
}
146+
147+
~AutoRestoreFlags()
148+
{
149+
ctx->SetImplicitCallFlags((Js::ImplicitCallFlags)(savedImplicitCallFlags));
150+
ctx->SetDisableImplicitFlags((DisableImplicitFlags)savedDisableImplicitFlags);
151+
}
152+
};
153+
134154
try {
135155
EnsureJsBuiltInByteCode(scriptContext);
136156
Assert(jsBuiltInByteCode != nullptr);
@@ -168,19 +188,19 @@ namespace Js
168188
scriptContext->GetThreadContext()->SetNoJsReentrancy(false);
169189
#endif
170190
// Clear disable implicit call bit as initialization code doesn't have any side effect
171-
Js::ImplicitCallFlags saveImplicitCallFlags = scriptContext->GetThreadContext()->GetImplicitCallFlags();
172-
scriptContext->GetThreadContext()->ClearDisableImplicitFlags();
173-
JavascriptFunction::CallRootFunctionInScript(functionGlobal, Js::Arguments(callInfo, args));
174-
scriptContext->GetThreadContext()->SetImplicitCallFlags((Js::ImplicitCallFlags)(saveImplicitCallFlags));
191+
{
192+
AutoRestoreFlags autoRestoreFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags());
193+
JavascriptFunction::CallRootFunctionInScript(functionGlobal, Js::Arguments(callInfo, args));
194+
}
175195

176196
Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode->GetNestedFunctionForExecution(0));
177197
functionBuiltins->SetPrototype(scriptContext->GetLibrary()->nullValue);
178198

179199
// Clear disable implicit call bit as initialization code doesn't have any side effect
180-
saveImplicitCallFlags = scriptContext->GetThreadContext()->GetImplicitCallFlags();
181-
scriptContext->GetThreadContext()->ClearDisableImplicitFlags();
182-
JavascriptFunction::CallRootFunctionInScript(functionBuiltins, Js::Arguments(callInfo, args));
183-
scriptContext->GetThreadContext()->SetImplicitCallFlags((Js::ImplicitCallFlags)(saveImplicitCallFlags));
200+
{
201+
AutoRestoreFlags autoRestoreFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags());
202+
JavascriptFunction::CallRootFunctionInScript(functionBuiltins, Js::Arguments(callInfo, args));
203+
}
184204

185205
InitializePrototypes(scriptContext);
186206
#if DBG_DUMP

0 commit comments

Comments
 (0)