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    /**
015     * @production Stmt : {@link ASTNode};
016     * @ast node
017     * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:195
018     */
019    public abstract class Stmt extends ASTNode<ASTNode> implements Cloneable {
020      /**
021       * @apilevel low-level
022       */
023      public void flushCache() {
024      }
025      /**
026       * @apilevel internal
027       */
028      public void flushCollectionCache() {
029      }
030      /**
031       * @apilevel internal
032       */
033      @SuppressWarnings({"unchecked", "cast"})
034      public Stmt clone() throws CloneNotSupportedException {
035        Stmt node = (Stmt)super.clone();
036        node.isDAafter_Variable_values = null;
037        node.isDUafter_Variable_values = null;
038        node.canCompleteNormally_computed = false;
039        node.localNum_computed = false;
040        node.in$Circle(false);
041        node.is$Final(false);
042        return node;
043      }
044      /**
045       * @ast method 
046       * @aspect UnreachableStatements
047       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/UnreachableStatements.jrag:14
048       */
049      void checkUnreachableStmt() {
050        if(!reachable() && reportUnreachable())
051          error("statement is unreachable");
052      }
053      /**
054       * @ast method 
055       * @aspect CreateBCode
056       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1174
057       */
058      public void createBCode(CodeGeneration gen) {
059        gen.addLineNumberEntryAtCurrentPC(this);
060      }
061      /**
062       * @ast method 
063       * 
064       */
065      public Stmt() {
066        super();
067    
068    
069      }
070      /**
071       * Initializes the child array to the correct size.
072       * Initializes List and Opt nta children.
073       * @apilevel internal
074       * @ast method
075       * @ast method 
076       * 
077       */
078      public void init$Children() {
079      }
080      /**
081       * @apilevel low-level
082       * @ast method 
083       * 
084       */
085      protected int numChildren() {
086        return 0;
087      }
088      /**
089       * @apilevel internal
090       * @ast method 
091       * 
092       */
093      public boolean mayHaveRewrite() {
094        return false;
095      }
096      /**
097       * @attribute syn
098       * @aspect PreciseRethrow
099       * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:55
100       */
101      @SuppressWarnings({"unchecked", "cast"})
102      public abstract boolean modifiedInScope(Variable var);
103      protected java.util.Map isDAafter_Variable_values;
104      /**
105       * @attribute syn
106       * @aspect DA
107       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:325
108       */
109      @SuppressWarnings({"unchecked", "cast"})
110      public boolean isDAafter(Variable v) {
111        Object _parameters = v;
112        if(isDAafter_Variable_values == null) isDAafter_Variable_values = new java.util.HashMap(4);
113        if(isDAafter_Variable_values.containsKey(_parameters)) {
114          return ((Boolean)isDAafter_Variable_values.get(_parameters)).booleanValue();
115        }
116          ASTNode$State state = state();
117      int num = state.boundariesCrossed;
118      boolean isFinal = this.is$Final();
119        boolean isDAafter_Variable_value = isDAafter_compute(v);
120      if(isFinal && num == state().boundariesCrossed){ isDAafter_Variable_values.put(_parameters, Boolean.valueOf(isDAafter_Variable_value)); }
121            return isDAafter_Variable_value;
122      }
123      /**
124       * @apilevel internal
125       */
126      private boolean isDAafter_compute(Variable v) {  return isDAbefore(v);  }
127      protected java.util.Map isDUafter_Variable_values;
128      /**
129       * @attribute syn
130       * @aspect DU
131       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:777
132       */
133      @SuppressWarnings({"unchecked", "cast"})
134      public boolean isDUafter(Variable v) {
135        Object _parameters = v;
136        if(isDUafter_Variable_values == null) isDUafter_Variable_values = new java.util.HashMap(4);
137        if(isDUafter_Variable_values.containsKey(_parameters)) {
138          return ((Boolean)isDUafter_Variable_values.get(_parameters)).booleanValue();
139        }
140          ASTNode$State state = state();
141      int num = state.boundariesCrossed;
142      boolean isFinal = this.is$Final();
143        boolean isDUafter_Variable_value = isDUafter_compute(v);
144      if(isFinal && num == state().boundariesCrossed){ isDUafter_Variable_values.put(_parameters, Boolean.valueOf(isDUafter_Variable_value)); }
145            return isDUafter_Variable_value;
146      }
147      /**
148       * @apilevel internal
149       */
150      private boolean isDUafter_compute(Variable v) {
151        throw new Error("isDUafter in " + getClass().getName());
152      }
153      /**
154       * @attribute syn
155       * @aspect VariableScope
156       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:129
157       */
158      public boolean declaresVariable(String name) {
159        ASTNode$State state = state();
160        try {  return false;  }
161        finally {
162        }
163      }
164      /**
165       * @attribute syn
166       * @aspect NameCheck
167       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:401
168       */
169      public boolean continueLabel() {
170        ASTNode$State state = state();
171        try {  return false;  }
172        finally {
173        }
174      }
175      /**
176       * @attribute syn
177       * @aspect PrettyPrint
178       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:758
179       */
180      public boolean addsIndentationLevel() {
181        ASTNode$State state = state();
182        try {  return true;  }
183        finally {
184        }
185      }
186      /**
187       * @apilevel internal
188       */
189      protected boolean canCompleteNormally_computed = false;
190      /**
191       * @apilevel internal
192       */
193      protected boolean canCompleteNormally_value;
194      /**
195       * @attribute syn
196       * @aspect UnreachableStatements
197       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/UnreachableStatements.jrag:29
198       */
199      @SuppressWarnings({"unchecked", "cast"})
200      public boolean canCompleteNormally() {
201        if(canCompleteNormally_computed) {
202          return canCompleteNormally_value;
203        }
204          ASTNode$State state = state();
205      int num = state.boundariesCrossed;
206      boolean isFinal = this.is$Final();
207        canCompleteNormally_value = canCompleteNormally_compute();
208      if(isFinal && num == state().boundariesCrossed){ canCompleteNormally_computed = true; }
209            return canCompleteNormally_value;
210      }
211      /**
212       * @apilevel internal
213       */
214      private boolean canCompleteNormally_compute() {  return true;  }
215      /**
216       * @attribute syn
217       * @aspect CreateBCode
218       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1398
219       */
220      public int break_label() {
221        ASTNode$State state = state();
222        try {
223        throw new UnsupportedOperationException("Can not break at this statement of type " + getClass().getName());
224      }
225        finally {
226        }
227      }
228      /**
229       * @attribute syn
230       * @aspect CreateBCode
231       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:1417
232       */
233      public int continue_label() {
234        ASTNode$State state = state();
235        try {
236        throw new UnsupportedOperationException("Can not continue at this statement");
237      }
238        finally {
239        }
240      }
241      /**
242       * @attribute inh
243       * @aspect DA
244       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:232
245       */
246      @SuppressWarnings({"unchecked", "cast"})
247      public boolean isDAbefore(Variable v) {
248          ASTNode$State state = state();
249        boolean isDAbefore_Variable_value = getParent().Define_boolean_isDAbefore(this, null, v);
250            return isDAbefore_Variable_value;
251      }
252      /**
253       * @attribute inh
254       * @aspect DU
255       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:691
256       */
257      @SuppressWarnings({"unchecked", "cast"})
258      public boolean isDUbefore(Variable v) {
259          ASTNode$State state = state();
260        boolean isDUbefore_Variable_value = getParent().Define_boolean_isDUbefore(this, null, v);
261            return isDUbefore_Variable_value;
262      }
263      /**
264       * @attribute inh
265       * @aspect LookupMethod
266       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:24
267       */
268      @SuppressWarnings({"unchecked", "cast"})
269      public Collection lookupMethod(String name) {
270          ASTNode$State state = state();
271        Collection lookupMethod_String_value = getParent().Define_Collection_lookupMethod(this, null, name);
272            return lookupMethod_String_value;
273      }
274      /**
275       * @attribute inh
276       * @aspect LookupFullyQualifiedTypes
277       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:96
278       */
279      @SuppressWarnings({"unchecked", "cast"})
280      public TypeDecl lookupType(String packageName, String typeName) {
281          ASTNode$State state = state();
282        TypeDecl lookupType_String_String_value = getParent().Define_TypeDecl_lookupType(this, null, packageName, typeName);
283            return lookupType_String_String_value;
284      }
285      /**
286       * @attribute inh
287       * @aspect TypeScopePropagation
288       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupType.jrag:262
289       */
290      @SuppressWarnings({"unchecked", "cast"})
291      public SimpleSet lookupType(String name) {
292          ASTNode$State state = state();
293        SimpleSet lookupType_String_value = getParent().Define_SimpleSet_lookupType(this, null, name);
294            return lookupType_String_value;
295      }
296      /**
297       * @attribute inh
298       * @aspect VariableScope
299       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:16
300       */
301      @SuppressWarnings({"unchecked", "cast"})
302      public SimpleSet lookupVariable(String name) {
303          ASTNode$State state = state();
304        SimpleSet lookupVariable_String_value = getParent().Define_SimpleSet_lookupVariable(this, null, name);
305            return lookupVariable_String_value;
306      }
307      /**
308       * @attribute inh
309       * @aspect NestedTypes
310       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:511
311       */
312      @SuppressWarnings({"unchecked", "cast"})
313      public BodyDecl enclosingBodyDecl() {
314          ASTNode$State state = state();
315        BodyDecl enclosingBodyDecl_value = getParent().Define_BodyDecl_enclosingBodyDecl(this, null);
316            return enclosingBodyDecl_value;
317      }
318      /**
319       * @attribute inh
320       * @aspect NestedTypes
321       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:587
322       */
323      @SuppressWarnings({"unchecked", "cast"})
324      public TypeDecl hostType() {
325          ASTNode$State state = state();
326        TypeDecl hostType_value = getParent().Define_TypeDecl_hostType(this, null);
327            return hostType_value;
328      }
329      /**
330       * @attribute inh
331       * @aspect UnreachableStatements
332       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/UnreachableStatements.jrag:27
333       */
334      @SuppressWarnings({"unchecked", "cast"})
335      public boolean reachable() {
336          ASTNode$State state = state();
337        boolean reachable_value = getParent().Define_boolean_reachable(this, null);
338            return reachable_value;
339      }
340      /**
341       * @attribute inh
342       * @aspect UnreachableStatements
343       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/UnreachableStatements.jrag:147
344       */
345      @SuppressWarnings({"unchecked", "cast"})
346      public boolean reportUnreachable() {
347          ASTNode$State state = state();
348        boolean reportUnreachable_value = getParent().Define_boolean_reportUnreachable(this, null);
349            return reportUnreachable_value;
350      }
351      /**
352       * @apilevel internal
353       */
354      protected boolean localNum_computed = false;
355      /**
356       * @apilevel internal
357       */
358      protected int localNum_value;
359      /**
360       * @attribute inh
361       * @aspect LocalNum
362       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:12
363       */
364      @SuppressWarnings({"unchecked", "cast"})
365      public int localNum() {
366        if(localNum_computed) {
367          return localNum_value;
368        }
369          ASTNode$State state = state();
370      int num = state.boundariesCrossed;
371      boolean isFinal = this.is$Final();
372        localNum_value = getParent().Define_int_localNum(this, null);
373      if(isFinal && num == state().boundariesCrossed){ localNum_computed = true; }
374            return localNum_value;
375      }
376      /**
377       * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:352
378       * @apilevel internal
379       */
380      public String Define_String_typeDeclIndent(ASTNode caller, ASTNode child) {
381         {
382          int childIndex = this.getIndexOfChild(caller);
383          return indent();
384        }
385      }
386      /**
387       * @apilevel internal
388       */
389      public ASTNode rewriteTo() {
390        return super.rewriteTo();
391      }
392    }