@@ -100,6 +100,26 @@ namespace Js
100
100
{
101
101
return ;
102
102
}
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
+ };
103
123
104
124
try {
105
125
EnsureJsBuiltInByteCode (scriptContext);
@@ -138,19 +158,19 @@ namespace Js
138
158
scriptContext->GetThreadContext ()->SetNoJsReentrancy (false );
139
159
#endif
140
160
// 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
+ }
145
165
146
166
Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary ()->CreateScriptFunction (jsBuiltInByteCode->GetNestedFunctionForExecution (0 ));
147
167
functionBuiltins->SetPrototype (scriptContext->GetLibrary ()->nullValue );
148
168
149
169
// 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
+ }
154
174
155
175
InitializePrototypes (scriptContext);
156
176
#if DBG_DUMP
0 commit comments