OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc4/] [gcc/] [ada/] [gcc-interface/] [ada-tree.h] - Blame information for rev 281

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 281 jeremybenn
/****************************************************************************
2
 *                                                                          *
3
 *                         GNAT COMPILER COMPONENTS                         *
4
 *                                                                          *
5
 *                             A D A - T R E E                              *
6
 *                                                                          *
7
 *                              C Header File                               *
8
 *                                                                          *
9
 *          Copyright (C) 1992-2009, Free Software Foundation, Inc.         *
10
 *                                                                          *
11
 * GNAT is free software;  you can  redistribute it  and/or modify it under *
12
 * terms of the  GNU General Public License as published  by the Free Soft- *
13
 * ware  Foundation;  either version 3,  or (at your option) any later ver- *
14
 * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
15
 * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
16
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
17
 * for  more details.  You should have received a copy of the GNU General   *
18
 * Public License along with GCC; see the file COPYING3.  If not see        *
19
 * <http://www.gnu.org/licenses/>.                                          *
20
 *                                                                          *
21
 * GNAT was originally developed  by the GNAT team at  New York University. *
22
 * Extensive contributions were provided by Ada Core Technologies Inc.      *
23
 *                                                                          *
24
 ****************************************************************************/
25
 
26
/* The resulting tree type.  */
27
union GTY((desc ("0"),
28
           chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)")))
29
  lang_tree_node
30
{
31
  union tree_node GTY((tag ("0"),
32
                       desc ("tree_node_structure (&%h)"))) generic;
33
};
34
 
35
/* Ada uses the lang_decl and lang_type fields to hold a tree.  */
36
struct GTY(()) lang_type { tree t; };
37
struct GTY(()) lang_decl { tree t; };
38
 
39
/* Macros to get and set the tree in TYPE_LANG_SPECIFIC.  */
40
#define GET_TYPE_LANG_SPECIFIC(NODE) \
41
  (TYPE_LANG_SPECIFIC (NODE) ? TYPE_LANG_SPECIFIC (NODE)->t : NULL_TREE)
42
 
43
#define SET_TYPE_LANG_SPECIFIC(NODE, X)                     \
44
do {                                                        \
45
  tree tmp = (X);                                           \
46
  if (!TYPE_LANG_SPECIFIC (NODE))                           \
47
    TYPE_LANG_SPECIFIC (NODE) = GGC_NEW (struct lang_type); \
48
  TYPE_LANG_SPECIFIC (NODE)->t = tmp;                       \
49
} while (0)
50
 
51
/* Macros to get and set the tree in DECL_LANG_SPECIFIC.  */
52
#define GET_DECL_LANG_SPECIFIC(NODE) \
53
  (DECL_LANG_SPECIFIC (NODE) ? DECL_LANG_SPECIFIC (NODE)->t : NULL_TREE)
54
 
55
#define SET_DECL_LANG_SPECIFIC(NODE, X)                     \
56
do {                                                        \
57
  tree tmp = (X);                                           \
58
  if (!DECL_LANG_SPECIFIC (NODE))                           \
59
    DECL_LANG_SPECIFIC (NODE) = GGC_NEW (struct lang_decl); \
60
  DECL_LANG_SPECIFIC (NODE)->t = tmp;                       \
61
} while (0)
62
 
63
 
64
/* Flags added to type nodes.  */
65
 
66
/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
67
   record being used as a fat pointer (only true for RECORD_TYPE).  */
68
#define TYPE_FAT_POINTER_P(NODE) \
69
  TYPE_LANG_FLAG_0 (RECORD_OR_UNION_CHECK (NODE))
70
 
71
#define TYPE_IS_FAT_POINTER_P(NODE) \
72
  (TREE_CODE (NODE) == RECORD_TYPE && TYPE_FAT_POINTER_P (NODE))
73
 
74
/* For integral types and array types, nonzero if this is a packed array type
75
   used for bit-packed types.  Such types should not be extended to a larger
76
   size or validated against a specified size.  */
77
#define TYPE_PACKED_ARRAY_TYPE_P(NODE) TYPE_LANG_FLAG_0 (NODE)
78
 
79
#define TYPE_IS_PACKED_ARRAY_TYPE_P(NODE) \
80
  ((TREE_CODE (NODE) == INTEGER_TYPE || TREE_CODE (NODE) == ARRAY_TYPE) \
81
   && TYPE_PACKED_ARRAY_TYPE_P (NODE))
82
 
83
/* For INTEGER_TYPE, nonzero if this is a modular type with a modulus that
84
   is not equal to two to the power of its mode's size.  */
85
#define TYPE_MODULAR_P(NODE) TYPE_LANG_FLAG_1 (INTEGER_TYPE_CHECK (NODE))
86
 
87
/* For ARRAY_TYPE, nonzero if this type corresponds to a dimension of
88
   an Ada array other than the first.  */
89
#define TYPE_MULTI_ARRAY_P(NODE) TYPE_LANG_FLAG_1 (ARRAY_TYPE_CHECK (NODE))
90
 
91
/* For FUNCTION_TYPE, nonzero if this denotes a function returning an
92
   unconstrained array or record.  */
93
#define TYPE_RETURNS_UNCONSTRAINED_P(NODE) \
94
  TYPE_LANG_FLAG_1 (FUNCTION_TYPE_CHECK (NODE))
95
 
96
/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this denotes
97
   a justified modular type (will only be true for RECORD_TYPE).  */
98
#define TYPE_JUSTIFIED_MODULAR_P(NODE) \
99
  TYPE_LANG_FLAG_1 (RECORD_OR_UNION_CHECK (NODE))
100
 
101
/* Nonzero in an arithmetic subtype if this is a subtype not known to the
102
   front-end.  */
103
#define TYPE_EXTRA_SUBTYPE_P(NODE) TYPE_LANG_FLAG_2 (NODE)
104
 
105
/* Nonzero for composite types if this is a by-reference type.  */
106
#define TYPE_BY_REFERENCE_P(NODE) TYPE_LANG_FLAG_2 (NODE)
107
 
108
/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is the
109
   type for an object whose type includes its template in addition to
110
   its value (only true for RECORD_TYPE).  */
111
#define TYPE_CONTAINS_TEMPLATE_P(NODE) \
112
  TYPE_LANG_FLAG_3 (RECORD_OR_UNION_CHECK (NODE))
113
 
114
/* For INTEGER_TYPE, nonzero if this really represents a VAX
115
   floating-point type.  */
116
#define TYPE_VAX_FLOATING_POINT_P(NODE) \
117
  TYPE_LANG_FLAG_3 (INTEGER_TYPE_CHECK (NODE))
118
 
119
/* True if NODE is a thin pointer.  */
120
#define TYPE_IS_THIN_POINTER_P(NODE)                    \
121
  (POINTER_TYPE_P (NODE)                                \
122
   && TREE_CODE (TREE_TYPE (NODE)) == RECORD_TYPE       \
123
   && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (NODE)))
