Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

src,lib: remove dead process.binding() code #25829

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/internal/bootstrap/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const { NativeModule } = require('internal/bootstrap/loaders');
const {
getCodeCache, compileFunction
} = internalBinding('native_module');
const { hasTracing, hasInspector } = process.binding('config');
const { hasTracing, hasInspector } = internalBinding('config');

// Modules with source code compiled in js2c that
// cannot be compiled with the code cache.
Expand Down
10 changes: 3 additions & 7 deletions lib/internal/bootstrap/loaders.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

// This file is compiled as if it's wrapped in a function with arguments
// passed by node::RunBootstrapping()
/* global process, getBinding, getLinkedBinding, getInternalBinding */
/* global process, getLinkedBinding, getInternalBinding */
/* global experimentalModules, exposeInternals, primordials */

const {
Expand Down Expand Up @@ -108,12 +108,8 @@ const internalBindingWhitelist = new SafeSet([
if (internalBindingWhitelist.has(module)) {
return internalBinding(module);
}
let mod = bindingObj[module];
if (typeof mod !== 'object') {
mod = bindingObj[module] = getBinding(module);
moduleLoadList.push(`Binding ${module}`);
}
return mod;
// eslint-disable-next-line no-restricted-syntax
throw new Error(`No such module: ${module}`);
};

process._linkedBinding = function _linkedBinding(module) {
Expand Down
2 changes: 1 addition & 1 deletion lib/internal/crypto/diffiehellman.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const {
DiffieHellmanGroup: _DiffieHellmanGroup,
ECDH: _ECDH,
ECDHConvertKey: _ECDHConvertKey
} = process.binding('crypto');
} = internalBinding('crypto');
const {
POINT_CONVERSION_COMPRESSED,
POINT_CONVERSION_HYBRID,
Expand Down
2 changes: 1 addition & 1 deletion lib/internal/crypto/hash.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
const {
Hash: _Hash,
Hmac: _Hmac
} = process.binding('crypto');
} = internalBinding('crypto');

const {
getDefaultEncoding,
Expand Down
4 changes: 0 additions & 4 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,6 @@ MaybeLocal<Value> RunBootstrapping(Environment* env) {
// Create binding loaders
std::vector<Local<String>> loaders_params = {
env->process_string(),
FIXED_ONE_BYTE_STRING(isolate, "getBinding"),
FIXED_ONE_BYTE_STRING(isolate, "getLinkedBinding"),
FIXED_ONE_BYTE_STRING(isolate, "getInternalBinding"),
// --experimental-modules
Expand All @@ -292,9 +291,6 @@ MaybeLocal<Value> RunBootstrapping(Environment* env) {
env->primordials_string()};
std::vector<Local<Value>> loaders_args = {
process,
env->NewFunctionTemplate(binding::GetBinding)
->GetFunction(context)
.ToLocalChecked(),
env->NewFunctionTemplate(binding::GetLinkedBinding)
->GetFunction(context)
.ToLocalChecked(),
Expand Down
36 changes: 3 additions & 33 deletions src/node_binding.cc
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
// function for each built-in modules explicitly in
// binding::RegisterBuiltinModules(). This is only forward declaration.
// The definitions are in each module's implementation when calling
// the NODE_BUILTIN_MODULE_CONTEXT_AWARE.
// the NODE_MODULE_CONTEXT_AWARE_INTERNAL.
#define V(modname) void _register_##modname();
NODE_BUILTIN_MODULES(V)
#undef V
Expand All @@ -101,7 +101,6 @@ using v8::String;
using v8::Value;

// Globals per process
static node_module* modlist_builtin;
static node_module* modlist_internal;
static node_module* modlist_linked;
static node_module* modlist_addon;
Expand All @@ -114,10 +113,7 @@ bool node_is_initialized = false;
extern "C" void node_module_register(void* m) {
struct node_module* mp = reinterpret_cast<struct node_module*>(m);

if (mp->nm_flags & NM_F_BUILTIN) {
mp->nm_link = modlist_builtin;
modlist_builtin = mp;
} else if (mp->nm_flags & NM_F_INTERNAL) {
if (mp->nm_flags & NM_F_INTERNAL) {
mp->nm_link = modlist_internal;
modlist_internal = mp;
} else if (!node_is_initialized) {
Expand Down Expand Up @@ -295,11 +291,7 @@ void DLOpen(const FunctionCallbackInfo<Value>& args) {
env->ThrowError(errmsg);
return false;
}
if (mp->nm_flags & NM_F_BUILTIN) {
dlib->Close();
env->ThrowError("Built-in module self-registered.");
return false;
}
CHECK_EQ(mp->nm_flags & NM_F_BUILTIN, 0);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe invert this to CHECK_EQ(0, mp->nm_flags & ~(NM_F_INTERNAL | NM_F_LINKED))? That way you can get rid of NM_F_BUILTIN and it'll also help catch accidental corruption.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we aren’t introducing new flags too often, but maybe at some point we’ll want to add a new flag in a backwards-compatible way?


mp->nm_dso_handle = dlib->handle_;
mp->nm_link = modlist_addon;
Expand Down Expand Up @@ -335,9 +327,6 @@ inline struct node_module* FindModule(struct node_module* list,
return mp;
}

node_module* get_builtin_module(const char* name) {
return FindModule(modlist_builtin, name, NM_F_BUILTIN);
}
node_module* get_internal_module(const char* name) {
return FindModule(modlist_internal, name, NM_F_INTERNAL);
}
Expand All @@ -363,25 +352,6 @@ static void ThrowIfNoSuchModule(Environment* env, const char* module_v) {
env->ThrowError(errmsg);
}

void GetBinding(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);

CHECK(args[0]->IsString());

Local<String> module = args[0].As<String>();
node::Utf8Value module_v(env->isolate(), module);

node_module* mod = get_builtin_module(*module_v);
Local<Object> exports;
if (mod != nullptr) {
exports = InitModule(env, mod, module);
} else {
return ThrowIfNoSuchModule(env, *module_v);
}

args.GetReturnValue().Set(exports);
}

void GetInternalBinding(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);

Expand Down
8 changes: 1 addition & 7 deletions src/node_binding.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include "v8.h"

enum {
NM_F_BUILTIN = 1 << 0,
NM_F_BUILTIN = 1 << 0, // Unused.
NM_F_LINKED = 1 << 1,
NM_F_INTERNAL = 1 << 2,
};
Expand All @@ -33,9 +33,6 @@ enum {
nullptr}; \
void _register_##modname() { node_module_register(&_module); }

#define NODE_BUILTIN_MODULE_CONTEXT_AWARE(modname, regfunc) \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

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,
Expand Down Expand Up @@ -83,7 +80,6 @@ class DLib {
// 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);
Expand All @@ -92,7 +88,5 @@ void DLOpen(const v8::FunctionCallbackInfo<v8::Value>& args);

} // namespace node

#include "node_binding.h"

#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#endif // SRC_NODE_BINDING_H_