diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2008-06-12 08:48:59 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2008-06-12 08:48:59 +0000 |
commit | e6a3566bb7b809b072bd2cedec6770ab932f8f9f (patch) | |
tree | 559d7d2f711ea18698b85d84d89720950921d90d /src/compiler | |
parent | d89ea1c9a5de945ca8f108bee8f174d6dcc2f7e8 (diff) | |
download | scala-e6a3566bb7b809b072bd2cedec6770ab932f8f9f.tar.gz scala-e6a3566bb7b809b072bd2cedec6770ab932f8f9f.tar.bz2 scala-e6a3566bb7b809b072bd2cedec6770ab932f8f9f.zip |
Fixed 'isSameType' for refinement types with ov...
Fixed 'isSameType' for refinement types with overloaded definitions.
Fixes #1014.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Types.scala | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala index d508635983..69bee83f09 100644 --- a/src/compiler/scala/tools/nsc/symtab/Types.scala +++ b/src/compiler/scala/tools/nsc/symtab/Types.scala @@ -3398,9 +3398,16 @@ A type's typeSymbol should never be inspected directly. case (RefinedType(parents1, ref1), RefinedType(parents2, ref2)) => def isSubScope(s1: Scope, s2: Scope): Boolean = s2.toList.forall { sym2 => - val sym1 = s1.lookup(sym2.name) - sym1 != NoSymbol && - sym1.info =:= sym2.info.substThis(sym2.owner, sym1.owner.thisType) + var e1 = s1.lookupEntry(sym2.name) + (e1 ne null) && { + val substSym = sym2.info.substThis(sym2.owner, e1.sym.owner.thisType) + var isEqual = e1.sym.info =:= substSym + while (!isEqual && (e1 ne null)) { + e1 = s1.lookupNextEntry(e1) + isEqual = e1.sym.info =:= substSym + } + isEqual + } } //Console.println("is same? " + tp1 + " " + tp2 + " " + tp1.typeSymbol.owner + " " + tp2.typeSymbol.owner)//DEBUG isSameTypes(parents1, parents2) && isSubScope(ref1, ref2) && isSubScope(ref2, ref1) |