MCPcopy Create free account
hub / github.com/nodejs/nan / SetWeak

Method SetWeak

nan_weak.h:258–309  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

256template<typename T, typename M>
257template<typename P>
258inline void Persistent<T, M>::SetWeak(
259 P *parameter
260 , typename WeakCallbackInfo<P>::Callback callback
261 , WeakCallbackType type) {
262 WeakCallbackInfo<P> *wcbd;
263 if (type == WeakCallbackType::kParameter) {
264 wcbd = new WeakCallbackInfo<P>(
265 reinterpret_cast<Persistent<v8::Value>*>(this)
266 , callback
267 , parameter);
268 v8::PersistentBase<T>::SetWeak(
269 wcbd
270 , WeakCallbackInfo<P>::template invokeparameter<true>
271 , type);
272 } else {
273 v8::Local<v8::Value>* self_v(reinterpret_cast<v8::Local<v8::Value>*>(this));
274 assert((*self_v)->IsObject());
275 v8::Local<v8::Object> self((*self_v).As<v8::Object>());
276 int count = self->InternalFieldCount();
277 void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0};
278 for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) {
279#if (V8_MAJOR_VERSION > 14) || \
280 (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION > 2) || \
281 (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION == 2 && V8_BUILD_NUMBER >= 194)
282 internal_fields[i] = self->GetAlignedPointerFromInternalField(
283 i, v8::kEmbedderDataTypeTagDefault
284 );
285# else
286 internal_fields[i] = self->GetAlignedPointerFromInternalField(i);
287# endif
288 }
289 wcbd = new WeakCallbackInfo<P>(
290 reinterpret_cast<Persistent<v8::Value>*>(this)
291 , callback
292 , 0
293 , internal_fields[0]
294 , internal_fields[1]);
295#if (V8_MAJOR_VERSION > 14) || \
296 (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION > 2) || \
297 (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION == 2 && V8_BUILD_NUMBER >= 194)
298 self->SetAlignedPointerInInternalField(
299 0, wcbd, v8::kEmbedderDataTypeTagDefault
300 );
301# else
302 self->SetAlignedPointerInInternalField(0, wcbd);
303# endif
304 v8::PersistentBase<T>::SetWeak(
305 static_cast<WeakCallbackInfo<P>*>(0)
306 , WeakCallbackInfo<P>::template invoketwofield<true>
307 , type);
308 }
309}
310#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION
311template<typename T, typename M>
312template<typename P>

Callers 3

wrapFunction · 0.45
NAN_METHODFunction · 0.45
wrapFunction · 0.45

Calls 1

MakeWeakMethod · 0.80

Tested by

no test coverage detected