Matrix.class nicht ladbar #107
Labels
No Label
Codegen
confirmed
duplicate
Eclipse-Plugin
Feature Request
generics
in progress
invalid
JavaCompilerCore
needs info
Parser
Trash
Type
Unify
won't fix
works for me
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#107
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Matrix.jav
import java.util.Vector;
import java.lang.Integer;
import java.lang.Boolean;
public class Matrix extends Vector<Vector> {
}
und
import java.util.Vector;
public class MainMatrix {
public static void main(String[] args) {
new Matrix();
}
}
java MainMatrix
liefert
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
Matrix.mul(Ljava/util/Vector;)LMatrix; @259: invokevirtual
Reason:
Type 'java/lang/Integer' (current frame, stack[1]) is not assignable to 'java/util/Vector'
Current Frame:
bci: @259
flags: { }
locals: { 'Matrix', 'java/util/Vector', 'Matrix', 'java/lang/Integer', 'java/util/Vector', 'java/util/Vector', 'java/lang/Integer', 'java/lang/Integer', 'java/lang/Integer' }
stack: { 'java/util/Vector', 'java/lang/Integer' }
Bytecode:
0000000: 014d bb00 0259 b700 3059 4d57 014e 120f
0000010: b800 1559 4e57 2db6 0019 2ab6 0031 b600
0000020: 19a1 0007 03a7 0004 0499 0105 013a 042a
0000030: 2db6 0019 b800 15b6 0034 593a 0457 013a
0000040: 05bb 0005 59b7 000a 593a 0557 013a 0612
0000050: 0fb8 0015 593a 0657 1906 b600 1919 04b6
0000060: 001d b600 19a1 0007 03a7 0004 0499 00ab
0000070: 013a 0712 0fb8 0015 593a 0757 013a 0812
0000080: 0fb8 0015 593a 0857 1908 b600 1919 04b6
0000090: 001d b600 19a1 0007 03a7 0004 0499 005c
00000a0: 1907 b600 1919 0419 08b6 0019 b800 15b6
00000b0: 0021 c000 11c0 0011 b600 192b 1908 b600
00000c0: 19b8 0015 b600 21c0 0005 1906 b600 19b8
00000d0: 0015 b600 21c0 0011 c000 11b6 0019 6860
00000e0: b800 1559 3a07 5719 08b6 0019 5912 2c60
00000f0: b800 153a 0857 a7ff 9219 0519 07b6 0019
0000100: b800 15b6 0037 1906 b600 1959 122c 60b8
0000110: 0015 3a06 57a7 ff43 2c19 05b6 0038 2db6
0000120: 0019 5912 2c60 b800 154e 57a7 feeb 2cb0
0000130:
Stackmap Table:
append_frame(@22,Object[#2],Object[#17])
same_frame(@40)
same_locals_1_stack_item_frame(@41,Integer)
append_frame(@88,Object[#5],Object[#5],Object[#17])
same_frame(@108)
same_locals_1_stack_item_frame(@109,Integer)
append_frame(@136,Object[#17],Object[#17])
same_frame(@156)
same_locals_1_stack_item_frame(@157,Integer)
same_frame_extended(@249)
chop_frame(@280,2)
chop_frame(@302,3)
Problem dürfte sein, dass Du bei den Generics als Parameter mit echte Typen einsetzt. Der Original javacsetzt Object ein:
Bsp.:
Du erzeugst:
259: invokevirtual #55 // Method java/util/Vector.addElement:(Ljava/util/Vector;)V
Der Original javac erzeugt:
118: invokevirtual #33 // Method java/util/Vector.addElement:(Ljava/lang/Object;)V
Dazuhin kommt, dass Ljava/util/Vector; als Parametertyp in Zeile 259 falsch ist. Es müsste Integer sein.
Weiteres Problem:
An den Stellen wo eigentlich I als Parametertype oder Returntyp stehen sollte steht Ljava/lang/Integer;
Bsp:
55: invokevirtual #52 // Method elementAt:(Ljava/lang/Integer;)Ljava/util/Vector; (javatx)
20: invokevirtual #23 // Method elementAt:(I)Ljava/lang/Object; (javac)
Es folgen die beiden disassemblierte class-Files
javac:
public Matrix mul(java.util.Vector<? extends java.util.Vector<? extends java.lang.Integer>>);
descriptor: (Ljava/util/Vector;)LMatrix;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=9, args_size=2
0: new #16 // class Matrix
3: dup
4: invokespecial #21 // Method "":()V
7: astore_2
8: iconst_0
9: istore_3
10: iload_3
11: aload_0
12: invokevirtual #22 // Method size:()I
15: if_icmpge 139
18: aload_0
19: iload_3
20: invokevirtual #23 // Method elementAt:(I)Ljava/lang/Object;
23: checkcast #2 // class java/util/Vector
26: astore 4
28: new #2 // class java/util/Vector
31: dup
32: invokespecial #1 // Method java/util/Vector."":()V
35: astore 5
37: iconst_0
38: istore 6
40: iload 6
42: aload 4
44: invokevirtual #7 // Method java/util/Vector.size:()I
47: if_icmpge 127
50: iconst_0
51: istore 7
53: iconst_0
54: istore 8
56: iload 8
58: aload 4
60: invokevirtual #7 // Method java/util/Vector.size:()I
63: if_icmpge 111
66: iload 7
68: aload 4
70: iload 8
72: invokevirtual #11 // Method java/util/Vector.elementAt:(I)Ljava/lang/Object;
75: checkcast #24 // class java/lang/Integer
78: invokevirtual #26 // Method java/lang/Integer.intValue:()I
81: aload_1
82: iload 8
84: invokevirtual #11 // Method java/util/Vector.elementAt:(I)Ljava/lang/Object;
87: checkcast #2 // class java/util/Vector
90: iload 6
92: invokevirtual #11 // Method java/util/Vector.elementAt:(I)Ljava/lang/Object;
95: checkcast #24 // class java/lang/Integer
98: invokevirtual #26 // Method java/lang/Integer.intValue:()I
101: imul
102: iadd
103: istore 7
105: iinc 8, 1
108: goto 56
111: aload 5
113: iload 7
115: invokestatic #29 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
118: invokevirtual #33 // Method java/util/Vector.addElement:(Ljava/lang/Object;)V
121: iinc 6, 1
124: goto 40
127: aload_2
128: aload 5
130: invokevirtual #37 // Method addElement:(Ljava/lang/Object;)V
133: iinc 3, 1
136: goto 10
139: aload_2
140: areturn
javatx
public Matrix mul(java.util.Vector<? extends java.util.Vector<? extends java.lang.Integer>>);
descriptor: (Ljava/util/Vector;)LMatrix;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=9, args_size=2
0: aconst_null
1: astore_2
2: new #2 // class Matrix
5: dup
6: invokespecial #48 // Method "":()V
9: dup
10: astore_2
11: pop
12: aconst_null
13: astore_3
14: ldc #15 // int 0
16: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
19: dup
20: astore_3
21: pop
22: aload_3
23: invokevirtual #25 // Method java/lang/Integer.intValue:()I
26: aload_0
27: invokevirtual #49 // Method size:()Ljava/lang/Integer;
30: invokevirtual #25 // Method java/lang/Integer.intValue:()I
33: if_icmplt 40
36: iconst_0
37: goto 41
40: iconst_1
41: ifeq 302
44: aconst_null
45: astore 4
47: aload_0
48: aload_3
49: invokevirtual #25 // Method java/lang/Integer.intValue:()I
52: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
55: invokevirtual #52 // Method elementAt:(Ljava/lang/Integer;)Ljava/util/Vector;
58: dup
59: astore 4
61: pop
62: aconst_null
63: astore 5
65: new #5 // class java/util/Vector
68: dup
69: invokespecial #10 // Method java/util/Vector."":()V
72: dup
73: astore 5
75: pop
76: aconst_null
77: astore 6
79: ldc #15 // int 0
81: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
84: dup
85: astore 6
87: pop
88: aload 6
90: invokevirtual #25 // Method java/lang/Integer.intValue:()I
93: aload 4
95: invokevirtual #29 // Method java/util/Vector.size:()Ljava/lang/Integer;
98: invokevirtual #25 // Method java/lang/Integer.intValue:()I
101: if_icmplt 108
104: iconst_0
105: goto 109
108: iconst_1
109: ifeq 280
112: aconst_null
113: astore 7
115: ldc #15 // int 0
117: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
120: dup
121: astore 7
123: pop
124: aconst_null
125: astore 8
127: ldc #15 // int 0
129: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
132: dup
133: astore 8
135: pop
136: aload 8
138: invokevirtual #25 // Method java/lang/Integer.intValue:()I
141: aload 4
143: invokevirtual #29 // Method java/util/Vector.size:()Ljava/lang/Integer;
146: invokevirtual #25 // Method java/lang/Integer.intValue:()I
149: if_icmplt 156
152: iconst_0
153: goto 157
156: iconst_1
157: ifeq 249
160: aload 7
162: invokevirtual #25 // Method java/lang/Integer.intValue:()I
165: aload 4
167: aload 8
169: invokevirtual #25 // Method java/lang/Integer.intValue:()I
172: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
175: invokevirtual #33 // Method java/util/Vector.elementAt:(Ljava/lang/Integer;)Ljava/lang/Object;
178: checkcast #17 // class java/lang/Integer
181: checkcast #17 // class java/lang/Integer
184: invokevirtual #25 // Method java/lang/Integer.intValue:()I
187: aload_1
188: aload 8
190: invokevirtual #25 // Method java/lang/Integer.intValue:()I
193: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
196: invokevirtual #33 // Method java/util/Vector.elementAt:(Ljava/lang/Integer;)Ljava/lang/Object;
199: checkcast #5 // class java/util/Vector
202: aload 6
204: invokevirtual #25 // Method java/lang/Integer.intValue:()I
207: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
210: invokevirtual #33 // Method java/util/Vector.elementAt:(Ljava/lang/Integer;)Ljava/lang/Object;
213: checkcast #17 // class java/lang/Integer
216: checkcast #17 // class java/lang/Integer
219: invokevirtual #25 // Method java/lang/Integer.intValue:()I
222: imul
223: iadd
224: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
227: dup
228: astore 7
230: pop
231: aload 8
233: invokevirtual #25 // Method java/lang/Integer.intValue:()I
236: dup
237: ldc #44 // int 1
239: iadd
240: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
243: astore 8
245: pop
246: goto 136
249: aload 5
251: aload 7
253: invokevirtual #25 // Method java/lang/Integer.intValue:()I
256: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
259: invokevirtual #55 // Method java/util/Vector.addElement:(Ljava/util/Vector;)V
262: aload 6
264: invokevirtual #25 // Method java/lang/Integer.intValue:()I
267: dup
268: ldc #44 // int 1
270: iadd
271: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
274: astore 6
276: pop
277: goto 88
280: aload_2
281: aload 5
283: invokevirtual #56 // Method addElement:(Ljava/util/Vector;)V
286: aload_3
287: invokevirtual #25 // Method java/lang/Integer.intValue:()I
290: dup
291: ldc #44 // int 1
293: iadd
294: invokestatic #21 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
297: astore_3
298: pop
299: goto 22
302: aload_2
303: areturn
*** Bug 250 has been marked as a duplicate of this bug. ***
*** Bug 251 has been marked as a duplicate of this bug. ***
Scheint jetzt zu funktionieren