124
 
125
/* True if TYPE is either a fat or thin pointer to an unconstrained
126
   array.  */
127
#define TYPE_IS_FAT_OR_THIN_POINTER_P(NODE) \
128
  (TYPE_IS_FAT_POINTER_P (NODE) || TYPE_IS_THIN_POINTER_P (NODE))
129
 
130
/* For INTEGER_TYPEs, nonzero if the type has a biased representation.  */
131
#define TYPE_BIASED_REPRESENTATION_P(NODE) \
132
  TYPE_LANG_FLAG_4 (INTEGER_TYPE_CHECK (NODE))
133
 
134
/* For ARRAY_TYPEs, nonzero if the array type has Convention_Fortran.  */
135
#define TYPE_CONVENTION_FORTRAN_P(NODE) \
136
  TYPE_LANG_FLAG_4 (ARRAY_TYPE_CHECK (NODE))
137
 
138
/* For FUNCTION_TYPEs, nonzero if the function returns by reference.  */
139
#define TYPE_RETURNS_BY_REF_P(NODE) \
140
  TYPE_LANG_FLAG_4 (FUNCTION_TYPE_CHECK (NODE))
141
 
142
/* For VOID_TYPE, ENUMERAL_TYPE, UNION_TYPE, and RECORD_TYPE, nonzero if this
143
   is a dummy type, made to correspond to a private or incomplete type.  */
