111
|
1 /****************************************************************************
|
|
2 * *
|
|
3 * GNAT COMPILER COMPONENTS *
|
|
4 * *
|
|
5 * T Y P E S *
|
|
6 * *
|
|
7 * C Header File *
|
|
8 * *
|
145
|
9 * Copyright (C) 1992-2019, Free Software Foundation, Inc. *
|
111
|
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 distributed with GNAT; see file COPYING3. If not, go to *
|
|
19 * http://www.gnu.org/licenses for a complete copy of the license. *
|
|
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
|
145
|
26 /* This is the C header that corresponds to the Ada package specification for
|
|
27 Types. It was created manually from types.ads and must be kept synchronized
|
|
28 with changes in this file.
|
111
|
29
|
|
30 This package contains host independent type definitions which are used
|
|
31 throughout the compiler modules. The comments in the C version are brief
|
|
32 reminders of the purpose of each declaration. For complete documentation,
|
|
33 see the Ada version of these definitions. */
|
|
34
|
|
35 /* Boolean Types: */
|
|
36
|
|
37 /* Boolean type (cannot use enum, because of bit field restriction on some
|
|
38 compilers). */
|
|
39 typedef unsigned char Boolean;
|
|
40 #define False 0
|
|
41 #define True 1
|
|
42
|
|
43 /* General Use Integer Types */
|
|
44
|
|
45 /* Signed 32-bit integer */
|
|
46 typedef int Int;
|
|
47
|
|
48 /* Signed 16-bit integer */
|
|
49 typedef short Short;
|
|
50
|
|
51 /* Non-negative Int values */
|
|
52 typedef Int Nat;
|
|
53
|
|
54 /* Positive Int values */
|
|
55 typedef Int Pos;
|
|
56
|
|
57 /* 8-bit unsigned integer */
|
|
58 typedef unsigned char Byte;
|
|
59
|
|
60 /* 8-Bit Character and String Types: */
|
|
61
|
|
62 /* 8-bit character type */
|
|
63 typedef char Char;
|
|
64
|
|
65 /* Graphic characters, as defined in ARM */
|
|
66 typedef Char Graphic_Character;
|
|
67
|
|
68 /* Line terminator characters (LF, VT, FF, CR) */
|
|
69 typedef Char Line_Terminator;
|
|
70
|
|
71 /* Characters with the upper bit set */
|
|
72 typedef Char Upper_Half_Character;
|
|
73
|
|
74 /* String type built on Char (note that zero is an OK index) */
|
|
75 typedef Char *Str;
|
|
76
|
|
77 /* Pointer to string of Chars */
|
|
78 typedef Char *Str_Ptr;
|
|
79
|
|
80 /* Types for the fat pointer used for strings and the template it points to.
|
|
81 The fat pointer is conceptually a couple of pointers, but it is wrapped
|
|
82 up in a special record type. On the Ada side, the record is naturally
|
|
83 aligned (i.e. given pointer alignment) on regular platforms, but it is
|
|
84 given twice this alignment on strict-alignment platforms for performance
|
|
85 reasons. On the C side, for the sake of portability and simplicity, we
|
|
86 overalign it on all platforms (so the machine mode is always the same as
|
|
87 on the Ada side) but arrange to pass it in an even scalar position as a
|
|
88 parameter to functions (so the scalar parameter alignment is always the
|
|
89 same as on the Ada side). */
|
|
90 typedef struct { int Low_Bound, High_Bound; } String_Template;
|
|
91 typedef struct { const char *Array; String_Template *Bounds; }
|
|
92 __attribute ((aligned (sizeof (char *) * 2))) String_Pointer;
|
|
93
|
|
94 /* Types for Node/Entity Kinds: */
|
|
95
|
|
96 /* The reason that these are defined here in the C version, rather than in the
|
|
97 corresponding packages is that the requirement for putting bodies of
|
|
98 inlined stuff IN the C header changes the dependencies. Both sinfo.h
|
|
99 and einfo.h now reference routines defined in tree.h.
|
|
100
|
|
101 Note: these types would more naturally be defined as unsigned char, but
|
|
102 once again, the annoying restriction on bit fields for some compilers
|
|
103 bites us! */
|
|
104
|
|
105 typedef unsigned int Node_Kind;
|
|
106 typedef unsigned int Entity_Kind;
|
|
107
|
|
108 /* Types used for Text Buffer Handling: */
|
|
109
|
|
110 /* Type used for subscripts in text buffer. */
|
|
111 typedef Int Text_Ptr;
|
|
112
|
|
113 /* Text buffer used to hold source file or library information file. */
|
|
114 typedef Char *Text_Buffer;
|
|
115
|
|
116 /* Pointer to text buffer. */
|
|
117 typedef Char *Text_Buffer_Ptr;
|
|
118
|
|
119 /* Types used for Source Input Handling: */
|
|
120
|
|
121 /* Line number type, used for storing all line numbers. */
|
|
122 typedef Int Line_Number_Type;
|
|
123
|
|
124 /* Column number type, used for storing all column numbers. */
|
|
125 typedef Int Column_Number_Type;
|
|
126
|
|
127 /* Type used to store text of a source file. */
|
|
128 typedef Text_Buffer Source_Buffer;
|
|
129
|
|
130 /* Pointer to source buffer. */
|
|
131 typedef Text_Buffer_Ptr Source_Buffer_Ptr;
|
|
132
|
|
133 /* Type used for source location. */
|
|
134 typedef Text_Ptr Source_Ptr;
|
|
135
|
|
136 /* Value used to indicate no source position set. */
|
|
137 #define No_Location -1
|
|
138
|
|
139 /* Used for Sloc in all nodes in the representation of package Standard. */
|
|
140 #define Standard_Location -2
|
|
141
|
|
142 /* Instance identifiers */
|
|
143 typedef Nat Instance_Id;
|
|
144
|
|
145 /* Type used for union of all possible ID values covering all ranges */
|
|
146 typedef int Union_Id;
|
|
147
|
|
148 /* Range definitions for Tree Data: */
|
|
149
|
|
150 #define List_Low_Bound -100000000
|
|
151 #define List_High_Bound 0
|
|
152
|
|
153 #define Node_Low_Bound 0
|
|
154 #define Node_High_Bound 99999999
|
|
155
|
|
156 #define Elist_Low_Bound 100000000
|
|
157 #define Elist_High_Bound 199999999
|
|
158
|
|
159 #define Elmt_Low_Bound 200000000
|
|
160 #define Elmt_High_Bound 299999999
|
|
161
|
|
162 #define Names_Low_Bound 300000000
|
|
163 #define Names_High_Bound 399999999
|
|
164
|
|
165 #define Strings_Low_Bound 400000000
|
|
166 #define Strings_High_Bound 499999999
|
|
167
|
|
168 #define Ureal_Low_Bound 500000000
|
|
169 #define Ureal_High_Bound 599999999
|
|
170
|
|
171 #define Uint_Low_Bound 600000000
|
|
172 #define Uint_Table_Start 2000000000
|
|
173 #define Uint_High_Bound 2099999999
|
|
174
|
|
175 SUBTYPE (List_Range, Int, List_Low_Bound, List_High_Bound)
|
|
176 SUBTYPE (Node_Range, Int, Node_Low_Bound, Node_High_Bound)
|
|
177 SUBTYPE (Elist_Range, Int, Elist_Low_Bound, Elist_High_Bound)
|
|
178 SUBTYPE (Elmt_Range, Int, Elmt_Low_Bound, Elmt_High_Bound)
|
|
179 SUBTYPE (Names_Range, Int, Names_Low_Bound, Names_High_Bound)
|
|
180 SUBTYPE (Strings_Range, Int, Strings_Low_Bound, Strings_High_Bound)
|
|
181 SUBTYPE (Uint_Range, Int, Uint_Low_Bound, Uint_High_Bound)
|
|
182 SUBTYPE (Ureal_Range, Int, Ureal_Low_Bound, Ureal_High_Bound)
|
|
183
|
|
184 /* Types for Names_Table Package: */
|
|
185
|
|
186 typedef Int Name_Id;
|
|
187
|
|
188 /* Name_Id value for no name present. */
|
|
189 #define No_Name Names_Low_Bound
|
|
190
|
|
191 /* Name_Id value for bad name. */
|
|
192 #define Error_Name (Names_Low_Bound + 1)
|
|
193
|
|
194 /* First subscript of names table. */
|
|
195 #define First_Name_Id (Names_Low_Bound + 2)
|
|
196
|
|
197 /* Types for Tree Package: */
|
|
198
|
|
199 /* Subscript of nodes table entry. */
|
|
200 typedef Int Node_Id;
|
|
201
|
|
202 /* Used in semantics for Node_Id value referencing an entity. */
|
|
203 typedef Node_Id Entity_Id;
|
|
204
|
|
205 /* Null node. */
|
|
206 #define Empty 0
|
|
207
|
|
208 /* Error node. */
|
|
209 #define Error 1
|
|
210
|
|
211 /* Subscript of first allocated node. */
|
|
212 #define First_Node_Id Empty
|
|
213
|
|
214 /* Subscript of entry in lists table. */
|
|
215 typedef Int List_Id;
|
|
216
|
|
217 /* Indicates absence of a list. */
|
|
218 #define No_List 0
|
|
219
|
|
220 /* Error list. */
|
|
221 #define Error_List List_Low_Bound
|
|
222
|
|
223 /* Subscript of first allocated list header. */
|
|
224 #define First_List_Id Error_List
|
|
225
|
|
226 /* Element list Id, subscript value of entry in lists table. */
|
|
227 typedef Int Elist_Id;
|
|
228
|
|
229 /* Used to indicate absence of an element list. */
|
|
230 #define No_Elist Elist_Low_Bound
|
|
231
|
|
232 /* Subscript of first allocated elist header */
|
|
233 #define First_Elist_Id (No_Elist + 1)
|
|
234
|
|
235 /* Element Id, subscript value of entry in elements table. */
|
|
236 typedef Int Elmt_Id;
|
|
237
|
|
238 /* Used to indicate absence of a list element. */
|
|
239 #define No_Elmt Elmt_Low_Bound
|
|
240
|
|
241 /* Subscript of first allocated element */
|
|
242 #define First_Elmt_Id (No_Elmt + 1)
|
|
243
|
|
244 /* Types for String_Table Package: */
|
|
245
|
|
246 /* Subscript of strings table entry. */
|
|
247 typedef Int String_Id;
|
|
248
|
|
249 /* Used to indicate missing string Id. */
|
|
250 #define No_String Strings_Low_Bound
|
|
251
|
|
252 /* Subscript of first entry in strings table. */
|
|
253 #define First_String_Id (No_String + 1)
|
|
254
|
|
255 /* Types for Uint_Support Package: */
|
|
256
|
|
257 /* Type used for representation of universal integers. */
|
|
258 typedef Int Uint;
|
|
259
|
|
260 /* Used to indicate missing Uint value. */
|
|
261 #define No_Uint Uint_Low_Bound
|
|
262
|
|
263 /* Base value used to represent Uint values. */
|
|
264 #define Base 32768
|
|
265
|
|
266 /* Minimum and maximum integers directly representable as Uint values */
|
|
267 #define Min_Direct (-(Base - 1))
|
|
268 #define Max_Direct ((Base - 1) * (Base - 1))
|
|
269
|
|
270 #define Uint_Direct_Bias (Uint_Low_Bound + Base)
|
|
271 #define Uint_Direct_First (Uint_Direct_Bias + Min_Direct)
|
|
272 #define Uint_Direct_Last (Uint_Direct_Bias + Max_Direct)
|
|
273
|
|
274 /* Define range of direct biased values */
|
|
275 SUBTYPE (Uint_Direct, Uint, Uint_Direct_First, Uint_Direct_Last)
|
|
276
|
|
277 /* Constants in Uint format. */
|
|
278 #define Uint_0 (Uint_Direct_Bias + 0)
|
|
279 #define Uint_1 (Uint_Direct_Bias + 1)
|
|
280 #define Uint_2 (Uint_Direct_Bias + 2)
|
|
281 #define Uint_10 (Uint_Direct_Bias + 10)
|
|
282 #define Uint_16 (Uint_Direct_Bias + 16)
|
|
283
|
|
284 #define Uint_Minus_1 (Uint_Direct_Bias - 1)
|
|
285
|
|
286 /* Types for Ureal_Support Package: */
|
|
287
|
|
288 /* Type used for representation of universal reals. */
|
|
289 typedef Int Ureal;
|
|
290
|
|
291 /* Used to indicate missing Uint value. */
|
|
292 #define No_Ureal Ureal_Low_Bound
|
|
293
|
|
294 /* Subscript of first entry in Ureal table. */
|
|
295 #define Ureal_First_Entry (No_Ureal + 1)
|
|
296
|
|
297 /* Character Code Type: */
|
|
298
|
|
299 /* Character code value, intended to be 32 bits. */
|
|
300 typedef unsigned Char_Code;
|
|
301
|
|
302 /* Types Used for Library Management: */
|
|
303
|
|
304 /* Unit number. */
|
|
305 typedef Int Unit_Number_Type;
|
|
306
|
|
307 /* Unit number value for main unit. */
|
|
308 #define Main_Unit 0
|
|
309
|
145
|
310 /* Type used to index the source file table. */
|
|
311 typedef Nat Source_File_Index;
|
|
312
|
111
|
313 /* Type used for lines table. */
|
|
314 typedef Source_Ptr *Lines_Table_Type;
|
|
315
|
|
316 /* Type used for pointer to lines table. */
|
|
317 typedef Source_Ptr *Lines_Table_Ptr;
|
|
318
|
|
319 /* Length of time stamp value. */
|
|
320 #define Time_Stamp_Length 22
|
|
321
|
|
322 /* Type used to represent time stamp. */
|
|
323 typedef Char *Time_Stamp_Type;
|
|
324
|
|
325 /* Name_Id synonym used for file names. */
|
|
326 typedef Name_Id File_Name_Type;
|
|
327
|
|
328 /* Constant used to indicate no file found. */
|
|
329 #define No_File No_Name
|
|
330
|
|
331 /* Name_Id synonym used for unit names. */
|
|
332 typedef Name_Id Unit_Name_Type;
|
|
333
|
|
334 /* Definitions for mechanism type and values */
|
|
335 typedef Int Mechanism_Type;
|
|
336 #define Default 0
|
|
337 #define By_Copy (-1)
|
|
338 #define By_Reference (-2)
|
|
339 #define By_Descriptor (-3)
|
|
340 #define By_Descriptor_UBS (-4)
|
|
341 #define By_Descriptor_UBSB (-5)
|
|
342 #define By_Descriptor_UBA (-6)
|
|
343 #define By_Descriptor_S (-7)
|
|
344 #define By_Descriptor_SB (-8)
|
|
345 #define By_Descriptor_A (-9)
|
|
346 #define By_Descriptor_NCA (-10)
|
|
347 #define By_Descriptor_Last (-10)
|
|
348 #define By_Short_Descriptor (-11)
|
|
349 #define By_Short_Descriptor_UBS (-12)
|
|
350 #define By_Short_Descriptor_UBSB (-13)
|
|
351 #define By_Short_Descriptor_UBA (-14)
|
|
352 #define By_Short_Descriptor_S (-15)
|
|
353 #define By_Short_Descriptor_SB (-16)
|
|
354 #define By_Short_Descriptor_A (-17)
|
|
355 #define By_Short_Descriptor_NCA (-18)
|
|
356 #define By_Short_Descriptor_Last (-18)
|
|
357
|
|
358 /* Definitions of Reason codes for Raise_xxx_Error nodes */
|
|
359 #define CE_Access_Check_Failed 0
|
|
360 #define CE_Access_Parameter_Is_Null 1
|
|
361 #define CE_Discriminant_Check_Failed 2
|
|
362 #define CE_Divide_By_Zero 3
|
|
363 #define CE_Explicit_Raise 4
|
|
364 #define CE_Index_Check_Failed 5
|
|
365 #define CE_Invalid_Data 6
|
|
366 #define CE_Length_Check_Failed 7
|
|
367 #define CE_Null_Exception_Id 8
|
|
368 #define CE_Null_Not_Allowed 9
|
|
369 #define CE_Overflow_Check_Failed 10
|
|
370 #define CE_Partition_Check_Failed 11
|
|
371 #define CE_Range_Check_Failed 12
|
|
372 #define CE_Tag_Check_Failed 13
|
|
373
|
|
374 #define PE_Access_Before_Elaboration 14
|
|
375 #define PE_Accessibility_Check_Failed 15
|
|
376 #define PE_Address_Of_Intrinsic 16
|
|
377 #define PE_Aliased_Parameters 17
|
|
378 #define PE_All_Guards_Closed 18
|
|
379 #define PE_Bad_Predicated_Generic_Type 19
|
131
|
380 #define PE_Build_In_Place_Mismatch 37
|
111
|
381 #define PE_Current_Task_In_Entry_Body 20
|
|
382 #define PE_Duplicated_Entry_Address 21
|
|
383 #define PE_Explicit_Raise 22
|
|
384 #define PE_Finalize_Raised_Exception 23
|
|
385 #define PE_Implicit_Return 24
|
|
386 #define PE_Misaligned_Address_Value 25
|
|
387 #define PE_Missing_Return 26
|
|
388 #define PE_Non_Transportable_Actual 31
|
|
389 #define PE_Overlaid_Controlled_Object 27
|
|
390 #define PE_Potentially_Blocking_Operation 28
|
|
391 #define PE_Stream_Operation_Not_Allowed 36
|
|
392 #define PE_Stubbed_Subprogram_Called 29
|
|
393 #define PE_Unchecked_Union_Restriction 30
|
|
394
|
|
395 #define SE_Empty_Storage_Pool 32
|
|
396 #define SE_Explicit_Raise 33
|
|
397 #define SE_Infinite_Recursion 34
|
|
398 #define SE_Object_Too_Large 35
|
|
399
|
131
|
400 #define LAST_REASON_CODE 37
|