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    /**
023     * Represents a FormalParameter. 
024     */
025    
026    public class FormalParaDecl extends GenericVarDecl
027    { 
028    
029    // Generated boilerplate constructors:
030    
031       /**
032        * Construct a raw FormalParaDecl whose class invariant(s) have not
033        * yet been established.  It is the caller's job to
034        * initialize the returned node's fields so that any
035        * class invariants hold.
036        */
037       //@ requires I_will_establish_invariants_afterwards;
038       protected FormalParaDecl() {}    //@ nowarn Invariant,NonNullInit;
039    
040    
041    // Generated boilerplate methods:
042    
043       public final int childCount() {
044          int sz = 0;
045          if (this.pmodifiers != null) sz += this.pmodifiers.size();
046          return sz + 2;
047       }
048    
049       public final Object childAt(int index) {
050               /*throws IndexOutOfBoundsException*/
051          if (index < 0)
052             throw new IndexOutOfBoundsException("AST child index " + index);
053          int indexPre = index;
054    
055          int sz;
056    
057          sz = (this.pmodifiers == null ? 0 : this.pmodifiers.size());
058          if (0 <= index && index < sz)
059             return this.pmodifiers.elementAt(index);
060          else index -= sz;
061    
062          if (index == 0) return this.id;
063          else index--;
064    
065          if (index == 0) return this.type;
066          else index--;
067    
068          throw new IndexOutOfBoundsException("AST child index " + indexPre);
069       }   //@ nowarn Exception;
070    
071       public final String toString() {
072          return "[FormalParaDecl"
073             + " modifiers = " + this.modifiers
074             + " pmodifiers = " + this.pmodifiers
075             + " id = " + this.id
076             + " type = " + this.type
077             + " locId = " + this.locId
078             + "]";
079       }
080    
081       public final int getTag() {
082          return TagConstants.FORMALPARADECL;
083       }
084    
085       public final void accept(Visitor v) { v.visitFormalParaDecl(this); }
086    
087       public final Object accept(VisitorArgResult v, Object o) {return v.visitFormalParaDecl(this, o); }
088    
089       public void check() {
090          super.check();
091          if (this.pmodifiers != null)
092             for(int i = 0; i < this.pmodifiers.size(); i++)
093                this.pmodifiers.elementAt(i).check();
094          if (this.id == null) throw new RuntimeException();
095          this.type.check();
096       }
097    
098       //@ requires type.syntax;
099       //@ requires locId != javafe.util.Location.NULL;
100       //@ ensures \result != null;
101       public static FormalParaDecl make(int modifiers, ModifierPragmaVec pmodifiers, /*@ non_null @*/ Identifier id, /*@ non_null @*/ Type type, int locId) {
102          //@ set I_will_establish_invariants_afterwards = true;
103          FormalParaDecl result = new FormalParaDecl();
104          result.modifiers = modifiers;
105          result.pmodifiers = pmodifiers;
106          result.id = id;
107          result.type = type;
108          result.locId = locId;
109          return result;
110       }
111    }