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