OLFun #82
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#82
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?
branch: bigRefactoring
commit:
0aab2d9f53
Grundsätzliches: Bei uns steht immer Integer wenn egal ob int oder Integer gemeint ist.
Nun muss man bei den unären und binären Operatoren (+, -, *, ..., <,>, ... ++ --, ..)
für einen Aufruf
Method java/lang/Integer.intValue:()I
für die Argumente einfügen und einen Aufruf
Integer.valueOf:(I)Ljava/lang/Integer;
für die Rückgabe einfügen.
x + x kompiliert dann zu
1: aload_2
2: invokevirtual #38 // Method java/lang/Integer.intValue:()I
5: aload_2
6: invokevirtual #38 // Method java/lang/Integer.intValue:()I
9: iadd
10: invokestatic #41 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
Wenn allerdings ein Argument eine Konstante ist oder eine Bibliotheksmethode aufruft, die int zurückgibt,
dann darf kein intValue() aufgerufen werden (Bsp. vector.size() + 5)
13: aload_1
14: invokevirtual #25 // Method java/util/Vector.size:()I
17: iconst_5
18: iadd
19: invokestatic #41 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
Scheint jetzt zu funktionieren. Es wird unsinnigerweise zu Integer und zurück konvertiert, das würde allerdings für eine Optimierung sprechen.