forked from JavaTX/JavaCompilerCore
BCEL Framework aktualisiert. FunN Typen implementieren
This commit is contained in:
parent
629d2dcc4d
commit
a31e7b1108
Binary file not shown.
@ -74,7 +74,7 @@ public class MethodGenerator extends MethodGen{
|
|||||||
|
|
||||||
method.addAttribute(factory.createSignatureAttribute(paramTypesSig+retTypeSig));
|
method.addAttribute(factory.createSignatureAttribute(paramTypesSig+retTypeSig));
|
||||||
|
|
||||||
StackMap stackMap = new StackMapTableGen(this.getInstructionList(), cp).getStackMap();
|
StackMap stackMap = new StackMapTableGen(this, cp).getStackMap();
|
||||||
if(stackMap != null)method.addCodeAttribute(stackMap);
|
if(stackMap != null)method.addCodeAttribute(stackMap);
|
||||||
|
|
||||||
return method.getMethod();
|
return method.getMethod();
|
||||||
|
@ -164,38 +164,13 @@ public class LambdaExpression extends Expr{
|
|||||||
ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression
|
ret.add(method_body.TYPEStmt(ArgumentAssumptions.add(assumptions))); //Es gibt die LambdaExpression nur mit einem Block als Method Body, nicht mit einer einzelnen Expression
|
||||||
|
|
||||||
//Die Constraints für ParameterTypen und Ret Typ erstellen:
|
//Die Constraints für ParameterTypen und Ret Typ erstellen:
|
||||||
Menge<Type> modifiedParamTypes = new Menge<>();
|
|
||||||
for(Type pT : paramTypes){
|
|
||||||
if(pT instanceof WildcardType){
|
|
||||||
//Auf Typfehler kontrollieren. Siehe Bug #12 Kommentar 3
|
|
||||||
if(pT instanceof ExtendsWildcardType){
|
|
||||||
throw new TypeinferenceException("Typfehler von Parametertyp "+pT,this);
|
|
||||||
}else{
|
|
||||||
modifiedParamTypes.add(pT);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
modifiedParamTypes.add(new SuperWildcardType((ObjectType) pT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Type retType = method_body.getType();
|
Type retType = method_body.getType();
|
||||||
// PN < TPH PN
|
|
||||||
if(retType instanceof WildcardType){
|
|
||||||
//Auf Typfehler kontrollieren. Siehe Bug #12 Kommentar 3
|
|
||||||
if(retType instanceof SuperWildcardType){
|
|
||||||
throw new TypeinferenceException("Typfehler von Parametertyp "+retType,this);
|
|
||||||
}else{
|
|
||||||
//retType bleibt unverändert
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
//Die LambdaExpression kann zu diesem Zeit schon feststellen, ob der Return-Type Void ist (Kein Return-Statement):
|
|
||||||
if(!typeIsVoid(retType)){ //Nur, wenn es nicht void ist, kann der ExtendsWildcardType gebildet werden.
|
|
||||||
retType = new ExtendsWildcardType((ObjectType) retType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(typeIsVoid(retType)){//In diesem Fall, muss der Typ des LambdaAusdrucks FunVoid sein
|
if(typeIsVoid(retType)){//In diesem Fall, muss der Typ des LambdaAusdrucks FunVoid sein
|
||||||
this.lambdaType = new FunVoidN(modifiedParamTypes);
|
this.lambdaType = new FunVoidN(paramTypes);
|
||||||
}else{
|
}else{
|
||||||
this.lambdaType = new FunN(retType, modifiedParamTypes);
|
this.lambdaType = new FunN(retType, paramTypes);
|
||||||
}
|
}
|
||||||
ret.add(ConstraintsSet.createSingleConstraint(lambdaType.TYPE(assumptions, this),this.getType().TYPE(assumptions, this)));
|
ret.add(ConstraintsSet.createSingleConstraint(lambdaType.TYPE(assumptions, this),this.getType().TYPE(assumptions, this)));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user