summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-08-23 14:26:38 +0000
committerPaul Phillips <paulp@improving.org>2010-08-23 14:26:38 +0000
commit3db5daf609b4c67ce1a236eb4c99a0fdc008581d (patch)
tree3e789bbde616ffc2b9132b57bebdde4426aa95e1 /src
parent2c14b262e9a04b86b83571da59c9f4b35f292e79 (diff)
downloadscala-3db5daf609b4c67ce1a236eb4c99a0fdc008581d.tar.gz
scala-3db5daf609b4c67ce1a236eb4c99a0fdc008581d.tar.bz2
scala-3db5daf609b4c67ce1a236eb4c99a0fdc008581d.zip
Pretty print tuples in the repl.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/runtime/ScalaRunTime.scala21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/library/scala/runtime/ScalaRunTime.scala b/src/library/scala/runtime/ScalaRunTime.scala
index dfb20c7d37..d7ae2c5cf6 100644
--- a/src/library/scala/runtime/ScalaRunTime.scala
+++ b/src/library/scala/runtime/ScalaRunTime.scala
@@ -240,10 +240,11 @@ object ScalaRunTime {
// maxPrintString limit will kick in way before this
val maxElements = 10000
- def isScalaClass(x: AnyRef) = {
- val pkg = x.getClass.getPackage
- (pkg != null) && (pkg.getName startsWith "scala.")
- }
+ def isScalaClass(x: AnyRef) =
+ Option(x.getClass.getPackage) exists (_.getName startsWith "scala.")
+
+ def isTuple(x: AnyRef) =
+ x.getClass.getName matches """^scala\.Tuple(\d+).*"""
// When doing our own iteration is dangerous
def useOwnToString(x: Any) = x match {
@@ -264,11 +265,13 @@ object ScalaRunTime {
// The recursively applied attempt to prettify Array printing
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: Traversable[_] => x take maxElements map inner mkString (x.stringPrefix + "(", ", ", ")")
- case x => x toString
+ 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: 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 ("(", ",", ")")
+ case x => x toString
}
// The try/catch is defense against iterables which aren't actually designed