diff options
author | Martin Odersky <odersky@gmail.com> | 2011-08-24 17:02:31 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2011-08-24 17:02:31 +0000 |
commit | 77175ede13ac1b0b37e82aabdfe091e0ec592b25 (patch) | |
tree | dd8551c9ca54d6532ca7e44abe675560d34f2fc4 /src/compiler/scala/tools/nsc/Main.scala | |
parent | 48e8133cb08a252ea0ec325d4c6537bccb2e0465 (diff) | |
download | scala-77175ede13ac1b0b37e82aabdfe091e0ec592b25.tar.gz scala-77175ede13ac1b0b37e82aabdfe091e0ec592b25.tar.bz2 scala-77175ede13ac1b0b37e82aabdfe091e0ec592b25.zip |
Refactored everything that's clean in nsc.Main ...
Refactored everything that's clean in nsc.Main to nsc.Driver. Left the
cruft in Main which now inherits Driver. Makes it simpler to create new
compiler variants by subclassing Driver instead of adding yet one more
case to the convoluted logic in Main.
Diffstat (limited to 'src/compiler/scala/tools/nsc/Main.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/Main.scala | 72 |
1 files changed, 14 insertions, 58 deletions
diff --git a/src/compiler/scala/tools/nsc/Main.scala b/src/compiler/scala/tools/nsc/Main.scala index de1d148a36..38da47aacc 100644 --- a/src/compiler/scala/tools/nsc/Main.scala +++ b/src/compiler/scala/tools/nsc/Main.scala @@ -17,19 +17,10 @@ import Properties.{ versionString, copyrightString, residentPromptString, msilLi /** The main class for NSC, a compiler for the programming * language Scala. */ -object Main extends AnyRef with EvalLoop { - val versionMsg = "Scala compiler " + - versionString + " -- " + - copyrightString +object Main extends Driver with EvalLoop { val prompt = residentPromptString - var reporter: ConsoleReporter = _ - - private def scalacError(msg: String) { - reporter.error(FakePos("scalac"), msg + "\n scalac -help gives more information") - } - def resident(compiler: Global) { loop { line => val args = line.split(' ').toList @@ -39,15 +30,8 @@ object Main extends AnyRef with EvalLoop { } } - def process(args: Array[String]) { - val ss = new Settings(scalacError) - reporter = new ConsoleReporter(ss) - val command = new CompilerCommand(args.toList, ss) - val settings = command.settings - - if (settings.version.value) - reporter.info(null, versionMsg, true) - else if (settings.Yidedebug.value) { + override def processSettingsHook(): Boolean = + if (settings.Yidedebug.value) { settings.Xprintpos.value = true settings.Yrangepos.value = true val compiler = new interactive.Global(settings, reporter) @@ -62,6 +46,7 @@ object Main extends AnyRef with EvalLoop { case None => reporter.reset() // Causes other compiler errors to be ignored } askShutdown + false } else if (settings.Ybuilderdebug.value != "none") { def fileSet(files : List[String]) = Set.empty ++ (files map AbstractFile.getFile) @@ -78,50 +63,21 @@ object Main extends AnyRef with EvalLoop { val command = new CompilerCommand(args.toList, settings) buildManager.update(fileSet(command.files), Set.empty) } + false } else { if (settings.target.value == "msil") msilLibPath foreach (x => settings.assemrefs.value += (pathSeparator + x)) - - val compiler = - if (settings.Yrangepos.value) new interactive.Global(settings, reporter) - else new Global(settings, reporter) - - try { - if (reporter.hasErrors) - return reporter.flush() - - if (command.shouldStopWithInfo) { - reporter.info(null, command.getInfoMessage(compiler), true) - } - else { - if (settings.resident.value) - resident(compiler) - else if (command.files.isEmpty) { - reporter.info(null, command.usageMsg, true) - reporter.info(null, compiler.pluginOptionsHelp, true) - } - else { - val run = new compiler.Run() - run compile command.files - reporter.printSummary() - } - } - } - catch { - case ex => - compiler.logThrowable(ex) - ex match { - case FatalError(msg) => reporter.error(null, "fatal error: " + msg) - case _ => throw ex - } - } + true } - } - def main(args: Array[String]) { - process(args) - sys.exit(if (reporter.hasErrors) 1 else 0) - } + override def newCompiler(): Global = + if (settings.Yrangepos.value) new interactive.Global(settings, reporter) + else new Global(settings, reporter) + override def doCompile(compiler: Global) { + if (settings.resident.value) + resident(compiler) + else super.doCompile(compiler) + } } |