summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/interpreter/ReplDir.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-10-29 12:36:33 -0700
committerPaul Phillips <paulp@improving.org>2012-10-29 16:39:10 -0700
commit1841114e6cbb1ab4e3ad6abcd17b0bc9ebef0481 (patch)
tree95f80c7aa60dfe55ca03691d7bb5289254183a94 /src/compiler/scala/tools/nsc/interpreter/ReplDir.scala
parentb480d991072e6e68ed46574d87e4483da778ff0e (diff)
downloadscala-1841114e6cbb1ab4e3ad6abcd17b0bc9ebef0481.tar.gz
scala-1841114e6cbb1ab4e3ad6abcd17b0bc9ebef0481.tar.bz2
scala-1841114e6cbb1ab4e3ad6abcd17b0bc9ebef0481.zip
An option for real repl output.
There have been many requests to expose the products of the repl in some way outside in-memory. This does that. scala # usual in-memory behavior scala -Yrepl-outdir "" # make up a temp dir scala -Yrepl-outdir /foo/bar # use /foo/bar
Diffstat (limited to 'src/compiler/scala/tools/nsc/interpreter/ReplDir.scala')
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/ReplDir.scala48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/interpreter/ReplDir.scala b/src/compiler/scala/tools/nsc/interpreter/ReplDir.scala
new file mode 100644
index 0000000000..9fbf64acb5
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/interpreter/ReplDir.scala
@@ -0,0 +1,48 @@
+/* NSC -- new Scala compiler
+ * Copyright 2005-2012 LAMP/EPFL
+ * @author Paul Phillips
+ */
+
+package scala.tools.nsc
+package interpreter
+
+import io.VirtualDirectory
+import settings.MutableSettings
+import scala.reflect.io.{ AbstractFile, PlainDirectory, Directory }
+import scala.collection.generic.Clearable
+
+/** Directory to save .class files to. */
+trait ReplDir extends AbstractFile with Clearable { }
+
+private class ReplVirtualDir() extends VirtualDirectory("(memory)", None) with ReplDir { }
+private class ReplRealDir(dir: Directory) extends PlainDirectory(dir) with ReplDir {
+ def clear() = {
+ dir.deleteRecursively()
+ dir.createDirectory()
+ }
+}
+
+class ReplOutput(val dirSetting: MutableSettings#StringSetting) {
+ // outdir for generated classfiles - may be in-memory (the default),
+ // a generated temporary directory, or a specified outdir.
+ val dir: ReplDir = (
+ if (dirSetting.isDefault)
+ new ReplVirtualDir()
+ else if (dirSetting.value == "")
+ new ReplRealDir(Directory.makeTemp("repl"))
+ else
+ new ReplRealDir(Directory(dirSetting.value))
+ )
+
+ // print the contents hierarchically
+ def show(out: JPrintWriter) = {
+ def pp(root: AbstractFile, indentLevel: Int) {
+ val label = root.name
+ val spaces = " " * indentLevel
+ out.println(spaces + label)
+ if (root.isDirectory)
+ root.toList sortBy (_.name) foreach (x => pp(x, indentLevel + 1))
+ }
+ pp(dir, 0)
+ }
+}