forstmt.java

来自「JDK1.4编译器后端」· Java 代码 · 共 954 行 · 第 1/3 页

JAVA
954
字号

package AST;
import java.util.HashSet;import java.util.LinkedHashSet;import java.io.FileNotFoundException;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;public class ForStmt extends BranchTargetStmt implements Cloneable, VariableScope {
    public void flushCache() {        super.flushCache();        targetOf_ContinueStmt_values = null;        targetOf_BreakStmt_values = null;        isDAafter_Variable_values = null;        isDUafter_Variable_values = null;        isDUbeforeCondition_Variable_visited = new java.util.HashMap(4);        localLookup_String_values = null;        localVariableDeclaration_String_values = null;        canCompleteNormally_computed = false;        variableScopeEndLabel_CodeGeneration_values = null;        cond_label_computed = false;        begin_label_computed = false;        update_label_computed = false;        end_label_computed = false;        lookupVariable_String_values = null;    }     @SuppressWarnings({"unchecked", "cast"})  public ForStmt clone() throws CloneNotSupportedException {        ForStmt node = (ForStmt)super.clone();        node.targetOf_ContinueStmt_values = null;        node.targetOf_BreakStmt_values = null;        node.isDAafter_Variable_values = null;        node.isDUafter_Variable_values = null;        node.isDUbeforeCondition_Variable_visited = new java.util.HashMap(4);        node.localLookup_String_values = null;        node.localVariableDeclaration_String_values = null;        node.canCompleteNormally_computed = false;        node.variableScopeEndLabel_CodeGeneration_values = null;        node.cond_label_computed = false;        node.begin_label_computed = false;        node.update_label_computed = false;        node.end_label_computed = false;        node.lookupVariable_String_values = null;        node.in$Circle(false);        node.is$Final(false);    return node;    }     @SuppressWarnings({"unchecked", "cast"})  public ForStmt copy() {      try {          ForStmt node = (ForStmt)clone();          if(children != null) node.children = (ASTNode[])children.clone();          return node;      } catch (CloneNotSupportedException e) {      }      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");      return null;    }     @SuppressWarnings({"unchecked", "cast"})  public ForStmt fullCopy() {        ForStmt res = (ForStmt)copy();        for(int i = 0; i < getNumChildNoTransform(); i++) {          ASTNode node = getChildNoTransform(i);          if(node != null) node = node.fullCopy();          res.setChild(node, i);        }        return res;    }    // Declared in PrettyPrint.jadd at line 615  public void toString(StringBuffer s) {    s.append("for(");    if(getNumInitStmt() > 0) {      if(getInitStmt(0) instanceof VariableDeclaration) {        int minDimension = Integer.MAX_VALUE;        for(int i = 0; i < getNumInitStmt(); i++) {          VariableDeclaration v = (VariableDeclaration)getInitStmt(i);          minDimension = Math.min(minDimension, v.type().dimension());        }        VariableDeclaration v = (VariableDeclaration)getInitStmt(0);        v.getModifiers().toString(s);        s.append(v.type().elementType().typeName());        for(int i = minDimension; i > 0; i--)          s.append("[]");        for(int i = 0; i < getNumInitStmt(); i++) {          if(i != 0)            s.append(",");          v = (VariableDeclaration)getInitStmt(i);          s.append(" " + v.name());          for(int j = v.type().dimension() - minDimension; j > 0; j--)            s.append("[]");          if(v.hasInit()) {            s.append(" = ");            v.getInit().toString(s);          }        }      }      else if(getInitStmt(0) instanceof ExprStmt) {        ExprStmt stmt = (ExprStmt)getInitStmt(0);        stmt.getExpr().toString(s);        for(int i = 1; i < getNumInitStmt(); i++) {          s.append(", ");          stmt = (ExprStmt)getInitStmt(i);          stmt.getExpr().toString(s);        }      }      else {        throw new Error("Unexpected initializer in for loop: " + getInitStmt(0));      }    }        s.append("; ");    if(hasCondition()) {      getCondition().toString(s);    }    s.append("; ");    if(getNumUpdateStmt() > 0) {      ExprStmt stmt = (ExprStmt)getUpdateStmt(0);      stmt.getExpr().toString(s);      for(int i = 1; i < getNumUpdateStmt(); i++) {        s.append(", ");        stmt = (ExprStmt)getUpdateStmt(i);        stmt.getExpr().toString(s);      }    }        s.append(") ");    getStmt().toString(s);  }    // Declared in TypeCheck.jrag at line 334  public void typeCheck() {    if(hasCondition()) {      TypeDecl cond = getCondition().type();      if(!cond.isBoolean()) {        error("the type of \"" + getCondition() + "\" is " + cond.name() + " which is not boolean");      }    }  }    // Declared in CreateBCode.jrag at line 1357  public void createBCode(CodeGeneration gen) {    super.createBCode(gen);    for (int i=0; i<getNumInitStmt(); i++) {      getInitStmt(i).createBCode(gen);    }    gen.addLabel(cond_label());    getCondition().emitEvalBranch(gen);    if(getCondition().canBeTrue()) {      gen.addLabel(begin_label());      getStmt().createBCode(gen);      gen.addLabel(update_label());	      for (int i=0; i<getNumUpdateStmt(); i++)        getUpdateStmt(i).createBCode(gen);      gen.emitGoto(cond_label());    }    if(canCompleteNormally()) {      gen.addLabel(end_label());    }    gen.addVariableScopeLabel(variableScopeEndLabel(gen));  }    // Declared in java.ast at line 3    // Declared in java.ast line 213
    public ForStmt() {        super();
        setChild(new List(), 0);
        setChild(new Opt(), 1);
        setChild(new List(), 2);

    }    // Declared in java.ast at line 13
    // Declared in java.ast line 213    public ForStmt(List<Stmt> p0, Opt<Expr> p1, List<Stmt> p2, Stmt p3) {        setChild(p0, 0);        setChild(p1, 1);        setChild(p2, 2);        setChild(p3, 3);    }    // Declared in java.ast at line 20  protected int numChildren() {
    return 4;
  }    // Declared in java.ast at line 23
  public boolean mayHaveRewrite() { return true; }    // Declared in java.ast at line 2    // Declared in java.ast line 213    public void setInitStmtList(List<Stmt> list) {        setChild(list, 0);    }    // Declared in java.ast at line 6    private int getNumInitStmt = 0;    // Declared in java.ast at line 7    public int getNumInitStmt() {        return getInitStmtList().getNumChild();    }    // Declared in java.ast at line 11     @SuppressWarnings({"unchecked", "cast"})  public Stmt getInitStmt(int i) {        return (Stmt)getInitStmtList().getChild(i);    }    // Declared in java.ast at line 15    public void addInitStmt(Stmt node) {        List<Stmt> list = getInitStmtList();        list.addChild(node);    }    // Declared in java.ast at line 20    public void setInitStmt(Stmt node, int i) {        List<Stmt> list = getInitStmtList();        list.setChild(node, i);    }    // Declared in java.ast at line 24    public List<Stmt> getInitStmts() {        return getInitStmtList();    }    // Declared in java.ast at line 27    public List<Stmt> getInitStmtsNoTransform() {        return getInitStmtListNoTransform();    }    // Declared in java.ast at line 31     @SuppressWarnings({"unchecked", "cast"})  public List<Stmt> getInitStmtList() {        return (List<Stmt>)getChild(0);    }    // Declared in java.ast at line 35     @SuppressWarnings({"unchecked", "cast"})  public List<Stmt> getInitStmtListNoTransform() {        return (List<Stmt>)getChildNoTransform(0);    }    // Declared in java.ast at line 2    // Declared in java.ast line 213    public void setConditionOpt(Opt<Expr> opt) {        setChild(opt, 1);    }    // Declared in java.ast at line 6    public boolean hasCondition() {        return getConditionOpt().getNumChild() != 0;    }    // Declared in java.ast at line 10     @SuppressWarnings({"unchecked", "cast"})  public Expr getCondition() {        return (Expr)getConditionOpt().getChild(0);    }    // Declared in java.ast at line 14    public void setCondition(Expr node) {        getConditionOpt().setChild(node, 0);    }    // Declared in java.ast at line 17     @SuppressWarnings({"unchecked", "cast"})  public Opt<Expr> getConditionOpt() {        return (Opt<Expr>)getChild(1);    }    // Declared in java.ast at line 21     @SuppressWarnings({"unchecked", "cast"})  public Opt<Expr> getConditionOptNoTransform() {        return (Opt<Expr>)getChildNoTransform(1);    }    // Declared in java.ast at line 2    // Declared in java.ast line 213    public void setUpdateStmtList(List<Stmt> list) {        setChild(list, 2);    }    // Declared in java.ast at line 6    private int getNumUpdateStmt = 0;    // Declared in java.ast at line 7    public int getNumUpdateStmt() {        return getUpdateStmtList().getNumChild();    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?