// ino.module.Statement.8652.package package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.Statement.8652.import import java.util.Enumeration; import java.util.Hashtable; import org.apache.commons.bcel6.generic.ClassGen; import org.apache.commons.bcel6.generic.ConstantPoolGen; import org.apache.commons.bcel6.generic.InstructionFactory; import org.apache.commons.bcel6.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.core.IItemWithOffset; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; 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; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.Typeable; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; // ino.class.Statement.26184.declaration public abstract class Statement extends SyntaxTreeNode implements IItemWithOffset, Typeable // ino.end // ino.class.Statement.26184.body { // ino.attribute.offset.26188.declaration protected int offset; // ino.end // ino.attribute.variableLength.26191.declaration private int variableLength; // ino.end protected Type type; // ino.method.Statement.26194.definition public Statement(int offset, int variableLength) // ino.end // ino.method.Statement.26194.body { this.offset=offset; this.variableLength=variableLength; } // ino.end // 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; } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26224.declaration public abstract void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters); // ino.end /** * @author AI10023 - Andreas Stadelmeier * Implementierung des Java 8 - Typinferenzalgorithmus von Martin Plümicke * Jedes Statement wird im Zuge des Algorithmus durch die TYPEExpr-Funktion angesprochen. */ public abstract ConstraintsSet TYPEStmt(TypeAssumptions assumptions); public Type getType(){ return type; } /** * @author Andreas Stadelmeier, a10023 * Sollte von jedem Statement überschrieben werden. * Liefert Informationen zum Statment und dessen Typ. * @return */ public String getTypeInformation(){ return this.printJavaCode(new ResultSet(new Menge()))+" : "+type.toString(); } /** * @author AI10023 - Andreas Stadelmeier * Jedem Statement und jeder Expression wird im Zuge des Typinferenzalgorithmus eine Typvariable zugewiesen. * Daher müssen alle Statements und Expressions die Methoden setTypeVariable und getTypeVariable implementieren. */ public void setType(Type t) { this.type=t; } public abstract JavaCodeResult printJavaCode(ResultSet resultSet); @Override public String getDescription(){ return this.printJavaCode(new ResultSet(new Menge())).toString(); } public void setReturnType(Type t){ } public Type getReturnType(){ return new de.dhbwstuttgart.syntaxtree.type.Void(this,-1); } public abstract InstructionList genByteCode(ClassGenerator _cg, TypeinferenceResultSet rs); } // ino.end