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    }