diff options
author | Paul Phillips <paulp@improving.org> | 2011-03-28 22:45:53 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-03-28 22:45:53 +0000 |
commit | ebedbef6d186c4cc98c9c4445967af43225230dc (patch) | |
tree | 3f52fb0d8ee5be372607679f2af2d8c085e8b556 /src | |
parent | b3889b68af7aa2bcc31a4d6b9e1e6fba5d4e1757 (diff) | |
download | scala-ebedbef6d186c4cc98c9c4445967af43225230dc.tar.gz scala-ebedbef6d186c4cc98c9c4445967af43225230dc.tar.bz2 scala-ebedbef6d186c4cc98c9c4445967af43225230dc.zip |
Made ScalaRunTime.stringOf more general by sepa...
Made ScalaRunTime.stringOf more general by separating out the part which
formats it for a repl result, and cleaned up some string functions
around the repl. No review.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/interpreter/IMain.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interpreter/MemberHandlers.scala | 11 | ||||
-rw-r--r-- | src/library/scala/runtime/ScalaRunTime.scala | 20 |
3 files changed, 18 insertions, 19 deletions
diff --git a/src/compiler/scala/tools/nsc/interpreter/IMain.scala b/src/compiler/scala/tools/nsc/interpreter/IMain.scala index d74aa5e6df..1a50b87569 100644 --- a/src/compiler/scala/tools/nsc/interpreter/IMain.scala +++ b/src/compiler/scala/tools/nsc/interpreter/IMain.scala @@ -102,11 +102,8 @@ class IMain(val settings: Settings, protected val out: PrintWriter) { private def _initialize(): Boolean = { val source = """ - |// this is assembled to force the loading of approximately the - |// classes which will be loaded on the first expression anyway. |class $repl_$init { - | val x = "abc".reverse.length + (5 max 5) - | scala.runtime.ScalaRunTime.stringOf(x) + | List(1) map (_ + 1) |} |""".stripMargin @@ -497,7 +494,6 @@ class IMain(val settings: Settings, protected val out: PrintWriter) { def compileString(code: String): Boolean = compileSources(new BatchSourceFile("<script>", code)) - /** Build a request from the user. `trees` is `line` after being parsed. */ private def buildRequest(line: String, trees: List[Tree]): Request = new Request(line, trees) diff --git a/src/compiler/scala/tools/nsc/interpreter/MemberHandlers.scala b/src/compiler/scala/tools/nsc/interpreter/MemberHandlers.scala index 29c31f50d6..f98da3aeac 100644 --- a/src/compiler/scala/tools/nsc/interpreter/MemberHandlers.scala +++ b/src/compiler/scala/tools/nsc/interpreter/MemberHandlers.scala @@ -18,7 +18,11 @@ trait MemberHandlers { import global._ import naming._ - def string2codeQuoted(str: String) = "\"" + string2code(str) + "\"" + def string2codeQuoted(str: String) = + "\"" + string2code(str) + "\"" + + def any2stringOf(x: Any, maxlen: Int) = + "scala.runtime.ScalaRunTime.replStringOf(%s, %s)".format(x, maxlen) /** Convert a string into code that can recreate the string. * This requires replacing all special characters by escape @@ -32,8 +36,6 @@ trait MemberHandlers { } res.toString } - def any2stringOf(x: Any, maxlen: Int) = - "scala.runtime.ScalaRunTime.stringOf(%s, %s)".format(x, maxlen) private def codegenln(leadingPlus: Boolean, xs: String*): String = codegen(leadingPlus, (xs ++ Array("\n")): _*) private def codegenln(xs: String*): String = codegenln(true, xs: _*) @@ -121,7 +123,6 @@ trait MemberHandlers { class ValHandler(member: ValDef) extends MemberDefHandler(member) { val maxStringElements = 1000 // no need to mkString billions of elements - def stringOf(x: Any) = any2stringOf(x, maxStringElements) override def definesValue = true override def resultExtractionCode(req: Request): String = { @@ -131,7 +132,7 @@ trait MemberHandlers { // if this is a lazy val we avoid evaluating it here val resultString = if (mods.isLazy) codegenln(false, "<lazy>") - else stringOf(req fullPath name) + else any2stringOf(req fullPath name, maxStringElements) """ + "%s: %s = " + %s""".format(prettyName, string2code(req typeOf name), resultString) } diff --git a/src/library/scala/runtime/ScalaRunTime.scala b/src/library/scala/runtime/ScalaRunTime.scala index 3168fedc40..b4928c2a26 100644 --- a/src/library/scala/runtime/ScalaRunTime.scala +++ b/src/library/scala/runtime/ScalaRunTime.scala @@ -252,9 +252,8 @@ object ScalaRunTime { * called on null and (b) depending on the apparent type of an * array, toString may or may not print it in a human-readable form. * - * @param arg the value to stringify - * @return a string representation of <code>arg</code> - * + * @param arg the value to stringify + * @return a string representation of arg. */ def stringOf(arg: Any): String = stringOf(arg, scala.Int.MaxValue) def stringOf(arg: Any, maxElements: Int): String = { @@ -304,13 +303,16 @@ object ScalaRunTime { // The try/catch is defense against iterables which aren't actually designed // to be iterated, such as some scala.tools.nsc.io.AbstractFile derived classes. - val s = - try inner(arg) - catch { - case _: StackOverflowError | _: UnsupportedOperationException => arg.toString - } - + try inner(arg) + catch { + case _: StackOverflowError | _: UnsupportedOperationException | _: AssertionError => "" + arg + } + } + /** stringOf formatted for use in a repl result. */ + def replStringOf(arg: Any, maxElements: Int): String = { + val s = stringOf(arg, maxElements) val nl = if (s contains "\n") "\n" else "" + nl + s + "\n" } } |