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));
|
||||
|
||||
StackMap stackMap = new StackMapTableGen(this.getInstructionList(), cp).getStackMap();
|
||||
StackMap stackMap = new StackMapTableGen(this, cp).getStackMap();
|
||||
if(stackMap != null)method.addCodeAttribute(stackMap);
|
||||
|
||||
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
|
||||
|
||||
//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();
|
||||
// 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
|
||||
this.lambdaType = new FunVoidN(modifiedParamTypes);
|
||||
this.lambdaType = new FunVoidN(paramTypes);
|
||||
}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)));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user