Skip to content

Commit 6d6e154

Browse files
committed
Encode the name of the attribute in Selectable.selectDynamic
1 parent 312e4bb commit 6d6e154

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

library/src/scala/reflect/Selectable.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ trait Selectable extends scala.Selectable:
2020
/** Select member with given name */
2121
final def selectDynamic(name: String): Any =
2222
val rcls = selectedValue.getClass
23+
val encodedName = NameTransformer.encode(name)
2324
try
24-
val fld = rcls.getField(name).nn
25+
val fld = rcls.getField(encodedName).nn
2526
ensureAccessible(fld)
2627
fld.get(selectedValue)
2728
catch case ex: NoSuchFieldException =>
28-
applyDynamic(name)()
29+
applyDynamic(encodedName)()
2930

3031
// The Scala.js codegen relies on this method being final for correctness
3132
/** Select method and apply to arguments.

tests/run/i18612-a.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class X extends scala.reflect.Selectable:
2+
val `+` = "1"
3+
4+
@main def Test =
5+
val x = X()
6+
assert(x.selectDynamic("+") == "1")

tests/run/i18612-b.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class X extends scala.reflect.Selectable:
2+
val plus = "1"
3+
4+
@main def Test =
5+
val x = X()
6+
assert(x.selectDynamic("plus") == "1")

0 commit comments

Comments
 (0)