]>
Commit | Line | Data |
---|---|---|
415dddc8 RK |
1 | /**************************************************************************** |
2 | * * | |
3 | * GNAT COMPILER COMPONENTS * | |
4 | * * | |
5 | * T Y P E S * | |
6 | * * | |
7 | * C Header File * | |
8 | * * | |
1d005acc | 9 | * Copyright (C) 1992-2019, Free Software Foundation, Inc. * |
415dddc8 RK |
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- * | |
d70c0bd6 | 13 | * ware Foundation; either version 3, or (at your option) any later ver- * |
415dddc8 RK |
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 * | |
b5c84c3c RD |
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. * | |
415dddc8 RK |
20 | * * |
21 | * GNAT was originally developed by the GNAT team at New York University. * | |
71ff80dc | 22 | * Extensive contributions were provided by Ada Core Technologies Inc. * |
415dddc8 RK |
23 | * * |
24 | ****************************************************************************/ | |
25 | ||
c7732bbe EB |
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. | |
415dddc8 | 29 | |
fbf5a39b | 30 | This package contains host independent type definitions which are used |
415dddc8 RK |
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 | ||
ddf2e109 | 45 | /* Signed 32-bit integer */ |
415dddc8 RK |
46 | typedef int Int; |
47 | ||
ddf2e109 | 48 | /* Signed 16-bit integer */ |
415dddc8 RK |
49 | typedef short Short; |
50 | ||
ddf2e109 | 51 | /* Non-negative Int values */ |
415dddc8 RK |
52 | typedef Int Nat; |
53 | ||
54 | /* Positive Int values */ | |
55 | typedef Int Pos; | |
56 | ||
ddf2e109 CS |
57 | /* 8-bit unsigned integer */ |
58 | typedef unsigned char Byte; | |
415dddc8 | 59 | |
ddf2e109 | 60 | /* 8-Bit Character and String Types: */ |
415dddc8 | 61 | |
ddf2e109 | 62 | /* 8-bit character type */ |
415dddc8 RK |
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 | ||
93582885 EB |
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; | |
415dddc8 RK |
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 | |
fbf5a39b AC |
98 | inlined stuff IN the C header changes the dependencies. Both sinfo.h |
99 | and einfo.h now reference routines defined in tree.h. | |
415dddc8 | 100 | |
0f96fd14 | 101 | Note: these types would more naturally be defined as unsigned char, but |
415dddc8 RK |
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 | ||
cf427f02 AC |
142 | /* Instance identifiers */ |
143 | typedef Nat Instance_Id; | |
144 | ||
415dddc8 RK |
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 | ||
415dddc8 RK |
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) | |
415dddc8 RK |
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 | ||
4116e7d0 EB |
284 | #define Uint_Minus_1 (Uint_Direct_Bias - 1) |
285 | ||
415dddc8 RK |
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 | ||
82c80734 RD |
299 | /* Character code value, intended to be 32 bits. */ |
300 | typedef unsigned Char_Code; | |
415dddc8 RK |
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 | ||
c7732bbe EB |
310 | /* Type used to index the source file table. */ |
311 | typedef Nat Source_File_Index; | |
312 | ||
415dddc8 RK |
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) | |
96efeb4f | 347 | #define By_Descriptor_Last (-10) |
d628c015 DR |
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) | |
96efeb4f | 357 | |
07fc65c4 GB |
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 | |
1b449f6d | 367 | #define CE_Null_Exception_Id 8 |
6f301919 AC |
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 | |
ba4a2f78 | 376 | #define PE_Address_Of_Intrinsic 16 |
baed70ac AC |
377 | #define PE_Aliased_Parameters 17 |
378 | #define PE_All_Guards_Closed 18 | |
cf28c974 | 379 | #define PE_Bad_Predicated_Generic_Type 19 |
fc47ef60 | 380 | #define PE_Build_In_Place_Mismatch 37 |
baed70ac AC |
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 | |
b8b2d982 | 388 | #define PE_Non_Transportable_Actual 31 |
baed70ac AC |
389 | #define PE_Overlaid_Controlled_Object 27 |
390 | #define PE_Potentially_Blocking_Operation 28 | |
b8b2d982 | 391 | #define PE_Stream_Operation_Not_Allowed 36 |
baed70ac AC |
392 | #define PE_Stubbed_Subprogram_Called 29 |
393 | #define PE_Unchecked_Union_Restriction 30 | |
baed70ac AC |
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 | ||
fc47ef60 | 400 | #define LAST_REASON_CODE 37 |