File tree 3 files changed +33
-6
lines changed
src/dotty/tools/dotc/typer
3 files changed +33
-6
lines changed Original file line number Diff line number Diff line change @@ -852,11 +852,11 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
852
852
else EmptyTree
853
853
854
854
def dynamicSelect (pt : Type ) =
855
- val tree2 = cpy.Select (tree0)(untpd.TypedSplice (qual), selName)
856
- if pt.isInstanceOf [FunOrPolyProto ] || pt == LhsProto then
857
- assignType(tree2, TryDynamicCallType )
858
- else
859
- typedDynamicSelect(tree2, Nil , pt)
855
+ val tree2 = cpy.Select (tree0)(untpd.TypedSplice (qual), selName)
856
+ if pt.isInstanceOf [FunOrPolyProto ] || pt == LhsProto then
857
+ assignType(tree2, TryDynamicCallType )
858
+ else
859
+ typedDynamicSelect(tree2, Nil , pt)
860
860
861
861
// Otherwise, if the qualifier derives from class Dynamic, expand to a
862
862
// dynamic dispatch using selectDynamic or applyDynamic
@@ -885,7 +885,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
885
885
// Reject corner case where selectDynamic needs annother selectDynamic to be called. E.g. as in neg/unselectable-fields.scala.
886
886
report.error(i " Cannot use selectDynamic here since it needs another selectDynamic to be invoked " , tree.srcPos)
887
887
case _ =>
888
- dynSelected.ensureConforms(fieldType)
888
+ adapt( dynSelected, defn. AnyType ) .ensureConforms(fieldType)
889
889
case _ => EmptyTree
890
890
else EmptyTree
891
891
Original file line number Diff line number Diff line change @@ -70,6 +70,7 @@ i18211.scala
70
70
10867.scala
71
71
named-tuples1.scala
72
72
i20897.scala
73
+ i20512.scala
73
74
74
75
# Opaque type
75
76
i5720.scala
Original file line number Diff line number Diff line change
1
+ import language .experimental .namedTuples
2
+
3
+ import NamedTuple .*
4
+
5
+ trait Selector1 extends Selectable {
6
+ type Fields = (int : Int , str : String )
7
+
8
+ def selectDynamic (name : String )(using name.type <:< Tuple .Union [NamedTuple .Names [Fields ]]) = ???
9
+ }
10
+
11
+ def test20512 = {
12
+ val s : Selector1 = new Selector1 {}
13
+ val int = s.int
14
+ val str = s.str
15
+ }
16
+
17
+ trait Ctx
18
+
19
+ class Selector2 extends Selectable :
20
+ type Fields = (bar : Int , baz : Int )
21
+ def selectDynamic (fieldName : String )(using Ctx ): Any = ???
22
+
23
+ def test22023 (using Ctx ) =
24
+ val f = Selector2 ()
25
+ val bar = f.bar
26
+ val baz = f.baz
You can’t perform that action at this time.
0 commit comments