| 256 | template<typename T, typename M> |
| 257 | template<typename P> |
| 258 | inline 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 |
| 311 | template<typename T, typename M> |
| 312 | template<typename P> |
no test coverage detected