diff options
Diffstat (limited to 'Source/JavaScriptCore/jsc.cpp')
-rw-r--r-- | Source/JavaScriptCore/jsc.cpp | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp index 43337e4ee..5f3dbdb99 100644 --- a/Source/JavaScriptCore/jsc.cpp +++ b/Source/JavaScriptCore/jsc.cpp @@ -113,19 +113,23 @@ struct Script { } }; -struct CommandLine { - CommandLine() - : interactive(false) - , dump(false) - , exitCode(false) +class CommandLine { +public: + CommandLine(int argc, char** argv) + : m_interactive(false) + , m_dump(false) + , m_exitCode(false) { + parseArguments(argc, argv); } - bool interactive; - bool dump; - bool exitCode; - Vector<Script> scripts; - Vector<UString> arguments; + bool m_interactive; + bool m_dump; + bool m_exitCode; + Vector<Script> m_scripts; + Vector<UString> m_arguments; + + void parseArguments(int, char**); }; static const char interactivePrompt[] = "> "; @@ -623,7 +627,7 @@ static NO_RETURN void printUsageStatement(bool help = false) exit(help ? EXIT_SUCCESS : EXIT_FAILURE); } -static void parseArguments(int argc, char** argv, CommandLine& options) +void CommandLine::parseArguments(int argc, char** argv) { int i = 1; bool needToDumpOptions = false; @@ -634,21 +638,21 @@ static void parseArguments(int argc, char** argv, CommandLine& options) if (!strcmp(arg, "-f")) { if (++i == argc) printUsageStatement(); - options.scripts.append(Script(true, argv[i])); + m_scripts.append(Script(true, argv[i])); continue; } if (!strcmp(arg, "-e")) { if (++i == argc) printUsageStatement(); - options.scripts.append(Script(false, argv[i])); + m_scripts.append(Script(false, argv[i])); continue; } if (!strcmp(arg, "-i")) { - options.interactive = true; + m_interactive = true; continue; } if (!strcmp(arg, "-d")) { - options.dump = true; + m_dump = true; continue; } if (!strcmp(arg, "-s")) { @@ -661,7 +665,7 @@ static void parseArguments(int argc, char** argv, CommandLine& options) continue; } if (!strcmp(arg, "-x")) { - options.exitCode = true; + m_exitCode = true; continue; } if (!strcmp(arg, "--")) { @@ -690,14 +694,14 @@ static void parseArguments(int argc, char** argv, CommandLine& options) // This arg is not recognized by the VM nor by jsc. Pass it on to the // script. - options.scripts.append(Script(true, argv[i])); + m_scripts.append(Script(true, argv[i])); } - if (options.scripts.isEmpty()) - options.interactive = true; + if (m_scripts.isEmpty()) + m_interactive = true; for (; i < argc; ++i) - options.arguments.append(argv[i]); + m_arguments.append(argv[i]); if (needToDumpOptions) JSC::Options::dumpAllOptions(stderr); @@ -707,21 +711,21 @@ static void parseArguments(int argc, char** argv, CommandLine& options) int jscmain(int argc, char** argv) { + // Note that the options parsing can affect JSGlobalData creation, and thus + // comes first. + CommandLine options(argc, argv); RefPtr<JSGlobalData> globalData = JSGlobalData::create(ThreadStackTypeLarge, LargeHeap); JSLockHolder lock(globalData.get()); int result; - CommandLine options; - parseArguments(argc, argv, options); - - GlobalObject* globalObject = GlobalObject::create(*globalData, GlobalObject::createStructure(*globalData, jsNull()), options.arguments); - bool success = runWithScripts(globalObject, options.scripts, options.dump); - if (options.interactive && success) + GlobalObject* globalObject = GlobalObject::create(*globalData, GlobalObject::createStructure(*globalData, jsNull()), options.m_arguments); + bool success = runWithScripts(globalObject, options.m_scripts, options.m_dump); + if (options.m_interactive && success) runInteractive(globalObject); result = success ? 0 : 3; - if (options.exitCode) + if (options.m_exitCode) printf("jsc exiting %d\n", result); return result; |