Fehler in Testcases behoben. RefTyp.hashCode() angefügt

This commit is contained in:
JanUlrich 2014-04-24 13:01:24 +02:00
parent e7db1e7494
commit fab7522def
8 changed files with 21 additions and 11 deletions

View File

@ -67,8 +67,9 @@ public abstract class AddOp extends Operator
@Override @Override
public Type getReturnType(RefType inputType, TypeAssumptions ass) { public Type getReturnType(RefType inputType, TypeAssumptions ass) {
Type ret = ass.getTypeFor(new RefType("java.lang.Integer",-1)); Type iT = ass.getTypeFor(inputType);
if(ret == null)throw new DebugException("java.lang.Integer kann nicht aufgelöst werden"); Hashtable<RefType, RefType> types = getOperatorTypes();
Type ret = types.get(iT);
return ret; return ret;
} }

View File

@ -21,6 +21,7 @@ import mycompiler.myoperator.MulOp;
import mycompiler.myoperator.Operator; import mycompiler.myoperator.Operator;
import mycompiler.myoperator.RelOp; import mycompiler.myoperator.RelOp;
import mycompiler.mytype.GenericTypeVar; import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.RefType;
import mycompiler.mytype.Type; import mycompiler.mytype.Type;
import mycompiler.mytypereconstruction.CSupportData; import mycompiler.mytypereconstruction.CSupportData;
import mycompiler.mytypereconstruction.set.CSubstitutionSet; import mycompiler.mytypereconstruction.set.CSubstitutionSet;
@ -34,6 +35,7 @@ import org.apache.log4j.Logger;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import typinferenz.ConstraintsSet; import typinferenz.ConstraintsSet;
import typinferenz.JavaCodeResult; import typinferenz.JavaCodeResult;
@ -261,7 +263,8 @@ public class Binary extends BinaryExpr
ret.add(this.expr2.TYPEExpr(assumptions)); ret.add(this.expr2.TYPEExpr(assumptions));
//Der Operator generiert die fehlenden Constraints: //Der Operator generiert die fehlenden Constraints:
ret.add(this.op.TYPEExpr(expr1, expr2, assumptions)); ret.add(this.op.TYPEExpr(expr1, expr2, assumptions));
this.set_Type(this.op.getReturnType(assumptions)); //Kleiner Hack, wenn die op.TYPEExpr ohne Fehler durchlaufen wurde, dann kann expr1.getType() zu RefType gecastet werden
this.set_Type(this.op.getReturnType((RefType) expr1.getType(),assumptions));
return ret; return ret;
} }

View File

@ -180,7 +180,7 @@ public class BoolLiteral extends Literal
@Override @Override
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
this.type = new BooleanType(); this.type = assumptions.getTypeFor(new RefType("java.lang.Boolean",-1));
return new ConstraintsSet(); return new ConstraintsSet();
} }

View File

@ -83,6 +83,13 @@ public class RefType extends Type implements IMatchable
} }
// ino.end // ino.end
@Override
public int hashCode() {
int hash = 0;
hash += this.name.hashCode();//Nur den Name hashen. Sorgt für langsame, aber funktionierende HashMaps
return hash;
}
// ino.method.RefType.26640.definition // ino.method.RefType.26640.definition
public RefType(String fullyQualifiedName, Vector parameter, int offset) public RefType(String fullyQualifiedName, Vector parameter, int offset)
// ino.end // ino.end

View File

@ -13,8 +13,7 @@ class Main {
ol; ol;
ol = new OL2(); ol = new OL2();
y; y;
/* y = new Vector<Integer>(); */ y.add(ol.m(x));
y.addElement(ol.m(x));
} }
} }

View File

@ -59,10 +59,8 @@ public class Tester extends TypeInsertTester{
testFiles.add("BoundedType.jav"); testFiles.add("BoundedType.jav");
testFiles.add("OL2.jav"); testFiles.add("OL2.jav");
testFiles.add("OL.jav"); testFiles.add("OL.jav");
testFiles.add("Probleme");
testFiles.add("Simple.jav"); testFiles.add("Simple.jav");
testFiles.add("SMatrix.jav"); testFiles.add("SMatrix.jav");
testFiles.add("Tester.java");
testFiles.add("UnifyTest1.jav"); testFiles.add("UnifyTest1.jav");
testFiles.add("UsecaseEight_pl.jav"); testFiles.add("UsecaseEight_pl.jav");
testFiles.add("UsecaseFive_pl.jav"); testFiles.add("UsecaseFive_pl.jav");

View File

@ -5,7 +5,7 @@ import java.util.Stack;
class Test { class Test {
public getValue(a){ public getValue(a){
String x; String x;
a.addElement(x); a.add(x);
} }
} }

View File

@ -1,3 +1,5 @@
import java.util.Vector;
class UsecaseFive_pl<A> { class UsecaseFive_pl<A> {
foo() { foo() {