diff options
author | Geoffrey Washburn <geoffrey.washburn@epfl.ch> | 2008-03-05 11:50:24 +0000 |
---|---|---|
committer | Geoffrey Washburn <geoffrey.washburn@epfl.ch> | 2008-03-05 11:50:24 +0000 |
commit | 921bc499d0867955506172bf1b0db969257dc712 (patch) | |
tree | 64c47a2423c2ae437e3d7db322dc94349fdf7d94 /src | |
parent | 84e704d8b97de2b3f799a2852a80ba4c3d3b15e8 (diff) | |
download | scala-921bc499d0867955506172bf1b0db969257dc712.tar.gz scala-921bc499d0867955506172bf1b0db969257dc712.tar.bz2 scala-921bc499d0867955506172bf1b0db969257dc712.zip |
Created a "new" class that is used for running ...
Created a "new" class that is used for running scaladoc. Right now it is
just Main with a new name, but this will change in the near future (and
Main, etc. will lose the -Ydoc option).
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/ScalaDoc.scala | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/ScalaDoc.scala b/src/compiler/scala/tools/nsc/ScalaDoc.scala new file mode 100644 index 0000000000..c58fb440a7 --- /dev/null +++ b/src/compiler/scala/tools/nsc/ScalaDoc.scala @@ -0,0 +1,111 @@ +/* NSC -- new Scala compiler + * Copyright 2005-2007 LAMP/EPFL + * @author Martin Odersky + */ +// $Id$ + +package scala.tools.nsc + +import java.io.File + +import scala.tools.nsc.doc.DefaultDocDriver +import scala.tools.nsc.reporters.{Reporter, ConsoleReporter} +import scala.tools.nsc.util.FakePos //{Position} + + +/** The main class for NSC, a compiler for the programming + * language Scala. + */ +object ScalaDoc extends AnyRef with EvalLoop { + + val versionMsg = "Scala compiler " + + Properties.versionString + " -- " + + Properties.copyrightString + + val prompt = Properties.residentPromptString + + var reporter: ConsoleReporter = _ + + def error(msg: String) { + reporter.error(/*new Position */FakePos("scalac"), + msg + "\n scalac -help gives more information") + } + + /* needed ?? */ + //def errors() = reporter.errors + + def resident(compiler: Global) { + loop { line => + val args = List.fromString(line, ' ') + val command = new CompilerCommand(args, new Settings(error), error, true) + (new compiler.Run) compile command.files + } + } + + def process(args: Array[String]) { + val settings = new Settings(error) + reporter = new ConsoleReporter(settings) + val command = new CompilerCommand(List.fromArray(args), settings, error, false) + if (command.settings.version.value) + reporter.info(null, versionMsg, true) + else { + if (command.settings.target.value == "msil") { + val libpath = System.getProperty("msil.libpath") + if (libpath != null) + command.settings.assemrefs.value = + command.settings.assemrefs.value + File.pathSeparator + libpath + } + try { + object compiler extends Global(command.settings, reporter) + if (reporter.hasErrors) { + reporter.flush() + return + } + + if (command.settings.help.value || command.settings.Xhelp.value || command.settings.Yhelp.value) { + if (command.settings.help.value) { + reporter.info(null, command.usageMsg, true) + reporter.info(null, compiler.pluginOptionsHelp, true) + } + if (command.settings.Xhelp.value) + reporter.info(null, command.xusageMsg, true) + if (command.settings.Yhelp.value) + reporter.info(null, command.yusageMsg, true) + } else if (command.settings.showPlugins.value) + reporter.info(null, compiler.pluginDescriptions, true) + else if (command.settings.showPhases.value) + reporter.info(null, compiler.phaseDescriptions, true) + else { + if (command.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 + if (command.settings.doc.value) { + val generator = new DefaultDocDriver { + lazy val global: compiler.type = compiler + def settings = command.settings + } + generator.process(command.settings, run.units) + } + reporter.printSummary() + } + } + } catch { + case ex @ FatalError(msg) => + if (command.settings.debug.value) + ex.printStackTrace(); + reporter.error(null, "fatal error: " + msg) + } + } + } + + def main(args: Array[String]) { + process(args) + exit(if (reporter.hasErrors) 1 else 0) + } + +} |