[ 
https://issues.apache.org/jira/browse/GROOVY-7647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16677034#comment-16677034
 ] 

Eric Milles commented on GROOVY-7647:
-------------------------------------

If {{StatementWriter.writeBlockStatement}} is patched instead of 
{{writeIfElse}}, methods and constructors will have step on line of closing 
brace.  This should also help GROOVY-4063.
{code:java}
    public void writeBlockStatement(BlockStatement block) {
        writeStatementLabel(block);

        int mark = controller.getOperandStack().getStackLength();
        CompileStack compileStack = controller.getCompileStack();
        compileStack.pushVariableScope(block.getVariableScope());
        for (Statement statement : block.getStatements()) {
            statement.visit(controller.getAcg());
        }
        compileStack.pop();

        // GRECLIPSE add
        if (block.getLastLineNumber() > 0) {
            MethodVisitor mv = controller.getMethodVisitor();
            Label blockEnd = new Label(); mv.visitLabel(blockEnd);
            mv.visitLineNumber(block.getLastLineNumber(), blockEnd);
        }
        // GRECLIPSE end

        controller.getOperandStack().popDownTo(mark);
    }
{code}

> Incorrect line information for debug
> ------------------------------------
>
>                 Key: GROOVY-7647
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7647
>             Project: Groovy
>          Issue Type: Bug
>          Components: class generator, Compiler
>    Affects Versions: 2.4.5
>            Reporter: Egor Ushakov
>            Priority: Major
>
> Try to debug the code:
> {code}
> boolean boolVar = false; //line 15
> if (boolVar) { // set breakpoint here and step over //line 16
>     print "ok"; //line 17
> } // end of file //line 18
> {code}
> It steps over to the line with print even though it is not executed.
> Seems that compiler does not generate line info for the last block (line 18):
> {code}
>  public java.lang.Object run();
>     descriptor: ()Ljava/lang/Object;
>     flags: ACC_PUBLIC
>     Code:
>       stack=3, locals=3, args_size=1
>          0: invokestatic  #18                 // Method 
> $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
>          3: astore_1
>          4: iconst_0
>          5: istore_2
>          6: iload_2
>          7: pop
>          8: iload_2
>          9: ifeq          28
>         12: aload_1
>         13: ldc           #41                 // int 1
>         15: aaload
>         16: aload_0
>         17: ldc           #43                 // String ok
>         19: invokeinterface #47,  3           // InterfaceMethod 
> org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
>         24: areturn
>         25: goto          30
>         28: aconst_null
>         29: areturn
>         30: aconst_null
>         31: areturn
>       LocalVariableTable:
>         Start  Length  Slot  Name   Signature
>             0      30     0  this   Lsdfklajsdlkjas/test;
>             6      24     2 boolVar   Z
>       LineNumberTable:
>         line 15: 4
>         line 16: 8
>         line 17: 12
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to