diff options
author | Paul Phillips <paulp@improving.org> | 2012-01-30 12:18:25 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-01-30 12:21:44 -0800 |
commit | 7e104d0c712c8fff094be5b5d6605c7cf50be7d3 (patch) | |
tree | f17fcf1fb4a7bbbf3e38095866774240511ee874 | |
parent | cb952efd2955eb1bf80ae7fb9f6fe2efc465b45f (diff) | |
parent | 366fae9741283efc08edb32378f56a08417ff35a (diff) | |
download | scala-7e104d0c712c8fff094be5b5d6605c7cf50be7d3.tar.gz scala-7e104d0c712c8fff094be5b5d6605c7cf50be7d3.tar.bz2 scala-7e104d0c712c8fff094be5b5d6605c7cf50be7d3.zip |
Merge branch 'master' into inline
-rw-r--r-- | src/compiler/scala/reflect/internal/Types.scala | 33 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interpreter/Power.scala | 21 |
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)) |