diff options
author | Martin Odersky <odersky@gmail.com> | 2007-06-19 12:17:32 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-06-19 12:17:32 +0000 |
commit | c184cc70967086343dccef06737b641f9903580c (patch) | |
tree | b028daf6ad1635e8e5d2c4ac320cf1a8163787b3 | |
parent | 6d5979b71423b55121c582786e5d052c1419ac41 (diff) | |
download | scala-c184cc70967086343dccef06737b641f9903580c.tar.gz scala-c184cc70967086343dccef06737b641f9903580c.tar.bz2 scala-c184cc70967086343dccef06737b641f9903580c.zip |
fixed test file; fixed Long/Long bug
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Infer.scala | 25 | ||||
-rw-r--r-- | test/files/neg/bug987.check | 20 | ||||
-rwxr-xr-x | test/files/run/existentials.scala | 11 |
3 files changed, 36 insertions, 20 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Infer.scala b/src/compiler/scala/tools/nsc/typechecker/Infer.scala index 0cb6aef48e..bad414fd78 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Infer.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Infer.scala @@ -248,20 +248,17 @@ trait Infer { } } - val patches = { - val syms1 = typeRefs.collect(tp1) - val syms2 = typeRefs.collect(tp2) - for { - sym1 <- syms1 - sym2 <- syms2 - if sym1 != sym2 && sym1.toString == sym2.toString - } yield { - val name = sym1.name - explainName(sym1) - explainName(sym2) - if (sym1.owner == sym2.owner) sym2.name = newTypeName("(some other)"+sym2.name) - (sym1, sym2, name) - } + val patches = new ListBuffer[(Symbol, Symbol, Name)] + for { + t1 @ TypeRef(_, sym1, _) <- tp1 + t2 @ TypeRef(_, sym2, _) <- tp2 + if sym1 != sym2 && t1.toString == t2.toString + } { + val name = sym1.name + explainName(sym1) + explainName(sym2) + if (sym1.owner == sym2.owner) sym2.name = newTypeName("(some other)"+sym2.name) + patches += (sym1, sym2, name) } val result = op diff --git a/test/files/neg/bug987.check b/test/files/neg/bug987.check index 77e71c9b5e..d850f39fd9 100644 --- a/test/files/neg/bug987.check +++ b/test/files/neg/bug987.check @@ -1,9 +1,19 @@ -bug987.scala:15: error: the type intersection B[D] with B[C] is malformed - --- because --- -no common type instance of base types B[C] and B[D] exists +bug987.scala:15: error: illegal inheritance; + class E inherits different type instances of trait B: +B[C] and B[D] class E extends D ^ -bug987.scala:20: error: illegal cyclic reference involving class E +bug987.scala:20: error: illegal inheritance; + class F inherits different type instances of trait B: +B[C] and B[D] class F extends D ^ -two errors found +bug987.scala:25: error: illegal inheritance; + class D inherits different type instances of trait B: +B[C] and B[D] +abstract class D extends C with B[D] {} + ^ +bug987.scala:25: error: type arguments [D] do not conform to trait B's type parameter bounds [T <: B[T]] +abstract class D extends C with B[D] {} + ^ +four errors found diff --git a/test/files/run/existentials.scala b/test/files/run/existentials.scala index 3d51751996..76dd705380 100755 --- a/test/files/run/existentials.scala +++ b/test/files/run/existentials.scala @@ -12,8 +12,17 @@ trait Counter[T] { def newCounter: T def get(i: T): Int def inc(i: T): T - } +} + +case class C[T](x: T) +object LUB { + def x = C(1) + def y = C("abc") + var coinflip: boolean = _ + def z = if (coinflip) x else y + def zz: C[_1] for_some { type _1 >: Int with java.lang.String } = z +} object Test extends Application { def foo(x : Counter[T] { def name : String } for_some { type T }) = x match { |