144
#define TYPE_DUMMY_P(NODE) TYPE_LANG_FLAG_4 (NODE)
145
 
146
#define TYPE_IS_DUMMY_P(NODE) \
147
  ((TREE_CODE (NODE) == VOID_TYPE || TREE_CODE (NODE) == RECORD_TYPE    \
148
    || TREE_CODE (NODE) == UNION_TYPE || TREE_CODE (NODE) == ENUMERAL_TYPE) \
149
   && TYPE_DUMMY_P (NODE))
150
 
151
/* For FUNCTION_TYPEs, nonzero if function returns by being passed a pointer
152
   to a place to store its result.  */
153
#define TYPE_RETURNS_BY_TARGET_PTR_P(NODE) \
154
  TYPE_LANG_FLAG_5 (FUNCTION_TYPE_CHECK (NODE))
155
 
156
/* For an INTEGER_TYPE, nonzero if TYPE_ACTUAL_BOUNDS is present.  */
157
#define TYPE_HAS_ACTUAL_BOUNDS_P(NODE) \
158
  TYPE_LANG_FLAG_5 (INTEGER_TYPE_CHECK (NODE))
159
 
160
/* For a RECORD_TYPE, nonzero if this was made just to supply needed
161
   padding or alignment.  */
162
#define TYPE_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE))
163
 
164
#define TYPE_IS_PADDING_P(NODE) \
165
  (TREE_CODE (NODE) == RECORD_TYPE && TYPE_PADDING_P (NODE))
166
 
167
/* True if TYPE can alias any other types.  */
168
#define TYPE_UNIVERSAL_ALIASING_P(NODE) TYPE_LANG_FLAG_6 (NODE)
169
 
170
/* In an UNCONSTRAINED_ARRAY_TYPE, this is the record containing both the
171
   template and the object.
172
 
173
   ??? We also put this on an ENUMERAL_TYPE that is dummy.  Technically,
174
   this is a conflict on the minval field, but there doesn't seem to be
175
   simple fix, so we'll live with this kludge for now.  */
176
#define TYPE_OBJECT_RECORD_TYPE(NODE) \
177
  (TREE_CHECK2 ((NODE), UNCONSTRAINED_ARRAY_TYPE, ENUMERAL_TYPE)->type.minval)
178
 
179
/* For numerical types, this is the GCC lower bound of the type.  The GCC
180
   type system is based on the invariant that an object X of a given type
181
   cannot hold at run time a value smaller than its lower bound; otherwise
182
   the behavior is undefined.  The optimizer takes advantage of this and
183
   considers that the assertion X >= LB is always true.  */
184
#define TYPE_GCC_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval)
185
 
186
/* For numerical types, this is the GCC upper bound of the type.  The GCC
187
   type system is based on the invariant that an object X of a given type
188
   cannot hold at run time a value larger than its upper bound; otherwise
189
   the behavior is undefined.  The optimizer takes advantage of this and
190
   considers that the assertion X <= UB is always true.  */
191
#define TYPE_GCC_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval)
192
 
193
/* For a FUNCTION_TYPE, if the subprogram has parameters passed by copy in/
194
   copy out, this is the list of nodes used to specify the return values of
195
   the out (or in out) parameters that are passed by copy in/copy out.  For
196
   a full description of the copy in/copy out parameter passing mechanism
197
   refer to the routine gnat_to_gnu_entity.  */
198
#define TYPE_CI_CO_LIST(NODE) TYPE_LANG_SLOT_1 (FUNCTION_TYPE_CHECK (NODE))
199
 
200
/* For a VECTOR_TYPE, this is the representative array type.  */
201
#define TYPE_REPRESENTATIVE_ARRAY(NODE) \
202
  TYPE_LANG_SLOT_1 (VECTOR_TYPE_CHECK (NODE))
203
 
204
/* For numerical types, this holds various RM-defined values.  */
205
#define TYPE_RM_VALUES(NODE) TYPE_LANG_SLOT_1 (NUMERICAL_TYPE_CHECK (NODE))
206
 
207
/* Macros to get and set the individual values in TYPE_RM_VALUES.  */
208
#define TYPE_RM_VALUE(NODE, N)                              \
209
  (TYPE_RM_VALUES (NODE)                                    \
210
   ? TREE_VEC_ELT (TYPE_RM_VALUES (NODE), (N)) : NULL_TREE)
