summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-07-03 10:33:21 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2015-07-03 11:43:37 +0200
commit80295ffc260d08592937ce6b27a333b9aedcac4c (patch)
tree5ac006555b31f2881809fbe24d2b159c6ef603d4 /src
parent0f3505421cd49d20d948808248266998dfc36867 (diff)
downloadscala-80295ffc260d08592937ce6b27a333b9aedcac4c.tar.gz
scala-80295ffc260d08592937ce6b27a333b9aedcac4c.tar.bz2
scala-80295ffc260d08592937ce6b27a333b9aedcac4c.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala
index c6db591c5f..0f381a4325 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala
@@ -728,11 +728,11 @@ abstract class BCodeHelpers extends BCodeIdiomatic with BytecodeWriters {
mv.visitVarInsn(ALOAD, 1)
mv.visitFieldInsn(PUTSTATIC, clazz.javaBinaryName.toString, "$deserializeLambdaCache$", "Ljava/util/Map;")
mv.visitLabel(l0)
- mv.visitFrame(asm.Opcodes.F_APPEND,1, Array("java/util/Map"), 0, null)
+ mv.visitFieldInsn(GETSTATIC, "scala/runtime/LambdaDeserializer$", "MODULE$", "Lscala/runtime/LambdaDeserializer$;")
mv.visitMethodInsn(INVOKESTATIC, "java/lang/invoke/MethodHandles", "lookup", "()Ljava/lang/invoke/MethodHandles$Lookup;", false)
mv.visitVarInsn(ALOAD, 1)
mv.visitVarInsn(ALOAD, 0)
- mv.visitMethodInsn(INVOKESTATIC, "scala/runtime/LambdaDeserializer", "deserializeLambda", "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/util/Map;Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object;", false)
+ mv.visitMethodInsn(INVOKEVIRTUAL, "scala/runtime/LambdaDeserializer$", "deserializeLambda", "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/util/Map;Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object;", false)
mv.visitInsn(ARETURN)
mv.visitEnd()
}