From 2e7bd469cd4bf887c7fd230f56e2f77e1241f6b5 Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Wed, 22 Sep 2010 20:39:00 +0000 Subject: closes #3792: type equality for singleton types... closes #3792: type equality for singleton types did not take type aliases into account while chasing the chain of underlying types (if the underlying type is an alias of a singleton type, it should be followed) review by odersky --- src/compiler/scala/tools/nsc/symtab/Types.scala | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala index cced26a780..a82f292ed2 100644 --- a/src/compiler/scala/tools/nsc/symtab/Types.scala +++ b/src/compiler/scala/tools/nsc/symtab/Types.scala @@ -4297,16 +4297,18 @@ A type's typeSymbol should never be inspected directly. case _: SingletonType => tp2 match { case _: SingletonType => - var origin1 = tp1 - while (origin1.underlying.isInstanceOf[SingletonType]) { - assert(origin1 ne origin1.underlying, origin1) - origin1 = origin1.underlying - } - var origin2 = tp2 - while (origin2.underlying.isInstanceOf[SingletonType]) { - assert(origin2 ne origin2.underlying, origin2) - origin2 = origin2.underlying + @inline def chaseDealiasedUnderlying(tp: Type): Type = { + var origin = tp + var next = origin.underlying.dealias + while (next.isInstanceOf[SingletonType]) { + assert(origin ne next, origin) + origin = next + next = origin.underlying.dealias + } + origin } + val origin1 = chaseDealiasedUnderlying(tp1) + val origin2 = chaseDealiasedUnderlying(tp2) ((origin1 ne tp1) || (origin2 ne tp2)) && (origin1 =:= origin2) case _ => false -- cgit v1.2.3