211
 
212
#define SET_TYPE_RM_VALUE(NODE, N, X)              \
213
do {                                               \
214
  tree tmp = (X);                                  \
215
  if (!TYPE_RM_VALUES (NODE))                      \
216
    TYPE_RM_VALUES (NODE) = make_tree_vec (3);     \
217
  /* ??? The field is not visited by the generic   \
218
     code so we need to mark it manually.  */      \
219
  MARK_VISITED (tmp);                              \
220
  TREE_VEC_ELT (TYPE_RM_VALUES (NODE), (N)) = tmp; \
221
} while (0)
222
 
223
/* For numerical types, this is the RM size of the type, aka its precision.
224
   There is a discrepancy between what is called precision here (and more
225
   generally throughout gigi) and what is called precision in the GCC type
226
   system: in the former case it's TYPE_RM_SIZE whereas it's TYPE_PRECISION
227
   in the latter case.  They are not identical because of the need to support
228
   invalid values.
229
 
230
   These values can be outside the range of values allowed by the RM size
231
   but they must nevertheless be valid in the GCC type system, otherwise
232
   the optimizer can pretend that they simply don't exist.  Therefore they
233
   must be within the range of values allowed by the precision in the GCC
234
   sense, hence TYPE_PRECISION be set to the Esize, not the RM size.  */
235
#define TYPE_RM_SIZE(NODE) TYPE_RM_VALUE ((NODE), 0)
236
#define SET_TYPE_RM_SIZE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 0, (X))
237
 
238
/* For numerical types, this is the RM lower bound of the type.  There is
239
   again a discrepancy between this lower bound and the GCC lower bound,
240
   again because of the need to support invalid values.
241
 
242
   These values can be outside the range of values allowed by the RM lower
243
   bound but they must nevertheless be valid in the GCC type system, otherwise
244
   the optimizer can pretend that they simply don't exist.  Therefore they
245
   must be within the range of values allowed by the lower bound in the GCC
246
   sense, hence the GCC lower bound be set to that of the base type.  */
247
#define TYPE_RM_MIN_VALUE(NODE) TYPE_RM_VALUE ((NODE), 1)
248
#define SET_TYPE_RM_MIN_VALUE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 1, (X))
249
 
250
/* For numerical types, this is the RM upper bound of the type.  There is
251
   again a discrepancy between this upper bound and the GCC upper bound,
252
   again because of the need to support invalid values.
253
 
254
   These values can be outside the range of values allowed by the RM upper
255
   bound but they must nevertheless be valid in the GCC type system, otherwise
256
   the optimizer can pretend that they simply don't exist.  Therefore they
257
   must be within the range of values allowed by the upper bound in the GCC
258
   sense, hence the GCC upper bound be set to that of the base type.  */
259
#define TYPE_RM_MAX_VALUE(NODE) TYPE_RM_VALUE ((NODE), 2)
260
#define SET_TYPE_RM_MAX_VALUE(NODE, X) SET_TYPE_RM_VALUE ((NODE), 2, (X))
261
 
262
/* For numerical types, this is the lower bound of the type, i.e. the RM lower
263
   bound for language-defined types and the GCC lower bound for others.  */
264
#undef TYPE_MIN_VALUE
265
#define TYPE_MIN_VALUE(NODE) \
266
  (TYPE_RM_MIN_VALUE (NODE) \
267
   ? TYPE_RM_MIN_VALUE (NODE) : TYPE_GCC_MIN_VALUE (NODE))
268
 
269
/* For numerical types, this is the upper bound of the type, i.e. the RM upper
270
   bound for language-defined types and the GCC upper bound for others.  */
271
#undef TYPE_MAX_VALUE
272
#define TYPE_MAX_VALUE(NODE) \
273
  (TYPE_RM_MAX_VALUE (NODE) \
274
   ? TYPE_RM_MAX_VALUE (NODE) : TYPE_GCC_MAX_VALUE (NODE))
275
 
276
/* For an INTEGER_TYPE with TYPE_MODULAR_P, this is the value of the
277
   modulus. */
