summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/jsc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/jsc.cpp')
-rw-r--r--Source/JavaScriptCore/jsc.cpp58
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;