001 /* This file was generated with JastAdd2 (http://jastadd.org) version R20130213 */ 002 package AST; 003 004 import java.util.HashSet; 005 import java.io.File; 006 import java.util.*; 007 import beaver.*; 008 import java.util.ArrayList; 009 import java.util.zip.*; 010 import java.io.*; 011 import java.io.FileNotFoundException; 012 import java.util.Collection; 013 /** 014 * @production PreIncExpr : {@link Unary}; 015 * @ast node 016 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:137 017 */ 018 public class PreIncExpr extends Unary implements Cloneable { 019 /** 020 * @apilevel low-level 021 */ 022 public void flushCache() { 023 } 024 /** 025 * @apilevel internal 026 */ 027 public void flushCollectionCache() { 028 } 029 /** 030 * @apilevel internal 031 */ 032 @SuppressWarnings({"unchecked", "cast"}) 033 public PreIncExpr clone() throws CloneNotSupportedException { 034 PreIncExpr node = (PreIncExpr)super.clone(); 035 node.in$Circle(false); 036 node.is$Final(false); 037 return node; 038 } 039 /** 040 * @apilevel internal 041 */ 042 @SuppressWarnings({"unchecked", "cast"}) 043 public PreIncExpr copy() { 044 045 try { 046 PreIncExpr node = (PreIncExpr) clone(); 047 node.parent = null; 048 if(children != null) 049 node.children = (ASTNode[]) children.clone(); 050 051 return node; 052 } catch (CloneNotSupportedException e) { 053 throw new Error("Error: clone not supported for " + getClass().getName()); 054 } 055 056 }/** 057 * Create a deep copy of the AST subtree at this node. 058 * The copy is dangling, i.e. has no parent. 059 * @return dangling copy of the subtree at this node 060 * @apilevel low-level 061 */ 062 @SuppressWarnings({"unchecked", "cast"}) 063 public PreIncExpr fullCopy() { 064 065 PreIncExpr tree = (PreIncExpr) copy(); 066 if (children != null) { 067 for (int i = 0; i < children.length; ++i) { 068 069 ASTNode child = (ASTNode) children[i]; 070 if(child != null) { 071 child = child.fullCopy(); 072 tree.setChild(child, i); 073 } 074 } 075 } 076 return tree; 077 078 } /** 079 * @ast method 080 * @aspect DefiniteAssignment 081 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:72 082 */ 083 public void definiteAssignment() { 084 if(getOperand().isVariable()) { 085 Variable v = getOperand().varDecl(); 086 if(v != null && v.isFinal()) { 087 error("++ and -- can not be applied to final variable " + v); 088 } 089 } 090 } 091 /** 092 * @ast method 093 * @aspect DA 094 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:477 095 */ 096 protected boolean checkDUeverywhere(Variable v) { 097 if(getOperand().isVariable() && getOperand().varDecl() == v) 098 if(!isDAbefore(v)) 099 return false; 100 return super.checkDUeverywhere(v); 101 } 102 /** 103 * @ast method 104 * @aspect TypeCheck 105 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:301 106 */ 107 public void typeCheck() { 108 if(!getOperand().isVariable()) 109 error("prefix increment expression only work on variables"); 110 else if(!getOperand().type().isNumericType()) 111 error("unary increment only operates on numeric types"); 112 } 113 /** 114 * @ast method 115 * @aspect CreateBCode 116 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:878 117 */ 118 public void createBCode(CodeGeneration gen) { emitPrefix(gen, 1); } 119 /** 120 * @ast method 121 * 122 */ 123 public PreIncExpr() { 124 super(); 125 126 127 } 128 /** 129 * Initializes the child array to the correct size. 130 * Initializes List and Opt nta children. 131 * @apilevel internal 132 * @ast method 133 * @ast method 134 * 135 */ 136 public void init$Children() { 137 children = new ASTNode[1]; 138 } 139 /** 140 * @ast method 141 * 142 */ 143 public PreIncExpr(Expr p0) { 144 setChild(p0, 0); 145 } 146 /** 147 * @apilevel low-level 148 * @ast method 149 * 150 */ 151 protected int numChildren() { 152 return 1; 153 } 154 /** 155 * @apilevel internal 156 * @ast method 157 * 158 */ 159 public boolean mayHaveRewrite() { 160 return false; 161 } 162 /** 163 * Replaces the Operand child. 164 * @param node The new node to replace the Operand child. 165 * @apilevel high-level 166 * @ast method 167 * 168 */ 169 public void setOperand(Expr node) { 170 setChild(node, 0); 171 } 172 /** 173 * Retrieves the Operand child. 174 * @return The current node used as the Operand child. 175 * @apilevel high-level 176 * @ast method 177 * 178 */ 179 public Expr getOperand() { 180 return (Expr)getChild(0); 181 } 182 /** 183 * Retrieves the Operand child. 184 * <p><em>This method does not invoke AST transformations.</em></p> 185 * @return The current node used as the Operand child. 186 * @apilevel low-level 187 * @ast method 188 * 189 */ 190 public Expr getOperandNoTransform() { 191 return (Expr)getChildNoTransform(0); 192 } 193 /** 194 * @attribute syn 195 * @aspect PrettyPrint 196 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:376 197 */ 198 public String printPreOp() { 199 ASTNode$State state = state(); 200 try { return "++"; } 201 finally { 202 } 203 } 204 /** 205 * @attribute syn 206 * @aspect CreateBCode 207 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:219 208 */ 209 public boolean needsPop() { 210 ASTNode$State state = state(); 211 try { return false; } 212 finally { 213 } 214 } 215 /** 216 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:46 217 * @apilevel internal 218 */ 219 public boolean Define_boolean_isDest(ASTNode caller, ASTNode child) { 220 if(caller == getOperandNoTransform()) { 221 return true; 222 } 223 else { return getParent().Define_boolean_isDest(this, caller); 224 } 225 } 226 /** 227 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:54 228 * @apilevel internal 229 */ 230 public boolean Define_boolean_isIncOrDec(ASTNode caller, ASTNode child) { 231 if(caller == getOperandNoTransform()) { 232 return true; 233 } 234 else { return getParent().Define_boolean_isIncOrDec(this, caller); 235 } 236 } 237 /** 238 * @apilevel internal 239 */ 240 public ASTNode rewriteTo() { 241 return super.rewriteTo(); 242 } 243 }