diff --git a/.classpath b/.classpath index 8031ed71..8ed57022 100755 --- a/.classpath +++ b/.classpath @@ -3,7 +3,7 @@ - + diff --git a/bin/.gitignore b/bin/.gitignore index 34ddca33..c682e79e 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,2 +1,5 @@ /de/ /plugindevelopment/ +======= +/syntaxTree/ +/bytecode/ diff --git a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java index 6cff7bc5..9650c6a6 100755 --- a/src/de/dhbwstuttgart/bytecode/CodeAttribute.java +++ b/src/de/dhbwstuttgart/bytecode/CodeAttribute.java @@ -250,7 +250,7 @@ public class CodeAttribute extends Attribute // ino.method.codegen.21757.definition - public void codegen(ClassFile classfile, FileOutputStream f) + public void codegen(ClassFile classfile, OutputStream f) throws JVMCodeException, IOException // ino.end // ino.method.codegen.21757.body @@ -1088,11 +1088,11 @@ public class CodeAttribute extends Attribute } // ino.end - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException { - throw new NotImplementedException(); - } +// @Override +// public void codegen(ClassFile classfile, OutputStream f) +// throws JVMCodeException, IOException { +// throw new NotImplementedException(); +// } } // ino.end diff --git a/src/de/dhbwstuttgart/bytecode/SignatureInfo.java b/src/de/dhbwstuttgart/bytecode/SignatureInfo.java index c7fa7873..a13f8a86 100755 --- a/src/de/dhbwstuttgart/bytecode/SignatureInfo.java +++ b/src/de/dhbwstuttgart/bytecode/SignatureInfo.java @@ -186,7 +186,7 @@ public class SignatureInfo extends Attribute // ino.end // ino.method.codegen.22987.definition - public void codegen(ClassFile classfile, FileOutputStream f) + public void codegen(ClassFile classfile, OutputStream f) throws JVMCodeException, IOException // ino.end // ino.method.codegen.22987.body @@ -266,11 +266,11 @@ public class SignatureInfo extends Attribute } // ino.end - @Override - public void codegen(ClassFile classfile, OutputStream f) - throws JVMCodeException, IOException { - throw new NotImplementedException(); - } +// @Override +// public void codegen(ClassFile classfile, OutputStream f) +// throws JVMCodeException, IOException { +// throw new NotImplementedException(); +// } } // ino.end diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintType.java b/src/de/dhbwstuttgart/typeinference/ConstraintType.java index 09ccb730..aa26c650 100644 --- a/src/de/dhbwstuttgart/typeinference/ConstraintType.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintType.java @@ -16,6 +16,9 @@ public class ConstraintType{ public ConstraintType(RefType t){ this.t = t; } + public ConstraintType(WildcardType t){ + this.t = t; + } public Type getType() { return t; } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index a0d935fb..9787b5b4 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -13,6 +13,7 @@ import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder; +import de.dhbwstuttgart.syntaxtree.type.WildcardType; import de.dhbwstuttgart.typeinference.ConstraintType; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.FunNInterface; @@ -285,6 +286,13 @@ public class TypeAssumptions { * @return null, falls der Typ nicht vorhanden ist. */ public ConstraintType getTypeFor(Type t, SyntaxTreeNode inNode){ + if(t instanceof WildcardType){ + WildcardType wt = (WildcardType)t; + Type innerType = wt.GetWildcardType(); + innerType = getTypeFor(innerType, t).getType(); + wt.SetWildcardType(innerType); + return new ConstraintType(wt); + } if(t instanceof TypePlaceholder) return new ConstraintType((TypePlaceholder)t); //Handelt es sich um einen TypePlaceholder kann dieser nicht in den Assumptions vorkommen. diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index d3408e02..3c281407 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -2400,6 +2400,36 @@ throws MatchException return true; } } + //Wildcard ergänzt PL 12-12-05 + if ( T instanceof ExtendsWildcardType ) + { + Type Temp = ((ExtendsWildcardType) T).get_ExtendsType(); + if( Temp instanceof TypePlaceholder ) + { + + if( Temp.getName().equals(a.getName()) ) + { + // Typvariable ersetzen + ((ExtendsWildcardType) T).SetWildcardType(o); + return true; + } + } + } + + if ( T instanceof SuperWildcardType ) + { + Type Temp = ((SuperWildcardType) T).get_SuperType(); + if( Temp instanceof TypePlaceholder ) + { + + if( Temp.getName().equals(a.getName()) ) + { + // Typvariable ersetzen + ((SuperWildcardType) T).SetWildcardType(o); + return true; + } + } + } return false; } // ino.end diff --git a/tools/jay.darwin b/tools/jay.darwin index 00114230..79f44cb2 100755 Binary files a/tools/jay.darwin and b/tools/jay.darwin differ