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 PostfixExpr : {@link Unary}; 015 * @ast node 016 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:146 017 */ 018 public abstract class PostfixExpr 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 PostfixExpr clone() throws CloneNotSupportedException { 034 PostfixExpr node = (PostfixExpr)super.clone(); 035 node.in$Circle(false); 036 node.is$Final(false); 037 return node; 038 } 039 /** 040 * @ast method 041 * @aspect DefiniteAssignment 042 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:63 043 */ 044 public void definiteAssignment() { 045 if(getOperand().isVariable()) { 046 Variable v = getOperand().varDecl(); 047 if(v != null && v.isFinal()) { 048 error("++ and -- can not be applied to final variable " + v); 049 } 050 } 051 } 052 /** 053 * @ast method 054 * @aspect DA 055 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:471 056 */ 057 protected boolean checkDUeverywhere(Variable v) { 058 if(getOperand().isVariable() && getOperand().varDecl() == v) 059 if(!isDAbefore(v)) 060 return false; 061 return super.checkDUeverywhere(v); 062 } 063 /** 064 * @ast method 065 * @aspect TypeCheck 066 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:293 067 */ 068 public void typeCheck() { 069 if(!getOperand().isVariable()) 070 error("postfix expressions only work on variables"); 071 else if(!getOperand().type().isNumericType()) 072 error("postfix expressions only operates on numeric types"); 073 } 074 /** 075 * @ast method 076 * 077 */ 078 public PostfixExpr() { 079 super(); 080 081 082 } 083 /** 084 * Initializes the child array to the correct size. 085 * Initializes List and Opt nta children. 086 * @apilevel internal 087 * @ast method 088 * @ast method 089 * 090 */ 091 public void init$Children() { 092 children = new ASTNode[1]; 093 } 094 /** 095 * @ast method 096 * 097 */ 098 public PostfixExpr(Expr p0) { 099 setChild(p0, 0); 100 } 101 /** 102 * @apilevel low-level 103 * @ast method 104 * 105 */ 106 protected int numChildren() { 107 return 1; 108 } 109 /** 110 * @apilevel internal 111 * @ast method 112 * 113 */ 114 public boolean mayHaveRewrite() { 115 return false; 116 } 117 /** 118 * Replaces the Operand child. 119 * @param node The new node to replace the Operand child. 120 * @apilevel high-level 121 * @ast method 122 * 123 */ 124 public void setOperand(Expr node) { 125 setChild(node, 0); 126 } 127 /** 128 * Retrieves the Operand child. 129 * @return The current node used as the Operand child. 130 * @apilevel high-level 131 * @ast method 132 * 133 */ 134 public Expr getOperand() { 135 return (Expr)getChild(0); 136 } 137 /** 138 * Retrieves the Operand child. 139 * <p><em>This method does not invoke AST transformations.</em></p> 140 * @return The current node used as the Operand child. 141 * @apilevel low-level 142 * @ast method 143 * 144 */ 145 public Expr getOperandNoTransform() { 146 return (Expr)getChildNoTransform(0); 147 } 148 /** 149 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:45 150 * @apilevel internal 151 */ 152 public boolean Define_boolean_isDest(ASTNode caller, ASTNode child) { 153 if(caller == getOperandNoTransform()) { 154 return true; 155 } 156 else { return getParent().Define_boolean_isDest(this, caller); 157 } 158 } 159 /** 160 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:53 161 * @apilevel internal 162 */ 163 public boolean Define_boolean_isIncOrDec(ASTNode caller, ASTNode child) { 164 if(caller == getOperandNoTransform()) { 165 return true; 166 } 167 else { return getParent().Define_boolean_isIncOrDec(this, caller); 168 } 169 } 170 /** 171 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:98 172 * @apilevel internal 173 */ 174 public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) { 175 if(caller == getOperandNoTransform()) { 176 return NameType.EXPRESSION_NAME; 177 } 178 else { return getParent().Define_NameType_nameType(this, caller); 179 } 180 } 181 /** 182 * @apilevel internal 183 */ 184 public ASTNode rewriteTo() { 185 return super.rewriteTo(); 186 } 187 }