forstmt.java
来自「JDK1.4编译器前端」· Java 代码 · 共 874 行 · 第 1/3 页
JAVA
874 行
return ((Boolean)isDUbeforeCondition_Variable_values.get(_parameters)).booleanValue(); } private boolean isDUbeforeCondition_compute(Variable v) { if(!isDUafterInit(v)) return false; else if(!isDUafterUpdate(v)) return false; return true; } protected java.util.Map isDUafterUpdate_Variable_visited; // Declared in DefiniteAssignment.jrag at line 1133 @SuppressWarnings({"unchecked", "cast"}) public boolean isDUafterUpdate(Variable v) { Object _parameters = v;if(isDUafterUpdate_Variable_visited == null) isDUafterUpdate_Variable_visited = new java.util.HashMap(4); if(new Integer(boundariesCrossed).equals(isDUafterUpdate_Variable_visited.get(_parameters))) throw new RuntimeException("Circular definition of attr: isDUafterUpdate in class: "); isDUafterUpdate_Variable_visited.put(_parameters, new Integer(boundariesCrossed)); boolean isDUafterUpdate_Variable_value = isDUafterUpdate_compute(v); isDUafterUpdate_Variable_visited.remove(_parameters); return isDUafterUpdate_Variable_value; } private boolean isDUafterUpdate_compute(Variable v) { if(!isDUbeforeCondition(v)) // start a circular evaluation here return false; if(getNumUpdateStmt() > 0) return getUpdateStmt(getNumUpdateStmt()-1).isDUafter(v); if(!getStmt().isDUafter(v)) return false; for(Iterator iter = targetContinues().iterator(); iter.hasNext(); ) { ContinueStmt stmt = (ContinueStmt)iter.next(); if(!stmt.isDUafterReachedFinallyBlocks(v)) return false; } return true; } protected java.util.Map localLookup_String_visited; protected java.util.Map localLookup_String_values; // Declared in LookupVariable.jrag at line 91 @SuppressWarnings({"unchecked", "cast"}) public SimpleSet localLookup(String name) { Object _parameters = name;if(localLookup_String_visited == null) localLookup_String_visited = new java.util.HashMap(4);if(localLookup_String_values == null) localLookup_String_values = new java.util.HashMap(4); if(localLookup_String_values.containsKey(_parameters)) return (SimpleSet)localLookup_String_values.get(_parameters); if(new Integer(boundariesCrossed).equals(localLookup_String_visited.get(_parameters))) throw new RuntimeException("Circular definition of attr: localLookup in class: "); localLookup_String_visited.put(_parameters, new Integer(boundariesCrossed)); int num = boundariesCrossed; boolean isFinal = this.is$Final(); SimpleSet localLookup_String_value = localLookup_compute(name); if(isFinal && num == boundariesCrossed) localLookup_String_values.put(_parameters, localLookup_String_value); localLookup_String_visited.remove(_parameters); return localLookup_String_value; } private SimpleSet localLookup_compute(String name) { VariableDeclaration v = localVariableDeclaration(name); if(v != null) return v; return lookupVariable(name); } protected java.util.Map localVariableDeclaration_String_visited; protected java.util.Map localVariableDeclaration_String_values; // Declared in LookupVariable.jrag at line 121 @SuppressWarnings({"unchecked", "cast"}) public VariableDeclaration localVariableDeclaration(String name) { Object _parameters = name;if(localVariableDeclaration_String_visited == null) localVariableDeclaration_String_visited = new java.util.HashMap(4);if(localVariableDeclaration_String_values == null) localVariableDeclaration_String_values = new java.util.HashMap(4); if(localVariableDeclaration_String_values.containsKey(_parameters)) return (VariableDeclaration)localVariableDeclaration_String_values.get(_parameters); if(new Integer(boundariesCrossed).equals(localVariableDeclaration_String_visited.get(_parameters))) throw new RuntimeException("Circular definition of attr: localVariableDeclaration in class: "); localVariableDeclaration_String_visited.put(_parameters, new Integer(boundariesCrossed)); int num = boundariesCrossed; boolean isFinal = this.is$Final(); VariableDeclaration localVariableDeclaration_String_value = localVariableDeclaration_compute(name); if(isFinal && num == boundariesCrossed) localVariableDeclaration_String_values.put(_parameters, localVariableDeclaration_String_value); localVariableDeclaration_String_visited.remove(_parameters); return localVariableDeclaration_String_value; } private VariableDeclaration localVariableDeclaration_compute(String name) { for(int i = 0; i < getNumInitStmt(); i++) if(getInitStmt(i).declaresVariable(name)) return (VariableDeclaration)getInitStmt(i); return null; } protected int continueLabel_visited = -1; // Declared in NameCheck.jrag at line 397 @SuppressWarnings({"unchecked", "cast"}) public boolean continueLabel() { if(continueLabel_visited == boundariesCrossed) throw new RuntimeException("Circular definition of attr: continueLabel in class: "); continueLabel_visited = boundariesCrossed; boolean continueLabel_value = continueLabel_compute(); continueLabel_visited = -1; return continueLabel_value; } private boolean continueLabel_compute() { return true; } protected int canCompleteNormally_visited = -1; // Declared in UnreachableStatements.jrag at line 102 @SuppressWarnings({"unchecked", "cast"}) public boolean canCompleteNormally() { if(canCompleteNormally_computed) return canCompleteNormally_value; if(canCompleteNormally_visited == boundariesCrossed) throw new RuntimeException("Circular definition of attr: canCompleteNormally in class: "); canCompleteNormally_visited = boundariesCrossed; int num = boundariesCrossed; boolean isFinal = this.is$Final(); canCompleteNormally_value = canCompleteNormally_compute(); if(isFinal && num == boundariesCrossed) canCompleteNormally_computed = true; canCompleteNormally_visited = -1; return canCompleteNormally_value; } private boolean canCompleteNormally_compute() { return reachable() && hasCondition() && (!getCondition().isConstant() || !getCondition().isTrue()) || reachableBreak(); } protected java.util.Map lookupVariable_String_visited; protected java.util.Map lookupVariable_String_values; // Declared in LookupVariable.jrag at line 18 @SuppressWarnings({"unchecked", "cast"}) public SimpleSet lookupVariable(String name) { Object _parameters = name;if(lookupVariable_String_visited == null) lookupVariable_String_visited = new java.util.HashMap(4);if(lookupVariable_String_values == null) lookupVariable_String_values = new java.util.HashMap(4); if(lookupVariable_String_values.containsKey(_parameters)) return (SimpleSet)lookupVariable_String_values.get(_parameters); if(new Integer(boundariesCrossed).equals(lookupVariable_String_visited.get(_parameters))) throw new RuntimeException("Circular definition of attr: lookupVariable in class: "); lookupVariable_String_visited.put(_parameters, new Integer(boundariesCrossed)); int num = boundariesCrossed; boolean isFinal = this.is$Final(); if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); SimpleSet lookupVariable_String_value = getParent().Define_SimpleSet_lookupVariable(this, null, name); if(isFinal && num == boundariesCrossed) lookupVariable_String_values.put(_parameters, lookupVariable_String_value); lookupVariable_String_visited.remove(_parameters); return lookupVariable_String_value; } // Declared in NameCheck.jrag at line 365 public boolean Define_boolean_insideLoop(ASTNode caller, ASTNode child) { if(caller == getStmtNoTransform()) { return true; } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_boolean_insideLoop(this, caller); } // Declared in LookupVariable.jrag at line 90 public SimpleSet Define_SimpleSet_lookupVariable(ASTNode caller, ASTNode child, String name) { if(caller == getStmtNoTransform()) { return localLookup(name); } if(caller == getUpdateStmtListNoTransform()) { int childIndex = caller.getIndexOfChild(child); return localLookup(name); } if(caller == getConditionOptNoTransform()) { return localLookup(name); } if(caller == getInitStmtListNoTransform()) { int childIndex = caller.getIndexOfChild(child); return localLookup(name); } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_SimpleSet_lookupVariable(this, caller, name); } // Declared in UnreachableStatements.jrag at line 149 public boolean Define_boolean_reportUnreachable(ASTNode caller, ASTNode child) { if(caller == getStmtNoTransform()) { return reachable(); } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_boolean_reportUnreachable(this, caller); } // Declared in UnreachableStatements.jrag at line 103 public boolean Define_boolean_reachable(ASTNode caller, ASTNode child) { if(caller == getStmtNoTransform()) { return reachable() && (!hasCondition() || (!getCondition().isConstant() || !getCondition().isFalse())); } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_boolean_reachable(this, caller); } // Declared in NameCheck.jrag at line 294 public VariableScope Define_VariableScope_outerScope(ASTNode caller, ASTNode child) { if(caller == getStmtNoTransform()) { return this; } if(caller == getInitStmtListNoTransform()) { int childIndex = caller.getIndexOfChild(child); return this; } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_VariableScope_outerScope(this, caller); } // Declared in DefiniteAssignment.jrag at line 637 public boolean Define_boolean_isDAbefore(ASTNode caller, ASTNode child, Variable v) { if(caller == getUpdateStmtListNoTransform()) { int childIndex = caller.getIndexOfChild(child);{ if(!getStmt().isDAafter(v)) return false; for(Iterator iter = targetContinues().iterator(); iter.hasNext(); ) { ContinueStmt stmt = (ContinueStmt)iter.next(); if(!stmt.isDAafterReachedFinallyBlocks(v)) return false; } return true; }} if(caller == getStmtNoTransform()){ if(hasCondition() && getCondition().isDAafterTrue(v)) return true; if(!hasCondition() && isDAafterInitialization(v)) return true; return false; } if(caller == getConditionOptNoTransform()) { return isDAafterInitialization(v); } if(caller == getInitStmtListNoTransform()) { int i = caller.getIndexOfChild(child); return i == 0 ? isDAbefore(v) : getInitStmt(i-1).isDAafter(v); } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_boolean_isDAbefore(this, caller, v); } // Declared in DefiniteAssignment.jrag at line 1149 public boolean Define_boolean_isDUbefore(ASTNode caller, ASTNode child, Variable v) { if(caller == getUpdateStmtListNoTransform()) { int i = caller.getIndexOfChild(child);{ if(!isDUbeforeCondition(v)) // start a circular evaluation here return false; if(i == 0) { if(!getStmt().isDUafter(v)) return false; for(Iterator iter = targetContinues().iterator(); iter.hasNext(); ) { ContinueStmt stmt = (ContinueStmt)iter.next(); if(!stmt.isDUafterReachedFinallyBlocks(v)) return false; } return true; } else return getUpdateStmt(i-1).isDUafter(v); }} if(caller == getStmtNoTransform()) { return isDUbeforeCondition(v) && (hasCondition() ? getCondition().isDUafterTrue(v) : isDUafterInit(v)); } if(caller == getConditionOptNoTransform()) { return isDUbeforeCondition(v); } if(caller == getInitStmtListNoTransform()) { int childIndex = caller.getIndexOfChild(child); return childIndex == 0 ? isDUbefore(v) : getInitStmt(childIndex-1).isDUafter(v); } if(getParent() == null) throw new RuntimeException("Trying to evaluate attribute in subtree not attached to main tree"); return getParent().Define_boolean_isDUbefore(this, caller, v); }public ASTNode rewriteTo() { // Declared in DefiniteAssignment.jrag at line 1167 if(!hasCondition()) { duringDefiniteAssignment++; ASTNode result = rewriteRule0(); duringDefiniteAssignment--; return result; } return super.rewriteTo();} // Declared in DefiniteAssignment.jrag at line 1167 private ForStmt rewriteRule0() { debugRewrite("Rewriting " + getClass().getName() + " using rule in DefiniteAssignment.jrag at line 1167");{ setCondition(new BooleanLiteral("true")); return this; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?