You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2020/12/14 19:54:28 UTC

[groovy] branch GROOVY_2_5_X updated: GROOVY-9076: add NOP bytecode for debugger to support "step into"

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_2_5_X by this push:
     new dc6dd81  GROOVY-9076: add NOP bytecode for debugger to support "step into"
dc6dd81 is described below

commit dc6dd817483607afd59f0ac1faab8491cce998de
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Dec 14 13:13:49 2020 -0600

    GROOVY-9076: add NOP bytecode for debugger to support "step into"
---
 .../java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
index 75d06a0..f5188c3 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
@@ -59,6 +59,7 @@ import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
 import static org.objectweb.asm.Opcodes.INVOKESTATIC;
 import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
 import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.NOP;
 import static org.objectweb.asm.Opcodes.PUTSTATIC;
 import static org.objectweb.asm.Opcodes.RETURN;
 
@@ -88,7 +89,7 @@ public class CallSiteWriter {
     private static final int
         MOD_PRIVSS = ACC_PRIVATE+ACC_STATIC+ACC_SYNTHETIC,
         MOD_PUBSS  = ACC_PUBLIC+ACC_STATIC+ACC_SYNTHETIC;
-    private static final ClassNode CALLSITE_ARRAY_NODE = ClassHelper.make(CallSite[].class);
+    private static final ClassNode CALLSITE_ARRAY_TYPE = ClassHelper.make(CallSite[].class);
     private static final String
         GET_CALLSITE_METHOD     = "$getCallSiteArray",
         CALLSITE_CLASS          = "org/codehaus/groovy/runtime/callsite/CallSite",
@@ -117,9 +118,11 @@ public class CallSiteWriter {
     
     public void makeSiteEntry() {
         if (controller.isNotClinit()) {
-            controller.getMethodVisitor().visitMethodInsn(INVOKESTATIC, controller.getInternalClassName(), GET_CALLSITE_METHOD, GET_CALLSITE_DESC, false);
-            controller.getOperandStack().push(CALLSITE_ARRAY_NODE);
-            callSiteArrayVarIndex = controller.getCompileStack().defineTemporaryVariable("$local$callSiteArray", CALLSITE_ARRAY_NODE, true);
+            MethodVisitor mv = controller.getMethodVisitor();
+            mv.visitInsn(NOP); // GROOVY-9076: need this for debugger to support step into
+            mv.visitMethodInsn(INVOKESTATIC, controller.getInternalClassName(), GET_CALLSITE_METHOD, GET_CALLSITE_DESC, false);
+            controller.getOperandStack().push(CALLSITE_ARRAY_TYPE);
+            callSiteArrayVarIndex = controller.getCompileStack().defineTemporaryVariable("$local$callSiteArray", CALLSITE_ARRAY_TYPE, true);
         }
     }