JsValueRef WScriptJsrt::SetTimeoutCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { LPCWSTR errorMessage = _u("invalid call to WScript.SetTimeout"); JsValueRef function; JsValueRef timerId; unsigned int time; double tmp; CallbackMessage *msg = nullptr; if (argumentCount != 3) { goto Error; } function = arguments[1]; IfJsrtError(ChakraRTInterface::JsNumberToDouble(arguments[2], &tmp)); time = static_cast<int>(tmp); msg = new CallbackMessage(time, function); messageQueue->InsertSorted(msg); #if ENABLE_TTD ChakraRTInterface::JsTTDNotifyHostCallbackCreatedOrCanceled(true /*isCreate*/, false /*isCancel*/, false /*isRepeating*/, function, msg->GetId()); #endif IfJsrtError(ChakraRTInterface::JsDoubleToNumber(static_cast<double>(msg->GetId()), &timerId)); return timerId; Error: JsValueRef errorObject; JsValueRef errorMessageString; ERROR_MESSAGE_TO_STRING(errorCode, errorMessage, errorMessageString); if (errorCode != JsNoError) { errorCode = ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); if (errorCode != JsNoError) { ChakraRTInterface::JsSetException(errorObject); } } return JS_INVALID_REFERENCE; }
JsValueRef WScriptJsrt::SetTimeoutCallback(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { LPWSTR errorMessage = L"invalid call to WScript.SetTimeout"; if (argumentCount != 3) { goto Error; } JsValueRef function = arguments[1]; JsValueRef timerId; unsigned int time; double tmp; CallbackMessage *msg = nullptr; IfJsrtError(ChakraRTInterface::JsNumberToDouble(arguments[2], &tmp)); time = static_cast<int>(tmp); msg = new CallbackMessage(time, function); messageQueue->Push(msg); IfJsrtError(ChakraRTInterface::JsDoubleToNumber(static_cast<double>(msg->GetId()), &timerId)); return timerId; Error: JsValueRef errorObject; JsValueRef errorMessageString; JsErrorCode errorCode = ChakraRTInterface::JsPointerToString(errorMessage, wcslen(errorMessage), &errorMessageString); if (errorCode != JsNoError) { errorCode = ChakraRTInterface::JsCreateError(errorMessageString, &errorObject); if (errorCode != JsNoError) { ChakraRTInterface::JsSetException(errorObject); } } return JS_INVALID_REFERENCE; }