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    }