Skip to content

Commit 172bac8

Browse files
committed
[MERGE #4614 @jackhorton] Fix error messages on errors created through the JSRT
Merge pull request #4614 from jackhorton:jsrt_error_message This will unblock the 01/14/18 node merge pump
2 parents 0615a51 + f62d4d4 commit 172bac8

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

Diff for: lib/Jsrt/Jsrt.cpp

+27-8
Original file line numberDiff line numberDiff line change
@@ -2890,9 +2890,28 @@ CHAKRA_API JsCreateNamedFunction(_In_ JsValueRef name, _In_ JsNativeFunction nat
28902890
return JsCreateEnhancedFunctionHelper<true>(nativeFunction, name, callbackState, function);
28912891
}
28922892

2893-
void SetErrorMessage(Js::ScriptContext *scriptContext, JsValueRef newError, JsValueRef message)
2893+
void SetErrorMessage(Js::ScriptContext *scriptContext, Js::JavascriptError *newError, JsValueRef message)
28942894
{
2895-
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+
}
28962915
}
28972916

28982917
CHAKRA_API JsCreateError(_In_ JsValueRef message, _Out_ JsValueRef *error)
@@ -2904,7 +2923,7 @@ CHAKRA_API JsCreateError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29042923
PARAM_NOT_NULL(error);
29052924
*error = nullptr;
29062925

2907-
JsValueRef newError = scriptContext->GetLibrary()->CreateError();
2926+
Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateError();
29082927
SetErrorMessage(scriptContext, newError, message);
29092928
*error = newError;
29102929

@@ -2923,7 +2942,7 @@ CHAKRA_API JsCreateRangeError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29232942
PARAM_NOT_NULL(error);
29242943
*error = nullptr;
29252944

2926-
JsValueRef newError = scriptContext->GetLibrary()->CreateRangeError();
2945+
Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateRangeError();
29272946
SetErrorMessage(scriptContext, newError, message);
29282947
*error = newError;
29292948

@@ -2942,7 +2961,7 @@ CHAKRA_API JsCreateReferenceError(_In_ JsValueRef message, _Out_ JsValueRef *err
29422961
PARAM_NOT_NULL(error);
29432962
*error = nullptr;
29442963

2945-
JsValueRef newError = scriptContext->GetLibrary()->CreateReferenceError();
2964+
Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateReferenceError();
29462965
SetErrorMessage(scriptContext, newError, message);
29472966
*error = newError;
29482967

@@ -2961,7 +2980,7 @@ CHAKRA_API JsCreateSyntaxError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29612980
PARAM_NOT_NULL(error);
29622981
*error = nullptr;
29632982

2964-
JsValueRef newError = scriptContext->GetLibrary()->CreateSyntaxError();
2983+
Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateSyntaxError();
29652984
SetErrorMessage(scriptContext, newError, message);
29662985
*error = newError;
29672986

@@ -2980,7 +2999,7 @@ CHAKRA_API JsCreateTypeError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29802999
PARAM_NOT_NULL(error);
29813000
*error = nullptr;
29823001

2983-
JsValueRef newError = scriptContext->GetLibrary()->CreateTypeError();
3002+
Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateTypeError();
29843003
SetErrorMessage(scriptContext, newError, message);
29853004
*error = newError;
29863005

@@ -2999,7 +3018,7 @@ CHAKRA_API JsCreateURIError(_In_ JsValueRef message, _Out_ JsValueRef *error)
29993018
PARAM_NOT_NULL(error);
30003019
*error = nullptr;
30013020

3002-
JsValueRef newError = scriptContext->GetLibrary()->CreateURIError();
3021+
Js::JavascriptError *newError = scriptContext->GetLibrary()->CreateURIError();
30033022
SetErrorMessage(scriptContext, newError, message);
30043023
*error = newError;
30053024

0 commit comments

Comments
 (0)