summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-01-30 12:18:25 -0800
committerPaul Phillips <paulp@improving.org>2012-01-30 12:21:44 -0800
commit7e104d0c712c8fff094be5b5d6605c7cf50be7d3 (patch)
treef17fcf1fb4a7bbbf3e38095866774240511ee874
parentcb952efd2955eb1bf80ae7fb9f6fe2efc465b45f (diff)
parent366fae9741283efc08edb32378f56a08417ff35a (diff)
downloadscala-7e104d0c712c8fff094be5b5d6605c7cf50be7d3.tar.gz
scala-7e104d0c712c8fff094be5b5d6605c7cf50be7d3.tar.bz2
scala-7e104d0c712c8fff094be5b5d6605c7cf50be7d3.zip
Merge branch 'master' into inline
-rw-r--r--src/compiler/scala/reflect/internal/Types.scala33
-rw-r--r--src/compiler/scala/tools/nsc/interpreter/Power.scala21
2 files changed, 35 insertions, 19 deletions
diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala
index 49ac205409..bf0017d989 100644
--- a/src/compiler/scala/reflect/internal/Types.scala
+++ b/src/compiler/scala/reflect/internal/Types.scala
@@ -1409,7 +1409,7 @@ trait Types extends api.Types { self: SymbolTable =>
// override def isNullable: Boolean =
// parents forall (p => p.isNullable && !p.typeSymbol.isAbstractType);
-
+
override def safeToString: String =
parents.mkString(" with ") +
(if (settings.debug.value || parents.isEmpty || (decls.elems ne null))
@@ -1750,6 +1750,19 @@ trait Types extends api.Types { self: SymbolTable =>
// override def isNonNull: Boolean = symbol == NonNullClass || super.isNonNull;
override def kind = "ClassInfoType"
+
+ override def safeToString =
+ if (settings.debug.value || decls.size > 1)
+ formattedToString
+ else
+ super.safeToString
+
+ /** A nicely formatted string with newlines and such.
+ */
+ def formattedToString: String =
+ parents.mkString("\n with ") +
+ (if (settings.debug.value || parents.isEmpty || (decls.elems ne null))
+ decls.mkString(" {\n ", "\n ", "\n}") else "")
}
object ClassInfoType extends ClassInfoTypeExtractor
@@ -2479,7 +2492,7 @@ trait Types extends api.Types { self: SymbolTable =>
*/
case class AntiPolyType(pre: Type, targs: List[Type]) extends Type {
override def safeToString =
- pre.toString + targs.mkString("(with type arguments ", ",", ")");
+ pre.toString + targs.mkString("(with type arguments ", ", ", ")");
override def memberType(sym: Symbol) = appliedType(pre.memberType(sym), targs)
// override def memberType(sym: Symbol) = pre.memberType(sym) match {
// case PolyType(tparams, restp) =>
@@ -3530,14 +3543,14 @@ trait Types extends api.Types { self: SymbolTable =>
}
override def toString = {
- val boundsStr = (
- if (loBounds.isEmpty && hiBounds.isEmpty) "[]"
- else {
- val lostr = if (loBounds.isEmpty) "" else loBounds map (_.safeToString) mkString("_>:(", ", ", ")")
- val histr = if (hiBounds.isEmpty) "" else hiBounds map (_.safeToString) mkString("_<:(", ", ", ")")
- List(lostr, histr) filterNot (_ == "") mkString ("[", " | ", "]")
- }
- )
+ val boundsStr = {
+ val lo = loBounds filterNot (_.typeSymbolDirect eq NothingClass)
+ val hi = hiBounds filterNot (_.typeSymbolDirect eq AnyClass)
+ val lostr = if (lo.isEmpty) Nil else List(lo.mkString(" >: (", ", ", ")"))
+ val histr = if (hi.isEmpty) Nil else List(hi.mkString(" <: (", ", ", ")"))
+
+ lostr ++ histr mkString ("[", " | ", "]")
+ }
if (inst eq NoType) boundsStr
else boundsStr + " _= " + inst.safeToString
}
diff --git a/src/compiler/scala/tools/nsc/interpreter/Power.scala b/src/compiler/scala/tools/nsc/interpreter/Power.scala
index 2ec41506ab..835fbb5638 100644
--- a/src/compiler/scala/tools/nsc/interpreter/Power.scala
+++ b/src/compiler/scala/tools/nsc/interpreter/Power.scala
@@ -187,12 +187,12 @@ class Power[ReplValsImpl <: ReplVals : Manifest](val intp: IMain, replVals: Repl
def declsOverride = membersDeclared filter (_.isOverride)
def declsOriginal = membersDeclared filterNot (_.isOverride)
- def members = membersUnabridged filterNot excludeMember
- def membersUnabridged = tpe.members
- def membersDeclared = members filterNot excludeMember
- def membersInherited = members filterNot (membersDeclared contains _)
- def memberTypes = members filter (_.name.isTypeName)
- def memberMethods = members filter (_.isMethod)
+ def members = membersUnabridged filterNot excludeMember
+ def membersUnabridged = tpe.members
+ def membersDeclared = members filterNot excludeMember
+ def membersInherited = members filterNot (membersDeclared contains _)
+ def memberTypes = members filter (_.name.isTypeName)
+ def memberMethods = members filter (_.isMethod)
def pkg = symbol.enclosingPackage
def pkgName = pkg.fullName
@@ -204,10 +204,13 @@ class Power[ReplValsImpl <: ReplVals : Manifest](val intp: IMain, replVals: Repl
def fullManifest = manifest[T]
def erasure = fullManifest.erasure
def shortClass = erasure.getName split "[$.]" last
- def baseTypeSeq = tpe.baseTypeSeq.toList
- def baseTypeSeqMap = baseTypeSeq map (x => (x, x.decls.toList)) toMap
- def baseTypeWhichDefines(name: String) = baseTypeSeq filter (_.decls exists (_.name.toString == name))
+ def baseClasses = tpe.baseClasses
+ def baseClassDecls = baseClasses map (x => (x, x.info.decls.toList.sortBy(_.name.toString))) toMap
+ def ancestors = baseClasses drop 1
+ def ancestorDeclares(name: String) = ancestors filter (_.info member newTermName(name) ne NoSymbol)
+ def baseTypes = tpe.baseTypeSeq.toList
+
def <:<[U: Manifest](other: U) = tpe <:< newInfo(other).tpe
def lub[U: Manifest](other: U) = intp.global.lub(List(tpe, newInfo(other).tpe))
def glb[U: Manifest](other: U) = intp.global.glb(List(tpe, newInfo(other).tpe))