@@ -246,40 +246,32 @@ JsValueRef WScriptJsrt::LoadScriptFileHelper(JsValueRef callee, JsValueRef *argu
246
246
}
247
247
248
248
Error:
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
- }
263
249
250
+ SetExceptionIf (errorCode, errorMessage);
264
251
return returnValue;
265
252
}
266
253
267
254
void WScriptJsrt::SetExceptionIf (JsErrorCode errorCode, LPCWSTR errorMessage)
268
255
{
269
256
if (errorCode != JsNoError)
270
257
{
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))
275
261
{
276
- errorMessage = ConvertErrorCodeToMessage (errorCode);
277
- }
262
+ JsValueRef errorObject;
263
+ JsValueRef errorMessageString;
264
+
265
+ if (wcscmp (errorMessage, _u (" " )) == 0 )
266
+ {
267
+ errorMessage = ConvertErrorCodeToMessage (errorCode);
268
+ }
278
269
279
- ERROR_MESSAGE_TO_STRING (errCode, errorMessage, errorMessageString);
270
+ ERROR_MESSAGE_TO_STRING (errCode, errorMessage, errorMessageString);
280
271
281
- ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
282
- ChakraRTInterface::JsSetException (errorObject);
272
+ ChakraRTInterface::JsCreateError (errorMessageString, &errorObject);
273
+ ChakraRTInterface::JsSetException (errorObject);
274
+ }
283
275
}
284
276
}
285
277
@@ -603,30 +595,7 @@ JsValueRef WScriptJsrt::LoadScriptHelper(JsValueRef callee, bool isConstructCall
603
595
}
604
596
605
597
Error:
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);
630
599
return returnValue;
631
600
}
632
601
@@ -746,7 +715,6 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName,
746
715
JsErrorCode errorCode = JsNoError;
747
716
LPCWSTR errorMessage = _u (" Internal error." );
748
717
JsValueRef returnValue = JS_INVALID_REFERENCE;
749
- JsErrorCode innerErrorCode = JsNoError;
750
718
JsContextRef currentContext = JS_INVALID_REFERENCE;
751
719
JsRuntimeHandle runtime = JS_INVALID_RUNTIME_HANDLE;
752
720
void *callbackArg = (finalizeCallback != nullptr ? (void *)fileContent : nullptr );
@@ -887,35 +855,7 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName,
887
855
JsValueRef value = returnValue;
888
856
if (errorCode != JsNoError)
889
857
{
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);
919
859
ChakraRTInterface::JsDoubleToNumber (errorCode, &value);
920
860
}
921
861
@@ -927,6 +867,8 @@ JsValueRef WScriptJsrt::LoadScript(JsValueRef callee, LPCSTR fileName,
927
867
JsValueRef WScriptJsrt::SetTimeoutCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
928
868
{
929
869
LPCWSTR errorMessage = _u (" invalid call to WScript.SetTimeout" );
870
+ JsErrorCode errorCode = JsNoError;
871
+ HRESULT hr = S_OK;
930
872
931
873
JsValueRef function;
932
874
JsValueRef timerId;
@@ -936,79 +878,53 @@ JsValueRef WScriptJsrt::SetTimeoutCallback(JsValueRef callee, bool isConstructCa
936
878
937
879
if (argumentCount != 3 )
938
880
{
881
+ errorCode = JsErrorInvalidArgument;
939
882
goto Error;
940
883
}
941
884
942
885
function = arguments[1 ];
943
886
944
- IfJsrtError (ChakraRTInterface::JsNumberToDouble (arguments[2 ], &tmp));
887
+ IfJsrtErrorSetGo (ChakraRTInterface::JsNumberToDouble (arguments[2 ], &tmp));
945
888
946
889
time = static_cast <int >(tmp);
947
890
msg = new CallbackMessage (time, function);
948
891
messageQueue->InsertSorted (msg);
949
892
950
- IfJsrtError (ChakraRTInterface::JsDoubleToNumber (static_cast <double >(msg->GetId ()), &timerId));
893
+ IfJsrtErrorSetGo (ChakraRTInterface::JsDoubleToNumber (static_cast <double >(msg->GetId ()), &timerId));
951
894
return timerId;
952
895
953
896
Error:
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);
969
898
return JS_INVALID_REFERENCE;
970
899
}
971
900
972
901
JsValueRef WScriptJsrt::ClearTimeoutCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
973
902
{
974
903
LPCWSTR errorMessage = _u (" invalid call to WScript.ClearTimeout" );
904
+ JsErrorCode errorCode = JsNoError;
905
+ HRESULT hr = S_OK;
975
906
976
907
if (argumentCount != 2 )
977
908
{
909
+ errorCode = JsErrorInvalidArgument;
978
910
goto Error;
979
911
}
980
912
981
913
unsigned int timerId;
982
914
double tmp;
983
915
JsValueRef undef;
984
- JsValueRef global;
985
916
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
+ }
993
922
923
+ IfJsrtErrorSetGo (ChakraRTInterface::JsGetUndefinedValue (&undef));
994
924
return undef;
995
925
996
926
Error:
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);
1012
928
return JS_INVALID_REFERENCE;
1013
929
}
1014
930
@@ -1021,14 +937,18 @@ void QueueDebugOperation(JsValueRef function, const DebugOperationFunc& operatio
1021
937
JsValueRef WScriptJsrt::AttachCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
1022
938
{
1023
939
LPCWSTR errorMessage = _u (" WScript.Attach requires a function, like WScript.Attach(foo);" );
940
+ JsErrorCode errorCode = JsNoError;
941
+ HRESULT hr = S_OK;
1024
942
JsValueType argumentType = JsUndefined;
1025
943
if (argumentCount != 2 )
1026
944
{
945
+ errorCode = JsErrorInvalidArgument;
1027
946
goto Error;
1028
947
}
1029
- IfJsrtError (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
948
+ IfJsrtErrorSetGo (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
1030
949
if (argumentType != JsFunction)
1031
950
{
951
+ errorCode = JsErrorInvalidArgument;
1032
952
goto Error;
1033
953
}
1034
954
QueueDebugOperation (arguments[1 ], [](WScriptJsrt::CallbackMessage& msg)
@@ -1045,33 +965,25 @@ JsValueRef WScriptJsrt::AttachCallback(JsValueRef callee, bool isConstructCall,
1045
965
return msg.CallFunction (" " );
1046
966
});
1047
967
Error:
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);
1061
969
return JS_INVALID_REFERENCE;
1062
970
}
1063
971
1064
972
JsValueRef WScriptJsrt::DetachCallback (JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState)
1065
973
{
1066
974
LPCWSTR errorMessage = _u (" WScript.Detach requires a function, like WScript.Detach(foo);" );
975
+ JsErrorCode errorCode = JsNoError;
976
+ HRESULT hr = S_OK;
1067
977
JsValueType argumentType = JsUndefined;
1068
978
if (argumentCount != 2 )
1069
979
{
980
+ errorCode = JsErrorInvalidArgument;
1070
981
goto Error;
1071
982
}
1072
- IfJsrtError (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
983
+ IfJsrtErrorSetGo (ChakraRTInterface::JsGetValueType (arguments[1 ], &argumentType));
1073
984
if (argumentType != JsFunction)
1074
985
{
986
+ errorCode = JsErrorInvalidArgument;
1075
987
goto Error;
1076
988
}
1077
989
QueueDebugOperation (arguments[1 ], [](WScriptJsrt::CallbackMessage& msg)
@@ -1088,19 +1000,7 @@ JsValueRef WScriptJsrt::DetachCallback(JsValueRef callee, bool isConstructCall,
1088
1000
return msg.CallFunction (" " );
1089
1001
});
1090
1002
Error:
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);
1104
1004
return JS_INVALID_REFERENCE;
1105
1005
}
1106
1006
0 commit comments