File tree 2 files changed +14
-2
lines changed
compiler/src/dotty/tools/dotc/core
2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -329,13 +329,12 @@ object Types extends TypeUtils {
329
329
def isSingleton (using Context ): Boolean = dealias.isInstanceOf [SingletonType ]
330
330
331
331
/** Is this type a (possibly aliased) singleton type or a type proxy
332
- * or Or/And type known to be a singleton type ?
332
+ * or an AndType where one operand is effectively a singleton?
333
333
*/
334
334
def isEffectivelySingleton (using Context ): Boolean = dealias match
335
335
case tp : SingletonType => true
336
336
case tp : TypeProxy => tp.superType.isEffectivelySingleton
337
337
case AndType (tpL, tpR) => tpL.isEffectivelySingleton || tpR.isEffectivelySingleton
338
- case OrType (tpL, tpR) => tpL.isEffectivelySingleton && tpR.isEffectivelySingleton
339
338
case _ => false
340
339
341
340
/** Is this upper-bounded by a (possibly aliased) singleton type?
Original file line number Diff line number Diff line change
1
+ class A
2
+ class B extends A
3
+
4
+ def f (a : A , c : A ) =
5
+ val b1 : a.type = a
6
+ val b2 : a.type & B = a.asInstanceOf [a.type & B ]
7
+ val b3 : c.type & A = c
8
+ val b4 : a.type | c.type = c
9
+
10
+ val d1 : b1.type = a
11
+ val d2 : b2.type = a // ok
12
+ val d3 : b3.type = a // error
13
+ val d4 : b4.type = a // error
You can’t perform that action at this time.
0 commit comments