aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/Resident.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-11-02 11:08:28 +0100
committerGuillaume Martres <smarter@ubuntu.com>2016-11-22 01:35:07 +0100
commit8a61ff432543a29234193cd1f7c14abd3f3d31a0 (patch)
treea8147561d307af862c295cfc8100d271063bb0dd /compiler/src/dotty/tools/dotc/Resident.scala
parent6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f (diff)
downloaddotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.tar.gz
dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.tar.bz2
dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.zip
Move compiler and compiler tests to compiler dir
Diffstat (limited to 'compiler/src/dotty/tools/dotc/Resident.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/Resident.scala58
1 files changed, 58 insertions, 0 deletions
diff --git a/compiler/src/dotty/tools/dotc/Resident.scala b/compiler/src/dotty/tools/dotc/Resident.scala
new file mode 100644
index 000000000..56f6684d0
--- /dev/null
+++ b/compiler/src/dotty/tools/dotc/Resident.scala
@@ -0,0 +1,58 @@
+package dotty.tools
+package dotc
+
+import core.Contexts.Context
+import reporting.Reporter
+import java.io.EOFException
+import scala.annotation.tailrec
+
+/** A compiler which stays resident between runs. This is more of a PoC than
+ * something that's expected to be used often
+ *
+ * Usage:
+ *
+ * > scala dotty.tools.dotc.Resident <options> <initial files>
+ *
+ * dotc> "more options and files to compile"
+ *
+ * ...
+ *
+ * dotc> :reset // reset all options to the ones passed on the command line
+ *
+ * ...
+ *
+ * dotc> :q // quit
+ */
+class Resident extends Driver {
+
+ object residentCompiler extends Compiler
+
+ override def newCompiler(implicit ctx: Context): Compiler = ???
+
+ override def sourcesRequired = false
+
+ private val quit = ":q"
+ private val reset = ":reset"
+ private val prompt = "dotc> "
+
+ private def getLine() = {
+ Console.print(prompt)
+ try scala.io.StdIn.readLine() catch { case _: EOFException => quit }
+ }
+
+ final override def process(args: Array[String], rootCtx: Context): Reporter = {
+ @tailrec def loop(args: Array[String], prevCtx: Context): Reporter = {
+ var (fileNames, ctx) = setup(args, prevCtx)
+ doCompile(residentCompiler, fileNames)(ctx)
+ var nextCtx = ctx
+ var line = getLine()
+ while (line == reset) {
+ nextCtx = rootCtx
+ line = getLine()
+ }
+ if (line.startsWith(quit)) ctx.reporter
+ else loop(line split "\\s+", nextCtx)
+ }
+ loop(args, rootCtx)
+ }
+}