Tue 10 Jun 2008 06:26:54 PM UTC, original submission:
I've come across the situation where I get class verification error stemming from a bad compilation in Kawa 1.9.1. It's repeatable but I cannot construct a simple example, so I'm giving you the full-blown version and making it as easy to set up as possible.
I'm using Kawa in conjunction with MASON, a java multiagent simulator package. I was working on building a simulation in Kawa when I hit on this showstopper. When I initialize a compiled Kawa simple-class, it bombs on verifying one of the methods with "java.lang.VerifyError: (class: flocker, method: step signature: (Lsim/engine/SimState;)V) Accessing value from uninitialized register 10"
Examining the bytecode, sure enough, there's a crazy access to register 10, never defined before, right there on line 104 of the 'step' method:
104: aload 10
To repeat:
1. Download and unpack http://cs.gmu.edu/~sean/temp/test.tar.gz
2. Follow the example below:
geepers[/tmp/test]> ls
flocker.scm kawa-1.9.1.jar mason.jar
geepers[/tmp/test]> java -cp kawa-1.9.1.jar:mason.jar kawa.repl
#|kawa:1|# (load "flocker.scm")
flocker.scm:22:21: warning - unknown class: flocker
flocker.scm:23:8: warning - more than one possibly applicable method 'nextBoolean' in ec.util.MersenneTwisterFast
candidate: boolean ec.util.MersenneTwisterFast.nextBoolean(double)
candidate: boolean ec.util.MersenneTwisterFast.nextBoolean(float)
#|kawa:2|# (<flocker>)
java.lang.VerifyError: (class: flocker, method: step signature: (Lsim/engine/SimState;)V) Accessing value from uninitialized register 10
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)
at java.lang.Class.getDeclaredMethods(Class.java:1763)
at gnu.bytecode.ClassType.addMethods(ClassType.java:751)
at gnu.bytecode.ClassType.getDeclaredMethods(ClassType.java:519)
at gnu.bytecode.ClassType.getMethods(ClassType.java:617)
at gnu.kawa.reflect.ClassMethods.getMethods(ClassMethods.java:105)
at gnu.kawa.reflect.ClassMethods.apply(ClassMethods.java:175)
at gnu.kawa.reflect.Invoke.lookupMethods(Invoke.java:257)
at gnu.kawa.reflect.Invoke.applyN(Invoke.java:184)
at gnu.kawa.reflect.Invoke.apply(Invoke.java:98)
at gnu.mapping.CallContext.runUntilDone(CallContext.java:251)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:296)
at kawa.Shell.run(Shell.java:230)
at kawa.Shell.run(Shell.java:172)
at kawa.Shell.run(Shell.java:159)
at kawa.repl.main(repl.java:844)
|