From 756558617e7420ac5c3b3911fb0fb565fe5d0338 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Sun, 13 Jan 2019 01:01:27 +0800 Subject: [PATCH] src: pass cli options to bootstrap/loaders.js lexically Instead of using `internalBinding('config')` which should be used to carry information about build-time options, directly pass the run-time cli options into bootstrap/loaders.js lexically via function arguments. PR-URL: https://github.com/nodejs/node/pull/25463 Reviewed-By: Anna Henningsen Reviewed-By: Refael Ackermann Backport-PR-URL: https://github.com/nodejs/node/pull/26027 --- lib/internal/bootstrap/loaders.js | 7 +++---- src/node.cc | 13 +++++++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/internal/bootstrap/loaders.js b/lib/internal/bootstrap/loaders.js index 4554526298b0a0..6eed9eab267fa4 100644 --- a/lib/internal/bootstrap/loaders.js +++ b/lib/internal/bootstrap/loaders.js @@ -42,7 +42,7 @@ // This file is compiled as if it's wrapped in a function with arguments // passed by node::LoadEnvironment() /* global process, getBinding, getLinkedBinding, getInternalBinding */ -/* global debugBreak */ +/* global debugBreak, experimentalModules, exposeInternals */ if (debugBreak) debugger; // eslint-disable-line no-debugger @@ -162,7 +162,6 @@ internalBinding('module_wrap').callbackMap = new WeakMap(); // written in CommonJS style. const loaderExports = { internalBinding, NativeModule }; const loaderId = 'internal/bootstrap/loaders'; -const config = internalBinding('config'); // Set up NativeModule. function NativeModule(id) { @@ -177,7 +176,7 @@ function NativeModule(id) { // Do not expose this to user land even with --expose-internals. this.canBeRequiredByUsers = false; } else if (id.startsWith('internal/')) { - this.canBeRequiredByUsers = config.exposeInternals; + this.canBeRequiredByUsers = exposeInternals; } else { this.canBeRequiredByUsers = true; } @@ -316,7 +315,7 @@ NativeModule.prototype.compile = function() { const fn = compileFunction(id); fn(this.exports, requireFn, this, process, internalBinding); - if (config.experimentalModules && this.canBeRequiredByUsers) { + if (experimentalModules && this.canBeRequiredByUsers) { this.proxifyExports(); } diff --git a/src/node.cc b/src/node.cc index 1c5d2cceb4d86f..881ace6e425a77 100644 --- a/src/node.cc +++ b/src/node.cc @@ -678,7 +678,12 @@ void RunBootstrapping(Environment* env) { FIXED_ONE_BYTE_STRING(isolate, "getBinding"), FIXED_ONE_BYTE_STRING(isolate, "getLinkedBinding"), FIXED_ONE_BYTE_STRING(isolate, "getInternalBinding"), - FIXED_ONE_BYTE_STRING(isolate, "debugBreak")}; + // --inspect-brk-node + FIXED_ONE_BYTE_STRING(isolate, "debugBreak"), + // --experimental-modules + FIXED_ONE_BYTE_STRING(isolate, "experimentalModules"), + // --expose-internals + FIXED_ONE_BYTE_STRING(isolate, "exposeInternals")}; std::vector> loaders_args = { process, env->NewFunctionTemplate(binding::GetBinding) @@ -691,7 +696,11 @@ void RunBootstrapping(Environment* env) { ->GetFunction(context) .ToLocalChecked(), Boolean::New(isolate, - env->options()->debug_options().break_node_first_line)}; + env->options()->debug_options().break_node_first_line), + Boolean::New(isolate, + env->options()->experimental_modules), + Boolean::New(isolate, + env->options()->expose_internals)}; MaybeLocal loader_exports; // Bootstrap internal loaders