summaryrefslogtreecommitdiff
path: root/src/node_binding.h
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2018-11-29 00:46:45 +0800
committerRich Trott <rtrott@gmail.com>2018-11-30 20:14:24 -0800
commit3d668262a09ef031003babc14eff9e5d4ac81698 (patch)
tree90206d42148b96c3a60429315e0cd5f39140446c /src/node_binding.h
parent976065d9cb88a118c0238a8518a2570b28cce817 (diff)
downloadandroid-node-v8-3d668262a09ef031003babc14eff9e5d4ac81698.tar.gz
android-node-v8-3d668262a09ef031003babc14eff9e5d4ac81698.tar.bz2
android-node-v8-3d668262a09ef031003babc14eff9e5d4ac81698.zip
src: move C++ binding/addon related code into node_binding{.h, .cc}
This patch: - Moves the C++ binding/addon related code out of node_internals.h/node.cc and into dedicated files node_binding.h/node_binding.cc, and only puts the code resued by other files into the header. - Introduce a node::binding namespace so that code exposed to other files can be easily recognized. PR-URL: https://github.com/nodejs/node/pull/24701 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Diffstat (limited to 'src/node_binding.h')
-rw-r--r--src/node_binding.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/node_binding.h b/src/node_binding.h
new file mode 100644
index 0000000000..743c82accd
--- /dev/null
+++ b/src/node_binding.h
@@ -0,0 +1,64 @@
+#ifndef SRC_NODE_BINDING_H_
+#define SRC_NODE_BINDING_H_
+
+#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
+
+#include "node.h"
+#include "node_api.h"
+#include "uv.h"
+#include "v8.h"
+
+enum {
+ NM_F_BUILTIN = 1 << 0,
+ NM_F_LINKED = 1 << 1,
+ NM_F_INTERNAL = 1 << 2,
+};
+
+#define NODE_MODULE_CONTEXT_AWARE_CPP(modname, regfunc, priv, flags) \
+ static node::node_module _module = { \
+ NODE_MODULE_VERSION, \
+ flags, \
+ nullptr, \
+ __FILE__, \
+ nullptr, \
+ (node::addon_context_register_func)(regfunc), \
+ NODE_STRINGIFY(modname), \
+ priv, \
+ nullptr}; \
+ void _register_##modname() { node_module_register(&_module); }
+
+#define NODE_BUILTIN_MODULE_CONTEXT_AWARE(modname, regfunc) \
+ NODE_MODULE_CONTEXT_AWARE_CPP(modname, regfunc, nullptr, NM_F_BUILTIN)
+
+void napi_module_register_by_symbol(v8::Local<v8::Object> exports,
+ v8::Local<v8::Value> module,
+ v8::Local<v8::Context> context,
+ napi_addon_register_func init);
+
+namespace node {
+
+#define NODE_MODULE_CONTEXT_AWARE_INTERNAL(modname, regfunc) \
+ NODE_MODULE_CONTEXT_AWARE_CPP(modname, regfunc, nullptr, NM_F_INTERNAL)
+
+// Globals per process
+// This is set by node::Init() which is used by embedders
+extern bool node_is_initialized;
+
+namespace binding {
+
+// Call _register<module_name> functions for all of
+// the built-in modules. Because built-in modules don't
+// use the __attribute__((constructor)). Need to
+// explicitly call the _register* functions.
+void RegisterBuiltinModules();
+void GetBinding(const v8::FunctionCallbackInfo<v8::Value>& args);
+void GetInternalBinding(const v8::FunctionCallbackInfo<v8::Value>& args);
+void GetLinkedBinding(const v8::FunctionCallbackInfo<v8::Value>& args);
+void DLOpen(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+} // namespace binding
+
+} // namespace node
+
+#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
+#endif // SRC_NODE_BINDING_H_