- changed component to codegen
Broken constructor signature for anonymous class extending inner class
Issue #234
resolved
ExtendJ 8.0.1-235-g5497af4 Java SE 8
Broken bytecode is generated for this test case:
public final class Ju4 {
public static void main(String[] args) {
new Ju4().run();
}
private abstract class AbstractTest {
public abstract void test();
}
public void run() {
new AbstractTest() {
public void test() {
System.out.println("x marks the spot");
}
}.test();
}
}
Expected result: should print "x marks the spot".
Actual result:
Exception in thread "main" java.lang.ClassFormatError: Arguments can't fit into locals in class file Ju4$1
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at Ju4.run(Ju4.java:12)
at Ju4.main(Ju4.java:4)
Relevant bytecode:
Ju4$1(Ju4, Ju4) throws ;
flags:
Code:
stack=3, locals=2, args_size=3
0: aload_0
1: aload_2
2: aconst_null
3: invokespecial #14 // Method Ju4$AbstractTest."<init>":(LJu4;LJu4$AbstractTest;)V
6: aload_0
7: aload_1
8: putfield #16 // Field this$0:LJu4;
11: return
LineNumberTable:
LocalVariableTable:
Start Length Slot Name Signature
0 12 0 this LJu4$1;
0 12 1 this$0 LJu4;
Exceptions:
throws
The enclosing class instance parameter is incorrectly duplicated.
Comments (2)
-
reporter -
reporter - changed status to resolved
Add missing super enclosing variable entry
Constructor bytecode generation did not include local variable entries for the supertype enclosing instance.
fixes
#234(bitbucket)→ <<cset 3d8614512ab5>>
- Log in to comment