diff options
author | Paul Phillips <paulp@improving.org> | 2012-10-29 12:36:33 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-10-29 16:39:10 -0700 |
commit | 1841114e6cbb1ab4e3ad6abcd17b0bc9ebef0481 (patch) | |
tree | 95f80c7aa60dfe55ca03691d7bb5289254183a94 /src/compiler/scala/tools/nsc/interpreter/ReplDir.scala | |
parent | b480d991072e6e68ed46574d87e4483da778ff0e (diff) | |
download | scala-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.scala | 48 |
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) + } +} |