278
#define TYPE_MODULUS(NODE) GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
279
#define SET_TYPE_MODULUS(NODE, X) \
280
  SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
281
 
282
/* For an INTEGER_TYPE with TYPE_VAX_FLOATING_POINT_P, this is the
283
   Digits_Value.  */
284
#define TYPE_DIGITS_VALUE(NODE) \
285
  GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
286
#define SET_TYPE_DIGITS_VALUE(NODE, X) \
287
  SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
288
 
289
/* For an INTEGER_TYPE that is the TYPE_DOMAIN of some ARRAY_TYPE, this is
290
   the type corresponding to the Ada index type.  */
291
#define TYPE_INDEX_TYPE(NODE) \
292
  GET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE))
293
#define SET_TYPE_INDEX_TYPE(NODE, X) \
294
  SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X)
295
 
296
/* For an INTEGER_TYPE with TYPE_HAS_ACTUAL_BOUNDS_P or an ARRAY_TYPE, this is
297
   the index type that should be used when the actual bounds are required for
298
   a template.  This is used in the case of packed arrays.  */
299
#define TYPE_ACTUAL_BOUNDS(NODE) \
300
  GET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE))
301
#define SET_TYPE_ACTUAL_BOUNDS(NODE, X) \
302
  SET_TYPE_LANG_SPECIFIC (TREE_CHECK2 (NODE, INTEGER_TYPE, ARRAY_TYPE), X)
303
 
304
/* For a RECORD_TYPE that is a fat pointer, this is the type for the
305
   unconstrained object.  Likewise for a RECORD_TYPE that is pointed
306
   to by a thin pointer.  */
307
#define TYPE_UNCONSTRAINED_ARRAY(NODE) \
308
  GET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE))
309
#define SET_TYPE_UNCONSTRAINED_ARRAY(NODE, X) \
310
  SET_TYPE_LANG_SPECIFIC (RECORD_TYPE_CHECK (NODE), X)
311
 
312
/* For other RECORD_TYPEs and all UNION_TYPEs and QUAL_UNION_TYPEs, this is
313
   the Ada size of the object.  This differs from the GCC size in that it
314
   does not include any rounding up to the alignment of the type.  */
315
#define TYPE_ADA_SIZE(NODE) \
316
  GET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE))
317
#define SET_TYPE_ADA_SIZE(NODE, X) \
318
  SET_TYPE_LANG_SPECIFIC (RECORD_OR_UNION_CHECK (NODE), X)
319
 
320
 
321
/* Flags added to decl nodes.  */
322
 
323
/* Nonzero in a FUNCTION_DECL that represents a stubbed function
324
   discriminant.  */
325
#define DECL_STUBBED_P(NODE) DECL_LANG_FLAG_0 (FUNCTION_DECL_CHECK (NODE))
326
 
327
/* Nonzero in a VAR_DECL if it is guaranteed to be constant after having
328
   been elaborated and TREE_READONLY is not set on it.  */
329
#define DECL_READONLY_ONCE_ELAB(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
330
 
331
/* Nonzero if this decl is always used by reference; i.e., an INDIRECT_REF
332
   is needed to access the object.  */
333
#define DECL_BY_REF_P(NODE) DECL_LANG_FLAG_1 (NODE)
334
 
335
/* Nonzero in a FIELD_DECL that is a dummy built for some internal reason.  */
336
#define DECL_INTERNAL_P(NODE) DECL_LANG_FLAG_3 (FIELD_DECL_CHECK (NODE))
337
 
338
/* Nonzero if this decl is a PARM_DECL for an Ada array being passed to a
339
   foreign convention subprogram.  */
340
#define DECL_BY_COMPONENT_PTR_P(NODE) DECL_LANG_FLAG_3 (PARM_DECL_CHECK (NODE))
341
 
342
/* Nonzero in a FUNCTION_DECL that corresponds to an elaboration procedure.  */
343
#define DECL_ELABORATION_PROC_P(NODE) \
344
  DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (NODE))
345
 
346
/* Nonzero if this is a decl for a pointer that points to something which
347
   is readonly.  Used mostly for fat pointers.  */
348
#define DECL_POINTS_TO_READONLY_P(NODE) DECL_LANG_FLAG_4 (NODE)
349
 
