[ 
https://issues.apache.org/jira/browse/GROOVY-10459?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nikolay Chashnikov updated GROOVY-10459:
----------------------------------------
    Summary: Compilation of code which access array element inside 
CompileDynamic constructor fails  (was: Compilation of code which accesses 
array element of inside CompileDynamic constructor fails)

> Compilation of code which access array element inside CompileDynamic 
> constructor fails
> --------------------------------------------------------------------------------------
>
>                 Key: GROOVY-10459
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10459
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 3.0.9
>            Reporter: Nikolay Chashnikov
>            Priority: Major
>
> The following code runs without problem in Groovy 2.5.14:
> {code:groovy}
> import groovy.transform.CompileDynamic
> import groovy.transform.CompileStatic
> @CompileStatic
> class DynamicArrayAccess {
>     @CompileDynamic
>     DynamicArrayAccess() {
>         Node node = loadXml()
>         println node.b[0].text()
>     }
>     private static Node loadXml() {
>         new StringReader("<a><b>hello</b></a>").withCloseable { new 
> XmlParser().parse(it) }
>     }
>     static void main(String[] args) {
>         new DynamicArrayAccess()
>     }
> }
> {code}
> However, if you try to run it in Groovy 3.0.9, you'll get an exception during 
> compilation. Extracting problematic code to a separate method fixes the 
> problem.
> {noformat}
> BUG! exception in phase 'class generation' in source unit 
> '/home/nik/IdeaProjects/untitled19/src/main/groovy/DynamicArrayAccess.groovy' 
> At line 9 column 21
> On receiver: node.b with message: getAt and arguments: 0
> This method should not have been called. Please try to create a simple 
> example reproducing
> this error and file a bug report at 
> https://issues.apache.org/jira/browse/GROOVY
>       at 
> org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:582)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:623)
>       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:590)
>       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:209)
>       at 
> org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:319)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:708)
>       at 
> org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:58)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeUncachedCall(InvocationWriter.java:338)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:387)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:121)
>       at 
> org.codehaus.groovy.classgen.asm.sc.StaticInvocationWriter.makeCall(StaticInvocationWriter.java:649)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.writeInvokeMethod(InvocationWriter.java:456)
>       at 
> org.codehaus.groovy.classgen.asm.sc.StaticInvocationWriter.writeInvokeMethod(StaticInvocationWriter.java:140)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitMethodCallExpression(AsmClassGenerator.java:839)
>       at 
> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:76)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitTupleExpression(AsmClassGenerator.java:1571)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitArgumentlistExpression(AsmClassGenerator.java:1526)
>       at 
> org.codehaus.groovy.ast.expr.ArgumentListExpression.visit(ArgumentListExpression.java:73)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeUncachedCall(InvocationWriter.java:357)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:387)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:121)
>       at 
> org.codehaus.groovy.classgen.asm.sc.StaticInvocationWriter.makeCall(StaticInvocationWriter.java:649)
>       at 
> org.codehaus.groovy.classgen.asm.InvocationWriter.writeInvokeMethod(InvocationWriter.java:456)
>       at 
> org.codehaus.groovy.classgen.asm.sc.StaticInvocationWriter.writeInvokeMethod(StaticInvocationWriter.java:140)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitMethodCallExpression(AsmClassGenerator.java:839)
>       at 
> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:76)
>       at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:635)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:687)
>       at 
> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
>       at 
> org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
>       at 
> org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:618)
>       at 
> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:462)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:409)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructor(ClassCodeVisitorSupport.java:101)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructor(AsmClassGenerator.java:551)
>       at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1089)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
>       at 
> org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:272)
>       at 
> org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
>       at 
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
>       at 
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
>       at 
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to