2013-10-18 11:33:46 +00:00
|
|
|
// ino.module.Statement.8652.package
|
2014-09-02 08:33:54 +00:00
|
|
|
package de.dhbwstuttgart.syntaxtree.statement;
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|
|
|
|
// ino.module.Statement.8652.import
|
|
|
|
import java.util.Enumeration;
|
|
|
|
import java.util.Hashtable;
|
|
|
|
|
2016-07-21 14:36:33 +00:00
|
|
|
import org.apache.bcel.generic.ClassGen;
|
|
|
|
import org.apache.bcel.generic.ConstantPoolGen;
|
|
|
|
import org.apache.bcel.generic.InstructionFactory;
|
|
|
|
import org.apache.bcel.generic.InstructionList;
|
2015-06-16 09:55:15 +00:00
|
|
|
|
|
|
|
import de.dhbwstuttgart.typeinference.Menge;
|
2015-09-02 15:11:32 +00:00
|
|
|
import de.dhbwstuttgart.bytecode.ClassGenerator;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.core.IItemWithOffset;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.Class;
|
2014-09-04 14:35:44 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.Type;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
|
|
|
import de.dhbwstuttgart.typeinference.ConstraintsSet;
|
|
|
|
import de.dhbwstuttgart.typeinference.JavaCodeResult;
|
2014-09-08 13:12:47 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.Pair;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.ResultSet;
|
|
|
|
import de.dhbwstuttgart.typeinference.Typeable;
|
2015-11-27 15:10:35 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
2013-10-18 11:33:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.class.Statement.26184.declaration
|
2014-09-05 09:49:31 +00:00
|
|
|
public abstract class Statement extends SyntaxTreeNode implements IItemWithOffset, Typeable
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|
|
|
|
// ino.class.Statement.26184.body
|
|
|
|
{
|
|
|
|
|
|
|
|
// ino.attribute.offset.26188.declaration
|
2014-02-19 04:20:54 +00:00
|
|
|
protected int offset;
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|
|
|
|
// ino.attribute.variableLength.26191.declaration
|
|
|
|
private int variableLength;
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
protected Type type;
|
|
|
|
|
2016-09-09 22:40:17 +00:00
|
|
|
public Statement(int offset)
|
2013-10-18 11:33:46 +00:00
|
|
|
{
|
|
|
|
this.offset=offset;
|
2016-09-09 22:40:17 +00:00
|
|
|
//this.variableLength=variableLength;
|
2013-10-18 11:33:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// ino.method.getOffset.26197.definition
|
|
|
|
public int getOffset()
|
|
|
|
// ino.end
|
|
|
|
// ino.method.getOffset.26197.body
|
|
|
|
{
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
// ino.method.getVariableLength.26200.definition
|
|
|
|
public int getVariableLength()
|
|
|
|
// ino.end
|
|
|
|
// ino.method.getVariableLength.26200.body
|
|
|
|
{
|
|
|
|
return variableLength;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author AI10023 - Andreas Stadelmeier
|
2015-05-12 17:49:27 +00:00
|
|
|
* Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke
|
2013-10-18 11:33:46 +00:00
|
|
|
* Jedes Statement wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen.
|
|
|
|
*/
|
|
|
|
public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions);
|
|
|
|
|
2014-02-11 15:30:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
public Type getType(){
|
2013-10-18 11:33:46 +00:00
|
|
|
return type;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Andreas Stadelmeier, a10023
|
2015-05-12 17:49:27 +00:00
|
|
|
* Sollte von jedem Statement überschrieben werden.
|
2013-10-18 11:33:46 +00:00
|
|
|
* Liefert Informationen zum Statment und dessen Typ.
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public String getTypeInformation(){
|
2015-04-22 19:40:22 +00:00
|
|
|
return this.printJavaCode(new ResultSet(new Menge<Pair>()))+" : "+type.toString();
|
2013-10-18 11:33:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2014-02-11 15:30:38 +00:00
|
|
|
* @author AI10023 - Andreas Stadelmeier
|
|
|
|
* Jedem Statement und jeder Expression wird im Zuge des Typinferenzalgorithmus eine Typvariable zugewiesen.
|
2015-05-12 17:49:27 +00:00
|
|
|
* Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren.
|
2013-10-18 11:33:46 +00:00
|
|
|
*/
|
|
|
|
public void setType(Type t)
|
|
|
|
{
|
|
|
|
this.type=t;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public abstract JavaCodeResult printJavaCode(ResultSet resultSet);
|
|
|
|
|
2014-03-17 16:55:55 +00:00
|
|
|
@Override
|
2016-04-07 12:53:29 +00:00
|
|
|
public String getDescription(){
|
2015-04-22 19:40:22 +00:00
|
|
|
return this.printJavaCode(new ResultSet(new Menge<Pair>())).toString();
|
2014-03-17 16:55:55 +00:00
|
|
|
}
|
|
|
|
|
2014-08-07 09:07:11 +00:00
|
|
|
public void setReturnType(Type t){
|
|
|
|
}
|
|
|
|
|
|
|
|
public Type getReturnType(){
|
2014-09-14 16:38:43 +00:00
|
|
|
return new de.dhbwstuttgart.syntaxtree.type.Void(this,-1);
|
2014-08-07 09:07:11 +00:00
|
|
|
}
|
2015-06-16 09:55:15 +00:00
|
|
|
|
|
|
|
|
2015-11-27 15:10:35 +00:00
|
|
|
public abstract InstructionList genByteCode(ClassGenerator _cg, TypeinferenceResultSet rs);
|
2015-06-16 09:55:15 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|