FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/src/node_external_reference.h at shared_handle · isker/node · GitHub
isker
/
node
Public
forked from
nodejs/node
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
src
/
node_external_reference.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
103 lines (87 loc) · 4.73 KB
Breadcrumbs
node
/
src
/
node_external_reference.h
Copy path
File metadata and controls
103 lines (87 loc) · 4.73 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#
ifndef
SRC_NODE_EXTERNAL_REFERENCE_H_
#
define
SRC_NODE_EXTERNAL_REFERENCE_H_
#
if
defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#
include
<
cinttypes
>
#
include
<
vector
>
#
include
"
v8.h
"
namespace
node
{
//
This class manages the external references from the V8 heap
//
to the C++ addresses in Node.js.
class
ExternalReferenceRegistry
{
public:
ExternalReferenceRegistry
();
#
define
ALLOWED_EXTERNAL_REFERENCE_TYPES
(
V
) \
V
(v8::FunctionCallback) \
V
(v8::AccessorGetterCallback) \
V
(v8::AccessorSetterCallback) \
V
(v8::AccessorNameGetterCallback) \
V
(v8::AccessorNameSetterCallback) \
V
(v8::GenericNamedPropertyDefinerCallback) \
V
(v8::GenericNamedPropertyDeleterCallback) \
V
(v8::GenericNamedPropertyEnumeratorCallback) \
V
(v8::GenericNamedPropertyQueryCallback) \
V
(v8::GenericNamedPropertySetterCallback)
#
define
V
(
ExternalReferenceType
) \
void
Register
(ExternalReferenceType addr) {
RegisterT
(addr); }
ALLOWED_EXTERNAL_REFERENCE_TYPES
(V)
#
undef
V
//
This can be called only once.
const
std::vector<
intptr_t
>&
external_references
();
bool
is_empty
() {
return
external_references_.
empty
(); }
private:
template
<
typename
T>
void
RegisterT
(T* address) {
external_references_.
push_back
(
reinterpret_cast
<
intptr_t
>(address));
}
bool
is_finalized_ =
false
;
std::vector<
intptr_t
> external_references_;
};
#
define
EXTERNAL_REFERENCE_BINDING_LIST_BASE
(
V
) \
V
(async_wrap) \
V
(binding) \
V
(buffer) \
V
(credentials) \
V
(env_var) \
V
(errors) \
V
(handle_wrap) \
V
(messaging) \
V
(native_module) \
V
(process_methods) \
V
(process_object) \
V
(task_queue) \
V
(url) \
V
(util) \
V
(string_decoder) \
V
(trace_events) \
V
(timers) \
V
(types) \
V
(worker)
#
if
NODE_HAVE_I18N_SUPPORT
#
define
EXTERNAL_REFERENCE_BINDING_LIST_I18N
(
V
) V(icu)
#
else
#
define
EXTERNAL_REFERENCE_BINDING_LIST_I18N
(
V
)
#
endif
//
NODE_HAVE_I18N_SUPPORT
#
if
HAVE_INSPECTOR
#
define
EXTERNAL_REFERENCE_BINDING_LIST_INSPECTOR
(
V
) V(inspector)
#
else
#
define
EXTERNAL_REFERENCE_BINDING_LIST_INSPECTOR
(
V
)
#
endif
//
HAVE_INSPECTOR
#
define
EXTERNAL_REFERENCE_BINDING_LIST
(
V
) \
EXTERNAL_REFERENCE_BINDING_LIST_BASE
(V) \
EXTERNAL_REFERENCE_BINDING_LIST_INSPECTOR
(V) \
EXTERNAL_REFERENCE_BINDING_LIST_I18N
(V)
}
//
namespace node
//
Declare all the external reference registration functions here,
//
and define them later with #NODE_MODULE_EXTERNAL_REFERENCE(modname, func);
#
define
V
(
modname
) \
void
_register_external_reference_##modname( \
node::ExternalReferenceRegistry* registry);
EXTERNAL_REFERENCE_BINDING_LIST
(V)
#
undef
V
#
define
NODE_MODULE_EXTERNAL_REFERENCE
(
modname, func
) \
void
_register_external_reference_##modname( \
node::ExternalReferenceRegistry* registry) { \
func
(registry); \
}
#
endif
//
defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#
endif
//
SRC_NODE_EXTERNAL_REFERENCE_H_
Back
|
FazBrowse Home
|
New Git URL