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