summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/Main.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/Main.scala')
-rw-r--r--src/compiler/scala/tools/nsc/Main.scala71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/Main.scala b/src/compiler/scala/tools/nsc/Main.scala
new file mode 100644
index 0000000000..58b352db61
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/Main.scala
@@ -0,0 +1,71 @@
+/* NSC -- new scala compiler
+ * Copyright 2005 LAMP/EPFL
+ * @author Martin Odersky
+ */
+// $Id$
+package scala.tools.nsc;
+
+import scala.tools.nsc.util.{Position};
+import scala.tools.nsc.reporters.{Reporter, ConsoleReporter};
+
+/** The main class for NSC, a compiler for the programming
+ * language Scala.
+ */
+object Main extends Object with EvalLoop {
+
+ val PRODUCT: String =
+ System.getProperty("scala.product", "scalac");
+ val VERSION: String =
+ System.getProperty("scala.version", "unknown version");
+ val versionMsg = PRODUCT + " " + VERSION + " -- (c) 2002-05 LAMP/EPFL";
+ val prompt = "\nnsc> ";
+
+ private var reporter: ConsoleReporter = _;
+
+ def error(msg: String): unit =
+ reporter.error(new Position(PRODUCT),
+ msg + "\n " + PRODUCT + " -help gives more information");
+
+ def errors() = reporter.errors;
+
+ def resident(compiler: Global): unit = {
+ loop(line => {
+ val args = List.fromString(line, ' ');
+ val command = new CompilerCommand(args, error, true);
+ (new compiler.Run) compile command.files
+ })
+ }
+
+ def process(args: Array[String]): unit = {
+ reporter = new ConsoleReporter();
+ val command = new CompilerCommand(List.fromArray(args), error, false);
+ reporter.prompt = command.settings.prompt.value;
+ if (command.settings.version.value)
+ reporter.info(null, versionMsg, true)
+ else if (command.settings.help.value)
+ reporter.info(null, command.usageMsg, true)
+ else {
+ try {
+ val compiler = new Global(command.settings, reporter);
+ if (command.settings.resident.value)
+ resident(compiler);
+ else if (command.files.isEmpty)
+ reporter.info(null, command.usageMsg, true)
+ else
+ (new compiler.Run) compile command.files;
+ } catch {
+ case ex @ FatalError(msg) =>
+ if (command.settings.debug.value)
+ ex.printStackTrace();
+ reporter.error(null, "fatal error: " + msg);
+ }
+ reporter.printSummary()
+ }
+ }
+
+ def main(args: Array[String]): unit = {
+ process(args);
+ System.exit(if (reporter.errors > 0) 1 else 0);
+ }
+
+}