-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
itype:bugstat:needs triageEvery issue needs to have an "area" and "itype" labelEvery issue needs to have an "area" and "itype" label
Description
Compiler version
3.8.0-RC3
Minimized code
//> using scala 3.8.0-RC3
class A {
def f(a: String): String = s"$a b"
}javap result
public java.lang.String f(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
0: new #16 // class java/lang/StringBuilder
3: dup
4: ldc #17 // int 2
6: invokespecial #20 // Method java/lang/StringBuilder."<init>":(I)V
9: aload_1
10: invokevirtual #24 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
13: ldc #26 // String b
15: invokevirtual #24 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
18: invokevirtual #30 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
21: areturn
Expectation
public java.lang.String f(java.lang.String);
descriptor: (Ljava/lang/String;)Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=2, args_size=2
0: aload_1
1: invokedynamic #30, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
6: areturn
Note
- Require JDK 17+ #24146
- https://www.scala-lang.org/news/next-scala-lts-jdk.html
case (None, None) => "8" // least supported version by default scala3/compiler/src/dotty/tools/backend/jvm/BCodeBodyBuilder.scala
Lines 1278 to 1281 in 327be51
/* Generate string concatenation * * On JDK 8: create and append using `StringBuilder` * On JDK 9+: use `invokedynamic` with `StringConcatFactory` scala3/compiler/src/dotty/tools/backend/jvm/BCodeBodyBuilder.scala
Lines 1306 to 1307 in 327be51
// `StringConcatFactory` only got added in JDK 9, so use `StringBuilder` for lower if (backendUtils.classfileVersion < asm.Opcodes.V9) { - Use
StringConcatFactoryfor string concatenation on JDK 9+ #12929
He-Pin
Metadata
Metadata
Assignees
Labels
itype:bugstat:needs triageEvery issue needs to have an "area" and "itype" labelEvery issue needs to have an "area" and "itype" label