OLFun #82

Closed
opened 2022-03-18 15:58:51 +00:00 by pl · 3 comments
Owner
public void m(Fun1$$<java.lang.Integer, java.lang.Integer>, java.lang.Integer);
    descriptor: (LFun1$$;Ljava/lang/Integer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
         0: aload_1
         1: aload_2
         2: invokevirtual #39                 // Method java/lang/Integer.intValue:()I
         5: aload_2
         6: invokevirtual #39                 // Method java/lang/Integer.intValue:()I
         9: iadd
        10: invokestatic  #43                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
        13: invokeinterface #29,  2           // InterfaceMethod Fun1$$.apply:(Ljava/lang/Object;)Ljava/lang/Object;
        18: checkcast     #35                 // class java/lang/Integer

FEHLER: Dies muss geloescht werden:
        21: invokevirtual #39                 // Method java/lang/Integer.intValue:()I

        24: astore_2
        25: return
    Signature: #33                          // (LFun1$$<Ljava/lang/Integer;Ljava/lang/Integer;>;Ljava/lang/Integer;)V
``` public void m(Fun1$$<java.lang.Integer, java.lang.Integer>, java.lang.Integer); descriptor: (LFun1$$;Ljava/lang/Integer;)V flags: (0x0001) ACC_PUBLIC Code: stack=3, locals=3, args_size=3 0: aload_1 1: aload_2 2: invokevirtual #39 // Method java/lang/Integer.intValue:()I 5: aload_2 6: invokevirtual #39 // Method java/lang/Integer.intValue:()I 9: iadd 10: invokestatic #43 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 13: invokeinterface #29, 2 // InterfaceMethod Fun1$$.apply:(Ljava/lang/Object;)Ljava/lang/Object; 18: checkcast #35 // class java/lang/Integer FEHLER: Dies muss geloescht werden: 21: invokevirtual #39 // Method java/lang/Integer.intValue:()I 24: astore_2 25: return Signature: #33 // (LFun1$$<Ljava/lang/Integer;Ljava/lang/Integer;>;Ljava/lang/Integer;)V ```
Author
Owner

branch: bigRefactoring
commit: 0aab2d9f53

branch: bigRefactoring commit: 0aab2d9f53be29bb693edf9a0d433a630918b8a7
Author
Owner

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;

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;
Owner

Scheint jetzt zu funktionieren. Es wird unsinnigerweise zu Integer und zurück konvertiert, das würde allerdings für eine Optimierung sprechen.

Scheint jetzt zu funktionieren. Es wird unsinnigerweise zu Integer und zurück konvertiert, das würde allerdings für eine Optimierung sprechen.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#82
No description provided.