Objektreferenz wird bei Lambda Funktionen fälschlicherweise auf den Stack gelegt #297
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#297
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?
Das Problem scheint ein ähnliches wir bei #296 zu sein, auch wenn es hier im Zusammenhang von Lambda Fuktionen auftritt.
Beispiel Code
Datei Foo.jav
Bytecode der Methode
exec()
Wie bei #296 scheint auch hier fälschlicherweise die Referenz auf das aktuelle Objekt auf den Stack geladen (hier ist die Methode zwar nicht static, aber mMn besteht trotzdem kein Grund die Referenz auf den Stack zu laden).
Wenn man statt
return Foo.operation((x,y) -> x+y, 10, 10);
,return operation((x,y) -> x+y, 10, 10);
schreibt, wird aload_0 am Anfang der Methode sogar 2x aufgerufen. Ich denke das ist das Problem aus #296, dennoch scheint es hier noch im Zusammenhang mit Lambda Funktionen ein Ähnliches Problem zu ergeben.Auch hier kommt es beim ausführen mittels einer mit javac kompilierten Klasse mit Main Methode zu einem Fehler zur Laufzeit.
Die Lambdafunktion selber ist auch falsch, es müsste Integer zurückgegeben werden und nicht Object.
Wenn ich hier:
SMALLERDOT
durchEQUALSDOT
ersetze bekommt der Lambdaausruck den Rückgabetyp Integer.Vielleicht muss man das machen falls es ein Lambdausdruck ist weil hier der Typ ja direkt vom Rückgabewert abhängt.