JsValueRef CALLBACK addEventListener(JsValueRef callee, bool isConstructCall, JsValueRef *arguments, unsigned short argumentCount, void *callbackState) { JsValueRef result; JsValueType arg1, arg2; JsGetValueType(arguments[1], &arg1); JsGetValueType(arguments[2], &arg2); if (arg1 != JsString || arg2 != JsFunction) { JsGetFalseValue(&result); return result; } const wchar_t* stringValue; size_t length; JsStringToPointer(arguments[1], &stringValue, &length); wstring type(stringValue); if (type == L"main") { queue<Task*> * taskQueue = (queue<Task*> *)callbackState; taskQueue->push(new Task(arguments[2], true)); JsGetTrueValue(&result); } else { JsGetFalseValue(&result); } return result; }
JsErrorCode StringifyJsValue(JsValueRef value, USHORT depth, std::set<JsValueRef> seen) { JsValueType type; IfFailRet(JsGetValueType(value, &type)); switch (type) { case JsUndefined: OutputDebugStringW(L"undefined"); break; case JsNull: OutputDebugStringW(L"null"); break; case JsBoolean: IfFailRet(StringifyJsBoolean(value)); break; case JsString: IfFailRet(StringifyJsString(value)); break; case JsObject: IfFailRet(StringifyJsObject(value, depth, seen)); break; case JsFunction: IfFailRet(StringifyJsFunction(value)); break; case JsTypedArray: IfFailRet(StringifyJsTypedArray(value)); break; case JsArray: IfFailRet(StringifyJsArray(value, depth, seen)); break; case JsError: case JsNumber: case JsSymbol: case JsArrayBuffer: IfFailRet(StringifyToString(value)); break; } return JsNoError; }
BC_PLATFORMIMP_DLL core::bc_wstring bc_platform_script_error<core_platform::g_api_win32>::error_message() const { bc_chakra_call l_call; JsValueRef l_message_property; JsPropertyIdRef l_message_id; JsValueType l_message_type; l_call = JsGetPropertyIdFromName(L"message", &l_message_id); l_call = JsGetProperty(m_pack.m_js_error, l_message_id, &l_message_property); if(!l_call.successed()) { l_call.clear(); return L""; } JsGetValueType(l_message_property, &l_message_type); if(l_message_type != JsString) { return L""; } bcSIZE l_str_lenght; const bcWCHAR* l_str_data; l_call = JsStringToPointer(l_message_property, &l_str_data, &l_str_lenght); if(!l_call.successed()) { l_call.clear(); return L""; } return core::bc_wstring(l_str_data); }