Problem mit LocalVarDecl und setType behoben

This commit is contained in:
JanUlrich 2014-08-07 11:07:11 +02:00
parent eed860f43e
commit 25195440f0
6 changed files with 26 additions and 13 deletions

View File

@ -222,7 +222,6 @@ public class Constructor extends Method {
public ConstraintsSet TYPE(TypeAssumptions ass) { public ConstraintsSet TYPE(TypeAssumptions ass) {
ConstraintsSet ret = new ConstraintsSet(); ConstraintsSet ret = new ConstraintsSet();
ret.add(this.methode.get_Block().TYPEStmt(ass)); ret.add(this.methode.get_Block().TYPEStmt(ass));
return ret; return ret;
} }

View File

@ -233,8 +233,8 @@ public class Block extends Statement
for(int i= statements.size()-2; i >= 0; i--) { for(int i= statements.size()-2; i >= 0; i--) {
stmt = statements.elementAt(i); stmt = statements.elementAt(i);
typinferenceLog.debug("Prozessing statement: "+stmt); typinferenceLog.debug("Prozessing statement: "+stmt);
if (!(stmt.getType() instanceof Void)) if (!(stmt.getReturnType() instanceof Void))
if (this.getType() instanceof Void) { if (this.getReturnType() instanceof Void) {
//this.setTypeVariable(stmt.getTypeVariable()); //this.setTypeVariable(stmt.getTypeVariable());
throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this); throw new TypeinferenceException("Block besitzt falschen Rückgabetyp (fehlendes return-stmt)", this);
} }

View File

@ -42,10 +42,12 @@ import org.apache.log4j.Logger;
import typinferenz.ConstraintsSet; import typinferenz.ConstraintsSet;
import typinferenz.FreshTypeVariable; import typinferenz.FreshTypeVariable;
import typinferenz.JavaCodeResult; import typinferenz.JavaCodeResult;
import typinferenz.ResultSet; import typinferenz.ResultSet;
import typinferenz.SingleConstraint;
import typinferenz.TypeInsertable; import typinferenz.TypeInsertable;
import typinferenz.assumptions.LocalVarAssumption; import typinferenz.assumptions.LocalVarAssumption;
import typinferenz.assumptions.TypeAssumptions; import typinferenz.assumptions.TypeAssumptions;
@ -474,8 +476,9 @@ public class LocalVarDecl extends Statement implements TypeInsertable
this.setType(replaceType); this.setType(replaceType);
} }
assumptions.addAssumption(new LocalVarAssumption(this, this.getType())); //Bevor der Typ auf Void gesetzt wird. assumptions.addAssumption(new LocalVarAssumption(this, this.getType())); //Bevor der Typ auf Void gesetzt wird.
ret.add(new SingleConstraint(this.getType(), this.getType()));
//assumptions.remove(null); // falls Variable mit diesem Namen bereits vorhanden. //assumptions.remove(null); // falls Variable mit diesem Namen bereits vorhanden.
this.setType(new Void(0)); //Return typ einer Variablendeklaration ist Void this.setReturnType(new Void(0)); //Return typ einer Variablendeklaration ist Void
return ret; return ret;
} }

View File

@ -152,5 +152,14 @@ public class Return extends Statement
return ret; return ret;
} }
@Override
public void setReturnType(Type t){
this.setType(t);
}
@Override
public Type getReturnType(){
return this.getType();
}
} }
// ino.end // ino.end

View File

@ -149,5 +149,11 @@ public abstract class Statement extends SyntaxTreeNode implements IItemWithOffse
return this.printJavaCode(new ResultSet(new Vector<Pair>())).toString(); return this.printJavaCode(new ResultSet(new Vector<Pair>())).toString();
} }
public void setReturnType(Type t){
}
public Type getReturnType(){
return new mycompiler.mytype.Void(-1);
}
} }
// ino.end // ino.end

View File

@ -1,11 +1,7 @@
class Overload{ class ConstructorTest1{
void method( x ){ ConstructorTest1(){
String varS; var;
Integer varI; var = 1;
x.apply(varI);
x.apply(varS);
} }
}
}