Another issue with MarkupTemplateEngine in Groovy 4

"[email protected]" <[email protected]>
Newsgroups gmane.comp.lang.groovy.user
Message-ID <CAKdsXoH3P+qshVzuuHshLN=6FYx4g0g92VbggptsGpSJvKqS2g@mail.gmail.com>
Hi,

here is another issue, Groovy 4 MarkupTemplateEngine fails on map index
with name.

Failing:
  def a = [ 'b' : [ 'c' : 'd' ] ]
  def res = a['b']
  div { yield res }

See attachment for reference.

Failure is

index problem in GeneratedMarkupTemplate0
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup
failed:
General error during instruction selection: size==0

java.lang.ArrayIndexOutOfBoundsException: size==0
at
org.codehaus.groovy.classgen.asm.OperandStack.ensureStackNotEmpty(OperandStack.java:284)
at
org.codehaus.groovy.classgen.asm.OperandStack.getTopOperand(OperandStack.java:651)
at
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateEqual(BinaryExpressionHelper.java:400)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesBinaryExpressionMultiTypeDispatcher.evaluateEqual(StaticTypesBinaryExpressionMultiTypeDispatcher.java:217)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitDeclarationExpression(AsmClassGenerator.java:832)
at
org.codehaus.groovy.ast.expr.DeclarationExpression.visit(DeclarationExpression.java:89)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:611)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:816)
at
org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:41)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:77)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:747)
at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:70)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:601)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:546)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:110)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:685)
at org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1131)
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1124)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:364)
at
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
at
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:937)
at
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:692)
at
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:666)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:373)
at
groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader.java:316)
at
org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
at
org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:298)
at
groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.parseClass(MarkupTemplateEngine.java:261)
at
groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(MarkupTemplateEngine.java:211)
at
groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateEngine.java:144)
at groovy.text.TemplateEngine.createTemplate(TemplateEngine.java:47)
at
org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
at markup-template-test-2.run(markup-template-test-2.groovy:13)
at
groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:268)
at groovy.lang.GroovyShell.run(GroovyShell.java:374)
at groovy.lang.GroovyShell.run(GroovyShell.java:363)
at groovy.ui.GroovyMain.processOnce(GroovyMain.java:649)
at groovy.ui.GroovyMain.run(GroovyMain.java:389)
at groovy.ui.GroovyMain.access$1400(GroovyMain.java:67)
at groovy.ui.GroovyMain$GroovyCommand.process(GroovyMain.java:313)
at groovy.ui.GroovyMain.processArgs(GroovyMain.java:141)
at groovy.ui.GroovyMain.main(GroovyMain.java:114)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at
org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:132)

1 error

Workaround:
  def a = [ 'b' : [ 'c' : 'd' ] ]
  def res = a.b
  div { yield res }


Best regards, Jörg
markup-template-test-2.groovy (text/x-groovy, 691 B)
import groovy.text.Template
import groovy.text.markup.MarkupTemplateEngine
import groovy.text.markup.TemplateConfiguration

println "Groovy: " + GroovySystem.version + " JDK: " + System.getProperty("java.version")

def a = [ 'b' : [ 'c' : 'd' ] ]
def res = a['b']
println res

TemplateConfiguration config = new TemplateConfiguration()      
MarkupTemplateEngine engine = new MarkupTemplateEngine(config)
Template template = engine.createTemplate("""
  def a = [ 'b' : [ 'c' : 'd' ] ]
  def res = a['b']
  div { yield res }
""")
Map<String, Object> model = [:]
StringWriter writer = new StringWriter()
Writable output = template.make(model)
output.writeTo(writer)
println writer.toString()
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.