diff --git a/src/env-inl.h b/src/env-inl.h index b5d10382e9bb48..20432a3b5de8f3 100644 --- a/src/env-inl.h +++ b/src/env-inl.h @@ -630,6 +630,10 @@ inline std::shared_ptr Environment::options() { return options_; } +inline const std::vector& Environment::argv() { + return argv_; +} + inline const std::vector& Environment::exec_argv() { return exec_argv_; } diff --git a/src/env.cc b/src/env.cc index f45e6ecfff458c..b4c67f84e0d8e4 100644 --- a/src/env.cc +++ b/src/env.cc @@ -379,16 +379,8 @@ void Environment::ExitEnv() { MaybeLocal Environment::ProcessCliArgs( const std::vector& args, const std::vector& exec_args) { - if (args.size() > 1) { - std::string first_arg = args[1]; - if (first_arg == "inspect") { - execution_mode_ = ExecutionMode::kInspect; - } else if (first_arg == "debug") { - execution_mode_ = ExecutionMode::kDebug; - } else if (first_arg != "-") { - execution_mode_ = ExecutionMode::kRunMainModule; - } - } + argv_ = args; + exec_argv_ = exec_args; if (*TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( TRACING_CATEGORY_NODE1(environment)) != 0) { @@ -406,7 +398,6 @@ MaybeLocal Environment::ProcessCliArgs( std::move(traced_value)); } - exec_argv_ = exec_args; Local process_object = node::CreateProcessObject(this, args, exec_args) .FromMaybe(Local()); diff --git a/src/env.h b/src/env.h index 0740787559d7ee..0516c49f36ddcd 100644 --- a/src/env.h +++ b/src/env.h @@ -753,6 +753,7 @@ class Environment { const std::vector& args, const std::vector& exec_args); inline const std::vector& exec_argv(); + inline const std::vector& argv(); typedef void (*HandleCleanupCb)(Environment* env, uv_handle_t* handle, @@ -1057,23 +1058,6 @@ class Environment { inline std::shared_ptr options(); inline std::shared_ptr inspector_host_port(); - enum class ExecutionMode { - kDefault, - kInspect, // node inspect - kDebug, // node debug - kPrintHelp, // node --help - kPrintBashCompletion, // node --completion-bash - kProfProcess, // node --prof-process - kEvalString, // node --eval without --interactive - kCheckSyntax, // node --check (incompatible with --eval) - kRepl, - kEvalStdin, - kRunMainModule - }; - - inline ExecutionMode execution_mode() { return execution_mode_; } - - inline void set_execution_mode(ExecutionMode mode) { execution_mode_ = mode; } inline AsyncRequest* thread_stopper() { return &thread_stopper_; } private: @@ -1085,7 +1069,6 @@ class Environment { inline void ThrowError(v8::Local (*fun)(v8::Local), const char* errmsg); - ExecutionMode execution_mode_ = ExecutionMode::kDefault; std::list loaded_addons_; v8::Isolate* const isolate_; IsolateData* const isolate_data_; @@ -1117,6 +1100,7 @@ class Environment { // used. std::shared_ptr inspector_host_port_; std::vector exec_argv_; + std::vector argv_; uint32_t module_id_counter_ = 0; uint32_t script_id_counter_ = 0; diff --git a/src/node.cc b/src/node.cc index f53cb98ee7681e..ec5b77c0987d70 100644 --- a/src/node.cc +++ b/src/node.cc @@ -402,47 +402,44 @@ MaybeLocal StartMainThreadExecution(Environment* env) { return StartExecution(env, "internal/main/run_third_party_main"); } - if (env->execution_mode() == Environment::ExecutionMode::kInspect || - env->execution_mode() == Environment::ExecutionMode::kDebug) { + std::string first_argv; + if (env->argv().size() > 1) { + first_argv = env->argv()[1]; + } + + if (first_argv == "inspect" || first_argv == "debug") { return StartExecution(env, "internal/main/inspect"); } if (per_process::cli_options->print_help) { - env->set_execution_mode(Environment::ExecutionMode::kPrintHelp); return StartExecution(env, "internal/main/print_help"); } if (per_process::cli_options->print_bash_completion) { - env->set_execution_mode(Environment::ExecutionMode::kPrintBashCompletion); return StartExecution(env, "internal/main/print_bash_completion"); } if (env->options()->prof_process) { - env->set_execution_mode(Environment::ExecutionMode::kProfProcess); return StartExecution(env, "internal/main/prof_process"); } // -e/--eval without -i/--interactive if (env->options()->has_eval_string && !env->options()->force_repl) { - env->set_execution_mode(Environment::ExecutionMode::kEvalString); return StartExecution(env, "internal/main/eval_string"); } if (env->options()->syntax_check_only) { - env->set_execution_mode(Environment::ExecutionMode::kCheckSyntax); return StartExecution(env, "internal/main/check_syntax"); } - if (env->execution_mode() == Environment::ExecutionMode::kRunMainModule) { + if (!first_argv.empty() && first_argv != "-") { return StartExecution(env, "internal/main/run_main_module"); } if (env->options()->force_repl || uv_guess_handle(STDIN_FILENO) == UV_TTY) { - env->set_execution_mode(Environment::ExecutionMode::kRepl); return StartExecution(env, "internal/main/repl"); } - env->set_execution_mode(Environment::ExecutionMode::kEvalStdin); return StartExecution(env, "internal/main/eval_stdin"); } diff --git a/src/node_worker.cc b/src/node_worker.cc index 8ca5bddf0a4c72..9d7161fa4f2563 100644 --- a/src/node_worker.cc +++ b/src/node_worker.cc @@ -96,6 +96,7 @@ Worker::Worker(Environment* env, env->inspector_agent()->GetParentHandle(thread_id_, url); #endif + argv_ = std::vector{env->argv()[0]}; // Mark this Worker object as weak until we actually start the thread. MakeWeak(); @@ -256,8 +257,7 @@ void Worker::Run() { env_->set_worker_context(this); env_->InitializeLibuv(profiler_idle_notifier_started_); - env_->ProcessCliArgs(std::vector{}, - std::move(exec_argv_)); + env_->ProcessCliArgs(std::move(argv_), std::move(exec_argv_)); } { Mutex::ScopedLock lock(mutex_); diff --git a/src/node_worker.h b/src/node_worker.h index 94af8160c68ba5..8239826a0e8b04 100644 --- a/src/node_worker.h +++ b/src/node_worker.h @@ -58,6 +58,8 @@ class Worker : public AsyncWrap { std::shared_ptr per_isolate_opts_; std::vector exec_argv_; + std::vector argv_; + MultiIsolatePlatform* platform_; v8::Isolate* isolate_ = nullptr; bool profiler_idle_notifier_started_;