package mycompiler.myclass; import java.util.Vector; import typinferenz.JavaCodeResult; import typinferenz.ResultSet; import typinferenz.assumptions.TypeAssumptions; import mycompiler.SyntaxTreeNode; import mycompiler.mybytecode.ClassFile; import mycompiler.myexception.JVMCodeException; import mycompiler.mystatement.Expr; import mycompiler.mytype.Type; import mycompiler.mytype.TypePlaceholder; import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; /** * Eine Feldinitialisation steht für eine Felddeklaration mit gleichzeitiger Wertzuweisung * Beispiel: 'public Feld FeldVar = FeldWert;' * @author janulrich * */ public class FieldDeclaration extends Field{ private Expr wert; //private Type type; public void setWert(Expr initialExpression){ this.wert = initialExpression; } public Expr getWert(){ return this.wert; } public String getName(){ return this.get_Name().elementAt(0).name; } @Override public void codegen(ClassFile classfile, Vector paralist) throws JVMCodeException { // TODO Auto-generated method stub } @Override public String toString() { return super.toString() + "=" + getWert().toString(); } public JavaCodeResult printJavaCode(ResultSet resultSet) { JavaCodeResult ret = new JavaCodeResult(); ret.attach(this.getType().printJavaCode(resultSet)).attach( " ").attach( this.getName()+" = ").attach(this.getWert().printJavaCode(resultSet) ).attach( ";"); return ret; } @Override public TypeAssumptions createTypeAssumptions(Class classmember) { ////////////////////////////// //Felder: ////////////////////////////// TypeAssumptions assumptions = new TypeAssumptions(); /* * TODO: Der Feld-Assumption muss ein TPH als Typ hinzugefügt werden, falls er Typlos initialisiert wurde. Dies kann auch der Type-Algorithmus der Inst/FieldVar - Klasse machen. * Wird das Feld mit einem Typ initialisiert so muss dieser auch in die Assumptions. */ if(this.getType() == null)this.setType(TypePlaceholder.fresh(this)); assumptions.add(TypeAssumptions.createFieldVarAssumption(classmember.getName(), this.getName(), this.getType())); return assumptions; } @Override public void parserPostProcessing(SyntaxTreeNode parent){ super.parserPostProcessing(parent); } @Override public Vector getChildren() { Vector ret = new Vector(); ret.add(this.wert); return ret; } @Override public void replaceType(CReplaceTypeEvent e) { // TODO Auto-generated method stub } @Override public int getTypeLineNumber() { // TODO Auto-generated method stub return 0; } }