Jochen Eddelbuettel created GROOVY-9558:
-------------------------------------------

             Summary: Wrong code for putAt on Map that is member of closure 
delegate
                 Key: GROOVY-9558
                 URL: https://issues.apache.org/jira/browse/GROOVY-9558
             Project: Groovy
          Issue Type: Bug
          Components: Static compilation
    Affects Versions: 3.0.3
         Environment: Oracle JDK8 1.8.0_162, IntelliJ CE 2019.3.4, indy enabled
            Reporter: Jochen Eddelbuettel


 

I'm compiling this little Closure with @CompileStatic enabled
{code:java}
scriptEngine.config.tap {
  // Code generation goes wrong here    
  optimizationOptions["indy"] = true
  // This code is generated correctly
  optimizationOptions.indy = true
}{code}
{code:java}
// Generated fault code - obviously no call to getOptimizationOptions()
boolean var2 = 
true;DefaultGroovyMethods.putAt(((Class)((_main_closure1)this).getDelegate()).cast<invokedynamic>(((_main_closure1)this).getDelegate()),
 "indy", var2);
// Correct code for the second line, via setProperty
boolean bool1 = true;ScriptBytecodeAdapter.setProperty(Boolean.valueOf(bool1), 
null, 
((CompilerConfiguration)((_main_closure1)this).getDelegate()).getOptimizationOptions(),
 (String)"indy");
{code}
Compilation works, but I get a runtime error, which is easily explicable given 
the generated code:
Exception in thread "main" 
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast 
object 'org.codehaus.groovy.control.CompilerConfiguration@15d9bc04' with class 
'org.codehaus.groovy.control.CompilerConfiguration' to class 'java.util.Map'



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to