File tree 2 files changed +17
-1
lines changed
compiler/src/dotty/tools/dotc/typer
2 files changed +17
-1
lines changed Original file line number Diff line number Diff line change @@ -826,7 +826,8 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
826
826
if qual.tpe.derivesFrom(defn.SelectableClass ) && ! isDynamicExpansion(tree)
827
827
&& ! pt.isInstanceOf [FunOrPolyProto ] && pt != LhsProto
828
828
then
829
- val fieldsType = qual.tpe.select(tpnme.Fields ).dealias.simplified
829
+ val pre = if ! TypeOps .isLegalPrefix(qual.tpe) then SkolemType (qual.tpe) else qual.tpe
830
+ val fieldsType = pre.select(tpnme.Fields ).dealias.simplified
830
831
val fields = fieldsType.namedTupleElementTypes
831
832
typr.println(i " try dyn select $qual, $selName, $fields" )
832
833
fields.find(_._1 == selName) match
Original file line number Diff line number Diff line change
1
+ import scala .language .experimental .namedTuples
2
+ import NamedTuple .{AnyNamedTuple , NamedTuple }
3
+
4
+ trait Foo extends Selectable :
5
+ val f : Any
6
+ type Fields = (myfield : f.type )
7
+ def selectDynamic (name : String ): Any
8
+
9
+ object Test :
10
+ val elem1 : Foo { val f : Int } = ???
11
+ def elem2 : Foo { val f : Int } = ???
12
+
13
+ def test : Unit =
14
+ val a : Int = elem1.myfield // OK
15
+ val b : Int = elem2.myfield // error: value myfield is not a member of Foo { val f: Int }
You can’t perform that action at this time.
0 commit comments