Tph7: Typvariablen falsch #85
Loading…
x
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?
commit:
bfc5c55e90
public class Tph7 {
}
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
]
[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.