]>
Commit | Line | Data |
---|---|---|
e04a16fb AG |
1 | /* Definitions for parsing and type checking for the GNU compiler for |
2 | the Java(TM) language. | |
5624e564 | 3 | Copyright (C) 1997-2015 Free Software Foundation, Inc. |
e04a16fb | 4 | |
f309ff0a | 5 | This file is part of GCC. |
e04a16fb | 6 | |
f309ff0a | 7 | GCC is free software; you can redistribute it and/or modify |
e04a16fb | 8 | it under the terms of the GNU General Public License as published by |
8328d52a | 9 | the Free Software Foundation; either version 3, or (at your option) |
e04a16fb AG |
10 | any later version. |
11 | ||
f309ff0a | 12 | GCC is distributed in the hope that it will be useful, |
e04a16fb AG |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
8328d52a NC |
18 | along with GCC; see the file COPYING3. If not see |
19 | <http://www.gnu.org/licenses/>. | |
e04a16fb AG |
20 | |
21 | Java and all Java-based marks are trademarks or registered trademarks | |
22 | of Sun Microsystems, Inc. in the United States and other countries. | |
23 | The Free Software Foundation is independent of Sun Microsystems, Inc. */ | |
24 | ||
25 | /* Hacked by Per Bothner <bothner@cygnus.com> February 1996. */ | |
26 | ||
2f23f5c1 NN |
27 | #ifndef GCC_JAVA_TREE_H |
28 | #define GCC_JAVA_TREE_H | |
29 | ||
3ff9925c | 30 | |
e04a16fb AG |
31 | struct JCF; |
32 | ||
33 | /* Usage of TREE_LANG_FLAG_?: | |
4e5c1f10 | 34 | 2: QUALIFIED_P (in IDENTIFIER_NODE) |
cb3a1430 | 35 | CLASS_FILE_P (in a TRANSLATION_UNIT_DECL in current_file_list) |
97b8365c | 36 | 3: HAS_FINALIZER (in RECORD_TYPE) |
b351b287 | 37 | 4: IS_A_COMMAND_LINE_FILENAME_P (in IDENTIFIER_NODE) |
4f88ccda | 38 | IS_ARRAY_LENGTH_ACCESS (in INDIRECT_REF) |
b351b287 | 39 | 5: HAS_BEEN_ALREADY_PARSED_P (in IDENTIFIER_NODE) |
e04a16fb AG |
40 | |
41 | Usage of TYPE_LANG_FLAG_?: | |
42 | 1: TYPE_ARRAY_P (in RECORD_TYPE). | |
3c0ce750 | 43 | 2: CLASS_PARSED_P (in RECORD_TYPE). |
e04a16fb | 44 | 4: CLASS_P (in RECORD_TYPE). |
740dfbde | 45 | 5: CLASS_FROM_CURRENTLY_COMPILED_P (in RECORD_TYPE) |
c2952b01 | 46 | 6: CLASS_BEING_LAIDOUT (in RECORD_TYPE) |
e04a16fb AG |
47 | |
48 | Usage of DECL_LANG_FLAG_?: | |
5e942c50 APB |
49 | 0: METHOD_DEPRECATED (in FUNCTION_DECL). |
50 | FIELD_DEPRECATED (in FIELD_DECL). | |
51 | CLASS_DEPRECATED (in TYPE_DECL). | |
e04a16fb AG |
52 | 1: METHOD_PUBLIC (in FUNCTION_DECL). |
53 | FIELD_PUBLIC (in FIELD_DECL). | |
54 | CLASS_PUBLIC (in TYPE_DECL). | |
55 | 2: METHOD_STATIC (in FUNCTION_DECL). | |
56 | (But note that FIELD_STATIC uses TREE_STATIC!) | |
c6226a7e | 57 | FIELD_SYNTHETIC (in FIELD_DECL) |
e04a16fb AG |
58 | CLASS_COMPLETE_P (in TYPE_DECL) |
59 | 3: METHOD_FINAL (in FUNCTION_DECL) | |
60 | FIELD_FINAL (in FIELD_DECL) | |
61 | CLASS_FINAL (in TYPE_DECL) | |
4f88ccda | 62 | DECL_FINAL (in any decl) |
e04a16fb | 63 | 4: METHOD_SYNCHRONIZED (in FUNCTION_DECL). |
e04a16fb AG |
64 | CLASS_INTERFACE (in TYPE_DECL) |
65 | FIELD_VOLATILE (int FIELD_DECL) | |
66 | 5: METHOD_ABSTRACT (in FUNCTION_DECL). | |
e04a16fb AG |
67 | CLASS_ABSTRACT (in TYPE_DECL) |
68 | FIELD_TRANSIENT (in FIELD_DECL) | |
4e5c1f10 | 69 | 6: CLASS_SUPER (in TYPE_DECL, ACC_SUPER flag) |
5e942c50 | 70 | 7: DECL_CONSTRUCTOR_P (in FUNCTION_DECL). |
c2952b01 | 71 | CLASS_STATIC (in TYPE_DECL) |
e04a16fb AG |
72 | */ |
73 | ||
eb34af89 RK |
74 | #define VAR_OR_FIELD_CHECK(DECL) \ |
75 | TREE_CHECK3 (DECL, FIELD_DECL, VAR_DECL, PARM_DECL) | |
76 | ||
e04a16fb AG |
77 | /* True if the class whose TYPE_BINFO this is has a superclass. |
78 | (True of all classes except Object.) */ | |
809e3e7f | 79 | #define CLASS_HAS_SUPER_FLAG(BINFO) BINFO_FLAG_1 (BINFO) |
85fd2947 NS |
80 | #define CLASS_HAS_SUPER(TYPE) \ |
81 | (TYPE_BINFO (TYPE) && CLASS_HAS_SUPER_FLAG (TYPE_BINFO (TYPE))) | |
e04a16fb AG |
82 | |
83 | /* Return the supertype of class TYPE, or NULL_TREE is it has none. */ | |
604a3205 NS |
84 | #define CLASSTYPE_SUPER(TYPE) (CLASS_HAS_SUPER (TYPE) \ |
85 | ? BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (TYPE), 0)) \ | |
86 | : NULL_TREE) | |
e04a16fb | 87 | |
e04a16fb | 88 | /* The class defined by the actual (main) file we are compiling. */ |
19e223db MM |
89 | #define main_class \ |
90 | java_global_trees[JTI_MAIN_CLASS] | |
e04a16fb | 91 | |
85194ee9 AH |
92 | /* The class we use as the base for name resolution. It's usually the |
93 | class we're generating code for but sometimes it points to an inner | |
94 | class. If you really want to know the class we're currently | |
95 | generating code for, use output_class instead. */ | |
19e223db MM |
96 | #define current_class \ |
97 | java_global_trees[JTI_CURRENT_CLASS] | |
e04a16fb | 98 | |
85194ee9 AH |
99 | /* The class we are currently generating. Really. */ |
100 | #define output_class \ | |
101 | java_global_trees[JTI_OUTPUT_CLASS] | |
102 | ||
9dfc2ec2 AH |
103 | /* List of virtual decls referred to by this translation unit, used to |
104 | generate virtual method offset symbol table. */ | |
861ef928 | 105 | |
9dfc2ec2 AH |
106 | /* The virtual offset table. This is emitted as uninitialized data of |
107 | the required length, and filled out at run time during class | |
108 | linking. */ | |
861ef928 | 109 | |
9dfc2ec2 AH |
110 | /* The virtual offset symbol table. Used by the runtime to fill out |
111 | the otable. */ | |
90471585 | 112 | |
7be5b0e5 | 113 | /* Resource name. */ |
95ca6d8b | 114 | extern const char *resource_name; |
7be5b0e5 | 115 | |
c877974e APB |
116 | /* Turned to 1 if -Wall was encountered. See lang.c for their meanings. */ |
117 | extern int flag_wall; | |
dba370a8 | 118 | |
e04a16fb | 119 | /* The Java .class file that provides main_class; the main input file. */ |
17211ab5 | 120 | extern GTY(()) struct JCF * current_jcf; |
e04a16fb | 121 | |
85194ee9 AH |
122 | /* Set to nonzero value in order to emit class initialization code |
123 | before static field references. */ | |
124 | extern int always_initialize_class_p; | |
125 | ||
36739040 TT |
126 | extern int flag_verify_invocations; |
127 | ||
885beb81 PB |
128 | /* Largest pc so far in this method that has been passed to lookup_label. */ |
129 | extern int highest_label_pc_this_method; | |
130 | ||
131 | /* Base value for this method to add to pc to get generated label. */ | |
132 | extern int start_label_pc_this_method; | |
133 | ||
e04a16fb AG |
134 | typedef struct CPool constant_pool; |
135 | ||
136 | #define CONSTANT_ResolvedFlag 16 | |
137 | ||
97b8365c TT |
138 | /* Don't eagerly resolve this entry. When this flag is set, constant |
139 | pool entries are resolved only at runtime when the entry is first | |
140 | referred to. */ | |
141 | #define CONSTANT_LazyFlag 32 | |
142 | ||
e04a16fb AG |
143 | /* The cpool->data[i] for a ResolvedString points to a STRING_CST. */ |
144 | #define CONSTANT_ResolvedString (CONSTANT_String+CONSTANT_ResolvedFlag) | |
145 | ||
146 | /* The cpool->data[i] for a ResolvedClass points to a RECORD_TYPE. */ | |
147 | #define CONSTANT_ResolvedClass (CONSTANT_Class+CONSTANT_ResolvedFlag) | |
148 | ||
17211ab5 | 149 | #define CPOOL_UTF(CPOOL, INDEX) ((CPOOL)->data[INDEX].t) |
e04a16fb AG |
150 | |
151 | /* A NameAndType constant is represented as a TREE_LIST. | |
152 | The type is the signature string (as an IDENTIFIER_NODE). */ | |
153 | ||
154 | #define NAME_AND_TYPE_NAME(CPOOL, IDX) \ | |
155 | CPOOL_UTF(CPOOL, CPOOL_USHORT1(CPOOL, IDX)) | |
156 | #define NAME_AND_TYPE_SIGNATURE(CPOOL, IDX) \ | |
157 | CPOOL_UTF(CPOOL, CPOOL_USHORT2(CPOOL, IDX)) | |
158 | ||
159 | /* A FieldRef, MethodRef or InterfaceMethodRef constant | |
160 | is represented as a TREE_LIST. */ | |
161 | ||
162 | #define COMPONENT_REF_CLASS_INDEX(CPOOL, IDX) CPOOL_USHORT1(CPOOL, IDX) | |
163 | #define COMPONENT_REF_NAME_AND_TYPE(CPOOL, IDX) CPOOL_USHORT2(CPOOL, IDX) | |
164 | #define COMPONENT_REF_NAME(CPOOL, IDX) \ | |
165 | NAME_AND_TYPE_NAME (CPOOL, COMPONENT_REF_NAME_AND_TYPE(CPOOL, IDX)) | |
166 | #define COMPONENT_REF_SIGNATURE(CPOOL, IDX) \ | |
167 | NAME_AND_TYPE_SIGNATURE (CPOOL, COMPONENT_REF_NAME_AND_TYPE(CPOOL, IDX)) | |
168 | ||
5602b49d TT |
169 | extern GTY(()) tree java_lang_cloneable_identifier_node; |
170 | extern GTY(()) tree java_io_serializable_identifier_node; | |
2a4d0626 | 171 | extern GTY(()) tree gcj_abi_version; |
5602b49d | 172 | |
621ae65d AH |
173 | /* The decl for the .constants field of an instance of Class. */ |
174 | extern GTY(()) tree constants_field_decl_node; | |
175 | ||
176 | /* The decl for the .data field of an instance of Class. */ | |
177 | extern GTY(()) tree constants_data_field_decl_node; | |
178 | ||
19e223db MM |
179 | enum java_tree_index |
180 | { | |
181 | JTI_PROMOTED_BYTE_TYPE_NODE, | |
182 | JTI_PROMOTED_SHORT_TYPE_NODE, | |
183 | JTI_PROMOTED_CHAR_TYPE_NODE, | |
184 | JTI_PROMOTED_BOOLEAN_TYPE_NODE, | |
185 | ||
186 | JTI_BYTE_TYPE_NODE, | |
187 | JTI_SHORT_TYPE_NODE, | |
188 | JTI_INT_TYPE_NODE, | |
189 | JTI_LONG_TYPE_NODE, | |
190 | ||
191 | JTI_UNSIGNED_BYTE_TYPE_NODE, | |
192 | JTI_UNSIGNED_SHORT_TYPE_NODE, | |
193 | JTI_UNSIGNED_INT_TYPE_NODE, | |
194 | JTI_UNSIGNED_LONG_TYPE_NODE, | |
195 | ||
c034b453 TT |
196 | JTI_DECIMAL_INT_MAX_NODE, |
197 | JTI_DECIMAL_LONG_MAX_NODE, | |
198 | ||
19e223db MM |
199 | JTI_OBJECT_TYPE_NODE, |
200 | JTI_UNQUALIFIED_OBJECT_ID_NODE, | |
201 | JTI_OBJECT_PTR_TYPE_NODE, | |
202 | JTI_STRING_TYPE_NODE, | |
203 | JTI_STRING_PTR_TYPE_NODE, | |
204 | JTI_THROWABLE_TYPE_NODE, | |
17126208 | 205 | JTI_EXCEPTION_TYPE_NODE, |
19e223db MM |
206 | JTI_RUNTIME_EXCEPTION_TYPE_NODE, |
207 | JTI_ERROR_EXCEPTION_TYPE_NODE, | |
208 | JTI_RAWDATA_PTR_TYPE_NODE, | |
209 | ||
210 | JTI_BYTE_ARRAY_TYPE_NODE, | |
211 | JTI_SHORT_ARRAY_TYPE_NODE, | |
212 | JTI_INT_ARRAY_TYPE_NODE, | |
213 | JTI_LONG_ARRAY_TYPE_NODE, | |
214 | JTI_BOOLEAN_ARRAY_TYPE_NODE, | |
215 | JTI_CHAR_ARRAY_TYPE_NODE, | |
216 | JTI_DOUBLE_ARRAY_TYPE_NODE, | |
217 | JTI_FLOAT_ARRAY_TYPE_NODE, | |
218 | JTI_ARRAY_ARRAY_TYPE_NODE, | |
219 | JTI_OBJECT_ARRAY_TYPE_NODE, | |
220 | JTI_STRING_ARRAY_TYPE_NODE, | |
221 | JTI_BOOLEAN_ARRAY_VTABLE, | |
222 | JTI_BYTE_ARRAY_VTABLE, | |
223 | JTI_CHAR_ARRAY_VTABLE, | |
224 | JTI_SHORT_ARRAY_VTABLE, | |
225 | JTI_INT_ARRAY_VTABLE, | |
226 | JTI_LONG_ARRAY_VTABLE, | |
227 | JTI_FLOAT_ARRAY_VTABLE, | |
228 | JTI_DOUBLE_ARRAY_VTABLE, | |
229 | JTI_TYPE_IDENTIFIER_NODE, | |
230 | JTI_INIT_IDENTIFIER_NODE, | |
231 | JTI_CLINIT_IDENTIFIER_NODE, | |
19e223db | 232 | JTI_VOID_SIGNATURE_NODE, |
eec87542 | 233 | JTI_FINALIZE_IDENTIFIER_NODE, |
19e223db | 234 | JTI_THIS_IDENTIFIER_NODE, |
19e223db MM |
235 | JTI_ONE_ELT_ARRAY_DOMAIN_TYPE, |
236 | ||
237 | JTI_RETURN_ADDRESS_TYPE_NODE, | |
238 | ||
19e223db MM |
239 | JTI_LONG_ZERO_NODE, |
240 | JTI_FLOAT_ZERO_NODE, | |
241 | JTI_DOUBLE_ZERO_NODE, | |
19e223db MM |
242 | JTI_INTEGER_TWO_NODE, |
243 | JTI_INTEGER_FOUR_NODE, | |
19e223db MM |
244 | |
245 | JTI_METHODTABLE_TYPE, | |
246 | JTI_METHODTABLE_PTR_TYPE, | |
247 | ||
248 | JTI_UTF8CONST_TYPE, | |
249 | JTI_UTF8CONST_PTR_TYPE, | |
250 | ||
251 | JTI_CLASS_TYPE_NODE, | |
252 | JTI_CLASS_PTR_TYPE, | |
253 | JTI_FIELD_TYPE_NODE, | |
254 | JTI_CONSTANTS_TYPE_NODE, | |
255 | JTI_DTABLE_TYPE, | |
256 | JTI_DTABLE_PTR_TYPE, | |
257 | JTI_FIELD_PTR_TYPE_NODE, | |
258 | JTI_FIELD_INFO_UNION_NODE, | |
259 | JTI_EXCEPTION_TYPE, | |
260 | JTI_EXCEPTION_PTR_TYPE, | |
261 | JTI_LINENUMBERENTRY_TYPE, | |
262 | JTI_LINENUMBERS_TYPE, | |
263 | JTI_METHOD_TYPE_NODE, | |
264 | JTI_METHOD_PTR_TYPE_NODE, | |
861ef928 BM |
265 | JTI_OTABLE_TYPE, |
266 | JTI_OTABLE_PTR_TYPE, | |
9dfc2ec2 AH |
267 | JTI_ATABLE_TYPE, |
268 | JTI_ATABLE_PTR_TYPE, | |
36739040 TT |
269 | JTI_ITABLE_TYPE, |
270 | JTI_ITABLE_PTR_TYPE, | |
9dfc2ec2 AH |
271 | JTI_SYMBOL_TYPE, |
272 | JTI_SYMBOLS_ARRAY_TYPE, | |
273 | JTI_SYMBOLS_ARRAY_PTR_TYPE, | |
36739040 TT |
274 | JTI_ASSERTION_ENTRY_TYPE, |
275 | JTI_ASSERTION_TABLE_TYPE, | |
19e223db MM |
276 | |
277 | JTI_END_PARAMS_NODE, | |
278 | ||
ce1c98ea | 279 | JTI_THROW_NODE, |
19e223db | 280 | JTI_ALLOC_OBJECT_NODE, |
eec87542 | 281 | JTI_ALLOC_NO_FINALIZER_NODE, |
19e223db MM |
282 | JTI_SOFT_INSTANCEOF_NODE, |
283 | JTI_SOFT_CHECKCAST_NODE, | |
284 | JTI_SOFT_INITCLASS_NODE, | |
285 | JTI_SOFT_NEWARRAY_NODE, | |
286 | JTI_SOFT_ANEWARRAY_NODE, | |
287 | JTI_SOFT_MULTIANEWARRAY_NODE, | |
288 | JTI_SOFT_BADARRAYINDEX_NODE, | |
289 | JTI_SOFT_NULLPOINTER_NODE, | |
fbb4c46b | 290 | JTI_SOFT_ABSTRACTMETHOD_NODE, |
e0038845 | 291 | JTI_SOFT_NOSUCHFIELD_NODE, |
19e223db MM |
292 | JTI_SOFT_CHECKARRAYSTORE_NODE, |
293 | JTI_SOFT_MONITORENTER_NODE, | |
294 | JTI_SOFT_MONITOREXIT_NODE, | |
295 | JTI_SOFT_LOOKUPINTERFACEMETHOD_NODE, | |
36739040 | 296 | JTI_SOFT_LOOKUPINTERFACEMETHODBYNAME_NODE, |
19e223db MM |
297 | JTI_SOFT_LOOKUPJNIMETHOD_NODE, |
298 | JTI_SOFT_GETJNIENVNEWFRAME_NODE, | |
299 | JTI_SOFT_JNIPOPSYSTEMFRAME_NODE, | |
3141ed0f | 300 | JTI_SOFT_UNWRAPJNI_NODE, |
19e223db | 301 | JTI_SOFT_FMOD_NODE, |
19e223db MM |
302 | JTI_SOFT_IDIV_NODE, |
303 | JTI_SOFT_IREM_NODE, | |
304 | JTI_SOFT_LDIV_NODE, | |
305 | JTI_SOFT_LREM_NODE, | |
306 | ||
307 | JTI_ACCESS_FLAGS_TYPE_NODE, | |
308 | ||
19e223db MM |
309 | JTI_NATIVECODE_PTR_ARRAY_TYPE_NODE, |
310 | ||
19e223db MM |
311 | JTI_MAIN_CLASS, |
312 | JTI_CURRENT_CLASS, | |
85194ee9 | 313 | JTI_OUTPUT_CLASS, |
fec763fc | 314 | |
19e223db MM |
315 | JTI_MAX |
316 | }; | |
317 | ||
e2500fed | 318 | extern GTY(()) tree java_global_trees[JTI_MAX]; |
19e223db | 319 | |
e04a16fb AG |
320 | /* "Promoted types" that are used for primitive types smaller |
321 | than int. We could use int_type_node, but then we would lose | |
322 | type information (such as needed for debugging). */ | |
19e223db MM |
323 | #define promoted_byte_type_node \ |
324 | java_global_trees[JTI_PROMOTED_BYTE_TYPE_NODE] | |
325 | #define promoted_short_type_node \ | |
326 | java_global_trees[JTI_PROMOTED_SHORT_TYPE_NODE] | |
327 | #define promoted_char_type_node \ | |
328 | java_global_trees[JTI_PROMOTED_CHAR_TYPE_NODE] | |
329 | #define promoted_boolean_type_node \ | |
330 | java_global_trees[JTI_PROMOTED_BOOLEAN_TYPE_NODE] | |
331 | ||
332 | #define byte_type_node \ | |
333 | java_global_trees[JTI_BYTE_TYPE_NODE] | |
334 | #define short_type_node \ | |
335 | java_global_trees[JTI_SHORT_TYPE_NODE] | |
336 | #define int_type_node \ | |
337 | java_global_trees[JTI_INT_TYPE_NODE] | |
338 | #define long_type_node \ | |
339 | java_global_trees[JTI_LONG_TYPE_NODE] | |
340 | ||
341 | #define unsigned_byte_type_node \ | |
342 | java_global_trees[JTI_UNSIGNED_BYTE_TYPE_NODE] | |
343 | #define unsigned_short_type_node \ | |
344 | java_global_trees[JTI_UNSIGNED_SHORT_TYPE_NODE] | |
345 | #define unsigned_int_type_node \ | |
346 | java_global_trees[JTI_UNSIGNED_INT_TYPE_NODE] | |
347 | #define unsigned_long_type_node \ | |
348 | java_global_trees[JTI_UNSIGNED_LONG_TYPE_NODE] | |
349 | ||
c034b453 TT |
350 | #define decimal_int_max \ |
351 | java_global_trees[JTI_DECIMAL_INT_MAX_NODE] | |
352 | #define decimal_long_max \ | |
353 | java_global_trees[JTI_DECIMAL_LONG_MAX_NODE] | |
354 | ||
19e223db MM |
355 | #define object_type_node \ |
356 | java_global_trees[JTI_OBJECT_TYPE_NODE] | |
357 | #define unqualified_object_id_node \ | |
358 | java_global_trees[JTI_UNQUALIFIED_OBJECT_ID_NODE] | |
359 | #define object_ptr_type_node \ | |
360 | java_global_trees[JTI_OBJECT_PTR_TYPE_NODE] | |
361 | #define string_type_node \ | |
362 | java_global_trees[JTI_STRING_TYPE_NODE] | |
363 | #define string_ptr_type_node \ | |
364 | java_global_trees[JTI_STRING_PTR_TYPE_NODE] | |
365 | #define throwable_type_node \ | |
366 | java_global_trees[JTI_THROWABLE_TYPE_NODE] | |
17126208 APB |
367 | #define exception_type_node \ |
368 | java_global_trees[JTI_EXCEPTION_TYPE_NODE] | |
19e223db MM |
369 | #define runtime_exception_type_node \ |
370 | java_global_trees[JTI_RUNTIME_EXCEPTION_TYPE_NODE] | |
371 | #define error_exception_type_node \ | |
372 | java_global_trees[JTI_ERROR_EXCEPTION_TYPE_NODE] | |
373 | #define rawdata_ptr_type_node \ | |
374 | java_global_trees[JTI_RAWDATA_PTR_TYPE_NODE] | |
375 | ||
376 | #define byte_array_type_node \ | |
377 | java_global_trees[JTI_BYTE_ARRAY_TYPE_NODE] | |
378 | #define short_array_type_node \ | |
379 | java_global_trees[JTI_SHORT_ARRAY_TYPE_NODE] | |
380 | #define int_array_type_node \ | |
381 | java_global_trees[JTI_INT_ARRAY_TYPE_NODE] | |
382 | #define long_array_type_node \ | |
383 | java_global_trees[JTI_LONG_ARRAY_TYPE_NODE] | |
384 | #define boolean_array_type_node \ | |
385 | java_global_trees[JTI_BOOLEAN_ARRAY_TYPE_NODE] | |
386 | #define char_array_type_node \ | |
387 | java_global_trees[JTI_CHAR_ARRAY_TYPE_NODE] | |
388 | #define double_array_type_node \ | |
389 | java_global_trees[JTI_DOUBLE_ARRAY_TYPE_NODE] | |
390 | #define float_array_type_node \ | |
391 | java_global_trees[JTI_FLOAT_ARRAY_TYPE_NODE] | |
392 | #define array_array_type_node \ | |
393 | java_global_trees[JTI_ARRAY_ARRAY_TYPE_NODE] | |
394 | #define object_array_type_node \ | |
395 | java_global_trees[JTI_OBJECT_ARRAY_TYPE_NODE] | |
396 | #define string_array_type_node \ | |
397 | java_global_trees[JTI_STRING_ARRAY_TYPE_NODE] | |
398 | #define boolean_array_vtable \ | |
399 | java_global_trees[JTI_BOOLEAN_ARRAY_VTABLE] | |
400 | #define byte_array_vtable \ | |
401 | java_global_trees[JTI_BYTE_ARRAY_VTABLE] | |
402 | #define char_array_vtable \ | |
403 | java_global_trees[JTI_CHAR_ARRAY_VTABLE] | |
404 | #define short_array_vtable \ | |
405 | java_global_trees[JTI_SHORT_ARRAY_VTABLE] | |
406 | #define int_array_vtable \ | |
407 | java_global_trees[JTI_INT_ARRAY_VTABLE] | |
408 | #define long_array_vtable \ | |
409 | java_global_trees[JTI_LONG_ARRAY_VTABLE] | |
410 | #define float_array_vtable \ | |
411 | java_global_trees[JTI_FLOAT_ARRAY_VTABLE] | |
412 | #define double_array_vtable \ | |
413 | java_global_trees[JTI_DOUBLE_ARRAY_VTABLE] | |
414 | #define TYPE_identifier_node \ | |
415 | java_global_trees[JTI_TYPE_IDENTIFIER_NODE] /* "TYPE" */ | |
416 | #define init_identifier_node \ | |
417 | java_global_trees[JTI_INIT_IDENTIFIER_NODE] /* "<init>" */ | |
418 | #define clinit_identifier_node \ | |
419 | java_global_trees[JTI_CLINIT_IDENTIFIER_NODE] /* "<clinit>" */ | |
19e223db MM |
420 | #define void_signature_node \ |
421 | java_global_trees[JTI_VOID_SIGNATURE_NODE] /* "()V" */ | |
eec87542 HB |
422 | #define finalize_identifier_node \ |
423 | java_global_trees[JTI_FINALIZE_IDENTIFIER_NODE] /* "finalize" */ | |
19e223db MM |
424 | #define this_identifier_node \ |
425 | java_global_trees[JTI_THIS_IDENTIFIER_NODE] /* "this" */ | |
19e223db MM |
426 | #define one_elt_array_domain_type \ |
427 | java_global_trees[JTI_ONE_ELT_ARRAY_DOMAIN_TYPE] | |
e04a16fb | 428 | /* The type of the return address of a subroutine. */ |
19e223db MM |
429 | #define return_address_type_node \ |
430 | java_global_trees[JTI_RETURN_ADDRESS_TYPE_NODE] | |
e04a16fb | 431 | |
e04a16fb | 432 | /* Integer constants not declared in tree.h. */ |
19e223db MM |
433 | #define long_zero_node \ |
434 | java_global_trees[JTI_LONG_ZERO_NODE] | |
435 | #define float_zero_node \ | |
436 | java_global_trees[JTI_FLOAT_ZERO_NODE] | |
437 | #define double_zero_node \ | |
438 | java_global_trees[JTI_DOUBLE_ZERO_NODE] | |
19e223db MM |
439 | #define integer_two_node \ |
440 | java_global_trees[JTI_INTEGER_TWO_NODE] | |
441 | #define integer_four_node \ | |
442 | java_global_trees[JTI_INTEGER_FOUR_NODE] | |
e04a16fb AG |
443 | |
444 | /* The type for struct methodtable. */ | |
19e223db MM |
445 | #define methodtable_type \ |
446 | java_global_trees[JTI_METHODTABLE_TYPE] | |
447 | #define methodtable_ptr_type \ | |
448 | java_global_trees[JTI_METHODTABLE_PTR_TYPE] | |
449 | ||
450 | #define utf8const_type \ | |
451 | java_global_trees[JTI_UTF8CONST_TYPE] | |
452 | #define utf8const_ptr_type \ | |
453 | java_global_trees[JTI_UTF8CONST_PTR_TYPE] | |
454 | ||
455 | #define class_type_node \ | |
456 | java_global_trees[JTI_CLASS_TYPE_NODE] | |
457 | #define class_ptr_type \ | |
458 | java_global_trees[JTI_CLASS_PTR_TYPE] | |
459 | #define field_type_node \ | |
460 | java_global_trees[JTI_FIELD_TYPE_NODE] | |
461 | #define constants_type_node \ | |
462 | java_global_trees[JTI_CONSTANTS_TYPE_NODE] | |
463 | #define dtable_type \ | |
464 | java_global_trees[JTI_DTABLE_TYPE] | |
465 | #define dtable_ptr_type \ | |
466 | java_global_trees[JTI_DTABLE_PTR_TYPE] | |
467 | #define field_ptr_type_node \ | |
468 | java_global_trees[JTI_FIELD_PTR_TYPE_NODE] | |
469 | #define field_info_union_node \ | |
470 | java_global_trees[JTI_FIELD_INFO_UNION_NODE] | |
471 | #define jexception_type \ | |
472 | java_global_trees[JTI_EXCEPTION_TYPE] | |
473 | #define jexception_ptr_type \ | |
474 | java_global_trees[JTI_EXCEPTION_PTR_TYPE] | |
475 | #define lineNumberEntry_type \ | |
476 | java_global_trees[JTI_LINENUMBERENTRY_TYPE] | |
477 | #define lineNumbers_type \ | |
478 | java_global_trees[JTI_LINENUMBERS_TYPE] | |
479 | #define method_type_node \ | |
480 | java_global_trees[JTI_METHOD_TYPE_NODE] | |
481 | #define method_ptr_type_node \ | |
482 | java_global_trees[JTI_METHOD_PTR_TYPE_NODE] | |
861ef928 BM |
483 | #define otable_type \ |
484 | java_global_trees[JTI_OTABLE_TYPE] | |
9dfc2ec2 AH |
485 | #define atable_type \ |
486 | java_global_trees[JTI_ATABLE_TYPE] | |
36739040 TT |
487 | #define itable_type \ |
488 | java_global_trees[JTI_ITABLE_TYPE] | |
861ef928 BM |
489 | #define otable_ptr_type \ |
490 | java_global_trees[JTI_OTABLE_PTR_TYPE] | |
9dfc2ec2 AH |
491 | #define atable_ptr_type \ |
492 | java_global_trees[JTI_ATABLE_PTR_TYPE] | |
36739040 TT |
493 | #define itable_ptr_type \ |
494 | java_global_trees[JTI_ITABLE_PTR_TYPE] | |
9dfc2ec2 AH |
495 | #define symbol_type \ |
496 | java_global_trees[JTI_SYMBOL_TYPE] | |
497 | #define symbols_array_type \ | |
498 | java_global_trees[JTI_SYMBOLS_ARRAY_TYPE] | |
499 | #define symbols_array_ptr_type \ | |
36739040 TT |
500 | java_global_trees[JTI_SYMBOLS_ARRAY_PTR_TYPE] |
501 | #define assertion_entry_type \ | |
502 | java_global_trees[JTI_ASSERTION_ENTRY_TYPE] | |
503 | #define assertion_table_type \ | |
504 | java_global_trees[JTI_ASSERTION_TABLE_TYPE] | |
19e223db MM |
505 | |
506 | #define end_params_node \ | |
507 | java_global_trees[JTI_END_PARAMS_NODE] | |
de4c7b02 | 508 | |
e04a16fb | 509 | /* References to internal libjava functions we use. */ |
ce1c98ea RH |
510 | #define throw_node \ |
511 | java_global_trees[JTI_THROW_NODE] | |
19e223db MM |
512 | #define alloc_object_node \ |
513 | java_global_trees[JTI_ALLOC_OBJECT_NODE] | |
eec87542 HB |
514 | #define alloc_no_finalizer_node \ |
515 | java_global_trees[JTI_ALLOC_NO_FINALIZER_NODE] | |
19e223db MM |
516 | #define soft_instanceof_node \ |
517 | java_global_trees[JTI_SOFT_INSTANCEOF_NODE] | |
518 | #define soft_checkcast_node \ | |
519 | java_global_trees[JTI_SOFT_CHECKCAST_NODE] | |
520 | #define soft_initclass_node \ | |
521 | java_global_trees[JTI_SOFT_INITCLASS_NODE] | |
522 | #define soft_newarray_node \ | |
523 | java_global_trees[JTI_SOFT_NEWARRAY_NODE] | |
524 | #define soft_anewarray_node \ | |
525 | java_global_trees[JTI_SOFT_ANEWARRAY_NODE] | |
526 | #define soft_multianewarray_node \ | |
527 | java_global_trees[JTI_SOFT_MULTIANEWARRAY_NODE] | |
528 | #define soft_badarrayindex_node \ | |
529 | java_global_trees[JTI_SOFT_BADARRAYINDEX_NODE] | |
530 | #define soft_nullpointer_node \ | |
531 | java_global_trees[JTI_SOFT_NULLPOINTER_NODE] | |
fbb4c46b TT |
532 | #define soft_abstractmethod_node \ |
533 | java_global_trees[JTI_SOFT_ABSTRACTMETHOD_NODE] | |
e0038845 AH |
534 | #define soft_nosuchfield_node \ |
535 | java_global_trees[JTI_SOFT_NOSUCHFIELD_NODE] | |
19e223db MM |
536 | #define soft_checkarraystore_node \ |
537 | java_global_trees[JTI_SOFT_CHECKARRAYSTORE_NODE] | |
538 | #define soft_monitorenter_node \ | |
539 | java_global_trees[JTI_SOFT_MONITORENTER_NODE] | |
540 | #define soft_monitorexit_node \ | |
541 | java_global_trees[JTI_SOFT_MONITOREXIT_NODE] | |
542 | #define soft_lookupinterfacemethod_node \ | |
543 | java_global_trees[JTI_SOFT_LOOKUPINTERFACEMETHOD_NODE] | |
36739040 TT |
544 | #define soft_lookupinterfacemethodbyname_node \ |
545 | java_global_trees[JTI_SOFT_LOOKUPINTERFACEMETHODBYNAME_NODE] | |
19e223db MM |
546 | #define soft_lookupjnimethod_node \ |
547 | java_global_trees[JTI_SOFT_LOOKUPJNIMETHOD_NODE] | |
548 | #define soft_getjnienvnewframe_node \ | |
549 | java_global_trees[JTI_SOFT_GETJNIENVNEWFRAME_NODE] | |
550 | #define soft_jnipopsystemframe_node \ | |
551 | java_global_trees[JTI_SOFT_JNIPOPSYSTEMFRAME_NODE] | |
3141ed0f TT |
552 | #define soft_unwrapjni_node \ |
553 | java_global_trees[JTI_SOFT_UNWRAPJNI_NODE] | |
19e223db MM |
554 | #define soft_fmod_node \ |
555 | java_global_trees[JTI_SOFT_FMOD_NODE] | |
19e223db MM |
556 | #define soft_idiv_node \ |
557 | java_global_trees[JTI_SOFT_IDIV_NODE] | |
558 | #define soft_irem_node \ | |
559 | java_global_trees[JTI_SOFT_IREM_NODE] | |
560 | #define soft_ldiv_node \ | |
561 | java_global_trees[JTI_SOFT_LDIV_NODE] | |
562 | #define soft_lrem_node \ | |
563 | java_global_trees[JTI_SOFT_LREM_NODE] | |
564 | ||
565 | #define access_flags_type_node \ | |
566 | java_global_trees[JTI_ACCESS_FLAGS_TYPE_NODE] | |
567 | ||
19e223db MM |
568 | #define nativecode_ptr_array_type_node \ |
569 | java_global_trees[JTI_NATIVECODE_PTR_ARRAY_TYPE_NODE] | |
570 | ||
19e223db | 571 | #define nativecode_ptr_type_node ptr_type_node |
e04a16fb | 572 | |
2c80f015 AH |
573 | /* The decl for "_Jv_ResolvePoolEntry". */ |
574 | extern GTY(()) tree soft_resolvepoolentry_node; | |
575 | ||
d1b38208 | 576 | struct GTY(()) lang_identifier { |
e04a16fb | 577 | struct tree_identifier ignore; |
e2500fed GK |
578 | tree global_value; |
579 | tree local_value; | |
e04a16fb AG |
580 | |
581 | /* If non-NULL: An ADDR_REF to a VAR_DECL that contains | |
582 | * the Utf8Const representation of the identifier. */ | |
583 | tree utf8_ref; | |
584 | }; | |
585 | ||
e2500fed | 586 | /* The resulting tree type. */ |
d1b38208 | 587 | union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), |
81f653d6 | 588 | chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL"))) |
d1b38208 TG |
589 | |
590 | lang_tree_node { | |
e2500fed GK |
591 | union tree_node GTY ((tag ("0"), |
592 | desc ("tree_node_structure (&%h)"))) | |
593 | generic; | |
594 | struct lang_identifier GTY ((tag ("1"))) identifier; | |
595 | }; | |
596 | ||
e04a16fb | 597 | /* Macros for access to language-specific slots in an identifier. */ |
0854b1c4 | 598 | /* Unless specified, each of these slots contains a DECL node or null. */ |
e04a16fb AG |
599 | |
600 | /* This represents the value which the identifier has in the | |
601 | file-scope namespace. */ | |
602 | #define IDENTIFIER_GLOBAL_VALUE(NODE) \ | |
603 | (((struct lang_identifier *)(NODE))->global_value) | |
604 | /* This represents the value which the identifier has in the current | |
605 | scope. */ | |
606 | #define IDENTIFIER_LOCAL_VALUE(NODE) \ | |
607 | (((struct lang_identifier *)(NODE))->local_value) | |
608 | ||
027b7c36 PB |
609 | /* Given an identifier NODE, get the corresponding class. |
610 | E.g. IDENTIFIER_CLASS_VALUE(get_identifier ("java.lang.Number")) | |
611 | is the corresponding RECORD_TYPE. */ | |
e04a16fb AG |
612 | #define IDENTIFIER_CLASS_VALUE(NODE) IDENTIFIER_GLOBAL_VALUE(NODE) |
613 | ||
e04a16fb AG |
614 | /* Given a signature of a reference (or array) type, or a method, return the |
615 | corresponding type (if one has been allocated). | |
616 | Do not use for primitive types, since they may be ambiguous. | |
617 | (E.g. is "I" a signature or a class name?) */ | |
618 | #define IDENTIFIER_SIGNATURE_TYPE(NODE) IDENTIFIER_GLOBAL_VALUE(NODE) | |
619 | ||
620 | /* If non-NULL: An ADDR_REF to a VAR_DECL that contains | |
621 | the Utf8Const representation of the identifier. */ | |
622 | #define IDENTIFIER_UTF8_REF(NODE) \ | |
623 | (((struct lang_identifier *)(NODE))->utf8_ref) | |
624 | ||
625 | #define IDENTIFIER_UTF8_DECL(NODE) \ | |
626 | TREE_OPERAND((((struct lang_identifier *)(NODE))->utf8_ref), 0) | |
627 | ||
628 | /* For a FUNCTION_DECL, if we are compiling a .class file, then this is | |
629 | the position in the .class file of the method code. | |
630 | Specifically, this is the code itself, not the code attribute. */ | |
e2500fed | 631 | #define DECL_CODE_OFFSET(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.code_offset) |
e04a16fb | 632 | /* Similarly, the length of the bytecode. */ |
e2500fed | 633 | #define DECL_CODE_LENGTH(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.code_length) |
e04a16fb AG |
634 | /* Similarly, the position of the LineNumberTable attribute. */ |
635 | #define DECL_LINENUMBERS_OFFSET(DECL) \ | |
e2500fed | 636 | (DECL_LANG_SPECIFIC(DECL)->u.f.linenumbers_offset) |
e04a16fb AG |
637 | /* Similarly, the position of the LocalVariableTable attribute |
638 | (following the standard attribute header). */ | |
639 | #define DECL_LOCALVARIABLES_OFFSET(DECL) \ | |
e2500fed | 640 | (DECL_LANG_SPECIFIC(DECL)->u.f.localvariables_offset) |
e04a16fb | 641 | |
e2500fed GK |
642 | #define DECL_MAX_LOCALS(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.max_locals) |
643 | #define DECL_MAX_STACK(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.max_stack) | |
e04a16fb | 644 | /* Number of local variable slots needed for the arguments of this function. */ |
e2500fed GK |
645 | #define DECL_ARG_SLOT_COUNT(DECL) \ |
646 | (DECL_LANG_SPECIFIC(DECL)->u.f.arg_slot_count) | |
cb3a1430 | 647 | /* Source location of end of function. */ |
36f04556 | 648 | #define DECL_FUNCTION_LAST_LINE(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.last_line) |
b9f7e36c APB |
649 | /* List of checked thrown exceptions, as specified with the `throws' |
650 | keyword */ | |
e2500fed | 651 | #define DECL_FUNCTION_THROWS(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.throws_list) |
1d65f45c RH |
652 | /* VAR_DECL containing the caught exception object. */ |
653 | #define DECL_FUNCTION_EXC_OBJ(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.exc_obj) | |
3ff9925c AG |
654 | /* For each function decl, init_test_table contains a hash table whose |
655 | entries are keyed on class names, and whose values are local | |
656 | boolean decls. The variables are intended to be TRUE when the | |
657 | class has been initialized in this function, and FALSE otherwise. */ | |
658 | #define DECL_FUNCTION_INIT_TEST_TABLE(DECL) \ | |
e2500fed | 659 | (DECL_LANG_SPECIFIC(DECL)->u.f.init_test_table) |
4009bb7d APB |
660 | /* For each static function decl, itc contains a hash table whose |
661 | entries are keyed on class named that are definitively initialized | |
662 | in DECL. */ | |
663 | #define DECL_FUNCTION_INITIALIZED_CLASS_TABLE(DECL) \ | |
e2500fed | 664 | (DECL_LANG_SPECIFIC(DECL)->u.f.ict) |
c2952b01 | 665 | |
6de33afa RH |
666 | #define DECL_LOCAL_CNI_METHOD_P(NODE) \ |
667 | (DECL_LANG_SPECIFIC (NODE)->u.f.local_cni) | |
668 | ||
c6226a7e | 669 | /* True when DECL (a field) is Synthetic. */ |
eb34af89 | 670 | #define FIELD_SYNTHETIC(DECL) DECL_LANG_FLAG_2 (VAR_OR_FIELD_CHECK (DECL)) |
c6226a7e | 671 | |
e04a16fb AG |
672 | /* The slot number for this local variable. */ |
673 | #define DECL_LOCAL_SLOT_NUMBER(NODE) \ | |
eb34af89 | 674 | (DECL_LANG_SPECIFIC (NODE)->u.v.slot_number) |
e04a16fb | 675 | /* The start (bytecode) pc for the valid range of this local variable. */ |
eb34af89 | 676 | #define DECL_LOCAL_START_PC(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.start_pc) |
e04a16fb | 677 | /* The end (bytecode) pc for the valid range of this local variable. */ |
eb34af89 | 678 | #define DECL_LOCAL_END_PC(NODE) (DECL_LANG_SPECIFIC (NODE)->u.v.end_pc) |
38c9d142 | 679 | /* For a VAR_DECL or PARM_DECL, used to chain decls with the same |
e04a16fb | 680 | slot_number in decl_map. */ |
eb34af89 | 681 | #define DECL_LOCAL_SLOT_CHAIN(NODE) (DECL_LANG_SPECIFIC(NODE)->u.v.slot_chain) |
85194ee9 | 682 | /* The class that's the owner of a dynamic binding table. */ |
eb34af89 | 683 | #define DECL_OWNER(NODE) (DECL_LANG_SPECIFIC(NODE)->u.v.owner) |
4f88ccda | 684 | /* True if NODE is a class final field. */ |
97b8365c | 685 | #define FIELD_ENUM(DECL) (DECL_LANG_SPECIFIC (DECL)->u.v.field_enum) |
6bbb4ad3 AH |
686 | /* True if NODE is a variable that is out of scope. */ |
687 | #define LOCAL_VAR_OUT_OF_SCOPE_P(NODE) \ | |
eb34af89 | 688 | (DECL_LANG_SPECIFIC (NODE)->u.v.freed) |
00150bf9 AH |
689 | #define LOCAL_SLOT_P(NODE) \ |
690 | (DECL_LANG_SPECIFIC (NODE)->u.v.local_slot) | |
6de33afa RH |
691 | |
692 | #define DECL_CLASS_FIELD_P(NODE) \ | |
693 | (DECL_LANG_SPECIFIC (NODE)->u.v.class_field) | |
694 | #define DECL_VTABLE_P(NODE) \ | |
695 | (DECL_LANG_SPECIFIC (NODE)->u.v.vtable) | |
696 | ||
c7303e41 | 697 | /* Create a DECL_LANG_SPECIFIC if necessary. */ |
a9429e29 LB |
698 | #define MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC(T) \ |
699 | if (DECL_LANG_SPECIFIC (T) == NULL) \ | |
700 | { \ | |
766090c2 | 701 | DECL_LANG_SPECIFIC ((T)) = ggc_cleared_alloc<struct lang_decl> (); \ |
a9429e29 | 702 | DECL_LANG_SPECIFIC (T)->desc = LANG_DECL_VAR; \ |
c7303e41 | 703 | } |
e04a16fb | 704 | |
3cc48399 PB |
705 | /* A ConstantExpression, after folding and name resolution. */ |
706 | #define CONSTANT_VALUE_P(NODE) \ | |
707 | (TREE_CODE (NODE) == STRING_CST \ | |
708 | || (TREE_CODE (NODE) == INTEGER_CST \ | |
709 | && TREE_CODE (TREE_TYPE (NODE)) != POINTER_TYPE) \ | |
710 | || TREE_CODE (NODE) == REAL_CST) | |
711 | ||
2a22f99c TS |
712 | struct GTY((for_user)) treetreehash_entry { |
713 | tree key; | |
714 | tree value; | |
715 | }; | |
716 | ||
ca752f39 | 717 | struct treetreehasher : ggc_ptr_hash<treetreehash_entry> |
2a22f99c TS |
718 | { |
719 | typedef tree compare_type; | |
720 | ||
721 | static hashval_t hash (treetreehash_entry *); | |
722 | static bool equal (treetreehash_entry *, tree); | |
723 | }; | |
724 | ||
ca752f39 | 725 | struct ict_hasher : ggc_ptr_hash<tree_node> |
2a22f99c TS |
726 | { |
727 | static hashval_t hash (tree t) { return htab_hash_pointer (t); } | |
728 | static bool equal (tree a, tree b) { return a == b; } | |
729 | }; | |
730 | ||
e04a16fb | 731 | /* DECL_LANG_SPECIFIC for FUNCTION_DECLs. */ |
d1b38208 | 732 | struct GTY(()) lang_decl_func { |
e04a16fb AG |
733 | /* tree chain; not yet used. */ |
734 | long code_offset; | |
735 | int code_length; | |
736 | long linenumbers_offset; | |
737 | long localvariables_offset; | |
738 | int arg_slots; | |
e2500fed GK |
739 | int max_locals; |
740 | int max_stack; | |
741 | int arg_slot_count; | |
cb3a1430 | 742 | source_location last_line; /* End line number for a function decl */ |
9771b263 | 743 | vec<tree, va_gc> *throws_list; /* Exception specified by `throws' */ |
1d65f45c | 744 | tree exc_obj; /* Decl holding the exception object. */ |
e2500fed GK |
745 | |
746 | /* Class initialization test variables */ | |
2a22f99c | 747 | hash_table<treetreehasher> *init_test_table; |
e2500fed GK |
748 | |
749 | /* Initialized (static) Class Table */ | |
2a22f99c | 750 | hash_table<ict_hasher> *ict; |
e2500fed | 751 | |
4f88ccda | 752 | unsigned int native : 1; /* Nonzero if this is a native method */ |
6b6294f1 | 753 | unsigned int strictfp : 1; |
aecf4109 TT |
754 | unsigned int invisible : 1; /* Set for methods we generate |
755 | internally but which shouldn't be | |
756 | written to the .class file. */ | |
6de33afa RH |
757 | unsigned int dummy : 1; |
758 | unsigned int local_cni : 1; /* Decl needs mangle_local_cni_method. */ | |
97b8365c TT |
759 | unsigned int bridge : 1; /* Bridge method. */ |
760 | unsigned int varargs : 1; /* Varargs method. */ | |
3ff9925c AG |
761 | }; |
762 | ||
97b8365c | 763 | /* These represent the possible assertion_codes that can be emitted in the |
36739040 TT |
764 | type assertion table. */ |
765 | enum | |
766 | { | |
767 | JV_ASSERT_END_OF_TABLE = 0, /* Last entry in table. */ | |
768 | JV_ASSERT_TYPES_COMPATIBLE = 1, /* Operand A is assignable to Operand B. */ | |
769 | JV_ASSERT_IS_INSTANTIABLE = 2 /* Operand A is an instantiable class. */ | |
770 | }; | |
771 | ||
97b8365c TT |
772 | /* Annotation types used in the reflection_data. See |
773 | java.lang.Class.getDeclaredAnnotations() in the runtime library for | |
774 | an example of how these are used. */ | |
775 | ||
776 | typedef enum | |
777 | { | |
778 | JV_CLASS_ATTR, | |
779 | JV_METHOD_ATTR, | |
780 | JV_FIELD_ATTR, | |
781 | JV_DONE_ATTR | |
782 | } jv_attr_type; | |
783 | ||
784 | typedef enum | |
785 | { | |
786 | JV_INNER_CLASSES_KIND, | |
787 | JV_ENCLOSING_METHOD_KIND, | |
788 | JV_SIGNATURE_KIND, | |
789 | JV_ANNOTATIONS_KIND, | |
790 | JV_PARAMETER_ANNOTATIONS_KIND, | |
791 | JV_ANNOTATION_DEFAULT_KIND | |
792 | } jv_attr_kind; | |
793 | ||
2a22f99c | 794 | typedef struct GTY((for_user)) type_assertion { |
36739040 TT |
795 | int assertion_code; /* 'opcode' for the type of this assertion. */ |
796 | tree op1; /* First operand. */ | |
797 | tree op2; /* Second operand. */ | |
798 | } type_assertion; | |
799 | ||
ca752f39 | 800 | struct type_assertion_hasher : ggc_ptr_hash<type_assertion> |
2a22f99c TS |
801 | { |
802 | static hashval_t hash (type_assertion *); | |
803 | static bool equal (type_assertion *, type_assertion *); | |
804 | }; | |
805 | ||
806 | extern tree java_treetreehash_find (hash_table<treetreehasher> *, tree); | |
807 | extern tree * java_treetreehash_new (hash_table<treetreehasher> *, tree); | |
808 | extern hash_table<treetreehasher> *java_treetreehash_create (size_t size); | |
e2500fed | 809 | |
c7303e41 APB |
810 | /* DECL_LANG_SPECIFIC for VAR_DECL, PARM_DECL and sometimes FIELD_DECL |
811 | (access methods on outer class fields) and final fields. */ | |
d1b38208 | 812 | struct GTY(()) lang_decl_var { |
e04a16fb AG |
813 | int slot_number; |
814 | int start_pc; | |
815 | int end_pc; | |
816 | tree slot_chain; | |
85194ee9 | 817 | tree owner; |
00150bf9 AH |
818 | unsigned int freed : 1; /* Decl is no longer in scope. */ |
819 | unsigned int local_slot : 1; /* Decl is a temporary in the stack frame. */ | |
6de33afa RH |
820 | unsigned int class_field : 1; /* Decl needs mangle_class_field. */ |
821 | unsigned int vtable : 1; /* Decl needs mangle_vtable. */ | |
97b8365c | 822 | unsigned int field_enum:1; /* Field is an enum. */ |
e04a16fb AG |
823 | }; |
824 | ||
e2500fed GK |
825 | /* This is what 'lang_decl' really points to. */ |
826 | ||
eb34af89 | 827 | enum lang_decl_desc {LANG_DECL_FUNC, LANG_DECL_VAR}; |
e2500fed | 828 | |
766090c2 | 829 | struct GTY(()) lang_decl { |
e2500fed | 830 | enum lang_decl_desc desc; |
eb34af89 RK |
831 | union lang_decl_u |
832 | { | |
833 | struct lang_decl_func GTY ((tag ("LANG_DECL_FUNC"))) f; | |
834 | struct lang_decl_var GTY ((tag ("LANG_DECL_VAR"))) v; | |
835 | } GTY ((desc ("%0.desc"))) u; | |
e2500fed GK |
836 | }; |
837 | ||
c2952b01 APB |
838 | /* Macro to access fields in `struct lang_type'. */ |
839 | ||
eb34af89 RK |
840 | #define TYPE_SIGNATURE(T) (TYPE_LANG_SPECIFIC (T)->signature) |
841 | #define TYPE_JCF(T) (TYPE_LANG_SPECIFIC (T)->jcf) | |
842 | #define TYPE_CPOOL(T) (TYPE_LANG_SPECIFIC (T)->cpool) | |
843 | #define TYPE_CPOOL_DATA_REF(T) (TYPE_LANG_SPECIFIC (T)->cpool_data_ref) | |
844 | #define MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC(T) \ | |
845 | if (TYPE_LANG_SPECIFIC ((T)) == NULL) \ | |
766090c2 | 846 | TYPE_LANG_SPECIFIC ((T)) = ggc_cleared_alloc<struct lang_type> (); |
eb34af89 | 847 | |
36739040 TT |
848 | #define TYPE_DUMMY(T) (TYPE_LANG_SPECIFIC(T)->dummy_class) |
849 | ||
eb34af89 | 850 | #define TYPE_PACKAGE_LIST(T) (TYPE_LANG_SPECIFIC (T)->package_list) |
eb34af89 RK |
851 | #define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC (T)->pic) |
852 | #define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC (T)->poic) | |
853 | #define TYPE_STRICTFP(T) (TYPE_LANG_SPECIFIC (T)->strictfp) | |
97b8365c TT |
854 | #define TYPE_ENUM(T) (TYPE_LANG_SPECIFIC (T)->enum_class) |
855 | #define TYPE_SYNTHETIC(T) (TYPE_LANG_SPECIFIC (T)->synthetic) | |
856 | #define TYPE_ANNOTATION(T) (TYPE_LANG_SPECIFIC (T)->annotation) | |
857 | ||
eb34af89 | 858 | #define TYPE_USES_ASSERTIONS(T) (TYPE_LANG_SPECIFIC (T)->assertions) |
c2952b01 | 859 | |
eb34af89 RK |
860 | #define TYPE_ATABLE_METHODS(T) (TYPE_LANG_SPECIFIC (T)->atable_methods) |
861 | #define TYPE_ATABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC (T)->atable_syms_decl) | |
862 | #define TYPE_ATABLE_DECL(T) (TYPE_LANG_SPECIFIC (T)->atable_decl) | |
85194ee9 | 863 | |
eb34af89 RK |
864 | #define TYPE_OTABLE_METHODS(T) (TYPE_LANG_SPECIFIC (T)->otable_methods) |
865 | #define TYPE_OTABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC (T)->otable_syms_decl) | |
866 | #define TYPE_OTABLE_DECL(T) (TYPE_LANG_SPECIFIC (T)->otable_decl) | |
85194ee9 | 867 | |
36739040 TT |
868 | #define TYPE_ITABLE_METHODS(T) (TYPE_LANG_SPECIFIC (T)->itable_methods) |
869 | #define TYPE_ITABLE_SYMS_DECL(T) (TYPE_LANG_SPECIFIC (T)->itable_syms_decl) | |
870 | #define TYPE_ITABLE_DECL(T) (TYPE_LANG_SPECIFIC (T)->itable_decl) | |
871 | ||
eb34af89 RK |
872 | #define TYPE_CTABLE_DECL(T) (TYPE_LANG_SPECIFIC (T)->ctable_decl) |
873 | #define TYPE_CATCH_CLASSES(T) (TYPE_LANG_SPECIFIC (T)->catch_classes) | |
85194ee9 | 874 | |
eb34af89 | 875 | #define TYPE_TO_RUNTIME_MAP(T) (TYPE_LANG_SPECIFIC (T)->type_to_runtime_map) |
36739040 | 876 | #define TYPE_ASSERTIONS(T) (TYPE_LANG_SPECIFIC (T)->type_assertions) |
c629e611 | 877 | #define TYPE_PACKAGE(T) (TYPE_LANG_SPECIFIC (T)->package) |
85194ee9 | 878 | |
97b8365c TT |
879 | #define TYPE_REFLECTION_DATA(T) (TYPE_LANG_SPECIFIC (T)->reflection_data) |
880 | #define TYPE_REFLECTION_DATASIZE(T) \ | |
881 | (TYPE_LANG_SPECIFIC (T)->reflection_datasize) | |
882 | ||
aa6d7c81 NF |
883 | typedef struct GTY(()) method_entry_d { |
884 | tree method; | |
885 | tree special; | |
886 | } method_entry; | |
887 | ||
aa6d7c81 | 888 | |
766090c2 | 889 | struct GTY(()) lang_type { |
e04a16fb | 890 | tree signature; |
eb34af89 RK |
891 | struct JCF *jcf; |
892 | struct CPool *cpool; | |
c2952b01 | 893 | tree cpool_data_ref; /* Cached */ |
dc08e603 | 894 | tree package_list; /* List of package names, progressive */ |
85194ee9 | 895 | |
9771b263 | 896 | vec<method_entry, va_gc> *otable_methods; /* List of static decls referred |
aa6d7c81 | 897 | to by this class. */ |
85194ee9 AH |
898 | tree otable_decl; /* The static address table. */ |
899 | tree otable_syms_decl; | |
900 | ||
9771b263 | 901 | vec<method_entry, va_gc> *atable_methods; /* List of abstract methods |
aa6d7c81 | 902 | referred to by this class. */ |
85194ee9 AH |
903 | tree atable_decl; /* The static address table. */ |
904 | tree atable_syms_decl; | |
905 | ||
9771b263 | 906 | vec<method_entry, va_gc> *itable_methods; /* List of interface methods |
aa6d7c81 | 907 | referred to by this class. */ |
36739040 TT |
908 | tree itable_decl; /* The interfaces table. */ |
909 | tree itable_syms_decl; | |
910 | ||
eb34af89 RK |
911 | tree ctable_decl; /* The table of classes for the runtime |
912 | type matcher. */ | |
9771b263 | 913 | vec<constructor_elt, va_gc> *catch_classes; |
85194ee9 | 914 | |
2a22f99c | 915 | hash_table<treetreehasher> *type_to_runtime_map; |
eb34af89 RK |
916 | /* The mapping of classes to exception region |
917 | markers. */ | |
85194ee9 | 918 | |
2a22f99c | 919 | hash_table<type_assertion_hasher> *type_assertions; |
36739040 TT |
920 | /* Table of type assertions to be evaluated |
921 | by the runtime when this class is loaded. */ | |
922 | ||
c629e611 BM |
923 | tree package; /* IDENTIFIER_NODE for package this class is |
924 | a member of. */ | |
925 | ||
97b8365c TT |
926 | unsigned char* GTY((skip)) reflection_data; /* The raw reflection |
927 | data for this | |
928 | class. */ | |
929 | long reflection_datasize; /* The size of the raw reflection data | |
930 | for this class, in bytes. */ | |
931 | ||
cf1748bf | 932 | unsigned pic:1; /* Private Inner Class. */ |
4dbf4496 | 933 | unsigned poic:1; /* Protected Inner Class. */ |
6b6294f1 | 934 | unsigned strictfp:1; /* `strictfp' class. */ |
c6226a7e | 935 | unsigned assertions:1; /* Any method uses `assert'. */ |
97b8365c TT |
936 | unsigned dummy_class:1; /* Not a real class, just a placeholder. */ |
937 | unsigned enum_class:1; /* Class is an enum type. */ | |
938 | unsigned synthetic:1; /* Class is synthetic. */ | |
939 | unsigned annotation:1; /* Class is an annotation type. */ | |
e04a16fb AG |
940 | }; |
941 | ||
e04a16fb AG |
942 | #define JCF_u4 unsigned long |
943 | #define JCF_u2 unsigned short | |
944 | ||
aecf4109 TT |
945 | /* Possible values to pass to lookup_argument_method_generic. */ |
946 | #define SEARCH_INTERFACE 1 | |
947 | #define SEARCH_SUPER 2 | |
e081a9c4 | 948 | #define SEARCH_VISIBLE 4 |
aecf4109 | 949 | |
ba60e475 AH |
950 | /* Defined in java-except.h */ |
951 | struct eh_range; | |
952 | ||
b37421c6 | 953 | extern void java_parse_file (void); |
ef4bddc2 | 954 | extern tree java_type_for_mode (machine_mode, int); |
d2097937 | 955 | extern tree java_type_for_size (unsigned int, int); |
d2097937 KG |
956 | extern tree java_truthvalue_conversion (tree); |
957 | extern void add_assume_compiled (const char *, int); | |
24d82bce PB |
958 | extern void add_enable_assert (const char *, int); |
959 | extern bool enable_assertions (tree); | |
d2097937 KG |
960 | extern tree lookup_class (tree); |
961 | extern tree lookup_java_constructor (tree, tree); | |
962 | extern tree lookup_java_method (tree, tree, tree); | |
963 | extern tree lookup_argument_method (tree, tree, tree); | |
aecf4109 | 964 | extern tree lookup_argument_method_generic (tree, tree, tree, int); |
d2097937 KG |
965 | extern int has_method (tree, tree); |
966 | extern tree promote_type (tree); | |
967 | extern tree get_constant (struct JCF*, int); | |
968 | extern tree get_name_constant (struct JCF*, int); | |
969 | extern tree get_class_constant (struct JCF*, int); | |
970 | extern tree parse_signature (struct JCF *jcf, int sig_index); | |
971 | extern tree add_field (tree, tree, tree, int); | |
972 | extern tree add_method (tree, int, tree, tree); | |
973 | extern tree add_method_1 (tree, int, tree, tree); | |
3e603aef | 974 | extern void java_hide_decl (tree); |
d2097937 KG |
975 | extern tree make_class (void); |
976 | extern tree push_class (tree, tree); | |
977 | extern tree unmangle_classname (const char *name, int name_length); | |
978 | extern tree parse_signature_string (const unsigned char *, int); | |
979 | extern tree get_type_from_signature (tree); | |
980 | extern void layout_class (tree); | |
d7afe286 | 981 | extern int get_interface_method_index (tree, tree); |
d2097937 KG |
982 | extern tree layout_class_method (tree, tree, tree, tree); |
983 | extern void layout_class_methods (tree); | |
b4e18eee | 984 | extern void cache_this_class_ref (tree); |
56c9f04b | 985 | extern void uncache_this_class_ref (tree); |
d2097937 KG |
986 | extern tree build_class_ref (tree); |
987 | extern tree build_dtable_decl (tree); | |
988 | extern tree build_internal_class_name (tree); | |
989 | extern tree build_constants_constructor (void); | |
b4e18eee | 990 | extern tree build_constant_data_ref (bool); |
d2097937 | 991 | extern tree build_ref_from_constant_pool (int); |
d2097937 | 992 | extern tree build_utf8_ref (tree); |
eb34af89 RK |
993 | extern tree ident_subst (const char *, int, const char *, int, int, |
994 | const char *); | |
995 | extern tree identifier_subst (const tree, const char *, int, int, | |
996 | const char *); | |
c99c0026 | 997 | extern bool global_bindings_p (void); |
d2097937 KG |
998 | extern tree getdecls (void); |
999 | extern void pushlevel (int); | |
1000 | extern tree poplevel (int,int, int); | |
d2097937 KG |
1001 | extern tree pushdecl (tree); |
1002 | extern void java_init_decl_processing (void); | |
1003 | extern void java_dup_lang_specific_decl (tree); | |
1004 | extern tree build_java_signature (tree); | |
1005 | extern tree build_java_argument_signature (tree); | |
1006 | extern void set_java_signature (tree, tree); | |
1007 | extern tree build_static_field_ref (tree); | |
1008 | extern tree build_address_of (tree); | |
1009 | extern tree find_local_variable (int index, tree type, int pc); | |
1010 | extern tree find_stack_slot (int index, tree type); | |
1011 | extern tree build_prim_array_type (tree, HOST_WIDE_INT); | |
1012 | extern tree build_java_array_type (tree, HOST_WIDE_INT); | |
1013 | extern int is_compiled_class (tree); | |
eb34af89 | 1014 | extern tree mangled_classname (const char *, tree); |
d2097937 | 1015 | extern tree lookup_label (int); |
eb34af89 | 1016 | extern tree pop_type_0 (tree, char **); |
d2097937 KG |
1017 | extern tree pop_type (tree); |
1018 | extern tree decode_newarray_type (int); | |
eb34af89 | 1019 | extern tree lookup_field (tree *, tree); |
d2097937 KG |
1020 | extern int is_array_type_p (tree); |
1021 | extern HOST_WIDE_INT java_array_type_length (tree); | |
1022 | extern int read_class (tree); | |
1023 | extern void load_class (tree, int); | |
1024 | ||
1025 | extern tree check_for_builtin (tree, tree); | |
1026 | extern void initialize_builtins (void); | |
1027 | ||
1028 | extern tree lookup_name (tree); | |
696fbee7 | 1029 | extern bool special_method_p (tree); |
9771b263 DN |
1030 | extern void maybe_rewrite_invocation (tree *, vec<tree, va_gc> **, tree *, |
1031 | tree *); | |
1032 | extern tree build_known_method_ref (tree, tree, tree, tree, vec<tree, va_gc> *, | |
1033 | tree); | |
d2097937 | 1034 | extern tree build_class_init (tree, tree); |
2a22f99c | 1035 | extern int attach_init_test_initialization_flags (treetreehash_entry **, tree); |
313ab5ee | 1036 | extern tree build_invokevirtual (tree, tree, tree); |
d2097937 KG |
1037 | extern tree build_invokeinterface (tree, tree); |
1038 | extern tree build_jni_stub (tree); | |
9771b263 | 1039 | extern tree invoke_build_dtable (int, vec<tree, va_gc> *); |
d2097937 | 1040 | extern tree build_field_ref (tree, tree, tree); |
fe4e7c65 | 1041 | extern tree java_modify_addr_for_volatile (tree); |
d2097937 KG |
1042 | extern void pushdecl_force_head (tree); |
1043 | extern tree build_java_binop (enum tree_code, tree, tree, tree); | |
1044 | extern tree build_java_soft_divmod (enum tree_code, tree, tree, tree); | |
1045 | extern tree binary_numeric_promotion (tree, tree, tree *, tree *); | |
1046 | extern tree build_java_arrayaccess (tree, tree, tree); | |
1047 | extern tree build_java_arraystore_check (tree, tree); | |
1048 | extern tree build_newarray (int, tree); | |
1049 | extern tree build_anewarray (tree, tree); | |
1050 | extern tree build_new_array (tree, tree); | |
1051 | extern tree build_java_array_length_access (tree); | |
d2097937 KG |
1052 | extern tree build_java_indirect_ref (tree, tree, int); |
1053 | extern tree java_check_reference (tree, int); | |
1054 | extern tree build_get_class (tree); | |
1055 | extern tree build_instanceof (tree, tree); | |
1056 | extern tree create_label_decl (tree); | |
d2097937 | 1057 | extern tree prepare_eh_table_type (tree); |
85194ee9 | 1058 | extern void java_expand_catch_classes (tree); |
d2097937 KG |
1059 | extern tree build_exception_object_ref (tree); |
1060 | extern tree generate_name (void); | |
d2097937 KG |
1061 | extern const char *lang_printable_name (tree, int); |
1062 | extern tree maybe_add_interface (tree, tree); | |
1063 | extern void set_super_info (int, tree, tree, int); | |
1064 | extern void set_class_decl_access_flags (int, tree); | |
1065 | extern int get_access_flags_from_decl (tree); | |
1066 | extern int interface_of_p (tree, tree); | |
1067 | extern int inherits_from_p (tree, tree); | |
1068 | extern int common_enclosing_context_p (tree, tree); | |
d3ecb597 | 1069 | extern int common_enclosing_instance_p (tree, tree); |
d2097937 | 1070 | extern int enclosing_context_p (tree, tree); |
d2097937 | 1071 | extern tree build_result_decl (tree); |
af434fa7 AH |
1072 | extern void set_method_index (tree decl, tree method_index); |
1073 | extern tree get_method_index (tree decl); | |
d2097937 | 1074 | extern void make_class_data (tree); |
d2097937 | 1075 | extern int alloc_name_constant (int, tree); |
2c80f015 | 1076 | extern int alloc_constant_fieldref (tree, tree); |
c9b9aa64 | 1077 | extern void emit_register_classes (tree *); |
9771b263 | 1078 | extern tree emit_symbol_table (tree, tree, vec<method_entry, va_gc> *, |
aa6d7c81 | 1079 | tree, tree, int); |
d2097937 KG |
1080 | extern void lang_init_source (int); |
1081 | extern void write_classfile (tree); | |
1082 | extern char *print_int_node (tree); | |
d2097937 | 1083 | extern void finish_class (void); |
d2097937 | 1084 | extern void check_for_initialization (tree, tree); |
97b8365c TT |
1085 | extern struct CPool *cpool_for_class (tree); |
1086 | extern int find_class_or_string_constant (struct CPool *, int, tree); | |
d2097937 KG |
1087 | |
1088 | extern tree pushdecl_top_level (tree); | |
00150bf9 | 1089 | extern tree pushdecl_function_level (tree); |
a406865a | 1090 | extern tree java_replace_references (tree *, int *, void *); |
d2097937 KG |
1091 | extern int alloc_class_constant (tree); |
1092 | extern void init_expr_processing (void); | |
1093 | extern void push_super_field (tree, tree); | |
1094 | extern void init_class_processing (void); | |
36739040 | 1095 | extern void add_type_assertion (tree, int, tree, tree); |
d2097937 KG |
1096 | extern int can_widen_reference_to (tree, tree); |
1097 | extern int class_depth (tree); | |
36739040 TT |
1098 | extern int verify_jvm_instructions_new (struct JCF *, const unsigned char *, |
1099 | long); | |
d2097937 KG |
1100 | extern void maybe_pushlevels (int); |
1101 | extern void maybe_poplevels (int); | |
1102 | extern void force_poplevels (int); | |
1103 | extern int process_jvm_instruction (int, const unsigned char *, long); | |
1104 | extern int maybe_adjust_start_pc (struct JCF *, int, int, int); | |
1105 | extern void set_local_type (int, tree); | |
1106 | extern int merge_type_state (tree); | |
1107 | extern int push_type_0 (tree); | |
1108 | extern void push_type (tree); | |
d2097937 | 1109 | extern void add_interface (tree, tree); |
36739040 | 1110 | extern tree java_create_object (tree); |
d2097937 KG |
1111 | extern int verify_constant_pool (struct JCF *); |
1112 | extern void start_java_method (tree); | |
1113 | extern void end_java_method (void); | |
1114 | extern void give_name_to_locals (struct JCF *); | |
1115 | extern void note_instructions (struct JCF *, tree); | |
1116 | extern void expand_byte_code (struct JCF *, tree); | |
1117 | extern int open_in_zip (struct JCF *, const char *, const char *, int); | |
1118 | extern void set_constant_value (tree, tree); | |
8e1f2d4c | 1119 | #ifdef jword |
d2097937 KG |
1120 | extern int find_constant1 (struct CPool *, int, jword); |
1121 | extern int find_constant2 (struct CPool *, int, jword, jword); | |
8e1f2d4c | 1122 | #endif |
d2097937 KG |
1123 | extern int find_utf8_constant (struct CPool *, tree); |
1124 | extern int find_string_constant (struct CPool *, tree); | |
1125 | extern int find_class_constant (struct CPool *, tree); | |
1126 | extern int find_fieldref_index (struct CPool *, tree); | |
1127 | extern int find_methodref_index (struct CPool *, tree); | |
1128 | extern int find_methodref_with_class_index (struct CPool *, tree, tree); | |
1129 | extern void write_constant_pool (struct CPool *, unsigned char *, int); | |
1130 | extern int count_constant_pool_bytes (struct CPool *); | |
1131 | extern int encode_newarray_type (tree); | |
4bcde32e | 1132 | #ifdef uint64 |
d2097937 KG |
1133 | extern void format_int (char *, jlong, int); |
1134 | extern void format_uint (char *, uint64, int); | |
4bcde32e | 1135 | #endif |
d2097937 | 1136 | extern void jcf_trim_old_input (struct JCF *); |
4bcde32e | 1137 | #ifdef BUFSIZ |
d2097937 KG |
1138 | extern void jcf_print_utf8 (FILE *, const unsigned char *, int); |
1139 | extern void jcf_print_char (FILE *, int); | |
eb34af89 RK |
1140 | extern void jcf_print_utf8_replace (FILE *, const unsigned char *, int, |
1141 | int, int); | |
d2097937 | 1142 | extern const char* open_class (const char *, struct JCF *, int, const char *); |
4bcde32e | 1143 | #endif |
d2097937 KG |
1144 | extern void java_debug_context (void); |
1145 | extern void safe_layout_class (tree); | |
d4476be2 | 1146 | |
d2097937 | 1147 | extern tree get_boehm_type_descriptor (tree); |
b1138221 | 1148 | extern bool uses_jv_markobj_p (tree); |
d2097937 KG |
1149 | extern bool class_has_finalize_method (tree); |
1150 | extern void java_check_methods (tree); | |
dc08e603 | 1151 | |
6de33afa | 1152 | extern void java_mangle_decl (tree); |
d2097937 | 1153 | extern tree java_mangle_class_field (struct obstack *, tree); |
d2097937 | 1154 | extern tree java_mangle_vtable (struct obstack *, tree); |
3e603aef | 1155 | extern tree java_mangle_resource_name (const char *); |
d2097937 | 1156 | extern void append_gpp_mangled_name (const char *, int); |
5830574a | 1157 | |
d2097937 KG |
1158 | extern void add_predefined_file (tree); |
1159 | extern int predefined_filename_p (tree); | |
fec763fc | 1160 | |
d2097937 | 1161 | extern tree decl_constant_value (tree); |
7149627b | 1162 | |
3bec3c0c RH |
1163 | extern void java_mark_class_local (tree); |
1164 | ||
d2097937 KG |
1165 | extern void java_inlining_merge_static_initializers (tree, void *); |
1166 | extern void java_inlining_map_static_initializers (tree, void *); | |
49f48c71 | 1167 | |
95ca6d8b NB |
1168 | extern void compile_resource_data (const char *name, const char *buffer, int); |
1169 | extern void compile_resource_file (const char *, const char *); | |
c9b9aa64 | 1170 | extern void write_resource_constructor (tree *); |
6de9cd9a DN |
1171 | extern tree build_java_empty_stmt (void); |
1172 | extern tree add_stmt_to_compound (tree, tree, tree); | |
1173 | extern tree java_add_stmt (tree); | |
1174 | extern tree java_add_local_var (tree decl); | |
1175 | extern tree *get_stmts (void); | |
ba60e475 | 1176 | extern void register_exception_range(struct eh_range *, int, int); |
3e895978 | 1177 | |
6de9cd9a | 1178 | extern void finish_method (tree); |
916b57ce JS |
1179 | extern void java_expand_body (tree); |
1180 | ||
9771b263 | 1181 | extern int get_symbol_table_index (tree, tree, vec<method_entry, va_gc> **); |
3e895978 | 1182 | |
90471585 | 1183 | extern tree make_catch_class_record (tree, tree); |
85194ee9 AH |
1184 | extern tree emit_catch_table (tree); |
1185 | ||
1186 | extern void gen_indirect_dispatch_tables (tree type); | |
9c5fdae6 BM |
1187 | extern int split_qualified_name (tree *left, tree *right, tree source); |
1188 | extern int in_same_package (tree, tree); | |
1189 | ||
97b8365c TT |
1190 | extern void java_read_sourcefilenames (const char *fsource_filename); |
1191 | ||
1192 | extern void rewrite_reflection_indexes (void *); | |
1193 | ||
3ad1aba1 AH |
1194 | int cxx_keyword_p (const char *name, int length); |
1195 | ||
4f88ccda PB |
1196 | #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) |
1197 | ||
e04a16fb AG |
1198 | /* Access flags etc for a method (a FUNCTION_DECL): */ |
1199 | ||
36739040 TT |
1200 | #define METHOD_DUMMY(DECL) (DECL_LANG_SPECIFIC (DECL)->u.f.dummy) |
1201 | ||
eb34af89 RK |
1202 | #define METHOD_PUBLIC(DECL) DECL_LANG_FLAG_1 (FUNCTION_DECL_CHECK (DECL)) |
1203 | #define METHOD_PRIVATE(DECL) TREE_PRIVATE (FUNCTION_DECL_CHECK (DECL)) | |
1204 | #define METHOD_PROTECTED(DECL) TREE_PROTECTED (FUNCTION_DECL_CHECK (DECL)) | |
1205 | #define METHOD_STATIC(DECL) DECL_LANG_FLAG_2 (FUNCTION_DECL_CHECK (DECL)) | |
1206 | #define METHOD_FINAL(DECL) DECL_FINAL (FUNCTION_DECL_CHECK (DECL)) | |
1207 | #define METHOD_SYNCHRONIZED(DECL) DECL_LANG_FLAG_4 (FUNCTION_DECL_CHECK (DECL)) | |
1208 | #define METHOD_NATIVE(DECL) \ | |
1209 | (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.native) | |
1210 | #define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (DECL)) | |
1211 | #define METHOD_STRICTFP(DECL) \ | |
1212 | (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.strictfp) | |
1213 | #define METHOD_INVISIBLE(DECL) \ | |
1214 | (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.invisible) | |
97b8365c TT |
1215 | #define METHOD_BRIDGE(DECL) \ |
1216 | (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.bridge) | |
1217 | #define METHOD_VARARGS(DECL) \ | |
1218 | (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->u.f.varargs) | |
e04a16fb | 1219 | |
54646811 | 1220 | #define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE) |
54646811 | 1221 | |
c2952b01 APB |
1222 | /* Other predicates on method decls */ |
1223 | ||
eb34af89 | 1224 | #define DECL_CONSTRUCTOR_P(DECL) DECL_LANG_FLAG_7 (FUNCTION_DECL_CHECK (DECL)) |
e04a16fb | 1225 | |
c2952b01 | 1226 | #define DECL_INIT_P(DECL) (ID_INIT_P (DECL_NAME (DECL))) |
c2952b01 APB |
1227 | #define DECL_CLINIT_P(DECL) (ID_CLINIT_P (DECL_NAME (DECL))) |
1228 | ||
1229 | /* Predicates on method identifiers. Kept close to other macros using | |
1230 | them */ | |
1231 | #define ID_INIT_P(ID) ((ID) == init_identifier_node) | |
c2952b01 APB |
1232 | #define ID_CLINIT_P(ID) ((ID) == clinit_identifier_node) |
1233 | ||
eb34af89 | 1234 | /* Access flags etc for variable/field (FIELD_DECL, VAR_DECL, or PARM_DECL): */ |
e04a16fb | 1235 | |
eb34af89 RK |
1236 | #define FIELD_PRIVATE(DECL) TREE_PRIVATE (VAR_OR_FIELD_CHECK (DECL)) |
1237 | #define FIELD_PROTECTED(DECL) TREE_PROTECTED (VAR_OR_FIELD_CHECK (DECL)) | |
1238 | #define FIELD_PUBLIC(DECL) DECL_LANG_FLAG_1 (VAR_OR_FIELD_CHECK (DECL)) | |
1239 | #define FIELD_STATIC(DECL) TREE_STATIC (VAR_OR_FIELD_CHECK (DECL)) | |
1240 | #define FIELD_FINAL(DECL) DECL_FINAL (VAR_OR_FIELD_CHECK (DECL)) | |
1241 | #define FIELD_VOLATILE(DECL) DECL_LANG_FLAG_4 (VAR_OR_FIELD_CHECK (DECL)) | |
1242 | #define FIELD_TRANSIENT(DECL) DECL_LANG_FLAG_5 (VAR_OR_FIELD_CHECK (DECL)) | |
e04a16fb | 1243 | |
e04a16fb AG |
1244 | /* Access flags etc for a class (a TYPE_DECL): */ |
1245 | ||
eb34af89 RK |
1246 | #define CLASS_PUBLIC(DECL) DECL_LANG_FLAG_1 (TYPE_DECL_CHECK (DECL)) |
1247 | #define CLASS_FINAL(DECL) DECL_FINAL (TYPE_DECL_CHECK (DECL)) | |
1248 | #define CLASS_INTERFACE(DECL) DECL_LANG_FLAG_4 (TYPE_DECL_CHECK (DECL)) | |
1249 | #define CLASS_ABSTRACT(DECL) DECL_LANG_FLAG_5 (TYPE_DECL_CHECK (DECL)) | |
1250 | #define CLASS_SUPER(DECL) DECL_LANG_FLAG_6 (TYPE_DECL_CHECK (DECL)) | |
1251 | #define CLASS_STATIC(DECL) DECL_LANG_FLAG_7 (TYPE_DECL_CHECK (DECL)) | |
1252 | #define CLASS_PRIVATE(DECL) (TYPE_PRIVATE_INNER_CLASS (TREE_TYPE (DECL))) | |
1253 | #define CLASS_PROTECTED(DECL) (TYPE_PROTECTED_INNER_CLASS (TREE_TYPE (DECL))) | |
1254 | #define CLASS_STRICTFP(DECL) (TYPE_STRICTFP (TREE_TYPE (DECL))) | |
97b8365c | 1255 | #define CLASS_ENUM(DECL) (TYPE_ENUM (TREE_TYPE (DECL))) |
c6226a7e | 1256 | #define CLASS_USES_ASSERTIONS(DECL) (TYPE_USES_ASSERTIONS (TREE_TYPE (DECL))) |
97b8365c TT |
1257 | #define CLASS_SYNTHETIC(DECL) (TYPE_SYNTHETIC (TREE_TYPE (DECL))) |
1258 | #define CLASS_ANNOTATION(DECL) (TYPE_ANNOTATION (TREE_TYPE (DECL))) | |
e04a16fb | 1259 | |
5e942c50 APB |
1260 | /* @deprecated marker flag on methods, fields and classes */ |
1261 | ||
1262 | #define METHOD_DEPRECATED(DECL) DECL_LANG_FLAG_0 (DECL) | |
1263 | #define FIELD_DEPRECATED(DECL) DECL_LANG_FLAG_0 (DECL) | |
1264 | #define CLASS_DEPRECATED(DECL) DECL_LANG_FLAG_0 (DECL) | |
1265 | #define DECL_DEPRECATED(DECL) DECL_LANG_FLAG_0 (DECL) | |
1266 | ||
e04a16fb | 1267 | /* The number of virtual methods in this class's dispatch table. |
eb34af89 RK |
1268 | Does not include initial two dummy entries (one points to the |
1269 | Class object, and the other is for G++ -fvtable-thunks compatibility). */ | |
604a3205 | 1270 | #define TYPE_NVIRTUALS(TYPE) BINFO_VIRTUALS (TYPE_BINFO (TYPE)) |
e04a16fb AG |
1271 | |
1272 | /* A TREE_VEC (indexed by DECL_VINDEX) containing this class's | |
1273 | virtual methods. */ | |
604a3205 | 1274 | #define TYPE_VTABLE(TYPE) BINFO_VTABLE(TYPE_BINFO (TYPE)) |
e04a16fb | 1275 | |
e04a16fb AG |
1276 | /* Use CLASS_LOADED_P? FIXME */ |
1277 | #define CLASS_COMPLETE_P(DECL) DECL_LANG_FLAG_2 (DECL) | |
1278 | ||
3d4e2766 | 1279 | /* A vector used to track type states for the current method. */ |
9771b263 | 1280 | extern vec<tree, va_gc> *type_states; |
3d4e2766 | 1281 | |
e04a16fb AG |
1282 | /* This maps a bytecode offset (PC) to various flags, |
1283 | listed below (starting with BCODE_). */ | |
1284 | extern char *instruction_bits; | |
1285 | ||
1286 | /* True iff the byte is the start of an instruction. */ | |
1287 | #define BCODE_INSTRUCTION_START 1 | |
1288 | ||
67f0a6bf | 1289 | /* True iff there is a jump or a return to this location. */ |
e04a16fb AG |
1290 | #define BCODE_JUMP_TARGET 2 |
1291 | ||
e04a16fb AG |
1292 | /* True iff this is the start of an exception handler. */ |
1293 | #define BCODE_EXCEPTION_TARGET 16 | |
1294 | ||
1295 | /* True iff there is a jump to this location (and it needs a label). */ | |
67f0a6bf | 1296 | #define BCODE_TARGET (BCODE_JUMP_TARGET| BCODE_EXCEPTION_TARGET) |
e04a16fb AG |
1297 | |
1298 | /* True iff there is an entry in the linenumber table for this location. */ | |
1299 | #define BCODE_HAS_LINENUMBER 32 | |
1300 | ||
1301 | /* True iff there is more than one entry in the linenumber table for | |
1302 | this location. (This probably does not make much sense.) */ | |
1303 | #define BCODE_HAS_MULTI_LINENUMBERS 64 | |
1304 | ||
1305 | /* True if this instruction has been verified. */ | |
1306 | #define BCODE_VERIFIED 8 | |
1307 | ||
1308 | /* A pointer to the line number table of the current method. */ | |
49f48c71 | 1309 | extern const unsigned char *linenumber_table; |
e04a16fb AG |
1310 | /* The length (in items) of the line number table. */ |
1311 | extern int linenumber_count; | |
1312 | ||
e04a16fb AG |
1313 | /* In type_map, means the second half of a 64-bit double or long. */ |
1314 | #define TYPE_SECOND void_type_node | |
1315 | ||
1316 | /* In type_map, means the null type (i.e. type of a null reference). */ | |
1317 | #define TYPE_NULL ptr_type_node | |
1318 | ||
1319 | /* In a type map means the type the address subroutine return address. */ | |
1320 | #define TYPE_RETURN_ADDR return_address_type_node | |
1321 | ||
e04a16fb AG |
1322 | /* A array mapping variable/stack slot index to the type current |
1323 | in that variable/stack slot. | |
279e32c9 | 1324 | TYPE_SECOND and TYPE_NULL are special cases. */ |
e04a16fb AG |
1325 | extern tree *type_map; |
1326 | ||
1327 | /* Map a stack index to the type currently in that slot. */ | |
eb34af89 | 1328 | #define stack_type_map (type_map + DECL_MAX_LOCALS (current_function_decl)) |
e04a16fb AG |
1329 | |
1330 | /* True iff TYPE takes two variable/stack slots. */ | |
1331 | #define TYPE_IS_WIDE(TYPE) \ | |
1332 | ((TYPE) == double_type_node || (TYPE) == long_type_node) | |
1333 | ||
1334 | /* True iff TYPE is a Java array type. */ | |
1335 | #define TYPE_ARRAY_P(TYPE) TYPE_LANG_FLAG_1 (TYPE) | |
1336 | ||
4f88ccda PB |
1337 | /* True for an INDIRECT_REF created from a 'ARRAY.length' operation. */ |
1338 | #define IS_ARRAY_LENGTH_ACCESS(NODE) TREE_LANG_FLAG_4 (NODE) | |
1339 | ||
e04a16fb | 1340 | /* If FUNCTION_TYPE or METHOD_TYPE: cache for build_java_argument_signature. */ |
eb34af89 | 1341 | #define TYPE_ARGUMENT_SIGNATURE(TYPE) \ |
51545682 | 1342 | (TYPE_MINVAL (TREE_CHECK2 (TYPE, FUNCTION_TYPE, METHOD_TYPE))) |
e04a16fb AG |
1343 | |
1344 | /* Given an array type, give the type of the elements. */ | |
1345 | /* FIXME this use of TREE_TYPE conflicts with something or other. */ | |
eb34af89 | 1346 | #define TYPE_ARRAY_ELEMENT(ATYPE) TREE_TYPE (ATYPE) |
e04a16fb | 1347 | |
3c0ce750 PB |
1348 | /* True if class TYPE has been loaded (i.e. parsed plus laid out). |
1349 | (The check for CLASS_PARSED_P is needed because of Object and Class.) */ | |
1350 | #define CLASS_LOADED_P(TYPE) (TYPE_SIZE (TYPE) != NULL_TREE \ | |
1351 | && (CLASS_PARSED_P(TYPE) || TYPE_ARRAY_P(TYPE))) | |
1352 | ||
1353 | /* True if class TYPE has been parsed (first pass). */ | |
1354 | #define CLASS_PARSED_P(TYPE) TYPE_LANG_FLAG_2 (TYPE) | |
e04a16fb | 1355 | |
b351b287 APB |
1356 | /* True of a RECORD_TYPE of a class/interface type (not array type) */ |
1357 | #define CLASS_P(TYPE) TYPE_LANG_FLAG_4 (TYPE) | |
1358 | ||
54646811 | 1359 | /* True if class TYPE was requested (on command line) to be compiled.*/ |
eb34af89 | 1360 | #define CLASS_FROM_CURRENTLY_COMPILED_P(TYPE) TYPE_LANG_FLAG_5 (TYPE) |
b351b287 | 1361 | |
c2952b01 | 1362 | /* True if class TYPE is currently being laid out. Helps in detection |
a83f01f0 | 1363 | of inheritance cycle occurring as a side effect of performing the |
c2952b01 APB |
1364 | layout of a class. */ |
1365 | #define CLASS_BEING_LAIDOUT(TYPE) TYPE_LANG_FLAG_6 (TYPE) | |
1366 | ||
e04a16fb AG |
1367 | /* True if ID is a qualified named (contains . or /) */ |
1368 | #define QUALIFIED_P(ID) TREE_LANG_FLAG_2 (ID) | |
1369 | ||
b351b287 APB |
1370 | /* True if ID is a command-line specified filename */ |
1371 | #define IS_A_COMMAND_LINE_FILENAME_P(ID) TREE_LANG_FLAG_4 (ID) | |
1372 | ||
1373 | /* True if filename ID has already been parsed */ | |
1374 | #define HAS_BEEN_ALREADY_PARSED_P(ID) TREE_LANG_FLAG_5 (ID) | |
1375 | ||
eec87542 HB |
1376 | /* True if TYPE (a TREE_TYPE denoting a class type) was found to |
1377 | feature a finalizer method. */ | |
1378 | #define HAS_FINALIZER_P(EXPR) TREE_LANG_FLAG_3 (EXPR) | |
1379 | ||
e15fd46a | 1380 | /* True if NODE belongs to an inner class TYPE_DECL node. |
c2952b01 APB |
1381 | Verifies that NODE as the attributes of a decl. */ |
1382 | #define INNER_CLASS_DECL_P(NODE) (TYPE_NAME (TREE_TYPE (NODE)) == NODE \ | |
1383 | && DECL_CONTEXT (NODE)) | |
1384 | ||
e15fd46a | 1385 | /* True if NODE belongs to an inner class RECORD_TYPE node. Checks |
c2952b01 APB |
1386 | that TYPE_NAME bears a decl. An array type wouldn't. */ |
1387 | #define INNER_CLASS_TYPE_P(NODE) (TREE_CODE (TYPE_NAME (NODE)) == TYPE_DECL \ | |
1388 | && DECL_CONTEXT (TYPE_NAME (NODE))) | |
1389 | ||
cd64dc98 | 1390 | /* True if the class type NODE was declared in an inner scope and is |
c2952b01 APB |
1391 | not a toplevel class */ |
1392 | #define PURE_INNER_CLASS_TYPE_P(NODE) \ | |
1393 | (INNER_CLASS_TYPE_P (NODE) && !CLASS_STATIC (TYPE_NAME (NODE))) | |
1394 | ||
e15fd46a | 1395 | /* True if NODE (a TYPE_DECL or a RECORD_TYPE) is an inner class. */ |
c2952b01 APB |
1396 | #define INNER_CLASS_P(NODE) (TREE_CODE (NODE) == TYPE_DECL ? \ |
1397 | INNER_CLASS_DECL_P (NODE) : \ | |
1398 | (TREE_CODE (NODE) == RECORD_TYPE ? \ | |
1399 | INNER_CLASS_TYPE_P (NODE) : \ | |
400500c4 | 1400 | (abort (), 0))) |
c2952b01 APB |
1401 | |
1402 | /* On a TYPE_DECL, hold the list of inner classes defined within the | |
1403 | scope of TYPE_DECL. */ | |
eb34af89 | 1404 | #define DECL_INNER_CLASS_LIST(NODE) DECL_INITIAL (TYPE_DECL_CHECK (NODE)) |
c2952b01 | 1405 | |
e04a16fb | 1406 | /* Add a FIELD_DECL to RECORD_TYPE RTYPE. |
c2255bc4 | 1407 | The field has name NAME (a char*), a type FTYPE, and a location of LOC. |
e04a16fb AG |
1408 | Unless this is the first field, FIELD most hold the previous field. |
1409 | FIELD is set to the newly created FIELD_DECL. | |
1410 | ||
1411 | We set DECL_ARTIFICIAL so these fields get skipped by make_class_data | |
1412 | if compiling java.lang.Object or java.lang.Class. */ | |
1413 | ||
c2255bc4 AH |
1414 | #define PUSH_FIELD(LOC, RTYPE, FIELD, NAME, FTYPE) \ |
1415 | { tree _field = build_decl (LOC, FIELD_DECL, get_identifier ((NAME)), (FTYPE)); \ | |
eb34af89 RK |
1416 | if (TYPE_FIELDS (RTYPE) == NULL_TREE) \ |
1417 | TYPE_FIELDS (RTYPE) = _field; \ | |
1418 | else \ | |
910ad8de | 1419 | DECL_CHAIN(FIELD) = _field; \ |
eb34af89 RK |
1420 | DECL_CONTEXT (_field) = (RTYPE); \ |
1421 | DECL_ARTIFICIAL (_field) = 1; \ | |
1422 | FIELD = _field; } | |
e04a16fb AG |
1423 | |
1424 | #define FINISH_RECORD(RTYPE) layout_type (RTYPE) | |
1425 | ||
c4e64f39 NF |
1426 | /* Start building a RECORD_TYPE constructor's elements in V. The |
1427 | constructor will have type CTYPE. */ | |
1428 | #define START_RECORD_CONSTRUCTOR(V, CTYPE) \ | |
4038c495 GB |
1429 | do \ |
1430 | { \ | |
9771b263 | 1431 | vec_alloc (V, 0); \ |
c4e64f39 | 1432 | CONSTRUCTOR_APPEND_ELT (V, TYPE_FIELDS (CTYPE), NULL); \ |
4038c495 GB |
1433 | } \ |
1434 | while (0) | |
e04a16fb | 1435 | |
c4e64f39 | 1436 | /* Append a field initializer to V for the dummy field for the inherited |
e04a16fb AG |
1437 | fields. The dummy field has the given VALUE, and the same type as the |
1438 | super-class. Must be specified before calls to PUSH_FIELD_VALUE. */ | |
c4e64f39 | 1439 | #define PUSH_SUPER_VALUE(V, VALUE) \ |
4038c495 GB |
1440 | do \ |
1441 | { \ | |
9771b263 | 1442 | constructor_elt *_elt___ = &(V)->last (); \ |
910ad8de | 1443 | tree _next___ = DECL_CHAIN (_elt___->index); \ |
4038c495 GB |
1444 | gcc_assert (!DECL_NAME (_elt___->index)); \ |
1445 | _elt___->value = VALUE; \ | |
c4e64f39 | 1446 | CONSTRUCTOR_APPEND_ELT (V, _next___, NULL); \ |
4038c495 GB |
1447 | } \ |
1448 | while (0) | |
e04a16fb | 1449 | |
c4e64f39 | 1450 | /* Append a field initializer to V for a field with the given VALUE. |
e04a16fb AG |
1451 | NAME is a char* string used for error checking; |
1452 | the initializer must be specified in order. */ | |
c4e64f39 | 1453 | #define PUSH_FIELD_VALUE(V, NAME, VALUE) \ |
4038c495 GB |
1454 | do \ |
1455 | { \ | |
9771b263 | 1456 | constructor_elt *_elt___ = &(V)->last (); \ |
910ad8de | 1457 | tree _next___ = DECL_CHAIN (_elt___->index); \ |
4038c495 GB |
1458 | gcc_assert (strcmp (IDENTIFIER_POINTER (DECL_NAME (_elt___->index)), \ |
1459 | NAME) == 0); \ | |
1460 | _elt___->value = VALUE; \ | |
c4e64f39 | 1461 | CONSTRUCTOR_APPEND_ELT (V, _next___, NULL); \ |
4038c495 GB |
1462 | } \ |
1463 | while (0) | |
e04a16fb | 1464 | |
c4e64f39 NF |
1465 | /* Finish creating a record CONSTRUCTOR CONS with type CTYPE and elements V. */ |
1466 | #define FINISH_RECORD_CONSTRUCTOR(CONS, V, CTYPE) \ | |
1467 | do \ | |
1468 | { \ | |
9771b263 | 1469 | V->pop (); \ |
c4e64f39 NF |
1470 | CONS = build_constructor (CTYPE, V); \ |
1471 | TREE_CONSTANT (CONS) = 0; \ | |
1472 | } \ | |
1473 | while (0) | |
e04a16fb | 1474 | |
bc3ca41b PB |
1475 | #define BLOCK_EXPR_DECLS(NODE) BLOCK_VARS(NODE) |
1476 | #define BLOCK_EXPR_BODY(NODE) BLOCK_SUBBLOCKS(NODE) | |
eb34af89 | 1477 | |
dc6d7095 RS |
1478 | #define BUILD_MONITOR_ENTER(WHERE, ARG) \ |
1479 | { \ | |
5039610b SL |
1480 | (WHERE) = build_call_nary (int_type_node, \ |
1481 | build_address_of (soft_monitorenter_node), \ | |
1482 | 1, (ARG)); \ | |
dc6d7095 | 1483 | TREE_SIDE_EFFECTS (WHERE) = 1; \ |
939d7216 PB |
1484 | } |
1485 | ||
5039610b SL |
1486 | #define BUILD_MONITOR_EXIT(WHERE, ARG) \ |
1487 | { \ | |
1488 | (WHERE) = build_call_nary (int_type_node, \ | |
1489 | build_address_of (soft_monitorexit_node), \ | |
1490 | 1, (ARG)); \ | |
1491 | TREE_SIDE_EFFECTS (WHERE) = 1; \ | |
939d7216 PB |
1492 | } |
1493 | ||
4009bb7d APB |
1494 | /* True when we can perform static class initialization optimization */ |
1495 | #define STATIC_CLASS_INIT_OPT_P() \ | |
6e63e240 | 1496 | (flag_optimize_sci && (optimize >= 2)) |
4009bb7d | 1497 | |
67db0ce7 TT |
1498 | /* These are the possible values for the `state' field of the class |
1499 | structure. This must be kept in sync with libgcj. */ | |
1500 | enum | |
1501 | { | |
1502 | JV_STATE_NOTHING = 0, /* Set by compiler. */ | |
1503 | ||
1504 | JV_STATE_PRELOADING = 1, /* Can do _Jv_FindClass. */ | |
1505 | JV_STATE_LOADING = 3, /* Has super installed. */ | |
36739040 TT |
1506 | JV_STATE_READ = 4, /* Has been completely defined. */ |
1507 | JV_STATE_LOADED = 5, /* Has Miranda methods defined. */ | |
67db0ce7 TT |
1508 | |
1509 | JV_STATE_COMPILED = 6, /* This was a compiled class. */ | |
1510 | ||
1511 | JV_STATE_PREPARED = 7, /* Layout & static init done. */ | |
1512 | JV_STATE_LINKED = 9, /* Strings interned. */ | |
1513 | ||
1514 | JV_STATE_IN_PROGRESS = 10, /* <Clinit> running. */ | |
60b68525 TT |
1515 | JV_STATE_ERROR = 12, |
1516 | ||
1517 | JV_STATE_DONE = 14 /* Must be last. */ | |
67db0ce7 TT |
1518 | }; |
1519 | ||
e8b22dd1 | 1520 | #undef DEBUG_JAVA_BINDING_LEVELS |
6de9cd9a | 1521 | |
d502f210 | 1522 | extern void java_genericize (tree); |
726a989a | 1523 | extern int java_gimplify_expr (tree *, gimple_seq *, gimple_seq *); |
6de9cd9a | 1524 | |
97b8365c | 1525 | extern FILE *finput; |
a58d7453 | 1526 | |
2f23f5c1 | 1527 | #endif /* ! GCC_JAVA_TREE_H */ |