    001    /* Copyright 2000, 2001, Compaq Computer Corporation */
    002
    003    /* IF THIS IS A JAVA FILE, DO NOT EDIT IT!
    004
    005       Most Java files in this directory which are part of the Javafe AST
    006       are automatically generated using the astgen comment (see
    007       ESCTools/Javafe/astgen) from the input file 'hierarchy.h'.  If you
    008       wish to modify AST classes or introduce new ones, modify
    009       'hierarchy.j.'
    010     */
    011
    012    package javafe.ast;
    013
    014    import javafe.util.Assert;
    015    import javafe.util.Location;
    016    import javafe.util.ErrorSet;
    017
    018    // Convention: unless otherwise noted, integer fields named "loc" refer
    019    // to the location of the first character of the syntactic unit
    020
    021
    022    public class WhileStmt extends Stmt
    023    {
    024      public /*@ non_null @*/ Expr expr;
    025
    026      public /*@ non_null @*/ Stmt stmt;
    027
    028      //@ invariant loc != javafe.util.Location.NULL;
    029      public int loc;
    030
    031      //@ invariant locGuardOpenParen != javafe.util.Location.NULL;
    032      public int locGuardOpenParen;
    033
    034
    035      private void postCheck() {
    036        int t = stmt.getTag();
    037        Assert.notFalse(t != TagConstants.SWITCHLABEL       //@ nowarn Pre;
    038                        && t != TagConstants.CONSTRUCTORINVOCATION
    039                        && t != TagConstants.VARDECLSTMT);
    040      }
    041      public int getStartLoc() { return loc; }
    042      public int getEndLoc() { return stmt.getEndLoc(); }
    043
    044
    045    // Generated boilerplate constructors:
    046
    047      /**
    048       * Construct a raw WhileStmt whose class invariant(s) have not
    049       * yet been established.  It is the caller's job to
    050       * initialize the returned node's fields so that any
    051       * class invariants hold.
    052       */
    053      //@ requires I_will_establish_invariants_afterwards;
    054      protected WhileStmt() {}    //@ nowarn Invariant,NonNullInit;
    055
    056
    057    // Generated boilerplate methods:
    058
    059      public final int childCount() {
    060         return 2;
    061      }
    062
    063      public final Object childAt(int index) {
    064              /*throws IndexOutOfBoundsException*/
    065         if (index < 0)
    066            throw new IndexOutOfBoundsException("AST child index " + index);
    067         int indexPre = index;
    068
    069         int sz;
    070
    071         if (index == 0) return this.expr;
    072         else index--;
    073
    074         if (index == 0) return this.stmt;
    075         else index--;
    076
    077         throw new IndexOutOfBoundsException("AST child index " + indexPre);
    078      }   //@ nowarn Exception;
    079
    080      public final String toString() {
    081         return "[WhileStmt"
    082            + " expr = " + this.expr
    083            + " stmt = " + this.stmt
    084            + " loc = " + this.loc
    085            + " locGuardOpenParen = " + this.locGuardOpenParen
    086            + "]";
    087      }
    088
    089      public final int getTag() {
    090         return TagConstants.WHILESTMT;
    091      }
    092
    093      public final void accept(Visitor v) { v.visitWhileStmt(this); }
    094
    095      public final Object accept(VisitorArgResult v, Object o) {return v.visitWhileStmt(this, o); }
    096
    097      public void check() {
    098         super.check();
    099         this.expr.check();
    100         this.stmt.check();
    101         postCheck();
    102      }
    103
    104      //@ requires loc != javafe.util.Location.NULL;
    105      //@ requires locGuardOpenParen != javafe.util.Location.NULL;
    106      //@ ensures \result != null;
    107      public static WhileStmt make(/*@ non_null @*/ Expr expr, /*@ non_null @*/ Stmt stmt, int loc, int locGuardOpenParen) {
    108         //@ set I_will_establish_invariants_afterwards = true;
    109         WhileStmt result = new WhileStmt();
    110         result.expr = expr;
    111         result.stmt = stmt;
    112         result.loc = loc;
    113         result.locGuardOpenParen = locGuardOpenParen;
    114         return result;
    115      }
    116    }