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