-
Notifications
You must be signed in to change notification settings - Fork 29.7k
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
process: split execution entry points into main scripts #25667
Conversation
src/env.cc
Outdated
@@ -295,6 +295,17 @@ void Environment::Start(const std::vector<std::string>& args, | |||
HandleScope handle_scope(isolate()); | |||
Context::Scope context_scope(context()); | |||
|
|||
if (args.size() > 1) { | |||
std::string first_arg = args[1]; | |||
if (first_arg == "inspect") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ideally this should not have been done here - maybe a better place would be the options parser but at that point Environment
is not yet available and we do not have a better place to carry this information yet.
0bab6b0
to
e5ddc18
Compare
I've removed the options changes as those are not really related to the primary purpose of this PR. @addaleax PTAL. |
This patch splits the execution mode selection from the environment setup in `lib/internal/bootstrap/node.js`, and split the entry point of different execution mode into main scripts under `lib/internal/main`: - `check_syntax.js`: used when `-c`/`--check` which only checks the syntax of the input instead of executing it. - `eval_stdin.js`: used when `-e` is passed without value and stdin is not a TTY (e.g. something is piped). - `eval_string`: used when `-e` is passed along with a string argument - `inspect.js`: for `node inspect`/`node debug` - `print_bash_completion.js`: for `--completion-bash` - `print_help.js`: for `--help` - `prof_process.js`: for `--prof-process` - `repl.js`: for the REPL - `run_main_module.js`: used when a main module is passed - `run_third_party_main.js`: for the legacy `_third_party_main.js` support - `worker_thread.js`: for workers This makes the entry points easier to navigate and paves the way for customized v8 snapshots (that do not need to deserialize execution mode setup) and better embedder APIs. As an example, after this patch, for the most common case where Node.js executes a user module as an entry point, it essentially goes through: - `lib/internal/per_context.js` to setup the v8 Context (which is also run when setting up contexts for the `vm` module) - `lib/internal/bootstrap/loaders.js` to set up internal binding and builtin module loaders (that are separate from the loaders accessible in the user land). - `lib/internal/bootstrap/node.js`: to set up the rest of the environment, including various globals and the process object - `lib/internal/main/run_main_module.js`: which is selected from C++ to prepare execution of the user module. This patch also removes `NativeModuleLoader::CompileAndCall` and exposes `NativeModuleLoader::LookupAndCompile` directly so that we can handle syntax errors and runtime errors of bootstrap scripts differently.
This patch directly inlines `createMessageHandler()` and `createWorkerFatalExeception()` in the new `lib/internal/main/worker_thread.js` since the implementation of the two methods are related to the execution flow of workers.
e5ddc18
to
455c923
Compare
Landed in feebdc5...5e1d446 |
This patch splits the execution mode selection from the environment setup in `lib/internal/bootstrap/node.js`, and split the entry point of different execution mode into main scripts under `lib/internal/main`: - `check_syntax.js`: used when `-c`/`--check` which only checks the syntax of the input instead of executing it. - `eval_stdin.js`: used when `-e` is passed without value and stdin is not a TTY (e.g. something is piped). - `eval_string`: used when `-e` is passed along with a string argument - `inspect.js`: for `node inspect`/`node debug` - `print_bash_completion.js`: for `--completion-bash` - `print_help.js`: for `--help` - `prof_process.js`: for `--prof-process` - `repl.js`: for the REPL - `run_main_module.js`: used when a main module is passed - `run_third_party_main.js`: for the legacy `_third_party_main.js` support - `worker_thread.js`: for workers This makes the entry points easier to navigate and paves the way for customized v8 snapshots (that do not need to deserialize execution mode setup) and better embedder APIs. As an example, after this patch, for the most common case where Node.js executes a user module as an entry point, it essentially goes through: - `lib/internal/per_context.js` to setup the v8 Context (which is also run when setting up contexts for the `vm` module) - `lib/internal/bootstrap/loaders.js` to set up internal binding and builtin module loaders (that are separate from the loaders accessible in the user land). - `lib/internal/bootstrap/node.js`: to set up the rest of the environment, including various globals and the process object - `lib/internal/main/run_main_module.js`: which is selected from C++ to prepare execution of the user module. This patch also removes `NativeModuleLoader::CompileAndCall` and exposes `NativeModuleLoader::LookupAndCompile` directly so that we can handle syntax errors and runtime errors of bootstrap scripts differently. PR-URL: #25667 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This patch directly inlines `createMessageHandler()` and `createWorkerFatalExeception()` in the new `lib/internal/main/worker_thread.js` since the implementation of the two methods are related to the execution flow of workers. PR-URL: #25667 Reviewed-By: Anna Henningsen <anna@addaleax.net>
@joyeecheung This needs a manual backport for v11.x, it seems. |
This patch splits the execution mode selection from the environment setup in `lib/internal/bootstrap/node.js`, and split the entry point of different execution mode into main scripts under `lib/internal/main`: - `check_syntax.js`: used when `-c`/`--check` which only checks the syntax of the input instead of executing it. - `eval_stdin.js`: used when `-e` is passed without value and stdin is not a TTY (e.g. something is piped). - `eval_string`: used when `-e` is passed along with a string argument - `inspect.js`: for `node inspect`/`node debug` - `print_bash_completion.js`: for `--completion-bash` - `print_help.js`: for `--help` - `prof_process.js`: for `--prof-process` - `repl.js`: for the REPL - `run_main_module.js`: used when a main module is passed - `run_third_party_main.js`: for the legacy `_third_party_main.js` support - `worker_thread.js`: for workers This makes the entry points easier to navigate and paves the way for customized v8 snapshots (that do not need to deserialize execution mode setup) and better embedder APIs. As an example, after this patch, for the most common case where Node.js executes a user module as an entry point, it essentially goes through: - `lib/internal/per_context.js` to setup the v8 Context (which is also run when setting up contexts for the `vm` module) - `lib/internal/bootstrap/loaders.js` to set up internal binding and builtin module loaders (that are separate from the loaders accessible in the user land). - `lib/internal/bootstrap/node.js`: to set up the rest of the environment, including various globals and the process object - `lib/internal/main/run_main_module.js`: which is selected from C++ to prepare execution of the user module. This patch also removes `NativeModuleLoader::CompileAndCall` and exposes `NativeModuleLoader::LookupAndCompile` directly so that we can handle syntax errors and runtime errors of bootstrap scripts differently. PR-URL: nodejs#25667 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This patch directly inlines `createMessageHandler()` and `createWorkerFatalExeception()` in the new `lib/internal/main/worker_thread.js` since the implementation of the two methods are related to the execution flow of workers. PR-URL: nodejs#25667 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This patch splits the execution mode selection from the environment setup in `lib/internal/bootstrap/node.js`, and split the entry point of different execution mode into main scripts under `lib/internal/main`: - `check_syntax.js`: used when `-c`/`--check` which only checks the syntax of the input instead of executing it. - `eval_stdin.js`: used when `-e` is passed without value and stdin is not a TTY (e.g. something is piped). - `eval_string`: used when `-e` is passed along with a string argument - `inspect.js`: for `node inspect`/`node debug` - `print_bash_completion.js`: for `--completion-bash` - `print_help.js`: for `--help` - `prof_process.js`: for `--prof-process` - `repl.js`: for the REPL - `run_main_module.js`: used when a main module is passed - `run_third_party_main.js`: for the legacy `_third_party_main.js` support - `worker_thread.js`: for workers This makes the entry points easier to navigate and paves the way for customized v8 snapshots (that do not need to deserialize execution mode setup) and better embedder APIs. As an example, after this patch, for the most common case where Node.js executes a user module as an entry point, it essentially goes through: - `lib/internal/per_context.js` to setup the v8 Context (which is also run when setting up contexts for the `vm` module) - `lib/internal/bootstrap/loaders.js` to set up internal binding and builtin module loaders (that are separate from the loaders accessible in the user land). - `lib/internal/bootstrap/node.js`: to set up the rest of the environment, including various globals and the process object - `lib/internal/main/run_main_module.js`: which is selected from C++ to prepare execution of the user module. This patch also removes `NativeModuleLoader::CompileAndCall` and exposes `NativeModuleLoader::LookupAndCompile` directly so that we can handle syntax errors and runtime errors of bootstrap scripts differently. PR-URL: nodejs#25667 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This patch directly inlines `createMessageHandler()` and `createWorkerFatalExeception()` in the new `lib/internal/main/worker_thread.js` since the implementation of the two methods are related to the execution flow of workers. PR-URL: nodejs#25667 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This patch splits the execution mode selection from the environment setup in `lib/internal/bootstrap/node.js`, and split the entry point of different execution mode into main scripts under `lib/internal/main`: - `check_syntax.js`: used when `-c`/`--check` which only checks the syntax of the input instead of executing it. - `eval_stdin.js`: used when `-e` is passed without value and stdin is not a TTY (e.g. something is piped). - `eval_string`: used when `-e` is passed along with a string argument - `inspect.js`: for `node inspect`/`node debug` - `print_bash_completion.js`: for `--completion-bash` - `print_help.js`: for `--help` - `prof_process.js`: for `--prof-process` - `repl.js`: for the REPL - `run_main_module.js`: used when a main module is passed - `run_third_party_main.js`: for the legacy `_third_party_main.js` support - `worker_thread.js`: for workers This makes the entry points easier to navigate and paves the way for customized v8 snapshots (that do not need to deserialize execution mode setup) and better embedder APIs. As an example, after this patch, for the most common case where Node.js executes a user module as an entry point, it essentially goes through: - `lib/internal/per_context.js` to setup the v8 Context (which is also run when setting up contexts for the `vm` module) - `lib/internal/bootstrap/loaders.js` to set up internal binding and builtin module loaders (that are separate from the loaders accessible in the user land). - `lib/internal/bootstrap/node.js`: to set up the rest of the environment, including various globals and the process object - `lib/internal/main/run_main_module.js`: which is selected from C++ to prepare execution of the user module. This patch also removes `NativeModuleLoader::CompileAndCall` and exposes `NativeModuleLoader::LookupAndCompile` directly so that we can handle syntax errors and runtime errors of bootstrap scripts differently. PR-URL: #25667 Reviewed-By: Anna Henningsen <anna@addaleax.net> Backport-PR-URL: #26036
This patch directly inlines `createMessageHandler()` and `createWorkerFatalExeception()` in the new `lib/internal/main/worker_thread.js` since the implementation of the two methods are related to the execution flow of workers. PR-URL: #25667 Reviewed-By: Anna Henningsen <anna@addaleax.net> Backport-PR-URL: #26036
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Node removed the NativeModuleLoader CompileAndCall function and exposed the LookupAndCompile function, with the intention of giving the ability to the caller to handle errors. The node PR made the changes nodejs/node#25667. I'm adding this back for now, but this can easily be moved to electron as a helper or can probably be upstreamed somehow.
Note: there are some indentation changes in
lib/internal/bootstrap/node.js
so please use https://github.com/nodejs/node/pull/25667/files?w=1 for reviewsprocess: split execution into main scripts
This patch splits the execution mode selection from the environment
setup in
lib/internal/bootstrap/node.js
, and split the entry pointof different execution mode into main scripts under
lib/internal/main
:check_syntax.js
: used when-c
/--check
which only checks thesyntax of the input instead of executing it.
eval_stdin.js
: used when-e
is passed without value and stdinis not a TTY (e.g. something is piped).
eval_string
: used when-e
is passed along with a string argumentinspect.js
: fornode inspect
/node debug
print_bash_completion.js
: for--completion-bash
print_help.js
: for--help
prof_process.js
: for--prof-process
repl.js
: for the REPLrun_main_module.js
: used when a main module is passedrun_third_party_main.js
: for the legacy_third_party_main.js
support
worker_thread.js
: for workersThis makes the entry points easier to navigate and paves the way
for customized v8 snapshots (that do not need to deserialize
execution mode setup) and better embedder APIs.
As an example, after this patch, for the most common case where
Node.js executes a user module as an entry point, it essentially
goes through:
lib/internal/per_context.js
to setup the v8 Context (which isalso run when setting up contexts for the
vm
module)lib/internal/bootstrap/loaders.js
to set up internal bindingand builtin module loaders (that are separate from the loaders
accessible in the user land).
lib/internal/bootstrap/node.js
: to set up the rest of theenvironment, including various globals and the process object
lib/internal/main/run_main_module.js
: which is selected fromC++ to prepare execution of the user module.
This patch also removes
NativeModuleLoader::CompileAndCall
andexposes
NativeModuleLoader::LookupAndCompile
directly so thatwe can handle syntax errors and runtime errors of bootstrap
scripts differently.
worker: move worker thread setup code into the main script
This patch directly inlines
createMessageHandler()
andcreateWorkerFatalExeception()
in the newlib/internal/main/worker_thread.js
since the implementationof the two methods are related to the execution flow of
workers.
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passes