001    // -*- mode: java -*-
002    /* Copyright 2000, 2001, Compaq Computer Corporation */
003    
004    /* IF THIS IS A JAVA FILE, DO NOT EDIT IT!  
005    
006       Most Java files in this directory which are part of the Javafe AST
007       are automatically generated using the astgen comment (see
008       ESCTools/Javafe/astgen) from the input file 'hierarchy.h'.  If you
009       wish to modify AST classes or introduce new ones, modify
010       'hierarchy.j.'
011     */
012    
013    package escjava.ast;
014    
015    import java.util.Hashtable;
016    import java.util.Set;
017    import java.util.ArrayList;
018    
019    import javafe.ast.*;
020    import javafe.util.Assert;
021    import javafe.util.Location;
022    import escjava.ParsedRoutineSpecs;
023    
024    // Convention: unless otherwise noted, integer fields named "loc" refer
025    // to the location of the first character of the syntactic unit
026    
027    //# TagBase javafe.tc.TagConstants.LAST_TAG + 1
028    //# VisitorRoot javafe.ast.Visitor
029    
030    
031    public class Condition extends ASTNode
032    {
033      public int label;
034    
035      public /*@ non_null @*/ Expr pred;
036    
037      public int locPragmaDecl;
038    
039    
040      //@ public represents startLoc <- locPragmaDecl;
041      public /*@ pure @*/ int getStartLoc() { return locPragmaDecl; }
042    
043      public String prettyPrint() {
044            return "Condition: label = " + TagConstants.toString(label) + "\n"
045                    + "     loc = " + Location.toString(locPragmaDecl) + "\n"
046                    + "     pred = " + pred;
047      }
048    
049    
050    // Generated boilerplate constructors:
051    
052      //@ ensures this.label == label;
053      //@ ensures this.pred == pred;
054      //@ ensures this.locPragmaDecl == locPragmaDecl;
055      protected Condition(int label, /*@ non_null @*/ Expr pred, int locPragmaDecl) {
056         this.label = label;
057         this.pred = pred;
058         this.locPragmaDecl = locPragmaDecl;
059      }
060    
061    // Generated boilerplate methods:
062    
063      public final int childCount() {
064         return 1;
065      }
066    
067      public final Object childAt(int index) {
068              /*throws IndexOutOfBoundsException*/
069         if (index < 0)
070            throw new IndexOutOfBoundsException("AST child index " + index);
071         int indexPre = index;
072    
073         int sz;
074    
075         if (index == 0) return this.pred;
076         else index--;
077    
078         throw new IndexOutOfBoundsException("AST child index " + indexPre);
079      }   //@ nowarn Exception;
080    
081      public final /*@non_null*/String toString() {
082         return "[Condition"
083            + " label = " + this.label
084            + " pred = " + this.pred
085            + " locPragmaDecl = " + this.locPragmaDecl
086            + "]";
087      }
088    
089      public final int getTag() {
090         return TagConstants.CONDITION;
091      }
092    
093      public final void accept(javafe.ast.Visitor v) { 
094        if (v instanceof Visitor) ((Visitor)v).visitCondition(this);
095      }
096    
097      public final Object accept(javafe.ast.VisitorArgResult v, Object o) { 
098        if (v instanceof VisitorArgResult) return ((VisitorArgResult)v).visitCondition(this, o); else return null;
099      }
100    
101      public void check() {
102         this.pred.check();
103      }
104    
105      //@ ensures \result != null;
106      public static Condition make(int label, /*@ non_null @*/ Expr pred, int locPragmaDecl) {
107         Condition result = new Condition(label, pred, locPragmaDecl);
108         return result;
109      }
110    }