Inf.jav: Typvariable wird doppelt deklariert #90

Open
opened 2022-08-09 07:43:55 +00:00 by pl · 5 comments
Owner

commit: 6fc70db481

Man erhält
javap Inf.class
public class Inf {
public Inf();
public <DDX, DDV, P extends DDX, N extends DDX, DDX extends DDV> void m(N, DDX, P);
}

DDX darf aber vorne nicht stehen, weil "DDX extends DDV" ebenfalls enthalten ist.

commit: 6fc70db481b0a16e4ae2978f045571f5f499fe1c Man erhält javap Inf.class public class Inf { public Inf(); public <DDX, DDV, P extends DDX, N extends DDX, DDX extends DDV> void m(N, DDX, P); } DDX darf aber vorne nicht stehen, weil "DDX extends DDV" ebenfalls enthalten ist.
Owner

[targetBytecode]

Ich hab einfach einen weiteren Pass zu eliminateCyclesAndInfima hinzugefügt der diese doppelten bounds rausfiltert. Ich bin mir nicht sicher ob das der richtige Weg ist aber es funktioniert zumindest für diesen Fall.

[targetBytecode] Ich hab einfach einen weiteren Pass zu eliminateCyclesAndInfima hinzugefügt der diese doppelten bounds rausfiltert. Ich bin mir nicht sicher ob das der richtige Weg ist aber es funktioniert zumindest für diesen Fall.
Author
Owner

Die Lösung begeistert mich nun nicht gerade.

In dem Moment wo Sie einen Upper-Bound für eine Typvariable T generieren,
müssen Sie eben den Contraint T extends Object entfernen. Alle andern
Constraints T extends T1 dürfen Sie aber nicht entfernen.

Die Lösung begeistert mich nun nicht gerade. In dem Moment wo Sie einen Upper-Bound für eine Typvariable T generieren, müssen Sie eben den Contraint T extends Object entfernen. Alle andern Constraints T extends T1 dürfen Sie aber nicht entfernen.
Owner

Ich hab es jetzt so geändert, dass T = Object entfernt wird wenn T < E hinzugefügt wird.

Ich hab es jetzt so geändert, dass T = Object entfernt wird wenn T < E hinzugefügt wird.
Author
Owner

Das scheint noch nicht so ganz zu funktionieren. Ich habe das Beispiel Inf.jav noch etwas erweitert und bekomme nun Folgendes raus:

public <P extends DEA, DDX, N extends DEA, DEA extends DDY, DEA, DDY extends DDX> void m(N, DEA, P);

DEA extends DDY und DEA extends Object

Das scheint noch nicht so ganz zu funktionieren. Ich habe das Beispiel Inf.jav noch etwas erweitert und bekomme nun Folgendes raus: public <P extends DEA, DDX, N extends DEA, DEA extends DDY, DEA, DDY extends DDX> void m(N, DEA, P); DEA extends DDY und DEA extends Object
Author
Owner

Der Fehler lässt dich gerade nicht reproduzieren. Versuchen Sie es bitte mal bei sich

Der Fehler lässt dich gerade nicht reproduzieren. Versuchen Sie es bitte mal bei sich
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#90
No description provided.