Skip to content

Commit d191775

Browse files
committed
Merge commit '83745c6c0e' into jdk-21-for-2.13
2 parents c81740c + 83745c6 commit d191775

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
840840
val paramNameAccess = new Array[Int](paramCount)
841841
var i = 0
842842
while (i < paramCount) {
843-
paramNames(i) = pool.getExternalName(u2())
843+
paramNames(i) = u2() match {
844+
case 0 => null // may occur on JDK 21+, as per scala/bug#12783
845+
case index => pool.getExternalName(index)
846+
}
844847
paramNameAccess(i) = u2()
845848
i += 1
846849
}
@@ -1358,6 +1361,7 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
13581361
sym setInfo createFromClonedSymbols(alias.initialize.typeParams, alias.tpe)(typeFun)
13591362
}
13601363
}
1364+
// on JDK 21+, `names` may include nulls, as per scala/bug#12783
13611365
private class ParamNames(val names: Array[NameOrString], val access: Array[Int]) {
13621366
assert(names.length == access.length, "Require as many names as access")
13631367
def length = names.length
@@ -1462,8 +1466,10 @@ abstract class ClassfileParser(reader: ReusableInstance[ReusableDataReader]) {
14621466
case (i, param) =>
14631467
val isSynthetic = (paramNames.access(i) & ACC_SYNTHETIC) != 0
14641468
if (!isSynthetic) {
1465-
param.name = paramNames.names(i).name.toTermName.encode
14661469
param.resetFlag(SYNTHETIC)
1470+
val nameOrString = paramNames.names(i)
1471+
if (nameOrString != null)
1472+
param.name = nameOrString.name.toTermName.encode
14671473
}
14681474
}
14691475
// there's not anything we can do, but it's slightly worrisome

src/partest/scala/tools/partest/ReplTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ trait Lambdaless extends ReplTest {
7575
override def normalize(s: String) = stripLambdaClassName(super.normalize(s))
7676
}
7777
object Lambdaless {
78-
private val lambdaless = """\$Lambda\$\d+/(?:0x[a-f0-9]{16}|\d+)(@[a-fA-F0-9]+)?""".r
78+
private val lambdaless = """\$Lambda(?:\$\d+)?/(?:0x[a-f0-9]{16}|\d+)(?:@[a-fA-F0-9]+)?""".r
7979
private def stripLambdaClassName(s: String): String = lambdaless.replaceAllIn(s, Regex.quoteReplacement("<function>"))
8080
}
8181

0 commit comments

Comments
 (0)