You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Christopher Smith (Jira)" <ji...@apache.org> on 2023/05/23 17:01:00 UTC
[jira] [Created] (GROOVY-11068) VerifyError when using generic container in closure
Christopher Smith created GROOVY-11068:
------------------------------------------
Summary: VerifyError when using generic container in closure
Key: GROOVY-11068
URL: https://issues.apache.org/jira/browse/GROOVY-11068
Project: Groovy
Issue Type: Bug
Components: Static compilation
Affects Versions: 4.0.12
Reporter: Christopher Smith
The following code produces a {{VerifyError}}. It appears to this amateur eye that the code in the closure actually performs an {{invokedynamic}} on the nested method reference and _then_ calls the Iterable's {{forEach}}, when I would expect it to push a reference to the method handle somehow and then let that be passed to {{forEach}}.
{code}
@Grapes([
@Grab('org.apache.pdfbox:pdfbox:2.0.28'),
@Grab('io.vavr:vavr:0.10.3')
])
@CompileStatic
@POJO
class Bug {
public static void main(String... args) {
PDDocument doc = new PDDocument()//PDDocument.load(new File('/tmp/sample.pdf'))
extraPages().forEach {
it.forEach(doc::addPage)
}
}
static Try<Iterable<PDPage>> extraPages() {
return Try.success([null])
}
}
{code}
{code}
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
Bug$_main_closure1.doCall(Ljava/lang/Object;)Ljava/lang/Void; @11: invokedynamic
Reason:
Type 'java/lang/Object' (current frame, stack[1]) is not assignable to 'org/apache/pdfbox/pdmodel/PDDocument'
Current Frame:
bci: @11
flags: { }
locals: { 'Bug$_main_closure1', 'java/lang/Object' }
stack: { 'java/lang/Iterable', 'java/lang/Object' }
Bytecode:
0000000: 2bc0 0024 2ab4 001c b600 2aba 003f 0000
0000010: b900 4302 0001 ba00 5000 00b0
at Bug.main(Bug.groovy:16)
{code}
{code}
public java.lang.Void doCall(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/Void;
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
0: aload_1
1: checkcast #36 // class java/lang/Iterable
4: aload_0
5: getfield #28 // Field doc:Lgroovy/lang/Reference;
8: invokevirtual #42 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
11: invokedynamic #63, 0 // InvokeDynamic #0:accept:(Lorg/apache/pdfbox/pdmodel/PDDocument;)Ljava/util/function/Consumer;
16: invokeinterface #67, 2 // InterfaceMethod java/lang/Iterable.forEach:(Ljava/util/function/Consumer;)V
21: aconst_null
22: invokedynamic #80, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Void;
27: areturn
LineNumberTable:
line 17: 0
LocalVariableTable:
Start Length Slot Name Signature
0 28 0 this LBug$_main_closure1;
0 28 1 it Ljava/lang/Object;
MethodParameters:
Name Flags
it
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)