From 34993a55387b381dc9e2e754d7179f0385974abd Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Mon, 9 Dec 2013 11:15:05 +0100 Subject: Fix to & and | Previously Any & NoType was NoType, whereas it should be Any Similarly for combinations of Nothing with NoType and also for | --- src/dotty/tools/dotc/core/TypeComparer.scala | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/dotty/tools') diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 69244aa12..5ccb9ac86 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -496,8 +496,10 @@ class TypeComparer(initctx: Context) extends DotClass { /** The greatest lower bound of two types */ def glb(tp1: Type, tp2: Type): Type = if (tp1 eq tp2) tp1 - else if (!tp1.exists || (tp1 isRef AnyClass) || (tp2 isRef NothingClass)) tp2 - else if (!tp2.exists || (tp2 isRef AnyClass) || (tp1 isRef NothingClass)) tp1 + else if (!tp1.exists) tp2 + else if (!tp2.exists) tp1 + else if ((tp1 isRef AnyClass) || (tp2 isRef NothingClass)) tp2 + else if ((tp2 isRef AnyClass) || (tp1 isRef NothingClass)) tp1 else tp2 match { // normalize to disjunctive normal form if possible. case OrType(tp21, tp22) => tp1 & tp21 | tp1 & tp22 @@ -525,8 +527,10 @@ class TypeComparer(initctx: Context) extends DotClass { */ def lub(tp1: Type, tp2: Type): Type = if (tp1 eq tp2) tp1 - else if (!tp1.exists || (tp1 isRef AnyClass) || (tp2 isRef NothingClass)) tp1 - else if (!tp2.exists || (tp2 isRef AnyClass) || (tp1 isRef NothingClass)) tp2 + else if (!tp1.exists) tp1 + else if (!tp2.exists) tp2 + else if ((tp1 isRef AnyClass) || (tp2 isRef NothingClass)) tp1 + else if ((tp2 isRef AnyClass) || (tp1 isRef NothingClass)) tp2 else { val t1 = mergeIfSuper(tp1, tp2) if (t1.exists) t1 -- cgit v1.2.3