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 ClassDecl extends TypeDecl 023 { 024 public TypeName superClass; 025 026 027 028 /** Set the parent pointer of the <code>TypeDeclElem</code>s 029 inside the <code>this</code>. */ 030 private void postMake() { 031 for(int i = 0; i < elems.size(); i++) 032 elems.elementAt(i).setParent(this); 033 } 034 035 036 // Generated boilerplate constructors: 037 038 /** 039 * Construct a raw ClassDecl whose class invariant(s) have not 040 * yet been established. It is the caller's job to 041 * initialize the returned node's fields so that any 042 * class invariants hold. 043 */ 044 //@ requires I_will_establish_invariants_afterwards; 045 protected ClassDecl() {} //@ nowarn Invariant,NonNullInit; 046 047 048 // Generated boilerplate methods: 049 050 public final int childCount() { 051 int sz = 0; 052 if (this.pmodifiers != null) sz += this.pmodifiers.size(); 053 if (this.superInterfaces != null) sz += this.superInterfaces.size(); 054 if (this.tmodifiers != null) sz += this.tmodifiers.size(); 055 if (this.elems != null) sz += this.elems.size(); 056 return sz + 2; 057 } 058 059 public final Object childAt(int index) { 060 /*throws IndexOutOfBoundsException*/ 061 if (index < 0) 062 throw new IndexOutOfBoundsException("AST child index " + index); 063 int indexPre = index; 064 065 int sz; 066 067 sz = (this.pmodifiers == null ? 0 : this.pmodifiers.size()); 068 if (0 <= index && index < sz) 069 return this.pmodifiers.elementAt(index); 070 else index -= sz; 071 072 if (index == 0) return this.id; 073 else index--; 074 075 sz = (this.superInterfaces == null ? 0 : this.superInterfaces.size()); 076 if (0 <= index && index < sz) 077 return this.superInterfaces.elementAt(index); 078 else index -= sz; 079 080 sz = (this.tmodifiers == null ? 0 : this.tmodifiers.size()); 081 if (0 <= index && index < sz) 082 return this.tmodifiers.elementAt(index); 083 else index -= sz; 084 085 sz = (this.elems == null ? 0 : this.elems.size()); 086 if (0 <= index && index < sz) 087 return this.elems.elementAt(index); 088 else index -= sz; 089 090 if (index == 0) return this.superClass; 091 else index--; 092 093 throw new IndexOutOfBoundsException("AST child index " + indexPre); 094 } //@ nowarn Exception; 095 096 public final String toString() { 097 return "[ClassDecl" 098 + " modifiers = " + this.modifiers 099 + " pmodifiers = " + this.pmodifiers 100 + " id = " + this.id 101 + " superInterfaces = " + this.superInterfaces 102 + " tmodifiers = " + this.tmodifiers 103 + " elems = " + this.elems 104 + " loc = " + this.loc 105 + " locId = " + this.locId 106 + " locOpenBrace = " + this.locOpenBrace 107 + " locCloseBrace = " + this.locCloseBrace 108 + " superClass = " + this.superClass 109 + "]"; 110 } 111 112 public final int getTag() { 113 return TagConstants.CLASSDECL; 114 } 115 116 public final void accept(Visitor v) { v.visitClassDecl(this); } 117 118 public final Object accept(VisitorArgResult v, Object o) {return v.visitClassDecl(this, o); } 119 120 public void check() { 121 super.check(); 122 if (this.pmodifiers != null) 123 for(int i = 0; i < this.pmodifiers.size(); i++) 124 this.pmodifiers.elementAt(i).check(); 125 if (this.id == null) throw new RuntimeException(); 126 for(int i = 0; i < this.superInterfaces.size(); i++) 127 this.superInterfaces.elementAt(i).check(); 128 if (this.tmodifiers != null) 129 for(int i = 0; i < this.tmodifiers.size(); i++) 130 this.tmodifiers.elementAt(i).check(); 131 if (this.elems == null) throw new RuntimeException(); 132 if (this.superClass != null) 133 this.superClass.check(); 134 } 135 136 //@ requires loc != javafe.util.Location.NULL; 137 //@ requires locId != javafe.util.Location.NULL; 138 //@ requires locOpenBrace != javafe.util.Location.NULL; 139 //@ requires locCloseBrace != javafe.util.Location.NULL; 140 //@ ensures \result != null; 141 public static ClassDecl make(int modifiers, ModifierPragmaVec pmodifiers, /*@ non_null @*/ Identifier id, /*@ non_null @*/ TypeNameVec superInterfaces, TypeModifierPragmaVec tmodifiers, /*@ non_null @*/ TypeDeclElemVec elems, int loc, int locId, int locOpenBrace, int locCloseBrace, TypeName superClass) { 142 //@ set I_will_establish_invariants_afterwards = true; 143 ClassDecl result = new ClassDecl(); 144 result.modifiers = modifiers; 145 result.pmodifiers = pmodifiers; 146 result.id = id; 147 result.superInterfaces = superInterfaces; 148 result.tmodifiers = tmodifiers; 149 result.elems = elems; 150 result.loc = loc; 151 result.locId = locId; 152 result.locOpenBrace = locOpenBrace; 153 result.locCloseBrace = locCloseBrace; 154 result.superClass = superClass; 155 result.postMake(); 156 return result; 157 } 158 }