summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/Types.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-09-28 14:36:42 -0700
committerPaul Phillips <paulp@improving.org>2012-10-09 14:17:34 -0700
commitba36c44c31d1a1e0b5c0cf3d4775edd0ae0d5a13 (patch)
tree8eb8caeb82afa0677a2e78291a990a9e525f3c7e /src/reflect/scala/reflect/internal/Types.scala
parent432f9368011e0fd9e89ca0e18082bfec180baf32 (diff)
downloadscala-ba36c44c31d1a1e0b5c0cf3d4775edd0ae0d5a13.tar.gz
scala-ba36c44c31d1a1e0b5c0cf3d4775edd0ae0d5a13.tar.bz2
scala-ba36c44c31d1a1e0b5c0cf3d4775edd0ae0d5a13.zip
Fix for SI-4744, another variety of cycle.
I threw this in with the previous commit behind -Ybreak-cycles, but this one is much less sketchy. Explanation: have to handle f-bounds more deftly. Namers forces lower bounds to prevent recursion in that direction, but a light touch is required to handle these two situations differently: // This is a cyclic type parameter - an error is correct class A[T <: Comparable[_ <: T]] // This is not cyclic - it flips the arrow class B[T <: Comparable[_ >: T]] Long have I been haunted by the knowledge that you can write class B in java, but not in scala: public class B<T extends Comparable<? super T>> {} It's over! We've achieved parity with java.
Diffstat (limited to 'src/reflect/scala/reflect/internal/Types.scala')
-rw-r--r--src/reflect/scala/reflect/internal/Types.scala3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Types.scala b/src/reflect/scala/reflect/internal/Types.scala
index 9a43ad441f..f8b5d089e8 100644
--- a/src/reflect/scala/reflect/internal/Types.scala
+++ b/src/reflect/scala/reflect/internal/Types.scala
@@ -1710,7 +1710,8 @@ trait Types extends api.Types { self: SymbolTable =>
object baseClassesCycleMonitor {
private var open: List[Symbol] = Nil
@inline private def cycleLog(msg: => String) {
- Console.err.println(msg)
+ if (settings.debug.value)
+ Console.err.println(msg)
}
def size = open.size
def push(clazz: Symbol) {