Tph7: Typvariablen falsch #85

Closed
opened 2022-08-04 09:06:35 +00:00 by pl · 1 comment
Owner

commit: bfc5c55e90

public class Tph7 {

m(a,b){
	var c = m2(b);
	return m2(b);
}

m2(b){
	return b;
}

}

liefert

javap Tph7.class
public class Tph7 {
public Tph7();
public <IYO extends IYO, DZL, IYO, DZM extends IYO> IYO m(DZL, DZM);
public IYO m2(IYO);
}

Dies stimmt so nicht.

Typsierung vor der Unifikation

TPH DZK m(TPH DZL a, TPH DZM b)({
TPH DZN c;
(c)::TPH DZN = ((this)::TPH DZO.m2((b)::TPH DZM))::TPH DZQ;
return ((this)::TPH DZS.m2((b)::TPH DZM))::TPH DZU;
})::TPH DZW

TPH DZX m2(TPH DZY b)({
return (b)::TPH DZY;
})::TPH DZZ

RESULT Final:

Einsetzung des Results:

TPH DZK m(TPH DZL a, TPH DZM b)({
TPH DZN c;
(c)::TPH DZN = ((this)::TPH DZO.m2((b)::TPH DZM))::TPH DZK;
return ((this)::TPH DZS.m2((b)::TPH DZM))::TPH DZK;
})::TPH DZW

TPH DZK m2(TPH DZK b)({
return (b)::TPH DZK;
})::TPH DZZ

Ergebnis müsste dann sein:
In diesem Fall muss keiner der Vereinfachungsalgorithmen angewandt werden.

public class Tph7 {
public Tph7();
public <DZL, DZM extends DZK, DZK extends DZN, DZN> IYO m(DZL, DZM);
public IYO m2(DZK);
}

Nur zu Dokumentationszwecken:
Startkonfguration der Unifikation:
UND:[(DZO =. Tph7, 0 WC: true, IT: false), (DZS =. Tph7, 0 WC: true, IT: false), (DZQ <. DZN, 0 WC: true, IT: false, 0 WC: true, IT: false), (DZY =. DZX, 1 WC: false, IT: false, -1 WC: false, IT: false), (DZU =. DZK, 0 WC: true, IT: false, -1 WC: false, IT: false)]

ODER:
[[(DZX =. DZQ, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZO =. Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)]
isInherited = false
isStatement = false
, [(DZX =. DZQ, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZO =. ? extends Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)]
isInherited = false
isStatement = false
]
[[(DZX =. DZU, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZS =. ? extends Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)]
isInherited = false
isStatement = false
, [(DZX =. DZU, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZS =. Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)]
isInherited = false
isStatement = false
]

commit: bfc5c55e90320248e5571834f640ff88de8392e7 public class Tph7 { m(a,b){ var c = m2(b); return m2(b); } m2(b){ return b; } } liefert javap Tph7.class public class Tph7 { public Tph7(); public <IYO extends IYO, DZL, IYO, DZM extends IYO> IYO m(DZL, DZM); public <DZY> IYO m2(IYO); } Dies stimmt so nicht. Typsierung vor der Unifikation TPH DZK m(TPH DZL a, TPH DZM b)({ TPH DZN c; (c)::TPH DZN = ((this)::TPH DZO.m2((b)::TPH DZM))::TPH DZQ; return ((this)::TPH DZS.m2((b)::TPH DZM))::TPH DZU; })::TPH DZW TPH DZX m2(TPH DZY b)({ return (b)::TPH DZY; })::TPH DZZ RESULT Final: [[(TPH DZK < TPH DZN), (TPH DZY, TPH DZK), (TPH DZQ, TPH DZK), (TPH DZM < TPH DZK), (TPH DZX, TPH DZK), (TPH DZO = Tph7), (TPH DZS = Tph7), (TPH DZU, TPH DZK)]] Einsetzung des Results: TPH DZK m(TPH DZL a, TPH DZM b)({ TPH DZN c; (c)::TPH DZN = ((this)::TPH DZO.m2((b)::TPH DZM))::TPH DZK; return ((this)::TPH DZS.m2((b)::TPH DZM))::TPH DZK; })::TPH DZW TPH DZK m2(TPH DZK b)({ return (b)::TPH DZK; })::TPH DZZ Ergebnis müsste dann sein: In diesem Fall muss keiner der Vereinfachungsalgorithmen angewandt werden. public class Tph7 { public Tph7(); public <DZL, DZM extends DZK, DZK extends DZN, DZN> IYO m(DZL, DZM); public <DZK> IYO m2(DZK); } Nur zu Dokumentationszwecken: Startkonfguration der Unifikation: UND:[(DZO =. Tph7, 0 WC: true, IT: false), (DZS =. Tph7, 0 WC: true, IT: false), (DZQ <. DZN, 0 WC: true, IT: false, 0 WC: true, IT: false), (DZY =. DZX, 1 WC: false, IT: false, -1 WC: false, IT: false), (DZU =. DZK, 0 WC: true, IT: false, -1 WC: false, IT: false)] ODER: [[(DZX =. DZQ, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZO =. Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)] isInherited = false isStatement = false , [(DZX =. DZQ, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZO =. ? extends Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)] isInherited = false isStatement = false ] [[(DZX =. DZU, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZS =. ? extends Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)] isInherited = false isStatement = false , [(DZX =. DZU, -1 WC: false, IT: false, 0 WC: true, IT: false), (DZS =. Tph7, 0 WC: true, IT: false), (DZM <. DZY, 1 WC: false, IT: false, 1 WC: false, IT: false)] isInherited = false isStatement = false ]
Owner

[targetBytecode]

Ich habe folgendes geändert:

Wenn im result set für eine Methode bereits eine Relation
A < .. < B vorhanden ist wird eine Teilrelation nicht mehr hinzugefügt.

[targetBytecode] Ich habe folgendes geändert: Wenn im result set für eine Methode bereits eine Relation A < .. < B vorhanden ist wird eine Teilrelation nicht mehr hinzugefügt.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#85
No description provided.