testsuite: 32 bit AIX 2 byte wchar
[official-gcc.git] / gcc / ada / gen_il-gen-gen_entities.adb
blobd7d71b44debdee4124a1a9480496919788122bec
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT COMPILER COMPONENTS --
4 -- --
5 -- G E N _ I L . G E N . G E N _ E N T I T I E S --
6 -- --
7 -- B o d y --
8 -- --
9 -- Copyright (C) 2020-2023, 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 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 ------------------------------------------------------------------------------
26 procedure Gen_IL.Gen.Gen_Entities is
28 procedure Ab -- Short for "Abstract"
29 (T : Abstract_Entity; Parent : Abstract_Type;
30 Fields : Field_Sequence := No_Fields)
31 renames Create_Abstract_Entity_Type;
32 procedure Cc -- Short for "ConCrete"
33 (T : Concrete_Entity; Parent : Abstract_Type;
34 Fields : Field_Sequence := No_Fields)
35 renames Create_Concrete_Entity_Type;
37 -- No Sy (Syntactic) fields in entities
38 function Sm -- Short for "Semantic"
39 (Field : Field_Enum; Field_Type : Type_Enum;
40 Type_Only : Type_Only_Enum := No_Type_Only;
41 Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
42 renames Create_Semantic_Field;
44 procedure Union (T : Abstract_Entity; Children : Type_Array)
45 renames Create_Entity_Union_Type;
47 begin -- Gen_IL.Gen.Gen_Entities
48 pragma Style_Checks ("M200");
50 Create_Root_Entity_Type (Entity_Kind,
51 (Sm (Ekind, Entity_Kind_Type),
52 Sm (Basic_Convention, Convention_Id),
53 Sm (Address_Taken, Flag),
54 Sm (Associated_Entity, Node_Id),
55 Sm (Can_Never_Be_Null, Flag),
56 Sm (Checks_May_Be_Suppressed, Flag),
57 Sm (Debug_Info_Off, Flag),
58 Sm (Default_Expressions_Processed, Flag),
59 Sm (Delay_Cleanups, Flag),
60 Sm (Depends_On_Private, Flag),
61 Sm (Disable_Controlled, Flag, Base_Type_Only),
62 Sm (Discard_Names, Flag),
63 Sm (First_Rep_Item, Node_Id),
64 Sm (Freeze_Node, Node_Id),
65 Sm (From_Limited_With, Flag),
66 Sm (Has_Aliased_Components, Flag, Impl_Base_Type_Only),
67 Sm (Has_Alignment_Clause, Flag),
68 Sm (Has_All_Calls_Remote, Flag),
69 Sm (Has_Atomic_Components, Flag, Impl_Base_Type_Only),
70 Sm (Has_Biased_Representation, Flag),
71 Sm (Has_Completion, Flag),
72 Sm (Has_Contiguous_Rep, Flag),
73 Sm (Has_Controlled_Component, Flag, Base_Type_Only),
74 Sm (Has_Controlling_Result, Flag),
75 Sm (Has_Convention_Pragma, Flag),
76 Sm (Has_Default_Aspect, Flag, Base_Type_Only),
77 Sm (Has_Delayed_Aspects, Flag),
78 Sm (Has_Delayed_Freeze, Flag),
79 Sm (Has_Delayed_Rep_Aspects, Flag),
80 Sm (Has_Exit, Flag),
81 Sm (Has_Forward_Instantiation, Flag),
82 Sm (Has_Fully_Qualified_Name, Flag),
83 Sm (Has_Gigi_Rep_Item, Flag),
84 Sm (Has_Homonym, Flag),
85 Sm (Has_Implicit_Dereference, Flag),
86 Sm (Has_Independent_Components, Flag, Impl_Base_Type_Only),
87 Sm (Has_Master_Entity, Flag),
88 Sm (Has_Nested_Block_With_Handler, Flag),
89 Sm (Has_Non_Standard_Rep, Flag, Impl_Base_Type_Only),
90 Sm (Has_Per_Object_Constraint, Flag),
91 Sm (Has_Pragma_Elaborate_Body, Flag),
92 Sm (Has_Pragma_Inline, Flag),
93 Sm (Has_Pragma_Inline_Always, Flag),
94 Sm (Has_Pragma_No_Inline, Flag),
95 Sm (Has_Pragma_Preelab_Init, Flag),
96 Sm (Has_Pragma_Pure, Flag),
97 Sm (Has_Pragma_Pure_Function, Flag),
98 Sm (Has_Pragma_Thread_Local_Storage, Flag),
99 Sm (Has_Pragma_Unmodified, Flag),
100 Sm (Has_Pragma_Unreferenced, Flag),
101 Sm (Has_Pragma_Unused, Flag),
102 Sm (Has_Private_Ancestor, Flag),
103 Sm (Has_Private_Declaration, Flag),
104 Sm (Has_Protected, Flag, Base_Type_Only),
105 Sm (Has_Qualified_Name, Flag),
106 Sm (Has_Size_Clause, Flag),
107 Sm (Has_Stream_Size_Clause, Flag),
108 Sm (Has_Task, Flag, Base_Type_Only),
109 Sm (Has_Timing_Event, Flag, Base_Type_Only),
110 Sm (Has_Thunks, Flag),
111 Sm (Has_Unchecked_Union, Flag, Base_Type_Only),
112 Sm (Has_Volatile_Components, Flag, Impl_Base_Type_Only),
113 Sm (Has_Xref_Entry, Flag),
114 Sm (Has_Yield_Aspect, Flag),
115 Sm (Homonym, Node_Id),
116 Sm (In_Package_Body, Flag),
117 Sm (In_Private_Part, Flag),
118 Sm (In_Use, Flag),
119 Sm (Is_Ada_2005_Only, Flag),
120 Sm (Is_Ada_2012_Only, Flag),
121 Sm (Is_Ada_2022_Only, Flag),
122 Sm (Is_Aliased, Flag),
123 Sm (Is_Atomic, Flag),
124 Sm (Is_Bit_Packed_Array, Flag, Impl_Base_Type_Only),
125 Sm (Is_Character_Type, Flag),
126 Sm (Is_Checked_Ghost_Entity, Flag),
127 Sm (Is_Child_Unit, Flag),
128 Sm (Is_Class_Wide_Wrapper, Flag),
129 Sm (Is_Class_Wide_Equivalent_Type, Flag),
130 Sm (Is_Compilation_Unit, Flag),
131 Sm (Is_Concurrent_Record_Type, Flag),
132 Sm (Is_Constr_Array_Subt_With_Bounds, Flag),
133 Sm (Is_Constr_Subt_For_U_Nominal, Flag),
134 Sm (Is_Constrained, Flag),
135 Sm (Is_Constructor, Flag),
136 Sm (Is_Controlled_Active, Flag, Base_Type_Only),
137 Sm (Is_CPP_Class, Flag),
138 Sm (Is_Descendant_Of_Address, Flag),
139 Sm (Is_Discrim_SO_Function, Flag),
140 Sm (Is_Discriminant_Check_Function, Flag),
141 Sm (Is_Dispatch_Table_Entity, Flag),
142 Sm (Is_Dispatch_Table_Wrapper, Flag),
143 Sm (Is_Dispatching_Operation, Flag),
144 Sm (Is_Eliminated, Flag),
145 Sm (Is_Entry_Formal, Flag),
146 Sm (Is_Entry_Wrapper, Flag),
147 Sm (Is_Exported, Flag),
148 Sm (Is_First_Subtype, Flag),
149 Sm (Is_Formal_Subprogram, Flag),
150 Sm (Is_Frozen, Flag),
151 Sm (Is_Generic_Instance, Flag),
152 Sm (Is_Generic_Type, Flag),
153 Sm (Is_Hidden, Flag),
154 Sm (Is_Hidden_Non_Overridden_Subpgm, Flag),
155 Sm (Is_Hidden_Open_Scope, Flag),
156 Sm (Is_Ignored_Ghost_Entity, Flag),
157 Sm (Is_Immediately_Visible, Flag),
158 Sm (Is_Implementation_Defined, Flag),
159 Sm (Is_Imported, Flag),
160 Sm (Is_Independent, Flag),
161 Sm (Is_Inlined, Flag),
162 Sm (Is_Instantiated, Flag),
163 Sm (Is_Interface, Flag),
164 Sm (Is_Internal, Flag),
165 Sm (Is_Interrupt_Handler, Flag),
166 Sm (Is_Intrinsic_Subprogram, Flag),
167 Sm (Is_Itype, Flag),
168 Sm (Is_Known_Non_Null, Flag),
169 Sm (Is_Known_Null, Flag),
170 Sm (Is_Known_Valid, Flag),
171 Sm (Is_Limited_Composite, Flag),
172 Sm (Is_Limited_Interface, Flag),
173 Sm (Is_Limited_Record, Flag),
174 Sm (Is_Loop_Parameter, Flag),
175 Sm (Is_Obsolescent, Flag),
176 Sm (Is_Package_Body_Entity, Flag),
177 Sm (Is_Packed, Flag, Impl_Base_Type_Only),
178 Sm (Is_Packed_Array_Impl_Type, Flag),
179 Sm (Is_Not_Self_Hidden, Flag),
180 Sm (Is_Potentially_Use_Visible, Flag),
181 Sm (Is_Preelaborated, Flag),
182 Sm (Is_Private_Descendant, Flag),
183 Sm (Is_Public, Flag),
184 Sm (Is_Pure, Flag),
185 Sm (Is_Remote_Call_Interface, Flag),
186 Sm (Is_Remote_Types, Flag),
187 Sm (Is_Renaming_Of_Object, Flag),
188 Sm (Is_Return_Object, Flag),
189 Sm (Is_Safe_To_Reevaluate, Flag),
190 Sm (Is_Shared_Passive, Flag),
191 Sm (Is_Static_Type, Flag),
192 Sm (Is_Statically_Allocated, Flag),
193 Sm (Is_Tag, Flag),
194 Sm (Is_Tagged_Type, Flag),
195 Sm (Is_Thunk, Flag),
196 Sm (Is_Trivial_Subprogram, Flag),
197 Sm (Is_True_Constant, Flag),
198 Sm (Is_Unchecked_Union, Flag, Impl_Base_Type_Only),
199 Sm (Is_Underlying_Full_View, Flag),
200 Sm (Is_Underlying_Record_View, Flag, Base_Type_Only),
201 Sm (Is_Unimplemented, Flag),
202 Sm (Is_Uplevel_Referenced_Entity, Flag),
203 Sm (Is_Visible_Formal, Flag),
204 Sm (Is_Visible_Lib_Unit, Flag),
205 Sm (Is_Volatile_Type, Flag),
206 Sm (Is_Volatile_Object, Flag),
207 Sm (Is_Volatile_Full_Access, Flag),
208 Sm (Is_Wrapper, Flag),
209 Sm (Kill_Elaboration_Checks, Flag),
210 Sm (Kill_Range_Checks, Flag),
211 Sm (Low_Bound_Tested, Flag),
212 Sm (Materialize_Entity, Flag),
213 Sm (May_Inherit_Delayed_Rep_Aspects, Flag),
214 Sm (Needs_Activation_Record, Flag),
215 Sm (Needs_Debug_Info, Flag),
216 Sm (Never_Set_In_Source, Flag),
217 Sm (No_Return, Flag),
218 Sm (Overlays_Constant, Flag),
219 Sm (Prev_Entity, Node_Id),
220 Sm (Referenced, Flag),
221 Sm (Referenced_As_LHS, Flag),
222 Sm (Referenced_As_Out_Parameter, Flag),
223 Sm (Return_Present, Flag),
224 Sm (Returns_By_Ref, Flag),
225 Sm (Sec_Stack_Needed_For_Return, Flag),
226 Sm (Size_Depends_On_Discriminant, Flag),
227 Sm (Size_Known_At_Compile_Time, Flag),
228 Sm (Stores_Attribute_Old_Prefix, Flag),
229 Sm (Strict_Alignment, Flag, Impl_Base_Type_Only),
230 Sm (Suppress_Elaboration_Warnings, Flag),
231 Sm (Suppress_Style_Checks, Flag),
232 Sm (Suppress_Value_Tracking_On_Call, Flag),
233 Sm (Treat_As_Volatile, Flag),
234 Sm (Used_As_Generic_Actual, Flag),
235 Sm (Uses_Sec_Stack, Flag),
236 Sm (Warnings_Off, Flag),
237 Sm (Warnings_Off_Used, Flag),
238 Sm (Warnings_Off_Used_Unmodified, Flag),
239 Sm (Warnings_Off_Used_Unreferenced, Flag),
240 Sm (Was_Hidden, Flag)));
242 Ab (Void_Or_Type_Kind, Entity_Kind);
244 Cc (E_Void, Void_Or_Type_Kind,
245 -- The initial Ekind value for a newly created entity. Also used as the
246 -- Ekind for Standard_Void_Type, a type entity in Standard used as a
247 -- dummy type for the return type of a procedure (the reason we create
248 -- this type is to share the circuits for performing overload
249 -- resolution on calls).
250 (Sm (Alignment, Unat),
251 Sm (Contract, Node_Id),
252 Sm (First_Entity, Node_Id),
253 Sm (Last_Entity, Node_Id),
254 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
255 Sm (Original_Record_Component, Node_Id),
256 Sm (Scope_Depth_Value, Unat),
257 Sm (SPARK_Pragma, Node_Id),
258 Sm (SPARK_Pragma_Inherited, Flag),
259 Sm (Current_Value, Node_Id), -- setter only
260 Sm (Has_Predicates, Flag), -- setter only
261 Sm (Initialization_Statements, Node_Id), -- setter only
262 Sm (Is_Param_Block_Component_Type, Flag, Base_Type_Only),
263 -- setter only
265 Sm (Package_Instantiation, Node_Id), -- setter only
266 Sm (Related_Expression, Node_Id), -- setter only
268 -- If we set the Ekind field properly before setting the following
269 -- fields, then these would not be needed in E_Void.
270 Sm (Accept_Address, Elist_Id),
271 Sm (Associated_Formal_Package, Node_Id),
272 Sm (Associated_Node_For_Itype, Node_Id),
273 Sm (Corresponding_Remote_Type, Node_Id),
274 Sm (CR_Discriminant, Node_Id),
275 Sm (Debug_Renaming_Link, Node_Id),
276 Sm (Discriminal_Link, Node_Id),
277 Sm (Discriminant_Default_Value, Node_Id),
278 Sm (Discriminant_Number, Upos),
279 Sm (Enclosing_Scope, Node_Id),
280 Sm (Entry_Bodies_Array, Node_Id,
281 Pre => "Has_Entries (N)"),
282 Sm (Entry_Cancel_Parameter, Node_Id),
283 Sm (Entry_Component, Node_Id),
284 Sm (Entry_Formal, Node_Id),
285 Sm (Entry_Parameters_Type, Node_Id),
286 Sm (Esize, Uint),
287 Sm (RM_Size, Uint),
288 Sm (Extra_Formal, Node_Id),
289 Sm (Generic_Homonym, Node_Id),
290 Sm (Generic_Renamings, Elist_Id),
291 Sm (Handler_Records, List_Id),
292 Sm (Has_Static_Discriminants, Flag),
293 Sm (Inner_Instances, Elist_Id),
294 Sm (Interface_Name, Node_Id),
295 Sm (Next_Inlined_Subprogram, Node_Id),
296 Sm (Renamed_Or_Alias, Node_Id), -- See Einfo.Utils
297 Sm (Return_Applies_To, Node_Id),
298 Sm (Scalar_Range, Node_Id),
299 Sm (Scale_Value, Uint),
300 Sm (Unset_Reference, Node_Id)));
301 -- For the above "setter only" fields, the setters are called for E_Void,
302 -- but not getters; the Ekind is modified before any such getters are
303 -- called.
305 Ab (Exception_Or_Object_Kind, Entity_Kind);
307 Ab (Object_Kind, Exception_Or_Object_Kind,
308 (Sm (Current_Value, Node_Id),
309 Sm (Renamed_Or_Alias, Node_Id)));
311 Ab (Record_Field_Kind, Object_Kind,
312 (Sm (Component_Bit_Offset, Uint),
313 Sm (Component_Clause, Node_Id),
314 Sm (Corresponding_Record_Component, Node_Id),
315 Sm (Entry_Formal, Node_Id),
316 Sm (Esize, Uint),
317 Sm (Interface_Name, Node_Id),
318 Sm (Normalized_First_Bit, Uint),
319 Sm (Normalized_Position, Uint),
320 Sm (Original_Record_Component, Node_Id)));
322 Cc (E_Component, Record_Field_Kind,
323 -- Components (other than discriminants) of a record declaration,
324 -- private declarations of protected objects.
325 (Sm (Discriminant_Checking_Func, Node_Id),
326 Sm (DT_Entry_Count, Uint,
327 Pre => "Is_Tag (N)"),
328 Sm (DT_Offset_To_Top_Func, Node_Id,
329 Pre => "Is_Tag (N)"),
330 Sm (Prival, Node_Id,
331 Pre => "Is_Protected_Component (N)"),
332 Sm (Related_Type, Node_Id)));
334 Ab (Allocatable_Kind, Object_Kind,
335 (Sm (Activation_Record_Component, Node_Id),
336 Sm (Alignment, Unat),
337 Sm (Esize, Uint),
338 Sm (Interface_Name, Node_Id),
339 Sm (Is_Finalized_Transient, Flag),
340 Sm (Is_Ignored_For_Finalization, Flag),
341 Sm (Linker_Section_Pragma, Node_Id),
342 Sm (Related_Expression, Node_Id),
343 Sm (Status_Flag_Or_Transient_Decl, Node_Id)));
345 Ab (Constant_Or_Variable_Kind, Allocatable_Kind,
346 (Sm (Actual_Subtype, Node_Id),
347 Sm (BIP_Initialization_Call, Node_Id),
348 Sm (Contract, Node_Id),
349 Sm (Discriminal_Link, Node_Id),
350 Sm (Encapsulating_State, Node_Id),
351 Sm (Extra_Accessibility, Node_Id),
352 Sm (Initialization_Statements, Node_Id),
353 Sm (Is_Elaboration_Checks_OK_Id, Flag),
354 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
355 Sm (Last_Aggregate_Assignment, Node_Id),
356 Sm (Optimize_Alignment_Space, Flag),
357 Sm (Optimize_Alignment_Time, Flag),
358 Sm (Prival_Link, Node_Id),
359 Sm (Related_Type, Node_Id),
360 Sm (Return_Statement, Node_Id),
361 Sm (Size_Check_Code, Node_Id),
362 Sm (SPARK_Pragma, Node_Id),
363 Sm (SPARK_Pragma_Inherited, Flag)));
365 Cc (E_Constant, Constant_Or_Variable_Kind,
366 -- Constants created by an object declaration with a constant keyword
367 (Sm (Full_View, Node_Id)));
369 Cc (E_Discriminant, Record_Field_Kind,
370 -- A discriminant, created by the use of a discriminant in a type
371 -- declaration.
372 (Sm (Corresponding_Discriminant, Node_Id),
373 Sm (CR_Discriminant, Node_Id),
374 Sm (Discriminal, Node_Id),
375 Sm (Discriminant_Default_Value, Node_Id),
376 Sm (Discriminant_Number, Upos),
377 Sm (Is_Completely_Hidden, Flag)));
379 Cc (E_Loop_Parameter, Allocatable_Kind);
380 -- A loop parameter created by a for loop
382 Cc (E_Variable, Constant_Or_Variable_Kind,
383 -- Variables created by an object declaration with no constant keyword
384 (Sm (Anonymous_Designated_Type, Node_Id),
385 Sm (Debug_Renaming_Link, Node_Id),
386 Sm (Extra_Constrained, Node_Id),
387 Sm (Has_Initial_Value, Flag),
388 Sm (Hiding_Loop_Variable, Node_Id),
389 Sm (Last_Assignment, Node_Id),
390 Sm (OK_To_Rename, Flag),
391 Sm (Part_Of_Constituents, Elist_Id),
392 Sm (Part_Of_References, Elist_Id),
393 Sm (Shared_Var_Procs_Instance, Node_Id),
394 Sm (Suppress_Initialization, Flag),
395 Sm (Unset_Reference, Node_Id),
396 Sm (Validated_Object, Node_Id)));
398 Ab (Formal_Kind, Object_Kind,
399 -- Formal parameters are also objects
400 (Sm (Activation_Record_Component, Node_Id),
401 Sm (Actual_Subtype, Node_Id),
402 Sm (Alignment, Unat),
403 Sm (Default_Expr_Function, Node_Id),
404 Sm (Default_Value, Node_Id),
405 Sm (Entry_Component, Node_Id),
406 Sm (Esize, Uint),
407 Sm (Extra_Accessibility, Node_Id),
408 Sm (Extra_Constrained, Node_Id),
409 Sm (Extra_Formal, Node_Id),
410 Sm (Has_Initial_Value, Flag),
411 Sm (Is_Controlling_Formal, Flag),
412 Sm (Is_Only_Out_Parameter, Flag),
413 Sm (Linker_Section_Pragma, Node_Id),
414 Sm (Mechanism, Mechanism_Type),
415 Sm (Minimum_Accessibility, Node_Id),
416 Sm (Protected_Formal, Node_Id),
417 Sm (Spec_Entity, Node_Id),
418 Sm (Unset_Reference, Node_Id)));
420 Cc (E_Out_Parameter, Formal_Kind,
421 -- An out parameter of a subprogram or entry
422 (Sm (Last_Assignment, Node_Id)));
424 Cc (E_In_Out_Parameter, Formal_Kind,
425 -- An in-out parameter of a subprogram or entry
426 (Sm (Last_Assignment, Node_Id)));
428 Cc (E_In_Parameter, Formal_Kind,
429 -- An in parameter of a subprogram or entry
430 (Sm (Discriminal_Link, Node_Id),
431 Sm (Discriminant_Default_Value, Node_Id),
432 Sm (Is_Activation_Record, Flag)));
434 Ab (Formal_Object_Kind, Object_Kind,
435 -- Generic formal objects are also objects
436 (Sm (Entry_Component, Node_Id),
437 Sm (Esize, Uint)));
439 Cc (E_Generic_In_Out_Parameter, Formal_Object_Kind,
440 -- A generic in out parameter, created by the use of a generic in out
441 -- parameter in a generic declaration.
442 (Sm (Actual_Subtype, Node_Id)));
444 Cc (E_Generic_In_Parameter, Formal_Object_Kind);
445 -- A generic in parameter, created by the use of a generic in
446 -- parameter in a generic declaration.
448 Ab (Named_Kind, Entity_Kind,
449 (Sm (Renamed_Or_Alias, Node_Id)));
451 Cc (E_Named_Integer, Named_Kind);
452 -- Named numbers created by a number declaration with an integer value
454 Cc (E_Named_Real, Named_Kind);
455 -- Named numbers created by a number declaration with a real value
457 Ab (Type_Kind, Void_Or_Type_Kind,
458 (Sm (Alignment, Unat),
459 Sm (Associated_Node_For_Itype, Node_Id),
460 Sm (Can_Use_Internal_Rep, Flag, Base_Type_Only,
461 Pre => "Ekind (Base_Type (N)) in Access_Subprogram_Kind"),
462 Sm (Class_Wide_Type, Node_Id),
463 Sm (Contract, Node_Id),
464 Sm (Current_Use_Clause, Node_Id),
465 Sm (Derived_Type_Link, Node_Id),
466 Sm (Direct_Primitive_Operations, Elist_Id),
467 Sm (Predicates_Ignored, Flag),
468 Sm (Esize, Uint),
469 Sm (Finalize_Storage_Only, Flag, Base_Type_Only),
470 Sm (First_Entity, Node_Id),
471 Sm (Last_Entity, Node_Id),
472 Sm (Full_View, Node_Id),
473 Sm (Has_Completion_In_Body, Flag),
474 Sm (Has_Constrained_Partial_View, Flag, Base_Type_Only),
475 Sm (Has_Discriminants, Flag),
476 Sm (Has_Dispatch_Table, Flag,
477 Pre => "Is_Tagged_Type (N)"),
478 Sm (Has_Dynamic_Predicate_Aspect, Flag),
479 Sm (Has_Ghost_Predicate_Aspect, Flag),
480 Sm (Has_Inheritable_Invariants, Flag, Base_Type_Only),
481 Sm (Has_Inherited_DIC, Flag, Base_Type_Only),
482 Sm (Has_Inherited_Invariants, Flag, Base_Type_Only),
483 Sm (Has_Object_Size_Clause, Flag),
484 Sm (Has_Own_DIC, Flag, Base_Type_Only),
485 Sm (Has_Own_Invariants, Flag, Base_Type_Only),
486 Sm (Has_Pragma_Unreferenced_Objects, Flag),
487 Sm (Has_Predicates, Flag),
488 Sm (Has_Primitive_Operations, Flag, Base_Type_Only),
489 Sm (Has_Private_Extension, Flag,
490 Pre => "Is_Tagged_Type (N)"),
491 Sm (Has_Specified_Layout, Flag, Impl_Base_Type_Only),
492 Sm (Has_Specified_Stream_Input, Flag),
493 Sm (Has_Specified_Stream_Output, Flag),
494 Sm (Has_Specified_Stream_Read, Flag),
495 Sm (Has_Specified_Stream_Write, Flag),
496 Sm (Has_Static_Discriminants, Flag),
497 Sm (Has_Static_Predicate, Flag),
498 Sm (Has_Static_Predicate_Aspect, Flag),
499 Sm (Has_Unknown_Discriminants, Flag),
500 Sm (Interface_Name, Node_Id),
501 Sm (Is_Abstract_Type, Flag),
502 Sm (Is_Actual_Subtype, Flag),
503 Sm (Is_Asynchronous, Flag),
504 Sm (Is_Fixed_Lower_Bound_Array_Subtype, Flag),
505 Sm (Is_Fixed_Lower_Bound_Index_Subtype, Flag),
506 Sm (Is_Generic_Actual_Type, Flag),
507 Sm (Is_Non_Static_Subtype, Flag),
508 Sm (Is_Private_Composite, Flag),
509 Sm (Is_RACW_Stub_Type, Flag),
510 Sm (Is_Unsigned_Type, Flag),
511 Sm (Itype_Printed, Flag,
512 Pre => "Is_Itype (N)"),
513 Sm (Known_To_Have_Preelab_Init, Flag),
514 Sm (Linker_Section_Pragma, Node_Id),
515 Sm (Must_Be_On_Byte_Boundary, Flag),
516 Sm (Must_Have_Preelab_Init, Flag),
517 Sm (No_Tagged_Streams_Pragma, Node_Id,
518 Pre => "Is_Tagged_Type (N)"),
519 Sm (Non_Binary_Modulus, Flag, Base_Type_Only),
520 Sm (Optimize_Alignment_Space, Flag),
521 Sm (Optimize_Alignment_Time, Flag),
522 Sm (Partial_View_Has_Unknown_Discr, Flag),
523 Sm (Pending_Access_Types, Elist_Id),
524 Sm (Related_Expression, Node_Id),
525 Sm (RM_Size, Uint),
526 Sm (SPARK_Pragma, Node_Id),
527 Sm (SPARK_Pragma_Inherited, Flag),
528 Sm (Subprograms_For_Type, Elist_Id),
529 Sm (Suppress_Initialization, Flag),
530 Sm (Universal_Aliasing, Flag, Impl_Base_Type_Only),
531 Sm (Renamed_Or_Alias, Node_Id),
532 Sm (Stored_Constraint, Elist_Id)));
534 Ab (Elementary_Kind, Type_Kind);
536 Ab (Scalar_Kind, Elementary_Kind,
537 (Sm (Default_Aspect_Value, Node_Id, Base_Type_Only),
538 Sm (Scalar_Range, Node_Id)));
540 Ab (Discrete_Kind, Scalar_Kind,
541 (Sm (No_Dynamic_Predicate_On_Actual, Flag),
542 Sm (No_Predicate_On_Actual, Flag),
543 Sm (Static_Discrete_Predicate, List_Id)));
545 Ab (Enumeration_Kind, Discrete_Kind,
546 (Sm (First_Literal, Node_Id),
547 Sm (Has_Enumeration_Rep_Clause, Flag),
548 Sm (Has_Pragma_Ordered, Flag, Impl_Base_Type_Only),
549 Sm (Lit_Indexes, Node_Id),
550 Sm (Lit_Strings, Node_Id),
551 Sm (Nonzero_Is_True, Flag, Base_Type_Only,
552 Pre => "Root_Type (N) = Standard_Boolean"),
553 Sm (Lit_Hash, Node_Id, Root_Type_Only)));
555 Cc (E_Enumeration_Type, Enumeration_Kind,
556 -- Enumeration types, created by an enumeration type declaration
557 (Sm (Enum_Pos_To_Rep, Node_Id)));
559 Cc (E_Enumeration_Subtype, Enumeration_Kind);
560 -- Enumeration subtypes, created by an explicit or implicit subtype
561 -- declaration applied to an enumeration type or subtype.
563 Ab (Integer_Kind, Discrete_Kind,
564 (Sm (Has_Shift_Operator, Flag, Base_Type_Only)));
566 Ab (Signed_Integer_Kind, Integer_Kind);
568 Cc (E_Signed_Integer_Type, Signed_Integer_Kind);
569 -- Signed integer type, used for the anonymous base type of the
570 -- integer subtype created by an integer type declaration.
572 Cc (E_Signed_Integer_Subtype, Signed_Integer_Kind);
573 -- Signed integer subtype, created by either an integer subtype or
574 -- integer type declaration (in the latter case an integer type is
575 -- created for the base type, and this is the first named subtype).
577 Ab (Modular_Integer_Kind, Integer_Kind,
578 (Sm (Modulus, Uint, Base_Type_Only),
579 Sm (Original_Array_Type, Node_Id)));
581 Cc (E_Modular_Integer_Type, Modular_Integer_Kind);
582 -- Modular integer type, used for the anonymous base type of the
583 -- integer subtype created by a modular integer type declaration.
585 Cc (E_Modular_Integer_Subtype, Modular_Integer_Kind);
586 -- Modular integer subtype, created by either an modular subtype
587 -- or modular type declaration (in the latter case a modular type
588 -- is created for the base type, and this is the first named subtype).
590 Ab (Real_Kind, Scalar_Kind,
591 (Sm (Static_Real_Or_String_Predicate, Node_Id)));
593 Ab (Fixed_Point_Kind, Real_Kind,
594 (Sm (Delta_Value, Ureal),
595 Sm (Small_Value, Ureal)));
597 Ab (Ordinary_Fixed_Point_Kind, Fixed_Point_Kind,
598 (Sm (Has_Small_Clause, Flag)));
600 Cc (E_Ordinary_Fixed_Point_Type, Ordinary_Fixed_Point_Kind);
601 -- Ordinary fixed type, used for the anonymous base type of the fixed
602 -- subtype created by an ordinary fixed point type declaration.
604 Cc (E_Ordinary_Fixed_Point_Subtype, Ordinary_Fixed_Point_Kind);
605 -- Ordinary fixed point subtype, created by either an ordinary fixed
606 -- point subtype or ordinary fixed point type declaration (in the
607 -- latter case a fixed point type is created for the base type, and
608 -- this is the first named subtype).
610 Ab (Decimal_Fixed_Point_Kind, Fixed_Point_Kind,
611 (Sm (Digits_Value, Upos),
612 Sm (Has_Machine_Radix_Clause, Flag),
613 Sm (Machine_Radix_10, Flag),
614 Sm (Scale_Value, Uint)));
616 Cc (E_Decimal_Fixed_Point_Type, Decimal_Fixed_Point_Kind);
617 -- Decimal fixed type, used for the anonymous base type of the decimal
618 -- fixed subtype created by an ordinary fixed point type declaration.
620 Cc (E_Decimal_Fixed_Point_Subtype, Decimal_Fixed_Point_Kind);
621 -- Decimal fixed point subtype, created by either a decimal fixed point
622 -- subtype or decimal fixed point type declaration (in the latter case
623 -- a fixed point type is created for the base type, and this is the
624 -- first named subtype).
626 Ab (Float_Kind, Real_Kind,
627 (Sm (Digits_Value, Upos)));
629 Cc (E_Floating_Point_Type, Float_Kind);
630 -- Floating point type, used for the anonymous base type of the
631 -- floating point subtype created by a floating point type declaration.
633 Cc (E_Floating_Point_Subtype, Float_Kind);
634 -- Floating point subtype, created by either a floating point subtype
635 -- or floating point type declaration (in the latter case a floating
636 -- point type is created for the base type, and this is the first
637 -- named subtype).
639 Ab (Access_Kind, Elementary_Kind,
640 (Sm (Associated_Storage_Pool, Node_Id, Root_Type_Only),
641 Sm (Directly_Designated_Type, Node_Id),
642 Sm (Finalization_Master, Node_Id, Root_Type_Only),
643 Sm (Has_Pragma_Controlled, Flag, Impl_Base_Type_Only),
644 Sm (Has_Storage_Size_Clause, Flag, Impl_Base_Type_Only),
645 Sm (Is_Access_Constant, Flag),
646 Sm (Is_Local_Anonymous_Access, Flag),
647 Sm (Is_Param_Block_Component_Type, Flag, Base_Type_Only),
648 Sm (Is_Pure_Unit_Access_Type, Flag),
649 Sm (Master_Id, Node_Id),
650 Sm (No_Pool_Assigned, Flag, Root_Type_Only),
651 Sm (No_Strict_Aliasing, Flag, Base_Type_Only),
652 Sm (Storage_Size_Variable, Node_Id, Impl_Base_Type_Only)));
654 Cc (E_Access_Type, Access_Kind);
655 -- An access type created by an access type declaration with no all
656 -- keyword present.
658 Cc (E_Access_Subtype, Access_Kind);
659 -- An access subtype created by a subtype declaration for any access
660 -- type (whether or not it is a general access type).
662 Cc (E_Access_Attribute_Type, Access_Kind);
663 -- An access type created for an access attribute (one of 'Access,
664 -- 'Unrestricted_Access, or Unchecked_Access).
666 Cc (E_Allocator_Type, Access_Kind);
667 -- A special internal type used to label allocators and references to
668 -- objects using 'Reference. This is needed because special resolution
669 -- rules apply to these constructs. On the resolution pass, this type
670 -- is almost always replaced by the actual access type, but if the
671 -- context does not provide one, the backend will see Allocator_Type
672 -- itself (which will already have been frozen).
674 Cc (E_General_Access_Type, Access_Kind);
675 -- An access type created by an access type declaration with the all
676 -- keyword present.
678 Ab (Access_Subprogram_Kind, Access_Kind);
680 Cc (E_Access_Subprogram_Type, Access_Subprogram_Kind,
681 -- An access-to-subprogram type, created by an access-to-subprogram
682 -- declaration.
683 (Sm (Equivalent_Type, Node_Id),
684 Sm (Original_Access_Type, Node_Id)));
686 Ab (Access_Protected_Kind, Access_Subprogram_Kind,
687 (Sm (Equivalent_Type, Node_Id)));
689 Cc (E_Access_Protected_Subprogram_Type, Access_Protected_Kind);
690 -- An access to a protected subprogram, created by the corresponding
691 -- declaration. Values of such a type denote both a protected object
692 -- and a protected operation within, and have different compile-time
693 -- and run-time properties than other access-to-subprogram values.
695 Cc (E_Anonymous_Access_Protected_Subprogram_Type, Access_Protected_Kind);
696 -- An anonymous access-to-protected-subprogram type, created by an
697 -- access-to-subprogram declaration.
699 Cc (E_Anonymous_Access_Subprogram_Type, Access_Subprogram_Kind);
700 -- An anonymous access-to-subprogram type, created by an access-to-
701 -- subprogram declaration, or generated for a current instance of
702 -- a type name appearing within a component definition that has an
703 -- anonymous access-to-subprogram type.
705 Cc (E_Anonymous_Access_Type, Access_Kind);
706 -- An anonymous access-to-object type
708 Ab (Composite_Kind, Type_Kind,
709 (Sm (Discriminant_Constraint, Elist_Id,
710 Pre_Get => "Has_Discriminants (N) or else Is_Constrained (N)")));
712 Ab (Aggregate_Kind, Composite_Kind,
713 (Sm (Component_Alignment, Component_Alignment_Kind, Base_Type_Only),
714 Sm (Has_Pragma_Pack, Flag, Impl_Base_Type_Only),
715 Sm (Reverse_Storage_Order, Flag, Base_Type_Only),
716 Sm (SSO_Set_High_By_Default, Flag, Base_Type_Only),
717 Sm (SSO_Set_Low_By_Default, Flag, Base_Type_Only)));
719 Ab (Array_Kind, Aggregate_Kind,
720 (Sm (Component_Size, Uint, Impl_Base_Type_Only),
721 Sm (Component_Type, Node_Id, Impl_Base_Type_Only),
722 Sm (Default_Aspect_Component_Value, Node_Id, Base_Type_Only),
723 Sm (First_Index, Node_Id),
724 Sm (Has_Component_Size_Clause, Flag, Impl_Base_Type_Only),
725 Sm (Original_Array_Type, Node_Id),
726 Sm (Packed_Array_Impl_Type, Node_Id),
727 Sm (Related_Array_Object, Node_Id)));
729 Cc (E_Array_Type, Array_Kind,
730 -- An array type created by an array type declaration. Includes all
731 -- cases of arrays, except for string types.
732 (Sm (Static_Real_Or_String_Predicate, Node_Id)));
734 Cc (E_Array_Subtype, Array_Kind,
735 -- An array subtype, created by an explicit array subtype declaration,
736 -- or the use of an anonymous array subtype.
737 (Sm (Predicated_Parent, Node_Id),
738 Sm (Static_Real_Or_String_Predicate, Node_Id)));
740 Cc (E_String_Literal_Subtype, Array_Kind,
741 -- A special string subtype, used only to describe the type of a string
742 -- literal (will always be one dimensional, with literal bounds).
743 (Sm (String_Literal_Length, Unat),
744 Sm (String_Literal_Low_Bound, Node_Id)));
746 Ab (Class_Wide_Kind, Aggregate_Kind,
747 (Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
748 Sm (Equivalent_Type, Node_Id),
749 Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
750 Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
751 Sm (Interfaces, Elist_Id),
752 Sm (No_Reordering, Flag, Impl_Base_Type_Only),
753 Sm (Non_Limited_View, Node_Id),
754 Sm (Parent_Subtype, Node_Id, Base_Type_Only),
755 Sm (Reverse_Bit_Order, Flag, Base_Type_Only)));
757 Cc (E_Class_Wide_Type, Class_Wide_Kind,
758 -- A class wide type, created by any tagged type declaration (i.e. if
759 -- a tagged type is declared, the corresponding class type is always
760 -- created, using this Ekind value).
761 (Sm (Corresponding_Remote_Type, Node_Id),
762 Sm (Scalar_Range, Node_Id)));
764 Cc (E_Class_Wide_Subtype, Class_Wide_Kind,
765 -- A subtype of a class wide type, created by a subtype declaration
766 -- used to declare a subtype of a class type.
767 (Sm (Cloned_Subtype, Node_Id)));
769 Cc (E_Record_Type, Aggregate_Kind,
770 -- A record type, created by a record type declaration
771 (Sm (Access_Disp_Table, Elist_Id, Impl_Base_Type_Only),
772 Sm (Access_Disp_Table_Elab_Flag, Node_Id, Impl_Base_Type_Only),
773 Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
774 Sm (Corresponding_Concurrent_Type, Node_Id),
775 Sm (Corresponding_Remote_Type, Node_Id),
776 Sm (Dispatch_Table_Wrappers, Elist_Id, Impl_Base_Type_Only),
777 Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
778 Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
779 Sm (Interfaces, Elist_Id),
780 Sm (No_Reordering, Flag, Impl_Base_Type_Only),
781 Sm (Parent_Subtype, Node_Id, Base_Type_Only),
782 Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
783 Sm (Underlying_Record_View, Node_Id)));
785 Cc (E_Record_Subtype, Aggregate_Kind,
786 -- A record subtype, created by a record subtype declaration
787 (Sm (Access_Disp_Table, Elist_Id, Impl_Base_Type_Only),
788 Sm (Access_Disp_Table_Elab_Flag, Node_Id, Impl_Base_Type_Only),
789 Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
790 Sm (Cloned_Subtype, Node_Id),
791 Sm (Corresponding_Remote_Type, Node_Id),
792 Sm (Predicated_Parent, Node_Id),
793 Sm (Dispatch_Table_Wrappers, Elist_Id, Impl_Base_Type_Only),
794 Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
795 Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
796 Sm (Interfaces, Elist_Id),
797 Sm (No_Reordering, Flag, Impl_Base_Type_Only),
798 Sm (Parent_Subtype, Node_Id, Base_Type_Only),
799 Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
800 Sm (Underlying_Record_View, Node_Id)));
802 Ab (Incomplete_Or_Private_Kind, Composite_Kind,
803 (Sm (Private_Dependents, Elist_Id)));
805 Ab (Private_Kind, Incomplete_Or_Private_Kind,
806 (Sm (Underlying_Full_View, Node_Id)));
808 Cc (E_Record_Type_With_Private, Private_Kind,
809 -- Used for types defined by a private extension declaration,
810 -- and for tagged private types. Includes the fields for both
811 -- private types and for record types (with the sole exception of
812 -- Corresponding_Concurrent_Type which is obviously not needed). This
813 -- entity is considered to be both a record type and a private type.
814 (Sm (Access_Disp_Table, Elist_Id, Impl_Base_Type_Only),
815 Sm (Access_Disp_Table_Elab_Flag, Node_Id, Impl_Base_Type_Only),
816 Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
817 Sm (Component_Alignment, Component_Alignment_Kind, Base_Type_Only),
818 Sm (Corresponding_Remote_Type, Node_Id),
819 Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
820 Sm (Has_Pragma_Pack, Flag, Impl_Base_Type_Only),
821 Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
822 Sm (Interfaces, Elist_Id),
823 Sm (No_Reordering, Flag, Impl_Base_Type_Only),
824 Sm (Parent_Subtype, Node_Id, Base_Type_Only),
825 Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
826 Sm (Reverse_Storage_Order, Flag, Base_Type_Only),
827 Sm (SSO_Set_High_By_Default, Flag, Base_Type_Only),
828 Sm (SSO_Set_Low_By_Default, Flag, Base_Type_Only),
829 Sm (Underlying_Record_View, Node_Id)));
831 Cc (E_Record_Subtype_With_Private, Private_Kind,
832 -- A subtype of a type defined by a private extension declaration
833 (Sm (C_Pass_By_Copy, Flag, Impl_Base_Type_Only),
834 Sm (Component_Alignment, Component_Alignment_Kind, Base_Type_Only),
835 Sm (Corresponding_Remote_Type, Node_Id),
836 Sm (Predicated_Parent, Node_Id),
837 Sm (Has_Complex_Representation, Flag, Impl_Base_Type_Only),
838 Sm (Has_Pragma_Pack, Flag, Impl_Base_Type_Only),
839 Sm (Has_Record_Rep_Clause, Flag, Impl_Base_Type_Only),
840 Sm (Interfaces, Elist_Id),
841 Sm (No_Reordering, Flag, Impl_Base_Type_Only),
842 Sm (Parent_Subtype, Node_Id, Base_Type_Only),
843 Sm (Reverse_Bit_Order, Flag, Base_Type_Only),
844 Sm (Reverse_Storage_Order, Flag, Base_Type_Only),
845 Sm (SSO_Set_High_By_Default, Flag, Base_Type_Only),
846 Sm (SSO_Set_Low_By_Default, Flag, Base_Type_Only)));
848 Cc (E_Private_Type, Private_Kind,
849 -- A private type, created by a private type declaration that has
850 -- neither the keyword limited nor the keyword tagged.
851 (Sm (Scalar_Range, Node_Id),
852 Sm (Scope_Depth_Value, Unat)));
854 Cc (E_Private_Subtype, Private_Kind,
855 -- A subtype of a private type, created by a subtype declaration used
856 -- to declare a subtype of a private type.
857 (Sm (Scope_Depth_Value, Unat)));
859 Cc (E_Limited_Private_Type, Private_Kind,
860 -- A limited private type, created by a private type declaration that
861 -- has the keyword limited, but not the keyword tagged.
862 (Sm (Scalar_Range, Node_Id),
863 Sm (Scope_Depth_Value, Unat)));
865 Cc (E_Limited_Private_Subtype, Private_Kind,
866 -- A subtype of a limited private type, created by a subtype declaration
867 -- used to declare a subtype of a limited private type.
868 (Sm (Scope_Depth_Value, Unat)));
870 Ab (Incomplete_Kind, Incomplete_Or_Private_Kind,
871 (Sm (Non_Limited_View, Node_Id)));
873 Cc (E_Incomplete_Type, Incomplete_Kind,
874 -- An incomplete type, created by an incomplete type declaration
875 (Sm (Scalar_Range, Node_Id)));
877 Cc (E_Incomplete_Subtype, Incomplete_Kind);
878 -- An incomplete subtype, created by a subtype declaration where the
879 -- subtype mark denotes an incomplete type.
881 Ab (Concurrent_Kind, Composite_Kind,
882 (Sm (Corresponding_Record_Type, Node_Id),
883 Sm (First_Private_Entity, Node_Id),
884 Sm (Scope_Depth_Value, Unat)));
886 Ab (Task_Kind, Concurrent_Kind,
887 (Sm (Has_Storage_Size_Clause, Flag, Impl_Base_Type_Only),
888 Sm (Is_Elaboration_Checks_OK_Id, Flag),
889 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
890 Sm (Relative_Deadline_Variable, Node_Id, Impl_Base_Type_Only),
891 Sm (Storage_Size_Variable, Node_Id, Impl_Base_Type_Only),
892 Sm (Task_Body_Procedure, Node_Id)));
894 Cc (E_Task_Type, Task_Kind,
895 -- A task type, created by a task type declaration. An entity with this
896 -- Ekind is also created to describe the anonymous type of a task that
897 -- is created by a single task declaration.
898 (Sm (Anonymous_Object, Node_Id),
899 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
900 Sm (SPARK_Aux_Pragma, Node_Id),
901 Sm (SPARK_Aux_Pragma_Inherited, Flag)));
903 Cc (E_Task_Subtype, Task_Kind);
904 -- A subtype of a task type, created by a subtype declaration used to
905 -- declare a subtype of a task type.
907 Ab (Protected_Kind, Concurrent_Kind,
908 (Sm (Entry_Bodies_Array, Node_Id,
909 Pre => "Has_Entries (N)"),
910 Sm (Uses_Lock_Free, Flag)));
912 Cc (E_Protected_Type, Protected_Kind,
913 -- A protected type, created by a protected type declaration. An entity
914 -- with this Ekind is also created to describe the anonymous type of
915 -- a protected object created by a single protected declaration.
916 (Sm (Anonymous_Object, Node_Id),
917 Sm (Entry_Max_Queue_Lengths_Array, Node_Id),
918 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
919 Sm (SPARK_Aux_Pragma, Node_Id),
920 Sm (SPARK_Aux_Pragma_Inherited, Flag)));
922 Cc (E_Protected_Subtype, Protected_Kind);
923 -- A subtype of a protected type, created by a subtype declaration used
924 -- to declare a subtype of a protected type.
926 Cc (E_Exception_Type, Type_Kind,
927 -- The type of an exception created by an exception declaration
928 (Sm (Equivalent_Type, Node_Id)));
930 Cc (E_Subprogram_Type, Type_Kind,
931 -- This is the designated type of an Access_To_Subprogram. Has type and
932 -- signature like a subprogram entity, so can appear in calls, which
933 -- are resolved like regular calls, except that such an entity is not
934 -- overloadable.
935 (Sm (Access_Subprogram_Wrapper, Node_Id),
936 Sm (Extra_Accessibility_Of_Result, Node_Id),
937 Sm (Extra_Formals, Node_Id),
938 Sm (Needs_No_Actuals, Flag)));
940 Ab (Overloadable_Kind, Entity_Kind,
941 (Sm (Renamed_Or_Alias, Node_Id),
942 Sm (Extra_Formals, Node_Id),
943 Sm (Is_Abstract_Subprogram, Flag),
944 Sm (Is_Primitive, Flag),
945 Sm (Needs_No_Actuals, Flag),
946 Sm (Requires_Overriding, Flag)));
948 Cc (E_Enumeration_Literal, Overloadable_Kind,
949 -- An enumeration literal, created by the use of the literal in an
950 -- enumeration type definition.
951 (Sm (Enumeration_Pos, Unat),
952 Sm (Enumeration_Rep, Valid_Uint),
953 Sm (Enumeration_Rep_Expr, Node_Id),
954 Sm (Esize, Uint),
955 Sm (Alignment, Unat),
956 Sm (Interface_Name, Node_Id)));
958 Ab (Subprogram_Kind, Overloadable_Kind,
959 (Sm (Body_Needed_For_SAL, Flag),
960 Sm (Class_Postconditions, Node_Id),
961 Sm (Class_Preconditions, Node_Id),
962 Sm (Class_Preconditions_Subprogram, Node_Id),
963 Sm (Contract, Node_Id),
964 Sm (Dynamic_Call_Helper, Node_Id),
965 Sm (Elaboration_Entity, Node_Id),
966 Sm (Elaboration_Entity_Required, Flag),
967 Sm (First_Entity, Node_Id),
968 Sm (Has_Expanded_Contract, Flag),
969 Sm (Has_Nested_Subprogram, Flag),
970 Sm (Has_Out_Or_In_Out_Parameter, Flag),
971 Sm (Has_Recursive_Call, Flag),
972 Sm (Ignored_Class_Postconditions, Node_Id),
973 Sm (Ignored_Class_Preconditions, Node_Id),
974 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
975 Sm (Import_Pragma, Node_Id),
976 Sm (Indirect_Call_Wrapper, Node_Id),
977 Sm (Interface_Alias, Node_Id),
978 Sm (Interface_Name, Node_Id),
979 Sm (Is_Elaboration_Checks_OK_Id, Flag),
980 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
981 Sm (Is_Machine_Code_Subprogram, Flag),
982 Sm (Last_Entity, Node_Id),
983 Sm (Linker_Section_Pragma, Node_Id),
984 Sm (Overridden_Operation, Node_Id),
985 Sm (Protected_Body_Subprogram, Node_Id),
986 Sm (Scope_Depth_Value, Unat),
987 Sm (Static_Call_Helper, Node_Id),
988 Sm (SPARK_Pragma, Node_Id),
989 Sm (SPARK_Pragma_Inherited, Flag),
990 Sm (Subps_Index, Unat)));
992 Cc (E_Function, Subprogram_Kind,
993 -- A function, created by a function declaration or a function body
994 -- that acts as its own declaration.
995 (Sm (Anonymous_Masters, Elist_Id),
996 Sm (Corresponding_Equality, Node_Id,
997 Pre => "not Comes_From_Source (N) and then Chars (N) = Name_Op_Ne"),
998 Sm (Corresponding_Procedure, Node_Id),
999 Sm (DT_Position, Uint,
1000 Pre_Get => "Present (DTC_Entity (N))"),
1001 Sm (DTC_Entity, Node_Id),
1002 Sm (Extra_Accessibility_Of_Result, Node_Id),
1003 Sm (Generic_Renamings, Elist_Id),
1004 Sm (Handler_Records, List_Id),
1005 Sm (Has_Missing_Return, Flag),
1006 Sm (Inner_Instances, Elist_Id),
1007 Sm (Is_Called, Flag),
1008 Sm (Is_CUDA_Kernel, Flag),
1009 Sm (Is_DIC_Procedure, Flag),
1010 Sm (Is_Generic_Actual_Subprogram, Flag),
1011 Sm (Is_Initial_Condition_Procedure, Flag),
1012 Sm (Is_Inlined_Always, Flag),
1013 Sm (Is_Invariant_Procedure, Flag),
1014 Sm (Is_Partial_Invariant_Procedure, Flag),
1015 Sm (Is_Predicate_Function, Flag),
1016 Sm (Is_Primitive_Wrapper, Flag),
1017 Sm (Is_Private_Primitive, Flag),
1018 Sm (LSP_Subprogram, Node_Id),
1019 Sm (Mechanism, Mechanism_Type),
1020 Sm (Next_Inlined_Subprogram, Node_Id),
1021 Sm (Original_Protected_Subprogram, Node_Id),
1022 Sm (Postconditions_Proc, Node_Id),
1023 Sm (Predicate_Expression, Node_Id),
1024 Sm (Protected_Subprogram, Node_Id),
1025 Sm (Protection_Object, Node_Id),
1026 Sm (Related_Expression, Node_Id),
1027 Sm (Rewritten_For_C, Flag),
1028 Sm (Thunk_Entity, Node_Id,
1029 Pre => "Is_Thunk (N)"),
1030 Sm (Wrapped_Entity, Node_Id,
1031 Pre => "Is_Primitive_Wrapper (N)"),
1032 Sm (Wrapped_Statements, Node_Id)));
1034 Cc (E_Operator, Subprogram_Kind,
1035 -- A predefined operator, appearing in Standard, or an implicitly
1036 -- defined concatenation operator created whenever an array is declared.
1037 -- We do not make normal derived operators explicit in the tree, but the
1038 -- concatenation operators are made explicit.
1039 (Sm (Extra_Accessibility_Of_Result, Node_Id),
1040 Sm (LSP_Subprogram, Node_Id)));
1042 Cc (E_Procedure, Subprogram_Kind,
1043 -- A procedure, created by a procedure declaration or a procedure
1044 -- body that acts as its own declaration.
1045 (Sm (Anonymous_Masters, Elist_Id),
1046 Sm (Associated_Node_For_Itype, Node_Id),
1047 Sm (Corresponding_Function, Node_Id),
1048 Sm (DT_Position, Uint,
1049 Pre_Get => "Present (DTC_Entity (N))"),
1050 Sm (DTC_Entity, Node_Id),
1051 Sm (Entry_Parameters_Type, Node_Id),
1052 Sm (Generic_Renamings, Elist_Id),
1053 Sm (Handler_Records, List_Id),
1054 Sm (Inner_Instances, Elist_Id),
1055 Sm (Is_Asynchronous, Flag),
1056 Sm (Is_Called, Flag),
1057 Sm (Is_CUDA_Kernel, Flag),
1058 Sm (Is_DIC_Procedure, Flag),
1059 Sm (Is_Generic_Actual_Subprogram, Flag),
1060 Sm (Is_Initial_Condition_Procedure, Flag),
1061 Sm (Is_Inlined_Always, Flag),
1062 Sm (Is_Invariant_Procedure, Flag),
1063 Sm (Is_Null_Init_Proc, Flag),
1064 Sm (Is_Partial_Invariant_Procedure, Flag),
1065 Sm (Is_Predicate_Function, Flag),
1066 Sm (Is_Primitive_Wrapper, Flag),
1067 Sm (Is_Private_Primitive, Flag),
1068 Sm (Is_Valued_Procedure, Flag),
1069 Sm (LSP_Subprogram, Node_Id),
1070 Sm (Next_Inlined_Subprogram, Node_Id),
1071 Sm (Original_Protected_Subprogram, Node_Id),
1072 Sm (Postconditions_Proc, Node_Id),
1073 Sm (Protected_Subprogram, Node_Id),
1074 Sm (Protection_Object, Node_Id),
1075 Sm (Receiving_Entry, Node_Id),
1076 Sm (Static_Initialization, Node_Id,
1077 Pre => "not Is_Dispatching_Operation (N)"),
1078 Sm (Thunk_Entity, Node_Id,
1079 Pre => "Is_Thunk (N)"),
1080 Sm (Wrapped_Entity, Node_Id,
1081 Pre => "Is_Primitive_Wrapper (N)"),
1082 Sm (Wrapped_Statements, Node_Id)));
1084 Cc (E_Abstract_State, Overloadable_Kind,
1085 -- A state abstraction. Used to designate entities introduced by aspect
1086 -- or pragma Abstract_State. The entity carries the various properties
1087 -- of the state.
1088 (Sm (Body_References, Elist_Id),
1089 Sm (Encapsulating_State, Node_Id),
1090 Sm (First_Entity, Node_Id),
1091 Sm (Has_Partial_Visible_Refinement, Flag),
1092 Sm (Has_Visible_Refinement, Flag),
1093 Sm (Non_Limited_View, Node_Id),
1094 Sm (Part_Of_Constituents, Elist_Id),
1095 Sm (Refinement_Constituents, Elist_Id),
1096 Sm (SPARK_Pragma, Node_Id),
1097 Sm (SPARK_Pragma_Inherited, Flag)));
1099 Cc (E_Entry, Overloadable_Kind,
1100 -- An entry, created by an entry declaration in a task or protected
1101 -- object.
1102 (Sm (Accept_Address, Elist_Id),
1103 Sm (Barrier_Function, Node_Id),
1104 Sm (Contract, Node_Id),
1105 Sm (Contract_Wrapper, Node_Id),
1106 Sm (Elaboration_Entity, Node_Id),
1107 Sm (Elaboration_Entity_Required, Flag),
1108 Sm (Entry_Accepted, Flag),
1109 Sm (Entry_Parameters_Type, Node_Id),
1110 Sm (First_Entity, Node_Id),
1111 Sm (Has_Out_Or_In_Out_Parameter, Flag),
1112 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1113 Sm (Is_Elaboration_Checks_OK_Id, Flag),
1114 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
1115 Sm (Last_Entity, Node_Id),
1116 Sm (Postconditions_Proc, Node_Id),
1117 Sm (Protected_Body_Subprogram, Node_Id),
1118 Sm (Protection_Object, Node_Id),
1119 Sm (Scope_Depth_Value, Unat),
1120 Sm (SPARK_Pragma, Node_Id),
1121 Sm (SPARK_Pragma_Inherited, Flag),
1122 Sm (Wrapped_Statements, Node_Id)));
1124 Cc (E_Entry_Family, Entity_Kind,
1125 -- An entry family, created by an entry family declaration in a
1126 -- task or protected type definition.
1127 (Sm (Accept_Address, Elist_Id),
1128 Sm (Barrier_Function, Node_Id),
1129 Sm (Contract, Node_Id),
1130 Sm (Contract_Wrapper, Node_Id),
1131 Sm (Elaboration_Entity, Node_Id),
1132 Sm (Elaboration_Entity_Required, Flag),
1133 Sm (Entry_Accepted, Flag),
1134 Sm (Entry_Parameters_Type, Node_Id),
1135 Sm (Extra_Formals, Node_Id),
1136 Sm (First_Entity, Node_Id),
1137 Sm (Has_Out_Or_In_Out_Parameter, Flag),
1138 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1139 Sm (Is_Elaboration_Checks_OK_Id, Flag),
1140 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
1141 Sm (Last_Entity, Node_Id),
1142 Sm (Needs_No_Actuals, Flag),
1143 Sm (Postconditions_Proc, Node_Id),
1144 Sm (Protected_Body_Subprogram, Node_Id),
1145 Sm (Protection_Object, Node_Id),
1146 Sm (Renamed_Or_Alias, Node_Id),
1147 Sm (Scope_Depth_Value, Unat),
1148 Sm (SPARK_Pragma, Node_Id),
1149 Sm (SPARK_Pragma_Inherited, Flag),
1150 Sm (Wrapped_Statements, Node_Id)));
1152 Cc (E_Block, Entity_Kind,
1153 -- A block identifier, created by an explicit or implicit label on
1154 -- a block or declare statement.
1155 (Sm (Block_Node, Node_Id),
1156 Sm (Entry_Cancel_Parameter, Node_Id),
1157 Sm (First_Entity, Node_Id),
1158 Sm (Is_Exception_Handler, Flag),
1159 Sm (Last_Entity, Node_Id),
1160 Sm (Renamed_Or_Alias, Node_Id),
1161 Sm (Return_Applies_To, Node_Id),
1162 Sm (Scope_Depth_Value, Unat)));
1164 Cc (E_Entry_Index_Parameter, Entity_Kind,
1165 -- An entry index parameter created by an entry index specification
1166 -- for the body of a protected entry family.
1167 (Sm (Entry_Index_Constant, Node_Id)));
1169 Cc (E_Exception, Exception_Or_Object_Kind,
1170 -- An exception created by an exception declaration. The exception
1171 -- itself uses E_Exception for the Ekind, the implicit type that is
1172 -- created to represent its type uses the Ekind E_Exception_Type.
1173 (Sm (Alignment, Unat),
1174 Sm (Esize, Uint),
1175 Sm (Interface_Name, Node_Id),
1176 Sm (Is_Raised, Flag),
1177 Sm (Register_Exception_Call, Node_Id),
1178 Sm (Renamed_Or_Alias, Node_Id)));
1180 Ab (Generic_Unit_Kind, Entity_Kind,
1181 (Sm (Body_Needed_For_SAL, Flag),
1182 Sm (Contract, Node_Id),
1183 Sm (Elaboration_Entity, Node_Id),
1184 Sm (Elaboration_Entity_Required, Flag),
1185 Sm (First_Entity, Node_Id),
1186 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1187 Sm (Inner_Instances, Elist_Id),
1188 Sm (Interface_Name, Node_Id),
1189 Sm (Is_Elaboration_Checks_OK_Id, Flag),
1190 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
1191 Sm (Last_Entity, Node_Id),
1192 Sm (Renamed_Or_Alias, Node_Id),
1193 Sm (Scope_Depth_Value, Unat),
1194 Sm (SPARK_Pragma, Node_Id),
1195 Sm (SPARK_Pragma_Inherited, Flag)));
1197 Ab (Generic_Subprogram_Kind, Generic_Unit_Kind,
1198 (Sm (Has_Out_Or_In_Out_Parameter, Flag),
1199 Sm (Is_Primitive, Flag),
1200 Sm (Next_Inlined_Subprogram, Node_Id),
1201 Sm (Overridden_Operation, Node_Id)));
1203 Cc (E_Generic_Function, Generic_Subprogram_Kind,
1204 -- A generic function. This is the entity for a generic function
1205 -- created by a generic subprogram declaration.
1206 (Sm (Has_Missing_Return, Flag)));
1208 Cc (E_Generic_Procedure, Generic_Subprogram_Kind);
1209 -- A generic function. This is the entity for a generic procedure
1210 -- created by a generic subprogram declaration.
1212 Cc (E_Generic_Package, Generic_Unit_Kind,
1213 -- A generic package, this is the entity for a generic package created
1214 -- by a generic package declaration.
1215 (Sm (Abstract_States, Elist_Id),
1216 Sm (Body_Entity, Node_Id),
1217 Sm (First_Private_Entity, Node_Id),
1218 Sm (Generic_Homonym, Node_Id),
1219 Sm (Package_Instantiation, Node_Id),
1220 Sm (SPARK_Aux_Pragma, Node_Id),
1221 Sm (SPARK_Aux_Pragma_Inherited, Flag)));
1223 Cc (E_Label, Entity_Kind,
1224 -- The defining entity for a label. Note that this is created by the
1225 -- implicit label declaration, not the occurrence of the label itself,
1226 -- which is simply a direct name referring to the label.
1227 (Sm (Enclosing_Scope, Node_Id),
1228 Sm (Entry_Cancel_Parameter, Node_Id),
1229 Sm (Reachable, Flag),
1230 Sm (Renamed_Or_Alias, Node_Id)));
1232 Cc (E_Loop, Entity_Kind,
1233 -- A loop identifier, created by an explicit or implicit label on a
1234 -- loop statement.
1235 (Sm (First_Entity, Node_Id),
1236 Sm (First_Exit_Statement, Node_Id),
1237 Sm (Has_Loop_Entry_Attributes, Flag),
1238 Sm (Last_Entity, Node_Id),
1239 Sm (Renamed_Or_Alias, Node_Id),
1240 Sm (Scope_Depth_Value, Unat)));
1242 Cc (E_Return_Statement, Entity_Kind,
1243 -- A dummy entity created for each return statement. Used to hold
1244 -- information about the return statement (what it applies to) and in
1245 -- rules checking. For example, a simple_return_statement that applies
1246 -- to an extended_return_statement cannot have an expression; this
1247 -- requires putting the E_Return_Statement entity for the
1248 -- extended_return_statement on the scope stack.
1249 (Sm (First_Entity, Node_Id),
1250 Sm (Last_Entity, Node_Id),
1251 Sm (Return_Applies_To, Node_Id),
1252 Sm (Scope_Depth_Value, Unat)));
1254 Cc (E_Package, Entity_Kind,
1255 -- A package, created by a package declaration
1256 (Sm (Abstract_States, Elist_Id),
1257 Sm (Anonymous_Masters, Elist_Id),
1258 Sm (Associated_Formal_Package, Node_Id),
1259 Sm (Body_Entity, Node_Id),
1260 Sm (Body_Needed_For_Inlining, Flag),
1261 Sm (Body_Needed_For_SAL, Flag),
1262 Sm (Contract, Node_Id),
1263 Sm (Current_Use_Clause, Node_Id),
1264 Sm (Dependent_Instances, Elist_Id,
1265 Pre => "Is_Generic_Instance (N)"),
1266 Sm (Elaborate_Body_Desirable, Flag),
1267 Sm (Elaboration_Entity, Node_Id),
1268 Sm (Elaboration_Entity_Required, Flag),
1269 Sm (Finalizer, Node_Id),
1270 Sm (First_Entity, Node_Id),
1271 Sm (First_Private_Entity, Node_Id),
1272 Sm (Generic_Renamings, Elist_Id),
1273 Sm (Handler_Records, List_Id),
1274 Sm (Has_RACW, Flag),
1275 Sm (Hidden_In_Formal_Instance, Elist_Id),
1276 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1277 Sm (Incomplete_Actuals, Elist_Id),
1278 Sm (Inner_Instances, Elist_Id),
1279 Sm (Interface_Name, Node_Id),
1280 Sm (Is_Called, Flag),
1281 Sm (Is_Elaboration_Checks_OK_Id, Flag),
1282 Sm (Is_Elaboration_Warnings_OK_Id, Flag),
1283 Sm (Last_Entity, Node_Id),
1284 Sm (Limited_View, Node_Id),
1285 Sm (Package_Instantiation, Node_Id),
1286 Sm (Related_Instance, Node_Id),
1287 Sm (Renamed_In_Spec, Flag),
1288 Sm (Renamed_Or_Alias, Node_Id),
1289 Sm (Scope_Depth_Value, Unat),
1290 Sm (SPARK_Aux_Pragma, Node_Id),
1291 Sm (SPARK_Aux_Pragma_Inherited, Flag),
1292 Sm (SPARK_Pragma, Node_Id),
1293 Sm (SPARK_Pragma_Inherited, Flag),
1294 Sm (Static_Elaboration_Desired, Flag)));
1296 Cc (E_Package_Body, Entity_Kind,
1297 -- A package body. This entity serves only limited functions, since
1298 -- most semantic analysis uses the package entity (E_Package). However
1299 -- there are some attributes that are significant for the body entity.
1300 -- For example, collection of exception handlers.
1301 (Sm (Contract, Node_Id),
1302 Sm (Finalizer, Node_Id),
1303 Sm (First_Entity, Node_Id),
1304 Sm (Handler_Records, List_Id),
1305 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1306 Sm (Last_Entity, Node_Id),
1307 Sm (Related_Instance, Node_Id),
1308 Sm (Renamed_Or_Alias, Node_Id),
1309 Sm (Scope_Depth_Value, Unat),
1310 Sm (SPARK_Aux_Pragma, Node_Id),
1311 Sm (SPARK_Aux_Pragma_Inherited, Flag),
1312 Sm (SPARK_Pragma, Node_Id),
1313 Sm (SPARK_Pragma_Inherited, Flag),
1314 Sm (Spec_Entity, Node_Id)));
1316 Ab (Concurrent_Body_Kind, Entity_Kind,
1317 (Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1318 Sm (SPARK_Pragma, Node_Id),
1319 Sm (SPARK_Pragma_Inherited, Flag)));
1321 Cc (E_Protected_Body, Concurrent_Body_Kind);
1322 -- A protected body. This entity serves almost no function, since all
1323 -- semantic analysis uses the protected entity (E_Protected_Type).
1325 Cc (E_Task_Body, Concurrent_Body_Kind,
1326 -- A task body. This entity serves almost no function, since all
1327 -- semantic analysis uses the protected entity (E_Task_Type).
1328 (Sm (Contract, Node_Id),
1329 Sm (First_Entity, Node_Id)));
1331 Cc (E_Subprogram_Body, Entity_Kind,
1332 -- A subprogram body. Used when a subprogram has a separate declaration
1333 -- to represent the entity for the body. This entity serves almost no
1334 -- function, since all semantic analysis uses the subprogram entity
1335 -- for the declaration (E_Function or E_Procedure).
1336 (Sm (Anonymous_Masters, Elist_Id),
1337 Sm (Contract, Node_Id),
1338 Sm (Extra_Formals, Node_Id),
1339 Sm (First_Entity, Node_Id),
1340 Sm (Ignore_SPARK_Mode_Pragmas, Flag),
1341 Sm (Interface_Name, Node_Id),
1342 Sm (Last_Entity, Node_Id),
1343 Sm (Renamed_Or_Alias, Node_Id),
1344 Sm (Scope_Depth_Value, Unat),
1345 Sm (SPARK_Pragma, Node_Id),
1346 Sm (SPARK_Pragma_Inherited, Flag)));
1348 -- Union types. These don't fit into the normal parent/child hierarchy
1349 -- above.
1351 Union (Anonymous_Access_Kind,
1352 Children =>
1353 (E_Anonymous_Access_Protected_Subprogram_Type,
1354 E_Anonymous_Access_Subprogram_Type,
1355 E_Anonymous_Access_Type));
1357 Union (Assignable_Kind,
1358 Children =>
1359 (E_Variable,
1360 E_Out_Parameter,
1361 E_In_Out_Parameter));
1363 Union (Digits_Kind,
1364 Children =>
1365 (Decimal_Fixed_Point_Kind,
1366 Float_Kind));
1368 Union (Discrete_Or_Fixed_Point_Kind,
1369 Children =>
1370 (Discrete_Kind,
1371 Fixed_Point_Kind));
1373 Union (Entry_Kind,
1374 Children =>
1375 (E_Entry,
1376 E_Entry_Family));
1378 Union (Evaluable_Kind,
1379 Children =>
1380 (Exception_Or_Object_Kind,
1381 E_Enumeration_Literal,
1382 E_Label,
1383 Subprogram_Kind));
1384 -- Kinds that represent values that can be evaluated
1386 Union (Global_Name_Kind,
1387 Children =>
1388 (Constant_Or_Variable_Kind,
1389 E_Exception,
1390 E_Package,
1391 Subprogram_Kind));
1392 -- Kinds that can have an Interface_Name that corresponds to a global
1393 -- (linker) name.
1395 Union (Named_Access_Kind,
1396 Children =>
1397 (E_Access_Type,
1398 E_Access_Subtype,
1399 E_Access_Attribute_Type,
1400 E_Allocator_Type,
1401 E_General_Access_Type,
1402 E_Access_Subprogram_Type,
1403 E_Access_Protected_Subprogram_Type));
1405 Union (Numeric_Kind,
1406 Children =>
1407 (Integer_Kind,
1408 Fixed_Point_Kind,
1409 Float_Kind));
1411 Union (Record_Kind,
1412 Children =>
1413 (E_Class_Wide_Type,
1414 E_Class_Wide_Subtype,
1415 E_Record_Type,
1416 E_Record_Subtype,
1417 E_Record_Type_With_Private,
1418 E_Record_Subtype_With_Private));
1420 Union (Subprogram_Type_Or_Kind,
1421 Children =>
1422 (Subprogram_Kind,
1423 E_Subprogram_Body,
1424 E_Subprogram_Type));
1426 -- Entities that represent scopes. These can be on the scope stack,
1427 -- and Scope_Depth can be queried. These are the kinds that have
1428 -- the Scope_Depth_Value attribute, plus Record_Kind, which has
1429 -- a synthesized Scope_Depth.
1431 Union (Scope_Kind,
1432 Children =>
1433 (E_Void,
1434 E_Private_Type,
1435 E_Private_Subtype,
1436 E_Limited_Private_Type,
1437 E_Limited_Private_Subtype,
1438 Concurrent_Kind,
1439 Subprogram_Kind,
1440 E_Entry,
1441 E_Entry_Family,
1442 E_Block,
1443 Generic_Unit_Kind,
1444 E_Loop,
1445 E_Return_Statement,
1446 E_Package,
1447 E_Package_Body,
1448 E_Subprogram_Body,
1449 Record_Kind,
1450 E_Incomplete_Type,
1451 E_Subprogram_Type));
1453 end Gen_IL.Gen.Gen_Entities;