Attached is a local class that is silently miscompiled
by Janino 2.0.14. The compilation ends without an
error but running the resulting classes with Sun's JRE
1.4.2_04-b05 yields the following error:
Exception in thread "main" java.lang.ClassFormatError:
JaninoTest$1$BigIntComparator (Arguments can't fit into
locals)
at java.lang.ClassLoader.defineClass0(Native
Method)
at java.lang.ClassLoader.defineClass(Unknown
Source)
at
java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown
Source)
at java.net.URLClassLoader.access$100(Unknown
Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at
java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown
Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
java.lang.ClassLoader.loadClassInternal(Unknown Source)
at JaninoTest.run(JaninoTest.java:36)
at JaninoTest.main(JaninoTest.java:55)
example of a local class that Sun's JDK 1.4.2_04-b05 compiles correctly but Janino 2.0.14 miscompiles
Logged In: YES
user_id=678669
Ah this is how you ment it.. doh :)
Logged In: NO
Further simplified test case showing the same error, this
one is only 240 bytes:
class O
{
void m()
{
class I
{
int v;
I(int i) { v = i; }
};
new I(1);
}
public static void main(String [] args)
{
new O().m();
}
}
When compiled with Janino 2.0.15 and run with Sun's JRE
1.4.2_04-b05 on Debian:
Exception in thread "main" java.lang.ClassFormatError: O$1$I
(Arguments can't fit into locals)
at java.lang.ClassLoader.defineClass0(Native Method)
at
java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at
java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at
java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at
java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at
java.security.AccessController.doPrivileged(Native Method)
at
java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at O.m(O.java)
at O.main(O.java)
Logged In: YES
user_id=865893
Forgot to define a synthetic "this$..." field in local
classes declared in non-static methods.
Will be fixed in 2.0.17.