// ino.module.WhileStmt.8659.package package de.dhbwstuttgart.syntaxtree.statement; // ino.end // ino.module.WhileStmt.8659.import import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import org.apache.bcel.generic.BranchInstruction; import org.apache.bcel.generic.ClassGen; import org.apache.bcel.generic.DUP; import org.apache.bcel.generic.GOTO; import org.apache.bcel.generic.IFEQ; import org.apache.bcel.generic.InstructionList; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.bytecode.ClassGenerator; import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; import de.dhbwstuttgart.syntaxtree.operator.LogOp; import de.dhbwstuttgart.syntaxtree.operator.Operator; import de.dhbwstuttgart.syntaxtree.operator.RelOp; import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; import de.dhbwstuttgart.syntaxtree.type.RefType; import de.dhbwstuttgart.syntaxtree.type.Type; import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.JavaCodeResult; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.UndConstraint; import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; import de.dhbwstuttgart.typeinference.exceptions.NotImplementedException; import de.dhbwstuttgart.typeinference.unify.TypeUnify; // ino.class.WhileStmt.26326.declaration public class WhileStmt extends Statement // ino.end // ino.class.WhileStmt.26326.body { // ino.method.WhileStmt.26330.definition public WhileStmt(int offset, int variableLength) // ino.end // ino.method.WhileStmt.26330.body { super(offset,variableLength); } // ino.end // ino.attribute.expr.26333.declaration public Expr expr; // ino.end // ino.attribute.loop_block.26336.declaration public Statement loop_block; // ino.end // ino.attribute.parserlog.26339.declaration protected static Logger parserlog = Logger.getLogger("parser"); // ino.end // ino.method.set_Expr.26342.definition public void set_Expr(Expr exp) // ino.end // ino.method.set_Expr.26342.body { this.expr = exp; } // ino.end // ino.method.set_Loop_block.26345.definition public void set_Loop_block(Statement blk) // ino.end // ino.method.set_Loop_block.26345.body { this.loop_block = blk; } // ino.end // ino.method.toString.26360.defdescription type=javadoc /** *
Author: Martin Pl�micke * @return */ // ino.end // ino.method.toString.26360.definition public String toString() // ino.end // ino.method.toString.26360.body { return "WHILE " + loop_block.toString(); } // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26363.definition public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) // ino.end // ino.method.wandleRefTypeAttributes2GenericAttributes.26363.body { if(loop_block!=null){ loop_block.wandleRefTypeAttributes2GenericAttributes(paralist,genericMethodParameters); } } // ino.end @Override public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) { ConstraintsSet ret = new ConstraintsSet(); ret.add(expr.TYPEExpr(assumptions)); UndConstraint exprMustBeBool = ConstraintsSet.createSingleConstraint(expr.getType().TYPE(assumptions, this), new RefType("Boolean",this, 0).TYPE(assumptions, this)); // while(expr){}; expr <. boolean ret.add(exprMustBeBool); ret.add(this.loop_block.TYPEStmt(assumptions)); this.setType(loop_block.getType()); return ret; } public int getTypeLineNumber() { throw new NotImplementedException(); } @Override public JavaCodeResult printJavaCode(ResultSet resultSet) { return new JavaCodeResult().attach("while(").attach(this.expr.printJavaCode(resultSet)).attach(")").attach(this.loop_block.printJavaCode(resultSet)); } @Override public Menge getChildren() { Menge ret = new Menge(); ret.add(this.expr); ret.add(this.loop_block); return ret; } @Override public InstructionList genByteCode(ClassGenerator _cg, TypeinferenceResultSet rs) { //TOD: while Statement InstructionList il = expr.genByteCode(_cg, rs); BranchInstruction ifeq = new IFEQ(null); il.append(ifeq); il.append(loop_block.genByteCode(_cg, rs)); il.append(new GOTO(il.getStart())); ifeq.setTarget(il.append(new DUP())); return il; } } // ino.end