350
/* Nonzero in a PARM_DECL if we are to pass by descriptor.  */
351
#define DECL_BY_DESCRIPTOR_P(NODE) DECL_LANG_FLAG_5 (PARM_DECL_CHECK (NODE))
352
 
353
/* Nonzero in a VAR_DECL if it is a pointer renaming a global object.  */
354
#define DECL_RENAMING_GLOBAL_P(NODE) DECL_LANG_FLAG_5 (VAR_DECL_CHECK (NODE))
355
 
356
/* In a FIELD_DECL corresponding to a discriminant, contains the
357
   discriminant number.  */
358
#define DECL_DISCRIMINANT_NUMBER(NODE) DECL_INITIAL (FIELD_DECL_CHECK (NODE))
359
 
360
/* In a CONST_DECL, points to a VAR_DECL that is allocatable to
361
   memory.  Used when a scalar constant is aliased or has its
362
   address taken.  */
363
#define DECL_CONST_CORRESPONDING_VAR(NODE) \
364
  GET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE))
365
#define SET_DECL_CONST_CORRESPONDING_VAR(NODE, X) \
366
  SET_DECL_LANG_SPECIFIC (CONST_DECL_CHECK (NODE), X)
367
 
368
/* In a FIELD_DECL, points to the FIELD_DECL that was the ultimate
369
   source of the decl.  */
370
#define DECL_ORIGINAL_FIELD(NODE) \
371
  GET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE))
372
#define SET_DECL_ORIGINAL_FIELD(NODE, X) \
373
  SET_DECL_LANG_SPECIFIC (FIELD_DECL_CHECK (NODE), X)
374
 
375
/* In a VAR_DECL, points to the object being renamed if the VAR_DECL is a
376
   renaming pointer, otherwise 0.  Note that this object is guaranteed to
377
   be protected against multiple evaluations.  */
378
#define DECL_RENAMED_OBJECT(NODE) \
379
  GET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE))
380
#define SET_DECL_RENAMED_OBJECT(NODE, X) \
381
  SET_DECL_LANG_SPECIFIC (VAR_DECL_CHECK (NODE), X)
382
 
383
/* In a TYPE_DECL, points to the parallel type if any, otherwise 0.  */
384
#define DECL_PARALLEL_TYPE(NODE) \
385
  GET_DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE))
386
#define SET_DECL_PARALLEL_TYPE(NODE, X) \
387
  SET_DECL_LANG_SPECIFIC (TYPE_DECL_CHECK (NODE), X)
388
 
389
/* In a FUNCTION_DECL, points to the stub associated with the function
390
   if any, otherwise 0.  */
391
#define DECL_FUNCTION_STUB(NODE) \
392
  GET_DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE))
393
#define SET_DECL_FUNCTION_STUB(NODE, X) \
394
  SET_DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (NODE), X)
395
 
396
/* In a PARM_DECL, points to the alternate TREE_TYPE.  */
397
#define DECL_PARM_ALT_TYPE(NODE) \
398
  GET_DECL_LANG_SPECIFIC (PARM_DECL_CHECK (NODE))
399
#define SET_DECL_PARM_ALT_TYPE(NODE, X) \
400
  SET_DECL_LANG_SPECIFIC (PARM_DECL_CHECK (NODE), X)
401
 
402
 
403
/* Fields and macros for statements.  */
404
#define IS_ADA_STMT(NODE) \
405
  (STATEMENT_CLASS_P (NODE) && TREE_CODE (NODE) >= STMT_STMT)
406
 
407
#define STMT_STMT_STMT(NODE)     TREE_OPERAND_CHECK_CODE (NODE, STMT_STMT, 0)
408
#define LOOP_STMT_TOP_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 0)
409
#define LOOP_STMT_BOT_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 1)
410
#define LOOP_STMT_UPDATE(NODE)   TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 2)
411
#define LOOP_STMT_BODY(NODE)     TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 3)
412
#define LOOP_STMT_LABEL(NODE)    TREE_OPERAND_CHECK_CODE (NODE, LOOP_STMT, 4)
413
#define EXIT_STMT_COND(NODE)     TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 0)
414
#define EXIT_STMT_LABEL(NODE)    TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.