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 {
66};
67
68template <class T>
70#ifdef V8_ENABLE_CHECKS
71 if (index < 0 || index >= kEmbedderFieldsInWeakCallback) {
73 }
74#endif
75 return embedder_fields_[index];
76}
77
78} // namespace v8
79
80#endif // INCLUDE_V8_WEAK_CALLBACK_INFO_H_
Definition: v8-isolate.h:261
Definition: v8-weak-callback-info.h:22
void * GetInternalField(int index) const
Definition: v8-weak-callback-info.h:69
Isolate * GetIsolate() const
Definition: v8-weak-callback-info.h:35
void(*)(const WeakCallbackInfo< T > &data) Callback
Definition: v8-weak-callback-info.h:24
T * GetParameter() const
Definition: v8-weak-callback-info.h:36
WeakCallbackInfo(Isolate *isolate, T *parameter, void *embedder_fields[kEmbedderFieldsInWeakCallback], Callback *callback)
Definition: v8-weak-callback-info.h:26
void SetSecondPassCallback(Callback callback) const
Definition: v8-weak-callback-info.h:45
void InternalFieldOutOfBounds(int index)
Definition: libplatform.h:15
WeakCallbackType
Definition: v8-weak-callback-info.h:57
#define V8_EXPORT
Definition: v8config.h:793
#define V8_INLINE
Definition: v8config.h:499