Browse Source

use new node options parser

Jeremy Apthorp 6 years ago
parent
commit
6e037f5e71
3 changed files with 30 additions and 12 deletions
  1. 24 10
      atom/browser/node_debugger.cc
  2. 5 1
      atom/common/node_bindings.cc
  3. 1 1
      atom/common/node_includes.h

+ 24 - 10
atom/browser/node_debugger.cc

@@ -4,9 +4,12 @@
 
 #include "atom/browser/node_debugger.h"
 
+#include <memory>
 #include <string>
+#include <vector>
 
 #include "base/command_line.h"
+#include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
 #include "libplatform/libplatform.h"
 #include "native_mate/dictionary.h"
@@ -24,29 +27,40 @@ void NodeDebugger::Start() {
   if (inspector == nullptr)
     return;
 
-  node::DebugOptions options;
+  std::vector<std::string> args;
   for (auto& arg : base::CommandLine::ForCurrentProcess()->argv()) {
 #if defined(OS_WIN)
-    const std::string nice_arg = base::UTF16ToUTF8(arg);
+    args.push_back(base::UTF16ToUTF8(arg));
 #else
-    const std::string& nice_arg = arg;
+    args.push_back(arg);
 #endif
-    // Stop handling arguments after a "--" to be consistent with Chromium
-    if (nice_arg == "--")
-      break;
+  }
+
+  auto options = std::make_shared<node::DebugOptions>();
+  std::vector<std::string> exec_args;
+  std::vector<std::string> v8_args;
+  std::string error;
+
+  node::options_parser::DebugOptionsParser::instance.Parse(
+      &args, &exec_args, &v8_args, options.get(),
+      node::options_parser::kDisallowedInEnvironment, &error);
 
-    options.ParseOption("Electron", nice_arg);
+  if (!error.empty()) {
+    // TODO(jeremy): what's the appropriate behaviour here?
+    LOG(ERROR) << "Error parsing node options: " << error;
   }
 
   // Set process._debugWaitConnect if --inspect-brk was specified to stop
   // the debugger on the first line
-  if (options.wait_for_connect()) {
+  if (options->wait_for_connect()) {
     mate::Dictionary process(env_->isolate(), env_->process_object());
     process.Set("_breakFirstLine", true);
   }
 
-  inspector->Start(/* path */ nullptr, options);
-  DCHECK(env_->inspector_agent()->IsStarted());
+  const char* path = "";
+  inspector->Start(path, options);
+  // FIXME
+  // DCHECK(env_->inspector_agent()->IsListening());
 }
 
 }  // namespace atom

+ 5 - 1
atom/common/node_bindings.cc

@@ -217,7 +217,11 @@ void NodeBindings::Initialize() {
   // Init node.
   // (we assume node::Init would not modify the parameters under embedded mode).
   // NOTE: If you change this line, please ping @codebytere or @MarshallOfSound
-  node::Init(nullptr, nullptr, nullptr, nullptr);
+  int argc = 0;
+  int exec_argc = 0;
+  const char** argv = nullptr;
+  const char** exec_argv = nullptr;
+  node::Init(&argc, argv, &exec_argc, &exec_argv);
 
 #if defined(OS_WIN)
   // uv_init overrides error mode to suppress the default crash dialog, bring

+ 1 - 1
atom/common/node_includes.h

@@ -35,8 +35,8 @@
 #include "env.h"
 #include "node.h"
 #include "node_buffer.h"
-#include "node_debug_options.h"
 #include "node_internals.h"
+#include "node_options.h"
 #include "node_platform.h"
 
 namespace node {