Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/node/v8-weak-callback-info.h
$ cat -n /usr/include/node/v8-weak-callback-info.h 1 // Copyright 2021 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef INCLUDE_V8_WEAK_CALLBACK_INFO_H_ 6 #define INCLUDE_V8_WEAK_CALLBACK_INFO_H_ 7 8 #include "v8config.h" // NOLINT(build/include_directory) 9 10 namespace v8 { 11 12 class Isolate; 13 14 namespace api_internal { 15 V8_EXPORT void InternalFieldOutOfBounds(int index); 16 } // namespace api_internal 17 18 static const int kInternalFieldsInWeakCallback = 2; 19 static const int kEmbedderFieldsInWeakCallback = 2; 20 21 template
22 class WeakCallbackInfo { 23 public: 24 using Callback = void (*)(const WeakCallbackInfo
& data); 25 26 WeakCallbackInfo(Isolate* isolate, T* parameter, 27 void* embedder_fields[kEmbedderFieldsInWeakCallback], 28 Callback* callback) 29 : isolate_(isolate), parameter_(parameter), callback_(callback) { 30 for (int i = 0; i < kEmbedderFieldsInWeakCallback; ++i) { 31 embedder_fields_[i] = embedder_fields[i]; 32 } 33 } 34 35 V8_INLINE Isolate* GetIsolate() const { return isolate_; } 36 V8_INLINE T* GetParameter() const { return parameter_; } 37 V8_INLINE void* GetInternalField(int index) const; 38 39 // When first called, the embedder MUST Reset() the Global which triggered the 40 // callback. The Global itself is unusable for anything else. No v8 other api 41 // calls may be called in the first callback. Should additional work be 42 // required, the embedder must set a second pass callback, which will be 43 // called after all the initial callbacks are processed. 44 // Calling SetSecondPassCallback on the second pass will immediately crash. 45 void SetSecondPassCallback(Callback callback) const { *callback_ = callback; } 46 47 private: 48 Isolate* isolate_; 49 T* parameter_; 50 Callback* callback_; 51 void* embedder_fields_[kEmbedderFieldsInWeakCallback]; 52 }; 53 54 /** 55 * Weakness type for weak handles. 56 */ 57 enum class WeakCallbackType { 58 /** 59 * Passes a user-defined void* parameter back to the callback. 60 */ 61 kParameter, 62 /** 63 * Passes the first two internal fields of the object back to the callback. 64 */ 65 kInternalFields, 66 /** 67 * Passes a user-defined void* parameter back to the callback. Will do so 68 * before the object is actually reclaimed, allowing it to be resurrected. In 69 * this case it is not possible to set a second-pass callback. 70 */ 71 kFinalizer V8_ENUM_DEPRECATED("Resurrecting finalizers are deprecated " 72 "and will not be supported going forward.") 73 }; 74 75 template
76 void* WeakCallbackInfo
::GetInternalField(int index) const { 77 #ifdef V8_ENABLE_CHECKS 78 if (index < 0 || index >= kEmbedderFieldsInWeakCallback) { 79 api_internal::InternalFieldOutOfBounds(index); 80 } 81 #endif 82 return embedder_fields_[index]; 83 } 84 85 } // namespace v8 86 87 #endif // INCLUDE_V8_WEAK_CALLBACK_INFO_H_
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™