@@ -246,40 +246,32 @@ JsValueRef WScriptJsrt::LoadScriptFileHelper(JsValueRef callee, JsValueRef *argu
246246 }
247247
248248Error:
249- if (errorCode != JsNoError)
250- {
251- JsValueRef errorObject;
252- JsValueRef errorMessageString;
253-
254- if (wcscmp (errorMessage, _u (" " )) == 0 ) {
255- errorMessage = ConvertErrorCodeToMessage (errorCode);
256- }
257-
258- ERROR_MESSAGE_TO_STRING (errCode, errorMessage, errorMessageString);
259-
260- ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
261- ChakraRTInterface::JsSetException (errorObject);
262- }
263249
250+ SetExceptionIf (errorCode, errorMessage);
264251 return returnValue;
265252}
266253
267254void WScriptJsrt::SetExceptionIf (JsErrorCode errorCode, LPCWSTR errorMessage)
268255{
269256 if (errorCode != JsNoError)
270257 {
271- JsValueRef errorObject;
272- JsValueRef errorMessageString;
273-
274- if (wcscmp (errorMessage, _u (" " )) == 0 )
258+ // If the exception is already is set - no need to create a new exception.
259+ bool hasException = false ;
260+ if (!(ChakraRTInterface::JsHasException (&hasException) == JsNoError && hasException))
275261 {
276- errorMessage = ConvertErrorCodeToMessage (errorCode);
277- }
262+ JsValueRef errorObject;
263+ JsValueRef errorMessageString;
264+
265+ if (wcscmp (errorMessage, _u (" " )) == 0 )
266+ {
267+ errorMessage = ConvertErrorCodeToMessage (errorCode);
268+ }
278269
279- ERROR_MESSAGE_TO_STRING (errCode, errorMessage, errorMessageString);
270+ ERROR_MESSAGE_TO_STRING (errCode, errorMessage, errorMessageString);
280271
281- ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
282- ChakraRTInterface::JsSetException (errorObject);
272+ ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
273+ ChakraRTInterface::JsSetException (errorObject);
274+ }
283275 }
284276}
285277
@@ -603,30 +595,7 @@ JsValueRef WScriptJsrt::LoadScriptHelper(JsValueRef callee, bool isConstructCall
603595 }
604596
605597Error:
606- if (errorCode != JsNoError)
607- {
608- // check and clear exception if any
609- bool hasException;
610- if (ChakraRTInterface::JsHasException (&hasException) == JsNoError && hasException)
611- {
612- JsValueRef unusedException = JS_INVALID_REFERENCE;
613- ChakraRTInterface::JsGetAndClearException (&unusedException);
614- unusedException;
615- }
616-
617- JsValueRef errorObject;
618- JsValueRef errorMessageString;
619-
620- if (wcscmp (errorMessage, _u (" " )) == 0 ) {
621- errorMessage = ConvertErrorCodeToMessage (errorCode);
622- }
623-
624- ERROR_MESSAGE_TO_STRING (errCode, errorMessage, errorMessageString);
625-
626- ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
627- ChakraRTInterface::JsSetException (errorObject);
628- }
629-
598+ SetExceptionIf (errorCode, errorMessage);
630599 return returnValue;
631600}
632601
@@ -746,7 +715,6 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName,
746715 JsErrorCode errorCode = JsNoError;
747716 LPCWSTR errorMessage = _u (" Internal error." );
748717 JsValueRef returnValue = JS_INVALID_REFERENCE;
749- JsErrorCode innerErrorCode = JsNoError;
750718 JsContextRef currentContext = JS_INVALID_REFERENCE;
751719 JsRuntimeHandle runtime = JS_INVALID_RUNTIME_HANDLE;
752720 void *callbackArg = (finalizeCallback != nullptr ? (void *)fileContent : nullptr );
@@ -887,35 +855,7 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName,
887855 JsValueRef value = returnValue;
888856 if (errorCode != JsNoError)
889857 {
890- if (innerErrorCode != JsNoError)
891- {
892- // Failed to retrieve the inner error message, so set a custom error string
893- errorMessage = ConvertErrorCodeToMessage (errorCode);
894- }
895-
896- JsValueRef error = JS_INVALID_REFERENCE;
897- JsValueRef messageProperty = JS_INVALID_REFERENCE;
898-
899- ERROR_MESSAGE_TO_STRING (errCode, errorMessage, messageProperty);
900-
901- if (errCode == JsNoError)
902- {
903- errCode = ChakraRTInterface::JsCreateError (messageProperty, &error);
904- if (errCode == JsNoError)
905- {
906- bool hasException = false ;
907- errorCode = ChakraRTInterface::JsHasException (&hasException);
908- if (errorCode == JsNoError && !hasException)
909- {
910- errCode = ChakraRTInterface::JsSetException (error);
911- }
912- else if (errCode == JsNoError)
913- {
914- errCode = JsErrorInExceptionState;
915- }
916- }
917- }
918-
858+ SetExceptionIf (errorCode, errorMessage);
919859 ChakraRTInterface::JsDoubleToNumber (errorCode, &value);
920860 }
921861
@@ -927,6 +867,8 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName,
927867JsValueRef WScriptJsrt::SetTimeoutCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
928868{
929869 LPCWSTR errorMessage = _u (" invalid call to WScript.SetTimeout" );
870+ JsErrorCode errorCode = JsNoError;
871+ HRESULT hr = S_OK;
930872
931873 JsValueRef function;
932874 JsValueRef timerId;
@@ -936,79 +878,53 @@ JsValueRef WScriptJsrt::SetTimeoutCallback(JsValueRef callee, bool isConstructCa
936878
937879 if (argumentCount != 3 )
938880 {
881+ errorCode = JsErrorInvalidArgument;
939882 goto Error;
940883 }
941884
942885 function = arguments[1 ];
943886
944- IfJsrtError (ChakraRTInterface::JsNumberToDouble (arguments[2 ], &tmp));
887+ IfJsrtErrorSetGo (ChakraRTInterface::JsNumberToDouble (arguments[2 ], &tmp));
945888
946889 time = static_cast <int >(tmp);
947890 msg = new CallbackMessage (time, function);
948891 messageQueue->InsertSorted (msg);
949892
950- IfJsrtError (ChakraRTInterface::JsDoubleToNumber (static_cast <double >(msg->GetId ()), &timerId));
893+ IfJsrtErrorSetGo (ChakraRTInterface::JsDoubleToNumber (static_cast <double >(msg->GetId ()), &timerId));
951894 return timerId;
952895
953896Error:
954- JsValueRef errorObject;
955- JsValueRef errorMessageString;
956-
957- ERROR_MESSAGE_TO_STRING (errorCode, errorMessage, errorMessageString);
958-
959- if (errorCode != JsNoError)
960- {
961- errorCode = ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
962-
963- if (errorCode != JsNoError)
964- {
965- ChakraRTInterface::JsSetException (errorObject);
966- }
967- }
968-
897+ SetExceptionIf (errorCode, errorMessage);
969898 return JS_INVALID_REFERENCE;
970899}
971900
972901JsValueRef WScriptJsrt::ClearTimeoutCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
973902{
974903 LPCWSTR errorMessage = _u (" invalid call to WScript.ClearTimeout" );
904+ JsErrorCode errorCode = JsNoError;
905+ HRESULT hr = S_OK;
975906
976907 if (argumentCount != 2 )
977908 {
909+ errorCode = JsErrorInvalidArgument;
978910 goto Error;
979911 }
980912
981913 unsigned int timerId;
982914 double tmp;
983915 JsValueRef undef;
984- JsValueRef global;
985916
986- IfJsrtError (ChakraRTInterface::JsNumberToDouble (arguments[1 ], &tmp));
987-
988- timerId = static_cast <int >(tmp);
989- messageQueue->RemoveById (timerId);
990-
991- IfJsrtError (ChakraRTInterface::JsGetGlobalObject (&global));
992- IfJsrtError (ChakraRTInterface::JsGetUndefinedValue (&undef));
917+ if (ChakraRTInterface::JsNumberToDouble (arguments[1 ], &tmp) == JsNoError)
918+ {
919+ timerId = static_cast <int >(tmp);
920+ messageQueue->RemoveById (timerId);
921+ }
993922
923+ IfJsrtErrorSetGo (ChakraRTInterface::JsGetUndefinedValue (&undef));
994924 return undef;
995925
996926Error:
997- JsValueRef errorObject;
998- JsValueRef errorMessageString;
999-
1000- ERROR_MESSAGE_TO_STRING (errorCode, errorMessage, errorMessageString);
1001-
1002- if (errorCode != JsNoError)
1003- {
1004- errorCode = ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
1005-
1006- if (errorCode != JsNoError)
1007- {
1008- ChakraRTInterface::JsSetException (errorObject);
1009- }
1010- }
1011-
927+ SetExceptionIf (errorCode, errorMessage);
1012928 return JS_INVALID_REFERENCE;
1013929}
1014930
@@ -1021,14 +937,18 @@ void QueueDebugOperation(JsValueRef function, const DebugOperationFunc& operatio
1021937JsValueRef WScriptJsrt::AttachCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
1022938{
1023939 LPCWSTR errorMessage = _u (" WScript.Attach requires a function, like WScript.Attach(foo);" );
940+ JsErrorCode errorCode = JsNoError;
941+ HRESULT hr = S_OK;
1024942 JsValueType argumentType = JsUndefined;
1025943 if (argumentCount != 2 )
1026944 {
945+ errorCode = JsErrorInvalidArgument;
1027946 goto Error;
1028947 }
1029- IfJsrtError (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
948+ IfJsrtErrorSetGo (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
1030949 if (argumentType != JsFunction)
1031950 {
951+ errorCode = JsErrorInvalidArgument;
1032952 goto Error;
1033953 }
1034954 QueueDebugOperation (arguments[1 ], [](WScriptJsrt::CallbackMessage& msg)
@@ -1045,33 +965,25 @@ JsValueRef WScriptJsrt::AttachCallback(JsValueRef callee, bool isConstructCall,
1045965 return msg.CallFunction (" " );
1046966 });
1047967Error:
1048- JsValueRef errorObject;
1049- JsValueRef errorMessageString;
1050-
1051- ERROR_MESSAGE_TO_STRING (errorCode, errorMessage, errorMessageString);
1052-
1053- if (errorCode != JsNoError)
1054- {
1055- errorCode = ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
1056- if (errorCode != JsNoError)
1057- {
1058- ChakraRTInterface::JsSetException (errorObject);
1059- }
1060- }
968+ SetExceptionIf (errorCode, errorMessage);
1061969 return JS_INVALID_REFERENCE;
1062970}
1063971
1064972JsValueRef WScriptJsrt::DetachCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
1065973{
1066974 LPCWSTR errorMessage = _u (" WScript.Detach requires a function, like WScript.Detach(foo);" );
975+ JsErrorCode errorCode = JsNoError;
976+ HRESULT hr = S_OK;
1067977 JsValueType argumentType = JsUndefined;
1068978 if (argumentCount != 2 )
1069979 {
980+ errorCode = JsErrorInvalidArgument;
1070981 goto Error;
1071982 }
1072- IfJsrtError (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
983+ IfJsrtErrorSetGo (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
1073984 if (argumentType != JsFunction)
1074985 {
986+ errorCode = JsErrorInvalidArgument;
1075987 goto Error;
1076988 }
1077989 QueueDebugOperation (arguments[1 ], [](WScriptJsrt::CallbackMessage& msg)
@@ -1088,19 +1000,7 @@ JsValueRef WScriptJsrt::DetachCallback(JsValueRef callee, bool isConstructCall,
10881000 return msg.CallFunction (" " );
10891001 });
10901002Error:
1091- JsValueRef errorObject;
1092- JsValueRef errorMessageString;
1093-
1094- ERROR_MESSAGE_TO_STRING (errorCode, errorMessage, errorMessageString);
1095-
1096- if (errorCode != JsNoError)
1097- {
1098- errorCode = ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
1099- if (errorCode != JsNoError)
1100- {
1101- ChakraRTInterface::JsSetException (errorObject);
1102- }
1103- }
1003+ SetExceptionIf (errorCode, errorMessage);
11041004 return JS_INVALID_REFERENCE;
11051005}
11061006
0 commit comments