v8 10.2.154 (node 18.16.0)
V8 is Google's open source JavaScript engine
Loading...
Searching...
No Matches
v8-weak-callback-info.h
Go to the documentation of this file.
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
10namespace v8 {
11
12class Isolate;
13
14namespace api_internal {
16} // namespace api_internal
17
18static const int kInternalFieldsInWeakCallback = 2;
19static const int kEmbedderFieldsInWeakCallback = 2;
20
21template <typename T>
23 public:
24 using Callback = void (*)(const WeakCallbackInfo<T>& 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
57enum class WeakCallbackType {
71 kFinalizer V8_ENUM_DEPRECATED("Resurrecting finalizers are deprecated "
72 "and will not be supported going forward.")
73};
74
75template <class T>
77#ifdef V8_ENABLE_CHECKS
78 if (index < 0 || index >= kEmbedderFieldsInWeakCallback) {
80 }
81#endif
82 return embedder_fields_[index];
83}
84
85} // namespace v8
86
87#endif // INCLUDE_V8_WEAK_CALLBACK_INFO_H_
WeakCallbackInfo(Isolate *isolate, T *parameter, void *embedder_fields[kEmbedderFieldsInWeakCallback], Callback *callback)
V8_INLINE T * GetParameter() const
void SetSecondPassCallback(Callback callback) const
V8_INLINE Isolate * GetIsolate() const
void(*)(const WeakCallbackInfo< T > &data) Callback
V8_INLINE void * GetInternalField(int index) const
V8_EXPORT void InternalFieldOutOfBounds(int index)
#define V8_EXPORT
Definition v8config.h:578
#define V8_INLINE
Definition v8config.h:425