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 <cstring>
9
10#include "cppgc/internal/conditional-stack-allocated.h" // NOLINT(build/include_directory)
11#include "v8config.h" // NOLINT(build/include_directory)
12
13namespace v8 {
14
15class Isolate;
16
17namespace api_internal {
19} // namespace api_internal
20
21static constexpr int kInternalFieldsInWeakCallback = 2;
22static constexpr int kEmbedderFieldsInWeakCallback = 2;
23
24template <typename T>
27 public:
28 using Callback = void (*)(const WeakCallbackInfo<T>& data);
29
30 WeakCallbackInfo(Isolate* isolate, T* parameter,
31 void* embedder_fields[kEmbedderFieldsInWeakCallback],
32 Callback* callback)
33 : isolate_(isolate), parameter_(parameter), callback_(callback) {
34 memcpy(embedder_fields_, embedder_fields,
35 sizeof(embedder_fields[0]) * kEmbedderFieldsInWeakCallback);
36 }
37
38 V8_INLINE Isolate* GetIsolate() const { return isolate_; }
39 V8_INLINE T* GetParameter() const { return parameter_; }
40 V8_INLINE void* GetInternalField(int index) const;
41
53 void SetSecondPassCallback(Callback callback) const { *callback_ = callback; }
54
55 private:
56 Isolate* isolate_;
57 T* parameter_;
58 Callback* callback_;
59 void* embedder_fields_[kEmbedderFieldsInWeakCallback];
60};
61
65enum class WeakCallbackType {
74};
75
76template <class T>
78#ifdef V8_ENABLE_CHECKS
79 if (index < 0 || index >= kEmbedderFieldsInWeakCallback) {
81 }
82#endif
83 return embedder_fields_[index];
84}
85
86} // namespace v8
87
88#endif // INCLUDE_V8_WEAK_CALLBACK_INFO_H_
Definition: conditional-stack-allocated.h:19
Definition: v8-isolate.h:274
Definition: v8-weak-callback-info.h:26
void * GetInternalField(int index) const
Definition: v8-weak-callback-info.h:77
Isolate * GetIsolate() const
Definition: v8-weak-callback-info.h:38
void(*)(const WeakCallbackInfo< T > &data) Callback
Definition: v8-weak-callback-info.h:28
T * GetParameter() const
Definition: v8-weak-callback-info.h:39
WeakCallbackInfo(Isolate *isolate, T *parameter, void *embedder_fields[kEmbedderFieldsInWeakCallback], Callback *callback)
Definition: v8-weak-callback-info.h:30
void SetSecondPassCallback(Callback callback) const
Definition: v8-weak-callback-info.h:53
void InternalFieldOutOfBounds(int index)
Definition: libplatform.h:15
WeakCallbackType
Definition: v8-weak-callback-info.h:65
#define V8_EXPORT
Definition: v8config.h:800
#define V8_INLINE
Definition: v8config.h:500