From 022d55681d29df02dbb36895b2c9b5c6025226be Mon Sep 17 00:00:00 2001 From: bencefr Date: Tue, 31 Jul 2018 09:18:39 +0200 Subject: [PATCH] Fix constructor and callback invokation with Nan --- src/adapter.cpp | 2 +- src/driver.cpp | 34 ++++++++++++------------ src/driver_gap.cpp | 62 +++++++++++++++++++++---------------------- src/driver_gattc.cpp | 20 +++++++------- src/driver_gatts.cpp | 18 ++++++------- src/serialadapter.cpp | 18 ++++++------- 6 files changed, 77 insertions(+), 77 deletions(-) diff --git a/src/adapter.cpp b/src/adapter.cpp index d70f7b0c..075f63cd 100644 --- a/src/adapter.cpp +++ b/src/adapter.cpp @@ -426,7 +426,7 @@ NAN_METHOD(Adapter::New) else { v8::Local cons = Nan::New(constructor); - info.GetReturnValue().Set(cons->NewInstance()); + info.GetReturnValue().Set(Nan::NewInstance(cons).ToLocalChecked()); } } diff --git a/src/driver.cpp b/src/driver.cpp index 3d935edb..6571c145 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -154,7 +154,7 @@ void Adapter::onLogEvent(uv_async_t *handle) v8::Local argv[2]; argv[0] = ConversionUtility::toJsNumber(static_cast(logEntry->severity)); argv[1] = ConversionUtility::toJsString(logEntry->message); - logCallback->Call(2, argv); + Nan::Call(*logCallback, 2, argv); } else { @@ -180,7 +180,7 @@ void Adapter::dispatchEvents() // Adapter::cleanUpV8Resources() is called from both Adapter::AfterClose and Adapter::AfterConnReset // // If Adapter::eventInterval is 0, this method, Adapter::dispatchEvents, will be called directly without being - // invoked from eventIntervalTimer. + // invoked from eventIntervalTimer. // // When Adapter::AfterClose is invoked, parts of Adapter::cleanUpV8Resources() is ran before the // the following call graph is complete: @@ -189,8 +189,8 @@ void Adapter::dispatchEvents() // // The above call graph is ran in thread SerializationTransport::eventThread when Adapter::eventInterval == 0. // - // If eventInterval != 0 the event is popped out of the Adapter::eventQueue queue by - // Adapter::eventIntervalTimer, in a libuv thread-pool thread. Adapter::eventIntervalTimer is stopped in + // If eventInterval != 0 the event is popped out of the Adapter::eventQueue queue by + // Adapter::eventIntervalTimer, in a libuv thread-pool thread. Adapter::eventIntervalTimer is stopped in // Adapter::cleanUpV8Resources(). // // A quick fix to circumvent this race condition is to ignore the event when Adapter::asyncEvent is nullptr. @@ -386,7 +386,7 @@ void Adapter::onRpcEvent(uv_async_t *handle) if (eventCallback != nullptr) { - eventCallback->Call(1, callback_value); + Nan::Call(*eventCallback, 1, callback_value); } else { @@ -442,7 +442,7 @@ void Adapter::onStatusEvent(uv_async_t *handle) { v8::Local argv[1]; argv[0] = StatusMessage::getStatus(statusEntry->id, statusEntry->message, statusEntry->timestamp); - statusCallback->Call(1, argv); + Nan::Call(*statusCallback, 1, argv); } // Free memory for current entry, we remove the element from the deque when the iteration is done @@ -583,7 +583,7 @@ void Adapter::AfterEnableBLE(uv_work_t *req) argv[2] = ConversionUtility::toJsNumber(baton->app_ram_base); } - baton->callback->Call(3, argv); + Nan::Call(*(baton->callback), 3, argv); delete baton->enable_params; delete baton; } @@ -786,7 +786,7 @@ void Adapter::AfterOpen(uv_work_t *req) } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -840,7 +840,7 @@ void Adapter::AfterClose(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); } delete baton; @@ -895,7 +895,7 @@ void Adapter::AfterConnReset(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); } delete baton; @@ -955,7 +955,7 @@ void Adapter::AfterAddVendorSpecificUUID(uv_work_t *req) argv[1] = ConversionUtility::toJsNumber(baton->p_uuid_type); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton; } @@ -1071,7 +1071,7 @@ void Adapter::AfterGetVersion(uv_work_t *req) argv[1] = Nan::Undefined(); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->version; delete baton; } @@ -1148,7 +1148,7 @@ void Adapter::AfterEncodeUUID(uv_work_t *req) argv[3] = ConversionUtility::encodeHex(reinterpret_cast(baton->uuid_le), baton->uuid_le_len); } - baton->callback->Call(4, argv); + Nan::Call(*(baton->callback), 4, argv); delete baton->uuid_le; delete baton; } @@ -1214,7 +1214,7 @@ void Adapter::AfterDecodeUUID(uv_work_t *req) argv[1] = BleUUID(baton->p_uuid); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_uuid; delete baton->uuid_le; delete baton; @@ -1299,7 +1299,7 @@ void Adapter::AfterReplyUserMemory(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->p_block; delete baton; } @@ -1375,7 +1375,7 @@ void Adapter::AfterSetBleOption(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1452,7 +1452,7 @@ void Adapter::AfterGetBleOption(uv_work_t *req) argv[1] = optionValue; } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_opt; delete baton; } diff --git a/src/driver_gap.cpp b/src/driver_gap.cpp index 50ed5154..61f1f908 100644 --- a/src/driver_gap.cpp +++ b/src/driver_gap.cpp @@ -1561,7 +1561,7 @@ void Adapter::AfterGapSetAddress(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1629,7 +1629,7 @@ void Adapter::AfterGapGetAddress(uv_work_t *req) argv[1] = Nan::Undefined(); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton; } @@ -1707,7 +1707,7 @@ void Adapter::AfterGapUpdateConnectionParameters(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1773,7 +1773,7 @@ void Adapter::AfterGapDisconnect(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1836,7 +1836,7 @@ void Adapter::AfterGapSetTXPower(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1917,7 +1917,7 @@ void Adapter::AfterGapSetDeviceName(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); free(baton->dev_name); delete baton; } @@ -1984,7 +1984,7 @@ void Adapter::AfterGapGetDeviceName(uv_work_t *req) argv[1] = Nan::Undefined(); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); free(baton->dev_name); delete baton; } @@ -2056,7 +2056,7 @@ void Adapter::AfterGapStartRSSI(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2117,7 +2117,7 @@ void Adapter::AfterGapStopRSSI(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2180,7 +2180,7 @@ void Adapter::AfterGapStartScan(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2236,7 +2236,7 @@ void Adapter::AfterGapStopScan(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2338,7 +2338,7 @@ void Adapter::AfterGapConnect(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2394,7 +2394,7 @@ void Adapter::AfterGapCancelConnect(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2461,7 +2461,7 @@ void Adapter::AfterGapGetRSSI(uv_work_t *req) argv[1] = Nan::Undefined(); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton; } @@ -2532,7 +2532,7 @@ void Adapter::AfterGapStartAdvertising(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2588,7 +2588,7 @@ void Adapter::AfterGapStopAdvertising(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -2652,7 +2652,7 @@ void Adapter::AfterGapGetConnectionSecurity(uv_work_t *req) argv[1] = GapConnSec(baton->conn_sec).ToJs(); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->conn_sec; delete baton; } @@ -2742,7 +2742,7 @@ void Adapter::AfterGapEncrypt(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } #pragma endregion GapEncrypt @@ -2891,7 +2891,7 @@ void Adapter::AfterGapReplySecurityParameters(uv_work_t *req) } } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton; } @@ -2995,7 +2995,7 @@ void Adapter::AfterGapReplySecurityInfo(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -3071,7 +3071,7 @@ void Adapter::AfterGapAuthenticate(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -3163,7 +3163,7 @@ void Adapter::AfterGapSetAdvertisingData(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -3234,7 +3234,7 @@ void Adapter::AfterGapSetPPCP(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->p_conn_params; delete baton; } @@ -3294,7 +3294,7 @@ void Adapter::AfterGapGetPPCP(uv_work_t *req) argv[1] = GapConnParams(baton->p_conn_params); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_conn_params; delete baton; } @@ -3356,7 +3356,7 @@ void Adapter::AfterGapSetAppearance(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } #pragma endregion GapSetAppearance @@ -3412,7 +3412,7 @@ void Adapter::AfterGapGetAppearance(uv_work_t *req) argv[1] = ConversionUtility::toJsNumber(baton->appearance); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton; } #pragma endregion GapGetAppearance @@ -3499,7 +3499,7 @@ void Adapter::AfterGapReplyAuthKey(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } #pragma endregion GapReplyAuthKey @@ -3568,7 +3568,7 @@ void Adapter::AfterGapReplyDHKeyLESC(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->dhkey; delete baton; } @@ -3634,7 +3634,7 @@ void Adapter::AfterGapNotifyKeypress(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -3706,7 +3706,7 @@ void Adapter::AfterGapGetLESCOOBData(uv_work_t *req) argv[1] = GapLescOobData(baton->p_oobd_own); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_pk_own; delete baton->p_oobd_own; @@ -3799,7 +3799,7 @@ void Adapter::AfterGapSetLESCOOBData(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->p_oobd_own; delete baton->p_oobd_peer; diff --git a/src/driver_gattc.cpp b/src/driver_gattc.cpp index f3ecf103..5424198f 100644 --- a/src/driver_gattc.cpp +++ b/src/driver_gattc.cpp @@ -470,7 +470,7 @@ void Adapter::AfterGattcDiscoverPrimaryServices(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -544,7 +544,7 @@ void Adapter::AfterGattcDiscoverRelationship(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -617,7 +617,7 @@ void Adapter::AfterGattcDiscoverCharacteristics(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -690,7 +690,7 @@ void Adapter::AfterGattcDiscoverDescriptors(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -778,7 +778,7 @@ void Adapter::AfterGattcReadCharacteristicValueByUUID(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -846,7 +846,7 @@ void Adapter::AfterGattcRead(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -930,7 +930,7 @@ void Adapter::AfterGattcReadCharacteristicValues(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1003,7 +1003,7 @@ void Adapter::AfterGattcWrite(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1065,7 +1065,7 @@ void Adapter::AfterGattcConfirmHandleValue(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } @@ -1128,7 +1128,7 @@ void Adapter::AfterGattcExchangeMtuRequest(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } #endif diff --git a/src/driver_gatts.cpp b/src/driver_gatts.cpp index e9d4c0ff..8bf456be 100644 --- a/src/driver_gatts.cpp +++ b/src/driver_gatts.cpp @@ -455,7 +455,7 @@ void Adapter::AfterGattsAddService(uv_work_t *req) argv[1] = ConversionUtility::toJsNumber(baton->p_handle); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton; } @@ -544,7 +544,7 @@ void Adapter::AfterGattsAddCharacteristic(uv_work_t *req) argv[1] = GattsCharacteristicDefinitionHandles(baton->p_handles).ToJs(); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_handles; delete baton; @@ -620,7 +620,7 @@ void Adapter::AfterGattsAddDescriptor(uv_work_t *req) argv[1] = ConversionUtility::toJsNumber(baton->p_handle); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_attr; delete baton; @@ -696,7 +696,7 @@ void Adapter::AfterGattsHVX(uv_work_t *req) argv[1] = ConversionUtility::toJsNumber(*baton->p_hvx_params->p_len); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->p_hvx_params->p_len; delete baton->p_hvx_params; @@ -788,7 +788,7 @@ void Adapter::AfterGattsSystemAttributeSet(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->p_sys_attr_data; delete baton; @@ -869,7 +869,7 @@ void Adapter::AfterGattsSetValue(uv_work_t *req) argv[1] = GattsValue(baton->p_value); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_value; delete baton; @@ -950,7 +950,7 @@ void Adapter::AfterGattsGetValue(uv_work_t *req) argv[1] = GattsValue(baton->p_value); } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); delete baton->p_value; delete baton; @@ -1024,7 +1024,7 @@ void Adapter::AfterGattsReplyReadWriteAuthorize(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton->p_rw_authorize_reply_params; delete baton; @@ -1089,7 +1089,7 @@ void Adapter::AfterGattsExchangeMtuReply(uv_work_t *req) argv[0] = Nan::Undefined(); } - baton->callback->Call(1, argv); + Nan::Call(*(baton->callback), 1, argv); delete baton; } #endif diff --git a/src/serialadapter.cpp b/src/serialadapter.cpp index fb764183..3586558e 100644 --- a/src/serialadapter.cpp +++ b/src/serialadapter.cpp @@ -30,14 +30,14 @@ #include "serialadapter.h" #include "serial_port_enum.h" -NAN_METHOD(GetAdapterList) +NAN_METHOD(GetAdapterList) { if(!info[0]->IsFunction()) { Nan::ThrowTypeError("First argument must be a function"); return; } - + v8::Local callback = info[0].As(); auto baton = new AdapterListBaton(callback); strcpy(baton->errorString, ""); @@ -52,24 +52,24 @@ void GetAdapterList(uv_work_t *req) EnumSerialPorts(baton->results); } -void AfterGetAdapterList(uv_work_t* req) +void AfterGetAdapterList(uv_work_t* req) { Nan::HandleScope scope; auto baton = static_cast(req->data); v8::Local argv[2]; - + if(baton->errorString[0]) { argv[0] = v8::Exception::Error(Nan::New(baton->errorString).ToLocalChecked()); argv[1] = Nan::Undefined(); - } - else + } + else { v8::Local results = Nan::New(); auto i = 0; - for(auto adapterItem : baton->results) + for(auto adapterItem : baton->results) { v8::Local item = Nan::New(); Utility::Set(item, "comName", adapterItem->comName); @@ -86,9 +86,9 @@ void AfterGetAdapterList(uv_work_t* req) argv[1] = results; } - baton->callback->Call(2, argv); + Nan::Call(*(baton->callback), 2, argv); - for(auto it = baton->results.begin(); it != baton->results.end(); ++it) + for(auto it = baton->results.begin(); it != baton->results.end(); ++it) { delete *it; }