static void gum_file_on_weak_notify (const WeakCallbackData<Object, GumFile> & data) { HandleScope handle_scope (data.GetIsolate ()); GumFile * self = data.GetParameter (); g_hash_table_remove (self->module->files, self); }
void ObjectManager::JSObjectWeakCallbackStatic(const WeakCallbackData<Object, ObjectWeakCallbackState>& data) { ObjectWeakCallbackState *callbackState = data.GetParameter(); ObjectManager *thisPtr = callbackState->thisPtr; auto isolate = data.GetIsolate(); thisPtr->JSObjectWeakCallback(isolate, callbackState); }
void WeakRef::WeakHolderCallback(const WeakCallbackData<Object, CallbackState>& data) { try { auto callbackState = data.GetParameter(); auto poHolder = callbackState->holder; auto isolate = data.GetIsolate(); auto holder = Local<Object>::New(isolate, *poHolder); auto poTarget = reinterpret_cast<Persistent<Object>*>(holder->GetHiddenValue(V8StringConstants::GetTarget()).As<External>()->Value()); if (poTarget != nullptr) { poHolder->SetWeak(callbackState, WeakHolderCallback); } else { poHolder->Reset(); delete poHolder; callbackState->holder = nullptr; if (callbackState->target == nullptr) { delete callbackState; } } } catch (NativeScriptException& e) { e.ReThrowToV8(); } catch (std::exception e) { stringstream ss; ss << "Error: c++ exception: " << e.what() << endl; NativeScriptException nsEx(ss.str()); nsEx.ReThrowToV8(); } catch (...) { NativeScriptException nsEx(std::string("Error: c++ exception!")); nsEx.ReThrowToV8(); } }
void WeakRef::WeakTargetCallback(const WeakCallbackData<Object, CallbackState>& data) { auto callbackState = data.GetParameter(); auto poTarget = callbackState->target; poTarget->Reset(); delete poTarget; callbackState->target = nullptr; auto isolate = data.GetIsolate(); auto poHolder = callbackState->holder; if (poHolder != nullptr) { auto holder = Local<Object>::New(isolate, *poHolder); holder->SetHiddenValue(V8StringConstants::GetTarget(), External::New(isolate, nullptr)); } if (callbackState->holder == nullptr) { delete callbackState; } }