@@ -178,17 +178,27 @@ JsErrorCode CreateContextCore(_In_ JsRuntimeHandle runtimeHandle, _In_ TTDRecord
178178
179179 if (jsrtDebugManager != nullptr )
180180 {
181+ // JsDiagStartDebugging was called
182+ threadContext->GetDebugManager ()->SetLocalsDisplayFlags (Js::DebugManager::LocalsDisplayFlags::LocalsDisplayFlags_NoGroupMethods);
183+
181184 Js::ScriptContext* scriptContext = context->GetScriptContext ();
182- scriptContext->InitializeDebugging ();
183185
184186 Js::DebugContext* debugContext = scriptContext->GetDebugContext ();
185187 debugContext->SetHostDebugContext (jsrtDebugManager);
186188
187- Js::ProbeContainer* probeContainer = debugContext->GetProbeContainer ();
188- probeContainer->InitializeInlineBreakEngine (jsrtDebugManager);
189- probeContainer->InitializeDebuggerScriptOptionCallback (jsrtDebugManager);
190-
191- threadContext->GetDebugManager ()->SetLocalsDisplayFlags (Js::DebugManager::LocalsDisplayFlags::LocalsDisplayFlags_NoGroupMethods);
189+ if (!jsrtDebugManager->IsDebugEventCallbackSet ())
190+ {
191+ // JsDiagStopDebugging was called so we need to be in SourceRunDownMode
192+ debugContext->SetDebuggerMode (Js::DebuggerMode::SourceRundown);
193+ }
194+ else
195+ {
196+ // Set Debugging mode
197+ scriptContext->InitializeDebugging ();
198+ Js::ProbeContainer* probeContainer = debugContext->GetProbeContainer ();
199+ probeContainer->InitializeInlineBreakEngine (jsrtDebugManager);
200+ probeContainer->InitializeDebuggerScriptOptionCallback (jsrtDebugManager);
201+ }
192202 }
193203#endif
194204
@@ -2880,9 +2890,28 @@ CHAKRA_API JsCreateNamedFunction(_In_ JsValueRef name, _In_ JsNativeFunction nat
28802890 return JsCreateEnhancedFunctionHelper<true >(nativeFunction, name, callbackState, function);
28812891}
28822892
2883- void SetErrorMessage (Js::ScriptContext *scriptContext, JsValueRef newError, JsValueRef message)
2893+ void SetErrorMessage (Js::ScriptContext *scriptContext, Js::JavascriptError * newError, JsValueRef message)
28842894{
2885- Js::JavascriptOperators::OP_SetProperty (newError, Js::PropertyIds::message, message, scriptContext);
2895+ // ECMA262 #sec-error-message
2896+ if (!Js::JavascriptOperators::IsUndefined (message))
2897+ {
2898+ Js::JavascriptString *messageStr = nullptr ;
2899+ if (Js::JavascriptString::Is (message))
2900+ {
2901+ messageStr = Js::JavascriptString::FromVar (message);
2902+ }
2903+ else
2904+ {
2905+ messageStr = Js::JavascriptConversion::ToString (message, scriptContext);
2906+ }
2907+
2908+ Js::PropertyDescriptor desc;
2909+ desc.SetValue (messageStr);
2910+ desc.SetWritable (true );
2911+ desc.SetEnumerable (false );
2912+ desc.SetConfigurable (true );
2913+ Js::JavascriptOperators::SetPropertyDescriptor (newError, Js::PropertyIds::message, desc);
2914+ }
28862915}
28872916
28882917CHAKRA_API JsCreateError (_In_ JsValueRef message, _Out_ JsValueRef *error)
@@ -2894,7 +2923,7 @@ CHAKRA_API JsCreateError(_In_ JsValueRef message, _Out_ JsValueRef *error)
28942923 PARAM_NOT_NULL (error);
28952924 *error = nullptr ;
28962925
2897- JsValueRef newError = scriptContext->GetLibrary ()->CreateError ();
2926+ Js::JavascriptError * newError = scriptContext->GetLibrary ()->CreateError ();
28982927 SetErrorMessage (scriptContext, newError, message);
28992928 *error = newError;
29002929
@@ -2913,7 +2942,7 @@ CHAKRA_API JsCreateRangeError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29132942 PARAM_NOT_NULL (error);
29142943 *error = nullptr ;
29152944
2916- JsValueRef newError = scriptContext->GetLibrary ()->CreateRangeError ();
2945+ Js::JavascriptError * newError = scriptContext->GetLibrary ()->CreateRangeError ();
29172946 SetErrorMessage (scriptContext, newError, message);
29182947 *error = newError;
29192948
@@ -2932,7 +2961,7 @@ CHAKRA_API JsCreateReferenceError(_In_ JsValueRef message, _Out_ JsValueRef *err
29322961 PARAM_NOT_NULL (error);
29332962 *error = nullptr ;
29342963
2935- JsValueRef newError = scriptContext->GetLibrary ()->CreateReferenceError ();
2964+ Js::JavascriptError * newError = scriptContext->GetLibrary ()->CreateReferenceError ();
29362965 SetErrorMessage (scriptContext, newError, message);
29372966 *error = newError;
29382967
@@ -2951,7 +2980,7 @@ CHAKRA_API JsCreateSyntaxError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29512980 PARAM_NOT_NULL (error);
29522981 *error = nullptr ;
29532982
2954- JsValueRef newError = scriptContext->GetLibrary ()->CreateSyntaxError ();
2983+ Js::JavascriptError * newError = scriptContext->GetLibrary ()->CreateSyntaxError ();
29552984 SetErrorMessage (scriptContext, newError, message);
29562985 *error = newError;
29572986
@@ -2970,7 +2999,7 @@ CHAKRA_API JsCreateTypeError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29702999 PARAM_NOT_NULL (error);
29713000 *error = nullptr ;
29723001
2973- JsValueRef newError = scriptContext->GetLibrary ()->CreateTypeError ();
3002+ Js::JavascriptError * newError = scriptContext->GetLibrary ()->CreateTypeError ();
29743003 SetErrorMessage (scriptContext, newError, message);
29753004 *error = newError;
29763005
@@ -2989,7 +3018,7 @@ CHAKRA_API JsCreateURIError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29893018 PARAM_NOT_NULL (error);
29903019 *error = nullptr ;
29913020
2992- JsValueRef newError = scriptContext->GetLibrary ()->CreateURIError ();
3021+ Js::JavascriptError * newError = scriptContext->GetLibrary ()->CreateURIError ();
29933022 SetErrorMessage (scriptContext, newError, message);
29943023 *error = newError;
29953024
0 commit comments