55
66#include < cinttypes>
77#include < vector>
8+ #include " v8.h"
89
910namespace node {
1011
@@ -14,21 +15,71 @@ class ExternalReferenceRegistry {
1415 public:
1516 ExternalReferenceRegistry () {}
1617
17- template <typename T>
18- void Register (T* address) {
19- external_references_.push_back (reinterpret_cast <intptr_t >(address));
20- }
18+ #define ALLOWED_EXTERNAL_REFERENCE_TYPES (V ) \
19+ V (v8::FunctionCallback) \
20+ V (v8::AccessorGetterCallback) \
21+ V (v8::AccessorSetterCallback) \
22+ V (v8::AccessorNameGetterCallback) \
23+ V (v8::AccessorNameSetterCallback) \
24+ V (v8::GenericNamedPropertyDefinerCallback) \
25+ V (v8::GenericNamedPropertyDeleterCallback) \
26+ V (v8::GenericNamedPropertyEnumeratorCallback) \
27+ V (v8::GenericNamedPropertyQueryCallback) \
28+ V (v8::GenericNamedPropertySetterCallback)
29+
30+ #define V (ExternalReferenceType ) \
31+ void Register (ExternalReferenceType addr) { RegisterT (addr); }
32+ ALLOWED_EXTERNAL_REFERENCE_TYPES (V)
33+ #undef V
2134
2235 // This can be called only once.
2336 const std::vector<intptr_t >& external_references ();
2437
2538 bool is_empty () { return external_references_.empty (); }
2639
2740 private:
41+ template <typename T>
42+ void RegisterT (T* address) {
43+ external_references_.push_back (reinterpret_cast <intptr_t >(address));
44+ }
2845 bool is_finalized_ = false ;
2946 std::vector<intptr_t > external_references_;
3047};
31-
48+ namespace errors {
49+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
50+ }
51+ #if HAVE_INSPECTOR
52+ namespace inspector {
53+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
54+ }
55+ #endif // HAVE_INSPECTOR
56+ namespace Buffer {
57+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
58+ }
59+ namespace credentials {
60+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
61+ }
62+ namespace i18n {
63+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
64+ }
65+ namespace task_queue {
66+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
67+ }
68+ namespace url {
69+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
70+ }
71+ namespace util {
72+ void RegisterExternalReferences (ExternalReferenceRegistry* registry);
73+ }
74+ void RegisterNodeCategorySetExternalReferences (
75+ ExternalReferenceRegistry* registry);
76+ void RegisterProcessMethodsExternalReferences (
77+ ExternalReferenceRegistry* registry);
78+ void RegisterTypesExternalReferences (ExternalReferenceRegistry* registry);
79+ void RegisterStringDecoderExternalReferences (
80+ ExternalReferenceRegistry* registry);
81+ void RegisterTimerExternalReferences (ExternalReferenceRegistry* registry);
82+ void RegisterEnvVarExternalReferences (ExternalReferenceRegistry* registry);
3283} // namespace node
3384
3485#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
0 commit comments