Skip to content

Commit 80295ff

Browse files
committed
Skip mirror class when invoking deserializeLambda
Generate the invocation to LambdaDeserializer.deserializeLambda by loading the static MODULE$ field instead of calling the static method in the mirror class. This is more scala-y. Also, mirror classes don't have an InlineInfo classfile attribute, so the inliner would yield a warning about the mirror class callsite. Also skip the stack map frame instruction - frames are computed by the ams classfile writer.
1 parent 0f35054 commit 80295ff

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -728,11 +728,11 @@ abstract class BCodeHelpers extends BCodeIdiomatic with BytecodeWriters {
728728
mv.visitVarInsn(ALOAD, 1)
729729
mv.visitFieldInsn(PUTSTATIC, clazz.javaBinaryName.toString, "$deserializeLambdaCache$", "Ljava/util/Map;")
730730
mv.visitLabel(l0)
731-
mv.visitFrame(asm.Opcodes.F_APPEND,1, Array("java/util/Map"), 0, null)
731+
mv.visitFieldInsn(GETSTATIC, "scala/runtime/LambdaDeserializer$", "MODULE$", "Lscala/runtime/LambdaDeserializer$;")
732732
mv.visitMethodInsn(INVOKESTATIC, "java/lang/invoke/MethodHandles", "lookup", "()Ljava/lang/invoke/MethodHandles$Lookup;", false)
733733
mv.visitVarInsn(ALOAD, 1)
734734
mv.visitVarInsn(ALOAD, 0)
735-
mv.visitMethodInsn(INVOKESTATIC, "scala/runtime/LambdaDeserializer", "deserializeLambda", "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/util/Map;Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object;", false)
735+
mv.visitMethodInsn(INVOKEVIRTUAL, "scala/runtime/LambdaDeserializer$", "deserializeLambda", "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/util/Map;Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object;", false)
736736
mv.visitInsn(ARETURN)
737737
mv.visitEnd()
738738
}

0 commit comments

Comments
 (0)