// ino.module.Block.8625.package package mycompiler.mystatement; // ino.end // ino.module.Block.8625.import import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Vector; import mycompiler.mybytecode.ClassFile; import mycompiler.mybytecode.CodeAttribute; import mycompiler.myclass.Class; import mycompiler.myexception.CTypeReconstructionException; import mycompiler.myexception.JVMCodeException; import mycompiler.myexception.SCExcept; import mycompiler.myexception.SCStatementException; import mycompiler.mytype.GenericTypeVar; import mycompiler.mytype.Type; import mycompiler.mytype.TypePlaceholder; import mycompiler.mytype.Void; import mycompiler.mytypereconstruction.CSupportData; import mycompiler.mytypereconstruction.CTriple; import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent; import mycompiler.mytypereconstruction.set.CSubstitutionSet; import mycompiler.mytypereconstruction.set.CTripleSet; import mycompiler.mytypereconstruction.set.CTypeAssumptionSet; import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption; import org.apache.log4j.Logger; // ino.end import sun.reflect.generics.reflectiveObjects.NotImplementedException; import typinferenz.JavaCodeResult; import typinferenz.SingleConstraint; import typinferenz.ConstraintsSet; import typinferenz.FreshTypeVariable; import typinferenz.ResultSet; import typinferenz.TypinferenzException; import typinferenz.assumptions.TypeAssumptions; // ino.class.Block.25037.declaration public class Block extends Statement // ino.end // ino.class.Block.25037.body { // ino.method.Block.25041.definition public Block() // ino.end // ino.method.Block.25041.body { super(-1,-1); } // ino.end // ino.attribute.parserlog.25044.declaration protected static Logger parserlog = Logger.getLogger("parser"); // ino.end // ino.attribute.statements.25047.declaration public Vector statements = new Vector(); // ino.end // ino.attribute.HashTabelleKlasse.25050.declaration private Hashtable HashTabelleKlasse; // ino.end // ino.attribute.HashTabelleBlock.25053.declaration private Hashtable HashTabelleBlock; // ino.end // ino.attribute.block_para.25056.declaration private Hashtable block_para; // ino.end //private String sc_meth_ret_type; // ino.attribute.inferencelog.25059.decldescription type=javadoc /** * Logger: log4j */ // ino.end // ino.attribute.inferencelog.25059.declaration protected static Logger inferencelog = Logger.getLogger("inference"); // ino.end protected static Logger typinferenceLog = Logger.getLogger("Typeinference"); // ino.method.get_Statement.25065.definition public Vector get_Statement() // ino.end // ino.method.get_Statement.25065.body { return statements; } // ino.end // ino.method.set_Statement.25068.definition public void set_Statement(Statement s) // ino.end // ino.method.set_Statement.25068.body { statements.addElement(s); } // ino.end // ino.method.set_Statement_Vector.25071.definition public void set_Statement_Vector(Vector v) // ino.end // ino.method.set_Statement_Vector.25071.body { statements = v; } // ino.end // ino.method.codegen.25074.definition public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist) throws JVMCodeException // ino.end // ino.method.codegen.25074.body { for(int i = 0; i < statements.size(); i++) { statements.elementAt(i).codegen(classfile, code, paralist); } } // ino.end ///////////////////////////////////////////////////////////////////////// // TypeReconstructionAlgorithmus ///////////////////////////////////////////////////////////////////////// // ino.method.toString.25083.defdescription type=javadoc /** *
Author: Martin Pl�micke * @return */ // ino.end // ino.method.toString.25083.definition public String toString() // ino.end // ino.method.toString.25083.body { return this.type + " { " + statements.toString(); } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25086.defdescription type=javadoc /** * In allen lokalen Variablendeklarationen die "falschen" RefTypes ersetzen * @param paralist * @param genericMethodParameters */ // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25086.definition public void wandleRefTypeAttributes2GenericAttributes(Vector paralist, Vector genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.25086.body { if(statements==null) return; for(int i=0;i0){ Statement stmt = statements.elementAt(statements.size()-1); typinferenceLog.debug("Prozessing statement: "+stmt); this.setTypeVariable(stmt.getTypeVariable()); for(int i= statements.size()-2; i >= 0; i--) { stmt = statements.elementAt(i); typinferenceLog.debug("Prozessing statement: "+stmt); if (!(stmt.getTypeVariable() instanceof Void)) if (this.getTypeVariable() instanceof Void) { //this.setTypeVariable(stmt.getTypeVariable()); throw new TypinferenzException("Falscher Return Type"); } else { TypePlaceholder tph = TypePlaceholder.fresh(this); ret.add(new SingleConstraint(this.getTypeVariable(), tph)); ret.add(new SingleConstraint(stmt.getTypeVariable(), tph)); this.setTypeVariable(tph); } } if (this.type instanceof TypePlaceholder) { ((TypePlaceholder)this.type).addReplacementListener(this); } }else{ this.setType(new Void(0)); } return ret; } /* @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); if(this.getTypeVariable()==null)this.setTypeVariable(TypePlaceholder.fresh(this)); for(Statement stmt : statements){ typinferenceLog.debug("Prozessing statement: "+stmt); ret.add(stmt.TYPEStmt(assumptions)); if((stmt instanceof Return)){ ret.add(new Constraint(stmt.getTypeVariable(), this.getTypeVariable()));//TODO: Dies nochmal prüfen. } } return ret; } */ public void replaceType(CReplaceTypeEvent e) { super.replaceType(e); } @Override public String getTypeInformation(){ String ret = "\n"; for(Statement s : this.get_Statement()){ ret += s.getTypeInformation()+"\n"; } return ret; } public int getTypeLineNumber() { throw new NotImplementedException(); } public JavaCodeResult printJavaCode(ResultSet resultSet) { JavaCodeResult ret = new JavaCodeResult().attach("{\n"); for(Statement stmt : this.get_Statement()){ ret.attach(stmt.printJavaCode(resultSet)); ret.attach((stmt instanceof ExprStmt ? ";" : "") + "\n"); } return ret.attach("}"); } } // ino.end