001    /* This file was generated with JastAdd2 (http://jastadd.org) version 2.1.3 */
002    package AST;
003    
004    import java.util.Collection;
005    import java.util.ArrayList;
006    import java.util.HashSet;
007    /**
008     * @ast node
009     * @declaredat /home/csz-naf/examples/PicoJava/spec/picojava.ast:4
010     * @production BlockStmt : {@link ASTNode};
011    
012     */
013    public abstract class BlockStmt extends ASTNode<ASTNode> implements Cloneable {
014      /**
015       * @apilevel internal
016       */
017      public BlockStmt clone() throws CloneNotSupportedException {
018        BlockStmt node = (BlockStmt) super.clone();
019        node.declarationOf_String_visited = null;
020        node.endsWithReturn_visited = -1;
021        node.declarationOf_String_List_visited = null;
022        node.declarationOf_String_List_values = null;
023        node.in$Circle(false);
024        node.is$Final(false);
025        return node;
026      }
027      /**
028       * @aspect PrettyPrint
029       * @declaredat /home/csz-naf/examples/PicoJava/spec/PrettyPrint.jadd:39
030       */
031      abstract void prettyPrint(StringBuilder sb, int t);
032      /**
033       */
034      public BlockStmt() {
035        super();
036      }
037      /**
038       * Initializes the child array to the correct size.
039       * Initializes List and Opt nta children.
040       * @apilevel internal
041       * @ast method
042       */
043      public void init$Children() {
044      }
045      /**
046       * @apilevel low-level
047       */
048      protected int numChildren() {
049        return 0;
050      }
051      /**
052       * @apilevel internal
053       */
054      public boolean mayHaveRewrite() {
055        return false;
056      }
057      /**
058       * @apilevel low-level
059       */
060      public void flushCache() {
061        super.flushCache();
062        declarationOf_String_visited = null;
063        endsWithReturn_visited = -1;
064        declarationOf_String_List_visited = null;
065        declarationOf_String_List_values = null;
066      }
067      /**
068       * @apilevel internal
069       */
070      public void flushCollectionCache() {
071        super.flushCollectionCache();
072      }
073      /**
074       * @apilevel internal
075       */
076      protected java.util.Map declarationOf_String_visited;
077      /**
078       * @attribute syn
079       * @aspect NameResolution
080       * @declaredat /home/csz-naf/examples/PicoJava/spec/NameResolution.jrag:100
081       */
082      public Decl declarationOf(String name) {
083        Object _parameters = name;
084        if(declarationOf_String_visited == null) declarationOf_String_visited = new java.util.HashMap(4);
085        ASTNode$State state = state();
086        if (Integer.valueOf(state().boundariesCrossed).equals(declarationOf_String_visited.get(_parameters))) {
087          throw new RuntimeException("Circular definition of attr: declarationOf in class: org.jastadd.ast.AST.SynDecl");
088        }
089        declarationOf_String_visited.put(_parameters, Integer.valueOf(state().boundariesCrossed));
090        try {  return null;  }
091        finally {
092          declarationOf_String_visited.remove(_parameters);
093        }
094      }
095      /**
096       * @apilevel internal
097       */
098      protected int endsWithReturn_visited = -1;
099      /**
100       * @attribute syn
101       * @aspect ErrorCheck
102       * @declaredat /home/csz-naf/examples/PicoJavaMethods/spec/ErrorCheck.jrag:13
103       */
104      public boolean endsWithReturn() {
105        ASTNode$State state = state();
106        if (endsWithReturn_visited == state().boundariesCrossed) {
107          throw new RuntimeException("Circular definition of attr: endsWithReturn in class: org.jastadd.ast.AST.SynDecl");
108        }
109        endsWithReturn_visited = state().boundariesCrossed;
110        try {  return false;  }
111        finally {
112          endsWithReturn_visited = -1;
113        }
114      }
115      /**
116       * @apilevel internal
117       */
118      protected java.util.Map declarationOf_String_List_visited;
119      protected java.util.Map declarationOf_String_List_values;
120      /**
121       * @attribute syn
122       * @aspect NameResolution
123       * @declaredat /home/csz-naf/examples/PicoJavaMethods/spec/NameResolution.jrag:57
124       */
125      public Decl declarationOf(String name, List argList) {
126        java.util.List _parameters = new java.util.ArrayList(2);
127        _parameters.add(name);
128        _parameters.add(argList);
129        if(declarationOf_String_List_visited == null) declarationOf_String_List_visited = new java.util.HashMap(4);
130        if(declarationOf_String_List_values == null) declarationOf_String_List_values = new java.util.HashMap(4);
131        if(declarationOf_String_List_values.containsKey(_parameters)) {
132          return (Decl)declarationOf_String_List_values.get(_parameters);
133        }
134        ASTNode$State state = state();
135        if (Integer.valueOf(state().boundariesCrossed).equals(declarationOf_String_List_visited.get(_parameters))) {
136          throw new RuntimeException("Circular definition of attr: declarationOf in class: org.jastadd.ast.AST.SynDecl");
137        }
138        declarationOf_String_List_visited.put(_parameters, Integer.valueOf(state().boundariesCrossed));
139        int num = state.boundariesCrossed;
140        boolean isFinal = this.is$Final();
141        Decl declarationOf_String_List_value = declarationOf_compute(name, argList);
142        if(isFinal && num == state().boundariesCrossed) {
143          declarationOf_String_List_values.put(_parameters, declarationOf_String_List_value);
144        } else {
145        }
146    
147        declarationOf_String_List_visited.remove(_parameters);
148        return declarationOf_String_List_value;
149      }
150      /**
151       * @apilevel internal
152       */
153      private Decl declarationOf_compute(String name, List argList) {  return null;  }
154      /**
155       * @apilevel internal
156       */
157      public ASTNode rewriteTo() {    return super.rewriteTo();
158      }}