[
https://issues.apache.org/jira/browse/GROOVY-11828?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eric Milles updated GROOVY-11828:
---------------------------------
Fix Version/s: 5.0.4
> instanceof variable VerifyError
> -------------------------------
>
> Key: GROOVY-11828
> URL: https://issues.apache.org/jira/browse/GROOVY-11828
> Project: Groovy
> Issue Type: Bug
> Components: class generator
> Reporter: Eric Milles
> Assignee: Eric Milles
> Priority: Major
> Fix For: 5.0.4
>
>
> Consider the following:
> {code:groovy}
> def x = 'foo', y
> if (x instanceof String s) {
> y = { -> s + 'bar' }()
> }
> assert y == 'foobar'
> {code}
> Use of variable "s" within a closure causes a verify error.
> {code}
> java.lang.VerifyError: Bad type on operand stack
> Exception Details:
> Location:
> TestScript0.run()Ljava/lang/Object; @42: invokespecial
> Reason:
> Type 'java/lang/Object' (current frame, stack[4]) is not assignable
> to 'groovy/lang/Reference'
> Current Frame:
> bci: @42
> flags: { }
> locals: { 'TestScript0', 'java/lang/String', null, 'java/lang/Object'
> }
> stack: { uninitialized 35, uninitialized 35, 'TestScript0',
> 'TestScript0', 'java/lang/Object' }
> Bytecode:
> 0000000: 122d 4c01 4d2b 59c1 002f 01bb 0031 5a5f
> 0000010: b700 344e 5a99 000a c000 2f4e a700 0457
> 0000020: 9900 13bb 0036 592a 2a2d b700 39ba 003e
> 0000030: 0000 4dbb 0040 59b7 0041 3a04 2c59 1904
> 0000040: 5f12 42b6 0046 5712 48b8 004e 59b8 0054
> 0000050: 1904 5f12 55b6 0046 5799 000b 1904 b600
> 0000060: 58a7 0015 125a 1904 b800 6001 b800 64bf
> 0000070: 1904 b600 58bf 01b0
> Exception Handler Table:
> bci [60, 112] => handler: 112
> Stackmap Table:
>
> full_frame(@31,{Object[#2],Object[#47],Null,Object[#49]},{Integer,Object[#47]})
> full_frame(@32,{Object[#2],Object[#47],Null,Object[#107]},{Integer})
> full_frame(@51,{Object[#2],Object[#47],Object[#107],Object[#107]},{})
> append_frame(@100,Object[#64])
> same_locals_1_stack_item_frame(@112,Object[#109])
> same_frame(@118)
> at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
> at
> java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3373)
> at java.base/java.lang.Class.getConstructor0(Class.java:3578)
> at java.base/java.lang.Class.getConstructor(Class.java:2271)
> at
> org.codehaus.groovy.runtime.InvokerHelper.newScript(InvokerHelper.java:498)
> at
> org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:448)
> at groovy.lang.GroovyShell.parse(GroovyShell.java:614)
> at groovy.lang.GroovyShell.parse(GroovyShell.java:626)
> at groovy.lang.GroovyShell.evaluate(GroovyShell.java:488)
> at groovy.lang.GroovyShell.evaluate(GroovyShell.java:524)
> at groovy.lang.GroovyShell.evaluate(GroovyShell.java:508)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)