diff --git a/lib/commons-bcel6-6.0-SNAPSHOT.jar b/lib/commons-bcel6-6.0-SNAPSHOT.jar index 11dcfef9..d84ca41f 100644 Binary files a/lib/commons-bcel6-6.0-SNAPSHOT.jar and b/lib/commons-bcel6-6.0-SNAPSHOT.jar differ diff --git a/src/de/dhbwstuttgart/bytecode/MethodGenerator.java b/src/de/dhbwstuttgart/bytecode/MethodGenerator.java index 887766ce..d374f3f6 100644 --- a/src/de/dhbwstuttgart/bytecode/MethodGenerator.java +++ b/src/de/dhbwstuttgart/bytecode/MethodGenerator.java @@ -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(); diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 4acaa018..04900cb0 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -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 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)));