diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2015-07-03 10:33:21 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2015-07-03 11:43:37 +0200 |
commit | 80295ffc260d08592937ce6b27a333b9aedcac4c (patch) | |
tree | 5ac006555b31f2881809fbe24d2b159c6ef603d4 | |
parent | 0f3505421cd49d20d948808248266998dfc36867 (diff) | |
download | scala-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.
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/BCodeHelpers.scala | 4 |
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() } |