Пример #1
0
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);
}
Пример #2
0
void ObjectManager::JSObjectWeakCallbackStatic(const WeakCallbackData<Object, ObjectWeakCallbackState>& data)
{
	ObjectWeakCallbackState *callbackState = data.GetParameter();

	ObjectManager *thisPtr = callbackState->thisPtr;

	auto isolate = data.GetIsolate();

	thisPtr->JSObjectWeakCallback(isolate, callbackState);
}
Пример #3
0
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();
	}
}
Пример #4
0
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;
	}
}