summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/Interpreter.scala3
-rw-r--r--src/library/scala/runtime/ScalaRunTime.scala9
2 files changed, 5 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/Interpreter.scala b/src/compiler/scala/tools/nsc/Interpreter.scala
index 5d11973a74..7dd6d3ba04 100644
--- a/src/compiler/scala/tools/nsc/Interpreter.scala
+++ b/src/compiler/scala/tools/nsc/Interpreter.scala
@@ -685,6 +685,7 @@ class Interpreter(val settings: Settings, out: PrintWriter) {
private class GenericHandler(member: Tree) extends MemberHandler(member)
private class ValHandler(member: ValDef) extends MemberHandler(member) {
+ val maxStringElements = 1000 // no need to mkString billions of elements
lazy val ValDef(mods, vname, _, _) = member
lazy val prettyName = NameTransformer.decode(vname)
lazy val isLazy = mods hasFlag Flags.LAZY
@@ -696,7 +697,7 @@ class Interpreter(val settings: Settings, out: PrintWriter) {
val isInternal = isGeneratedVarName(vname) && req.typeOfEnc(vname) == "Unit"
if (!mods.isPublic || isInternal) return
- lazy val extractor = "scala.runtime.ScalaRunTime.stringOf(%s)".format(req fullPath vname)
+ lazy val extractor = "scala.runtime.ScalaRunTime.stringOf(%s, %s)".format(req fullPath vname, maxStringElements)
// if this is a lazy val we avoid evaluating it here
val resultString = if (isLazy) codegenln(false, "<lazy>") else extractor
diff --git a/src/library/scala/runtime/ScalaRunTime.scala b/src/library/scala/runtime/ScalaRunTime.scala
index d7ae2c5cf6..032603bb60 100644
--- a/src/library/scala/runtime/ScalaRunTime.scala
+++ b/src/library/scala/runtime/ScalaRunTime.scala
@@ -235,11 +235,8 @@ object ScalaRunTime {
* @return a string representation of <code>arg</code>
*
*/
- def stringOf(arg: Any): String = {
- // Purely a sanity check to prevent accidental infinity: the (default) repl
- // maxPrintString limit will kick in way before this
- val maxElements = 10000
-
+ def stringOf(arg: Any): String = stringOf(arg, scala.Int.MaxValue)
+ def stringOf(arg: Any, maxElements: Int): String = {
def isScalaClass(x: AnyRef) =
Option(x.getClass.getPackage) exists (_.getName startsWith "scala.")
@@ -267,7 +264,7 @@ object ScalaRunTime {
def inner(arg: Any): String = arg match {
case null => "null"
case x if useOwnToString(x) => x.toString
- case x: AnyRef if isArray(x) => WrappedArray make x map inner mkString ("Array(", ", ", ")")
+ case x: AnyRef if isArray(x) => WrappedArray make x take maxElements map inner mkString ("Array(", ", ", ")")
case x: Traversable[_] => x take maxElements map inner mkString (x.stringPrefix + "(", ", ", ")")
case x: Product1[_] if isTuple(x) => "(" + inner(x._1) + ",)" // that special trailing comma
case x: Product if isTuple(x) => x.productIterator map inner mkString ("(", ",", ")")