diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2018-11-29 00:46:45 +0800 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2018-11-30 20:14:24 -0800 |
commit | 3d668262a09ef031003babc14eff9e5d4ac81698 (patch) | |
tree | 90206d42148b96c3a60429315e0cd5f39140446c /src/node_binding.h | |
parent | 976065d9cb88a118c0238a8518a2570b28cce817 (diff) | |
download | android-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.h | 64 |
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_ |