001 /*
002 * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026
027
028 package sun.tools.javap;
029
030 /**
031 * This interface defines constant that are used
032 * throughout the compiler. It inherits from RuntimeConstants,
033 * which is an autogenerated class that contains contstants
034 * defined in the interpreter.
035 */
036
037 public
038 interface Constants extends RuntimeConstants {
039
040 /**
041 * End of input
042 */
043 public static final int EOF = -1;
044
045 /*
046 * Flags
047 */
048 public static final int F_VERBOSE = 1 << 0;
049 public static final int F_DUMP = 1 << 1;
050 public static final int F_WARNINGS = 1 << 2;
051 public static final int F_DEBUG = 1 << 3;
052 public static final int F_OPTIMIZE = 1 << 4;
053 public static final int F_DEPENDENCIES = 1 << 5;
054
055 /*
056 * Type codes
057 */
058 public static final int TC_BOOLEAN = 0;
059 public static final int TC_BYTE = 1;
060 public static final int TC_CHAR = 2;
061 public static final int TC_SHORT = 3;
062 public static final int TC_INT = 4;
063 public static final int TC_LONG = 5;
064 public static final int TC_FLOAT = 6;
065 public static final int TC_DOUBLE = 7;
066 public static final int TC_NULL = 8;
067 public static final int TC_ARRAY = 9;
068 public static final int TC_CLASS = 10;
069 public static final int TC_VOID = 11;
070 public static final int TC_METHOD = 12;
071 public static final int TC_ERROR = 13;
072
073 /*
074 * Type Masks
075 */
076 public static final int TM_NULL = 1 << TC_NULL;
077 public static final int TM_VOID = 1 << TC_VOID;
078 public static final int TM_BOOLEAN = 1 << TC_BOOLEAN;
079 public static final int TM_BYTE = 1 << TC_BYTE;
080 public static final int TM_CHAR = 1 << TC_CHAR;
081 public static final int TM_SHORT = 1 << TC_SHORT;
082 public static final int TM_INT = 1 << TC_INT;
083 public static final int TM_LONG = 1 << TC_LONG;
084 public static final int TM_FLOAT = 1 << TC_FLOAT;
085 public static final int TM_DOUBLE = 1 << TC_DOUBLE;
086 public static final int TM_ARRAY = 1 << TC_ARRAY;
087 public static final int TM_CLASS = 1 << TC_CLASS;
088 public static final int TM_METHOD = 1 << TC_METHOD;
089 public static final int TM_ERROR = 1 << TC_ERROR;
090
091 public static final int TM_INT32 = TM_BYTE | TM_SHORT | TM_CHAR | TM_INT;
092 public static final int TM_NUM32 = TM_INT32 | TM_FLOAT;
093 public static final int TM_NUM64 = TM_LONG | TM_DOUBLE;
094 public static final int TM_INTEGER = TM_INT32 | TM_LONG;
095 public static final int TM_REAL = TM_FLOAT | TM_DOUBLE;
096 public static final int TM_NUMBER = TM_INTEGER | TM_REAL;
097 public static final int TM_REFERENCE = TM_ARRAY | TM_CLASS | TM_NULL;
098
099 /*
100 * Class status
101 */
102 public static final int CS_UNDEFINED = 0;
103 public static final int CS_UNDECIDED = 1;
104 public static final int CS_BINARY = 2;
105 public static final int CS_SOURCE = 3;
106 public static final int CS_PARSED = 4;
107 public static final int CS_COMPILED = 5;
108 public static final int CS_NOTFOUND = 6;
109
110 /*
111 * Attributes
112 */
113 public static final int ATT_ALL = -1;
114 public static final int ATT_CODE = 1;
115
116 /*
117 * Number of bits used in file offsets
118 */
119 public static final int OFFSETBITS = 19;
120 public static final int MAXFILESIZE = (1 << OFFSETBITS) - 1;
121 public static final int MAXLINENUMBER = (1 << (32 - OFFSETBITS)) - 1;
122
123 /*
124 * Operators
125 */
126 public final int COMMA = 0;
127 public final int ASSIGN = 1;
128
129 public final int ASGMUL = 2;
130 public final int ASGDIV = 3;
131 public final int ASGREM = 4;
132 public final int ASGADD = 5;
133 public final int ASGSUB = 6;
134 public final int ASGLSHIFT = 7;
135 public final int ASGRSHIFT = 8;
136 public final int ASGURSHIFT = 9;
137 public final int ASGBITAND = 10;
138 public final int ASGBITOR = 11;
139 public final int ASGBITXOR = 12;
140
141 public final int COND = 13;
142 public final int OR = 14;
143 public final int AND = 15;
144 public final int BITOR = 16;
145 public final int BITXOR = 17;
146 public final int BITAND = 18;
147 public final int NE = 19;
148 public final int EQ = 20;
149 public final int GE = 21;
150 public final int GT = 22;
151 public final int LE = 23;
152 public final int LT = 24;
153 public final int INSTANCEOF = 25;
154 public final int LSHIFT = 26;
155 public final int RSHIFT = 27;
156 public final int URSHIFT = 28;
157 public final int ADD = 29;
158 public final int SUB = 30;
159 public final int DIV = 31;
160 public final int REM = 32;
161 public final int MUL = 33;
162 public final int CAST = 34; // (x)y
163 public final int POS = 35; // +x
164 public final int NEG = 36; // -x
165 public final int NOT = 37;
166 public final int BITNOT = 38;
167 public final int PREINC = 39; // ++x
168 public final int PREDEC = 40; // --x
169 public final int NEWARRAY = 41;
170 public final int NEWINSTANCE = 42;
171 public final int NEWFROMNAME = 43;
172 public final int POSTINC = 44; // x++
173 public final int POSTDEC = 45; // x--
174 public final int FIELD = 46;
175 public final int METHOD = 47; // x(y)
176 public final int ARRAYACCESS = 48; // x[y]
177 public final int NEW = 49;
178 public final int INC = 50;
179 public final int DEC = 51;
180
181 public final int CONVERT = 55; // implicit conversion
182 public final int EXPR = 56; // (x)
183 public final int ARRAY = 57; // {x, y, ...}
184 public final int GOTO = 58;
185
186 /*
187 * Value tokens
188 */
189 public final int IDENT = 60;
190 public final int BOOLEANVAL = 61;
191 public final int BYTEVAL = 62;
192 public final int CHARVAL = 63;
193 public final int SHORTVAL = 64;
194 public final int INTVAL = 65;
195 public final int LONGVAL = 66;
196 public final int FLOATVAL = 67;
197 public final int DOUBLEVAL = 68;
198 public final int STRINGVAL = 69;
199
200 /*
201 * Type keywords
202 */
203 public final int BYTE = 70;
204 public final int CHAR = 71;
205 public final int SHORT = 72;
206 public final int INT = 73;
207 public final int LONG = 74;
208 public final int FLOAT = 75;
209 public final int DOUBLE = 76;
210 public final int VOID = 77;
211 public final int BOOLEAN = 78;
212
213 /*
214 * Expression keywords
215 */
216 public final int TRUE = 80;
217 public final int FALSE = 81;
218 public final int THIS = 82;
219 public final int SUPER = 83;
220 public final int NULL = 84;
221
222 /*
223 * Statement keywords
224 */
225 public final int IF = 90;
226 public final int ELSE = 91;
227 public final int FOR = 92;
228 public final int WHILE = 93;
229 public final int DO = 94;
230 public final int SWITCH = 95;
231 public final int CASE = 96;
232 public final int DEFAULT = 97;
233 public final int BREAK = 98;
234 public final int CONTINUE = 99;
235 public final int RETURN = 100;
236 public final int TRY = 101;
237 public final int CATCH = 102;
238 public final int FINALLY = 103;
239 public final int THROW = 104;
240 public final int STAT = 105;
241 public final int EXPRESSION = 106;
242 public final int DECLARATION = 107;
243 public final int VARDECLARATION = 108;
244
245 /*
246 * Declaration keywords
247 */
248 public final int IMPORT = 110;
249 public final int CLASS = 111;
250 public final int EXTENDS = 112;
251 public final int IMPLEMENTS = 113;
252 public final int INTERFACE = 114;
253 public final int PACKAGE = 115;
254
255 /*
256 * Modifier keywords
257 */
258 public final int PRIVATE = 120;
259 public final int PUBLIC = 121;
260 public final int PROTECTED = 122;
261 public final int CONST = 123;
262 public final int STATIC = 124;
263 public final int TRANSIENT = 125;
264 public final int SYNCHRONIZED = 126;
265 public final int NATIVE = 127;
266 public final int FINAL = 128;
267 public final int VOLATILE = 129;
268 public final int ABSTRACT = 130;
269 public final int STRICT = 165;
270
271 /*
272 * Punctuation
273 */
274 public final int SEMICOLON = 135;
275 public final int COLON = 136;
276 public final int QUESTIONMARK = 137;
277 public final int LBRACE = 138;
278 public final int RBRACE = 139;
279 public final int LPAREN = 140;
280 public final int RPAREN = 141;
281 public final int LSQBRACKET = 142;
282 public final int RSQBRACKET = 143;
283 public final int THROWS = 144;
284
285 /*
286 * Special tokens
287 */
288 public final int ERROR = 145; // an error
289 public final int COMMENT = 146; // not used anymore.
290 public final int TYPE = 147;
291 public final int LENGTH = 148;
292 public final int INLINERETURN = 149;
293 public final int INLINEMETHOD = 150;
294 public final int INLINENEWINSTANCE = 151;
295
296 /*
297 * Added for jasm
298 */
299 public final int METHODREF = 152;
300 public final int FIELDREF = 153;
301 public final int STACK = 154;
302 public final int LOCAL = 155;
303 public final int CPINDEX = 156;
304 public final int CPNAME = 157;
305 public final int SIGN = 158;
306 public final int BITS = 159;
307 public final int INF = 160;
308 public final int NAN = 161;
309 public final int INNERCLASS = 162;
310 public final int OF = 163;
311 public final int SYNTHETIC = 164;
312 // last used=165;
313
314 /*
315 * Operator precedence
316 */
317 public static final int opPrecedence[] = {
318 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
319 11, 11, 11, 12, 13, 14, 15, 16, 17, 18,
320 18, 19, 19, 19, 19, 19, 20, 20, 20, 21,
321 21, 22, 22, 22, 23, 24, 24, 24, 24, 24,
322 24, 25, 25, 26, 26, 26, 26, 26, 26
323 };
324
325 /*
326 * Operator names
327 */
328 public static final String opNames[] = {
329 ",", "=", "*=", "/=", "%=",
330 "+=", "-=", "<<=", ">>=", "<<<=",
331 "&=", "|=", "^=", "?:", "||",
332 "&&", "|", "^", "&", "!=",
333 "==", ">=", ">", "<=", "<",
334 "instanceof", "<<", ">>", "<<<", "+",
335 "-", "/", "%", "*", "cast",
336 "+", "-", "!", "~", "++",
337 "--", "new", "new", "new", "++",
338 "--", "field", "method", "[]", "new",
339 "++", "--", null, null, null,
340
341 "convert", "expr", "array", "goto", null,
342
343 "Identifier", "Boolean", "Byte", "Char", "Short",
344 "Integer", "Long", "Float", "Double", "String",
345
346 "byte", "char", "short", "int", "long",
347 "float", "double", "void", "boolean", null,
348
349 "true", "false", "this", "super", "null",
350 null, null, null, null, null,
351
352 "if", "else", "for", "while", "do",
353 "switch", "case", "default", "break", "continue",
354 "return", "try", "catch", "finally", "throw",
355 "stat", "expression", "declaration", "declaration", null,
356
357 "import", "class", "extends", "implements", "interface",
358 "package", null, null, null, null,
359
360 "private", "public", "protected", "const", "static",
361 "transient", "synchronized", "native", "final", "volatile",
362 "abstract", null, null, null, null,
363
364 ";", ":", "?", "{", "}",
365 "(", ")", "[", "]", "throws",
366 "error", "comment", "type", "length", "inline-return",
367 "inline-method", "inline-new",
368 "method", "field", "stack", "locals", "CPINDEX", "CPName", "SIGN",
369 "bits", "INF", "NaN", "InnerClass", "of", "synthetic"
370 };
371
372 }