Skip to content

Commit e6b4222

Browse files
authored
Widen singleton types when computing fields from .Fields (#22149)
Fixes #22018
2 parents 1775d0b + 4839206 commit e6b4222

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

compiler/src/dotty/tools/dotc/typer/Typer.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
868868
&& pt != LhsProto
869869
then
870870
val pre = if !TypeOps.isLegalPrefix(qual.tpe) then SkolemType(qual.tpe) else qual.tpe
871-
val fieldsType = pre.select(tpnme.Fields).dealias.simplified
871+
val fieldsType = pre.select(tpnme.Fields).widenDealias.simplified
872872
val fields = fieldsType.namedTupleElementTypes
873873
typr.println(i"try dyn select $qual, $selName, $fields")
874874
fields.find(_._1 == selName) match

tests/pos/i22018.scala

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import scala.language.experimental.namedTuples
2+
3+
class SelectableNT[A <: NamedTuple.AnyNamedTuple](val nt: A) extends Selectable:
4+
type Fields = A
5+
def selectDynamic(x: String) = ???
6+
7+
object Test:
8+
9+
val a = (name = "foo", age = 1)
10+
11+
val sa = SelectableNT(a)
12+
sa.name // ok
13+
14+
type B = a.type
15+
val b: B = a
16+
17+
val sb = SelectableNT(b)
18+
sb.name // fails

0 commit comments

Comments
 (0)