OSDN Git Service

2008-04-08 Ed Schonberg <schonberg@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / einfo.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                                E I N F O                                 --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --          Copyright (C) 1992-2008, 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 2,  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 COPYING.  If not, write --
19 -- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
20 -- Boston, MA 02110-1301, USA.                                              --
21 --                                                                          --
22 -- As a special exception,  if other files  instantiate  generics from this --
23 -- unit, or you link  this unit with other files  to produce an executable, --
24 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
25 -- covered  by the  GNU  General  Public  License.  This exception does not --
26 -- however invalidate  any other reasons why  the executable file  might be --
27 -- covered by the  GNU Public License.                                      --
28 --                                                                          --
29 -- GNAT was originally developed  by the GNAT team at  New York University. --
30 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
31 --                                                                          --
32 ------------------------------------------------------------------------------
33
34 pragma Style_Checks (All_Checks);
35 --  Turn off subprogram ordering, not used for this unit
36
37 with Atree;  use Atree;
38 with Nlists; use Nlists;
39 with Output; use Output;
40 with Sinfo;  use Sinfo;
41 with Stand;  use Stand;
42
43 package body Einfo is
44
45    use Atree.Unchecked_Access;
46    --  This is one of the packages that is allowed direct untyped access to
47    --  the fields in a node, since it provides the next level abstraction
48    --  which incorporates appropriate checks.
49
50    ----------------------------------------------
51    -- Usage of Fields in Defining Entity Nodes --
52    ----------------------------------------------
53
54    --  Four of these fields are defined in Sinfo, since they in are the
55    --  base part of the node. The access routines for these fields and
56    --  the corresponding set procedures are defined in Sinfo. These fields
57    --  are present in all entities. Note that Homonym is also in the base
58    --  part of the node, but has access routines that are more properly
59    --  part of Einfo, which is why they are defined here.
60
61    --    Chars                           Name1
62    --    Next_Entity                     Node2
63    --    Scope                           Node3
64    --    Etype                           Node5
65
66    --   Remaining fields are present only in extended nodes (i.e. entities)
67
68    --  The following fields are present in all entities
69
70    --    Homonym                         Node4
71    --    First_Rep_Item                  Node6
72    --    Freeze_Node                     Node7
73
74    --  The usage of other fields (and the entity kinds to which it applies)
75    --  depends on the particular field (see Einfo spec for details).
76
77    --    Associated_Node_For_Itype       Node8
78    --    Dependent_Instances             Elist8
79    --    Hiding_Loop_Variable            Node8
80    --    Mechanism                       Uint8 (but returns Mechanism_Type)
81    --    Normalized_First_Bit            Uint8
82    --    Return_Applies_To               Node8
83
84    --    Class_Wide_Type                 Node9
85    --    Current_Value                   Node9
86    --    Renaming_Map                    Uint9
87
88    --    Discriminal_Link                Node10
89    --    Handler_Records                 List10
90    --    Normalized_Position_Max         Uint10
91    --    Referenced_Object               Node10
92
93    --    Component_Bit_Offset            Uint11
94    --    Full_View                       Node11
95    --    Entry_Component                 Node11
96    --    Enumeration_Pos                 Uint11
97    --    Generic_Homonym                 Node11
98    --    Protected_Body_Subprogram       Node11
99    --    Block_Node                      Node11
100
101    --    Barrier_Function                Node12
102    --    Enumeration_Rep                 Uint12
103    --    Esize                           Uint12
104    --    Next_Inlined_Subprogram         Node12
105
106    --    Corresponding_Equality          Node13
107    --    Component_Clause                Node13
108    --    Elaboration_Entity              Node13
109    --    Extra_Accessibility             Node13
110    --    RM_Size                         Uint13
111
112    --    Alignment                       Uint14
113    --    First_Optional_Parameter        Node14
114    --    Normalized_Position             Uint14
115    --    Shadow_Entities                 List14
116
117    --    Discriminant_Number             Uint15
118    --    DT_Position                     Uint15
119    --    DT_Entry_Count                  Uint15
120    --    Entry_Bodies_Array              Node15
121    --    Entry_Parameters_Type           Node15
122    --    Extra_Formal                    Node15
123    --    Lit_Indexes                     Node15
124    --    Primitive_Operations            Elist15
125    --    Related_Instance                Node15
126    --    Scale_Value                     Uint15
127    --    Storage_Size_Variable           Node15
128    --    String_Literal_Low_Bound        Node15
129    --    Shared_Var_Read_Proc            Node15
130
131    --    Access_Disp_Table               Elist16
132    --    Cloned_Subtype                  Node16
133    --    DTC_Entity                      Node16
134    --    Entry_Formal                    Node16
135    --    First_Private_Entity            Node16
136    --    Lit_Strings                     Node16
137    --    String_Literal_Length           Uint16
138    --    Unset_Reference                 Node16
139
140    --    Actual_Subtype                  Node17
141    --    Digits_Value                    Uint17
142    --    Discriminal                     Node17
143    --    First_Entity                    Node17
144    --    First_Index                     Node17
145    --    First_Literal                   Node17
146    --    Master_Id                       Node17
147    --    Modulus                         Uint17
148    --    Non_Limited_View                Node17
149    --    Prival                          Node17
150
151    --    Alias                           Node18
152    --    Corresponding_Concurrent_Type   Node18
153    --    Corresponding_Record_Type       Node18
154    --    Delta_Value                     Ureal18
155    --    Enclosing_Scope                 Node18
156    --    Equivalent_Type                 Node18
157    --    Private_Dependents              Elist18
158    --    Renamed_Entity                  Node18
159    --    Renamed_Object                  Node18
160
161    --    Body_Entity                     Node19
162    --    Corresponding_Discriminant      Node19
163    --    Finalization_Chain_Entity       Node19
164    --    Parent_Subtype                  Node19
165    --    Related_Array_Object            Node19
166    --    Size_Check_Code                 Node19
167    --    Spec_Entity                     Node19
168    --    Underlying_Full_View            Node19
169
170    --    Component_Type                  Node20
171    --    Default_Value                   Node20
172    --    Directly_Designated_Type        Node20
173    --    Discriminant_Checking_Func      Node20
174    --    Discriminant_Default_Value      Node20
175    --    Last_Entity                     Node20
176    --    Prival_Link                     Node20
177    --    Register_Exception_Call         Node20
178    --    Scalar_Range                    Node20
179
180    --    Accept_Address                  Elist21
181    --    Default_Expr_Function           Node21
182    --    Discriminant_Constraint         Elist21
183    --    Interface_Name                  Node21
184    --    Original_Array_Type             Node21
185    --    Small_Value                     Ureal21
186
187    --    Associated_Storage_Pool         Node22
188    --    Component_Size                  Uint22
189    --    Corresponding_Remote_Type       Node22
190    --    Enumeration_Rep_Expr            Node22
191    --    Exception_Code                  Uint22
192    --    Original_Record_Component       Node22
193    --    Private_View                    Node22
194    --    Protected_Formal                Node22
195    --    Scope_Depth_Value               Uint22
196    --    Shared_Var_Assign_Proc          Node22
197
198    --    Associated_Final_Chain          Node23
199    --    CR_Discriminant                 Node23
200    --    Entry_Cancel_Parameter          Node23
201    --    Enum_Pos_To_Rep                 Node23
202    --    Extra_Constrained               Node23
203    --    Generic_Renamings               Elist23
204    --    Inner_Instances                 Elist23
205    --    Limited_View                    Node23
206    --    Packed_Array_Type               Node23
207    --    Protection_Object               Node23
208    --    Stored_Constraint               Elist23
209
210    --    Spec_PPC_List                   Node24
211
212    --    Abstract_Interface_Alias        Node25
213    --    Abstract_Interfaces             Elist25
214    --    Debug_Renaming_Link             Node25
215    --    DT_Offset_To_Top_Func           Node25
216    --    Task_Body_Procedure             Node25
217
218    --    Dispatch_Table_Wrapper          Node26
219    --    Last_Assignment                 Node26
220    --    Overridden_Operation            Node26
221    --    Package_Instantiation           Node26
222    --    Related_Type                    Node26
223    --    Relative_Deadline_Variable      Node26
224    --    Static_Initialization           Node26
225
226    --    Current_Use_Clause              Node27
227    --    Wrapped_Entity                  Node27
228
229    --    Extra_Formals                   Node28
230
231    ---------------------------------------------
232    -- Usage of Flags in Defining Entity Nodes --
233    ---------------------------------------------
234
235    --  All flags are unique, there is no overlaying, so each flag is physically
236    --  present in every entity. However, for many of the flags, it only makes
237    --  sense for them to be set true for certain subsets of entity kinds. See
238    --  the spec of Einfo for further details.
239
240    --  Note: Flag1-Flag3 are absent from this list, since these flag positions
241    --  are used for the flags Analyzed, Comes_From_Source, and Error_Posted,
242    --  which are common to all nodes, including entity nodes.
243
244    --    Is_Frozen                       Flag4
245    --    Has_Discriminants               Flag5
246    --    Is_Dispatching_Operation        Flag6
247    --    Is_Immediately_Visible          Flag7
248    --    In_Use                          Flag8
249    --    Is_Potentially_Use_Visible      Flag9
250    --    Is_Public                       Flag10
251
252    --    Is_Inlined                      Flag11
253    --    Is_Constrained                  Flag12
254    --    Is_Generic_Type                 Flag13
255    --    Depends_On_Private              Flag14
256    --    Is_Aliased                      Flag15
257    --    Is_Volatile                     Flag16
258    --    Is_Internal                     Flag17
259    --    Has_Delayed_Freeze              Flag18
260    --    Is_Abstract_Subprogram          Flag19
261    --    Is_Concurrent_Record_Type       Flag20
262
263    --    Has_Master_Entity               Flag21
264    --    Needs_No_Actuals                Flag22
265    --    Has_Storage_Size_Clause         Flag23
266    --    Is_Imported                     Flag24
267    --    Is_Limited_Record               Flag25
268    --    Has_Completion                  Flag26
269    --    Has_Pragma_Controlled           Flag27
270    --    Is_Statically_Allocated         Flag28
271    --    Has_Size_Clause                 Flag29
272    --    Has_Task                        Flag30
273
274    --    Checks_May_Be_Suppressed        Flag31
275    --    Kill_Elaboration_Checks         Flag32
276    --    Kill_Range_Checks               Flag33
277    --    Kill_Tag_Checks                 Flag34
278    --    Is_Class_Wide_Equivalent_Type   Flag35
279    --    Referenced_As_LHS               Flag36
280    --    Is_Known_Non_Null               Flag37
281    --    Can_Never_Be_Null               Flag38
282    --    Is_Overriding_Operation         Flag39
283    --    Body_Needed_For_SAL             Flag40
284
285    --    Treat_As_Volatile               Flag41
286    --    Is_Controlled                   Flag42
287    --    Has_Controlled_Component        Flag43
288    --    Is_Pure                         Flag44
289    --    In_Private_Part                 Flag45
290    --    Has_Alignment_Clause            Flag46
291    --    Has_Exit                        Flag47
292    --    In_Package_Body                 Flag48
293    --    Reachable                       Flag49
294    --    Delay_Subprogram_Descriptors    Flag50
295
296    --    Is_Packed                       Flag51
297    --    Is_Entry_Formal                 Flag52
298    --    Is_Private_Descendant           Flag53
299    --    Return_Present                  Flag54
300    --    Is_Tagged_Type                  Flag55
301    --    Has_Homonym                     Flag56
302    --    Is_Hidden                       Flag57
303    --    Non_Binary_Modulus              Flag58
304    --    Is_Preelaborated                Flag59
305    --    Is_Shared_Passive               Flag60
306
307    --    Is_Remote_Types                 Flag61
308    --    Is_Remote_Call_Interface        Flag62
309    --    Is_Character_Type               Flag63
310    --    Is_Intrinsic_Subprogram         Flag64
311    --    Has_Record_Rep_Clause           Flag65
312    --    Has_Enumeration_Rep_Clause      Flag66
313    --    Has_Small_Clause                Flag67
314    --    Has_Component_Size_Clause       Flag68
315    --    Is_Access_Constant              Flag69
316    --    Is_First_Subtype                Flag70
317
318    --    Has_Completion_In_Body          Flag71
319    --    Has_Unknown_Discriminants       Flag72
320    --    Is_Child_Unit                   Flag73
321    --    Is_CPP_Class                    Flag74
322    --    Has_Non_Standard_Rep            Flag75
323    --    Is_Constructor                  Flag76
324    --    Static_Elaboration_Desired      Flag77
325    --    Is_Tag                          Flag78
326    --    Has_All_Calls_Remote            Flag79
327    --    Is_Constr_Subt_For_U_Nominal    Flag80
328
329    --    Is_Asynchronous                 Flag81
330    --    Has_Gigi_Rep_Item               Flag82
331    --    Has_Machine_Radix_Clause        Flag83
332    --    Machine_Radix_10                Flag84
333    --    Is_Atomic                       Flag85
334    --    Has_Atomic_Components           Flag86
335    --    Has_Volatile_Components         Flag87
336    --    Discard_Names                   Flag88
337    --    Is_Interrupt_Handler            Flag89
338    --    Returns_By_Ref                  Flag90
339
340    --    Is_Itype                        Flag91
341    --    Size_Known_At_Compile_Time      Flag92
342    --    Has_Subprogram_Descriptor       Flag93
343    --    Is_Generic_Actual_Type          Flag94
344    --    Uses_Sec_Stack                  Flag95
345    --    Warnings_Off                    Flag96
346    --    Is_Controlling_Formal           Flag97
347    --    Has_Controlling_Result          Flag98
348    --    Is_Exported                     Flag99
349    --    Has_Specified_Layout            Flag100
350
351    --    Has_Nested_Block_With_Handler   Flag101
352    --    Is_Called                       Flag102
353    --    Is_Completely_Hidden            Flag103
354    --    Address_Taken                   Flag104
355    --    Suppress_Init_Proc              Flag105
356    --    Is_Limited_Composite            Flag106
357    --    Is_Private_Composite            Flag107
358    --    Default_Expressions_Processed   Flag108
359    --    Is_Non_Static_Subtype           Flag109
360    --    Has_External_Tag_Rep_Clause     Flag110
361
362    --    Is_Formal_Subprogram            Flag111
363    --    Is_Renaming_Of_Object           Flag112
364    --    No_Return                       Flag113
365    --    Delay_Cleanups                  Flag114
366    --    Never_Set_In_Source             Flag115
367    --    Is_Visible_Child_Unit           Flag116
368    --    Is_Unchecked_Union              Flag117
369    --    Is_For_Access_Subtype           Flag118
370    --    Has_Convention_Pragma           Flag119
371    --    Has_Primitive_Operations        Flag120
372
373    --    Has_Pragma_Pack                 Flag121
374    --    Is_Bit_Packed_Array             Flag122
375    --    Has_Unchecked_Union             Flag123
376    --    Is_Eliminated                   Flag124
377    --    C_Pass_By_Copy                  Flag125
378    --    Is_Instantiated                 Flag126
379    --    Is_Valued_Procedure             Flag127
380    --    (used for Component_Alignment)  Flag128
381    --    (used for Component_Alignment)  Flag129
382    --    Is_Generic_Instance             Flag130
383
384    --    No_Pool_Assigned                Flag131
385    --    Is_AST_Entry                    Flag132
386    --    Is_VMS_Exception                Flag133
387    --    Is_Optional_Parameter           Flag134
388    --    Has_Aliased_Components          Flag135
389    --    No_Strict_Aliasing              Flag136
390    --    Is_Machine_Code_Subprogram      Flag137
391    --    Is_Packed_Array_Type            Flag138
392    --    Has_Biased_Representation       Flag139
393    --    Has_Complex_Representation      Flag140
394
395    --    Is_Constr_Subt_For_UN_Aliased   Flag141
396    --    Has_Missing_Return              Flag142
397    --    Has_Recursive_Call              Flag143
398    --    Is_Unsigned_Type                Flag144
399    --    Strict_Alignment                Flag145
400    --    Is_Abstract_Type                Flag146
401    --    Needs_Debug_Info                Flag147
402    --    Suppress_Elaboration_Warnings   Flag148
403    --    Is_Compilation_Unit             Flag149
404    --    Has_Pragma_Elaborate_Body       Flag150
405
406    --    Vax_Float                       Flag151
407    --    Entry_Accepted                  Flag152
408    --    Is_Obsolescent                  Flag153
409    --    Has_Per_Object_Constraint       Flag154
410    --    Has_Private_Declaration         Flag155
411    --    Referenced                      Flag156
412    --    Has_Pragma_Inline               Flag157
413    --    Finalize_Storage_Only           Flag158
414    --    From_With_Type                  Flag159
415    --    Is_Package_Body_Entity          Flag160
416
417    --    Has_Qualified_Name              Flag161
418    --    Nonzero_Is_True                 Flag162
419    --    Is_True_Constant                Flag163
420    --    Reverse_Bit_Order               Flag164
421    --    Suppress_Style_Checks           Flag165
422    --    Debug_Info_Off                  Flag166
423    --    Sec_Stack_Needed_For_Return     Flag167
424    --    Materialize_Entity              Flag168
425    --    Function_Returns_With_DSP       Flag169
426    --    Is_Known_Valid                  Flag170
427
428    --    Is_Hidden_Open_Scope            Flag171
429    --    Has_Object_Size_Clause          Flag172
430    --    Has_Fully_Qualified_Name        Flag173
431    --    Elaboration_Entity_Required     Flag174
432    --    Has_Forward_Instantiation       Flag175
433    --    Is_Discrim_SO_Function          Flag176
434    --    Size_Depends_On_Discriminant    Flag177
435    --    Is_Null_Init_Proc               Flag178
436    --    Has_Pragma_Pure_Function        Flag179
437    --    Has_Pragma_Unreferenced         Flag180
438
439    --    Has_Contiguous_Rep              Flag181
440    --    Has_Xref_Entry                  Flag182
441    --    Must_Be_On_Byte_Boundary        Flag183
442    --    Has_Stream_Size_Clause          Flag184
443    --    Is_Ada_2005_Only                Flag185
444    --    Is_Interface                    Flag186
445    --    Has_Constrained_Partial_View    Flag187
446    --    Has_Persistent_BSS              Flag188
447    --    Is_Pure_Unit_Access_Type        Flag189
448    --    Has_Specified_Stream_Input      Flag190
449
450    --    Has_Specified_Stream_Output     Flag191
451    --    Has_Specified_Stream_Read       Flag192
452    --    Has_Specified_Stream_Write      Flag193
453    --    Is_Local_Anonymous_Access       Flag194
454    --    Is_Primitive_Wrapper            Flag195
455    --    Was_Hidden                      Flag196
456    --    Is_Limited_Interface            Flag197
457    --    Is_Protected_Interface          Flag198
458    --    Is_Synchronized_Interface       Flag199
459    --    Is_Task_Interface               Flag200
460
461    --    Has_Anon_Block_Suffix           Flag201
462    --    Itype_Printed                   Flag202
463    --    Has_Pragma_Pure                 Flag203
464    --    Is_Known_Null                   Flag204
465    --    Low_Bound_Known                 Flag205
466    --    Is_Visible_Formal               Flag206
467    --    Known_To_Have_Preelab_Init      Flag207
468    --    Must_Have_Preelab_Init          Flag208
469    --    Is_Return_Object                Flag209
470    --    Elaborate_Body_Desirable        Flag210
471
472    --    Has_Static_Discriminants        Flag211
473    --    Has_Pragma_Unreferenced_Objects Flag212
474    --    Requires_Overriding             Flag213
475    --    Has_RACW                        Flag214
476    --    Has_Up_Level_Access             Flag215
477    --    Universal_Aliasing              Flag216
478    --    Suppress_Value_Tracking_On_Call Flag217
479    --    Is_Primitive                    Flag218
480    --    Has_Initial_Value               Flag219
481    --    Has_Dispatch_Table              Flag220
482
483    --    Has_Pragma_Preelab_Init         Flag221
484    --    Used_As_Generic_Actual          Flag222
485    --    Is_Descendent_Of_Address        Flag223
486    --    Is_Raised                       Flag224
487    --    Is_Thunk                        Flag225
488    --    Is_Only_Out_Parameter           Flag226
489    --    Referenced_As_Out_Parameter     Flag227
490    --    Has_Thunks                      Flag228
491    --    Can_Use_Internal_Rep            Flag229
492    --    Has_Pragma_Inline_Always        Flag230
493
494    --    Renamed_In_Spec                 Flag231
495    --    Implemented_By_Entry            Flag232
496    --    Has_Pragma_Unmodified           Flag233
497    --    Is_Dispatch_Table_Entity        Flag234
498    --    Is_Trivial_Subprogram           Flag235
499    --    Warnings_Off_Used               Flag236
500    --    Warnings_Off_Used_Unmodified    Flag237
501    --    Warnings_Off_Used_Unreferenced  Flag238
502    --    OK_To_Reorder_Components        Flag239
503    --    Has_Postconditions              Flag240
504
505    --    Optimize_Alignment_Space        Flag241
506    --    Optimize_Alignment_Time         Flag242
507    --    Overlays_Constant               Flag243
508
509    --    (unused)                        Flag244
510    --    (unused)                        Flag245
511    --    (unused)                        Flag246
512    --    (unused)                        Flag247
513
514    -----------------------
515    -- Local subprograms --
516    -----------------------
517
518    function Rep_Clause (Id : E; Rep_Name : Name_Id) return N;
519    --  Returns the attribute definition clause for Id whose name is Rep_Name.
520    --  Returns Empty if no matching attribute definition clause found for Id.
521
522    ----------------
523    -- Rep_Clause --
524    ----------------
525
526    function Rep_Clause (Id : E; Rep_Name : Name_Id) return N is
527       Ritem : Node_Id;
528
529    begin
530       Ritem := First_Rep_Item (Id);
531       while Present (Ritem) loop
532          if Nkind (Ritem) = N_Attribute_Definition_Clause
533            and then Chars (Ritem) = Rep_Name
534          then
535             return Ritem;
536          else
537             Ritem := Next_Rep_Item (Ritem);
538          end if;
539       end loop;
540
541       return Empty;
542    end Rep_Clause;
543
544    --------------------------------
545    -- Attribute Access Functions --
546    --------------------------------
547
548    function Abstract_Interfaces (Id : E) return L is
549    begin
550       pragma Assert (Is_Record_Type (Id));
551       return Elist25 (Id);
552    end Abstract_Interfaces;
553
554    function Abstract_Interface_Alias (Id : E) return E is
555    begin
556       pragma Assert (Is_Subprogram (Id));
557       return Node25 (Id);
558    end Abstract_Interface_Alias;
559
560    function Accept_Address (Id : E) return L is
561    begin
562       return Elist21 (Id);
563    end Accept_Address;
564
565    function Access_Disp_Table (Id : E) return L is
566    begin
567       pragma Assert (Is_Tagged_Type (Id));
568       return Elist16 (Implementation_Base_Type (Id));
569    end Access_Disp_Table;
570
571    function Actual_Subtype (Id : E) return E is
572    begin
573       pragma Assert
574          (Ekind (Id) = E_Constant
575            or else Ekind (Id) = E_Variable
576            or else Ekind (Id) = E_Generic_In_Out_Parameter
577            or else Is_Formal (Id));
578       return Node17 (Id);
579    end Actual_Subtype;
580
581    function Address_Taken (Id : E) return B is
582    begin
583       return Flag104 (Id);
584    end Address_Taken;
585
586    function Alias (Id : E) return E is
587    begin
588       pragma Assert
589         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
590       return Node18 (Id);
591    end Alias;
592
593    function Alignment (Id : E) return U is
594    begin
595       pragma Assert (Is_Type (Id)
596                        or else Is_Formal (Id)
597                        or else Ekind (Id) = E_Loop_Parameter
598                        or else Ekind (Id) = E_Constant
599                        or else Ekind (Id) = E_Exception
600                        or else Ekind (Id) = E_Variable);
601       return Uint14 (Id);
602    end Alignment;
603
604    function Associated_Final_Chain (Id : E) return E is
605    begin
606       pragma Assert (Is_Access_Type (Id));
607       return Node23 (Id);
608    end Associated_Final_Chain;
609
610    function Associated_Formal_Package (Id : E) return E is
611    begin
612       pragma Assert (Ekind (Id) = E_Package);
613       return Node12 (Id);
614    end Associated_Formal_Package;
615
616    function Associated_Node_For_Itype (Id : E) return N is
617    begin
618       return Node8 (Id);
619    end Associated_Node_For_Itype;
620
621    function Associated_Storage_Pool (Id : E) return E is
622    begin
623       pragma Assert (Is_Access_Type (Id));
624       return Node22 (Root_Type (Id));
625    end Associated_Storage_Pool;
626
627    function Barrier_Function (Id : E) return N is
628    begin
629       pragma Assert (Is_Entry (Id));
630       return Node12 (Id);
631    end Barrier_Function;
632
633    function Block_Node (Id : E) return N is
634    begin
635       pragma Assert (Ekind (Id) = E_Block);
636       return Node11 (Id);
637    end Block_Node;
638
639    function Body_Entity (Id : E) return E is
640    begin
641       pragma Assert
642         (Ekind (Id) = E_Package or else Ekind (Id) = E_Generic_Package);
643       return Node19 (Id);
644    end Body_Entity;
645
646    function Body_Needed_For_SAL (Id : E) return B is
647    begin
648       pragma Assert
649         (Ekind (Id) = E_Package
650            or else Is_Subprogram (Id)
651            or else Is_Generic_Unit (Id));
652       return Flag40 (Id);
653    end Body_Needed_For_SAL;
654
655    function C_Pass_By_Copy (Id : E) return B is
656    begin
657       pragma Assert (Is_Record_Type (Id));
658       return Flag125 (Implementation_Base_Type (Id));
659    end C_Pass_By_Copy;
660
661    function Can_Never_Be_Null (Id : E) return B is
662    begin
663       return Flag38 (Id);
664    end Can_Never_Be_Null;
665
666    function Checks_May_Be_Suppressed (Id : E) return B is
667    begin
668       return Flag31 (Id);
669    end Checks_May_Be_Suppressed;
670
671    function Class_Wide_Type (Id : E) return E is
672    begin
673       pragma Assert (Is_Type (Id));
674       return Node9 (Id);
675    end Class_Wide_Type;
676
677    function Cloned_Subtype (Id : E) return E is
678    begin
679       pragma Assert
680         (Ekind (Id) = E_Record_Subtype
681          or else Ekind (Id) = E_Class_Wide_Subtype);
682       return Node16 (Id);
683    end Cloned_Subtype;
684
685    function Component_Bit_Offset (Id : E) return U is
686    begin
687       pragma Assert
688         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
689       return Uint11 (Id);
690    end Component_Bit_Offset;
691
692    function Component_Clause (Id : E) return N is
693    begin
694       pragma Assert
695         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
696       return Node13 (Id);
697    end Component_Clause;
698
699    function Component_Size (Id : E) return U is
700    begin
701       pragma Assert (Is_Array_Type (Id));
702       return Uint22 (Implementation_Base_Type (Id));
703    end Component_Size;
704
705    function Component_Type (Id : E) return E is
706    begin
707       return Node20 (Implementation_Base_Type (Id));
708    end Component_Type;
709
710    function Corresponding_Concurrent_Type (Id : E) return E is
711    begin
712       pragma Assert (Ekind (Id) = E_Record_Type);
713       return Node18 (Id);
714    end Corresponding_Concurrent_Type;
715
716    function Corresponding_Discriminant (Id : E) return E is
717    begin
718       pragma Assert (Ekind (Id) = E_Discriminant);
719       return Node19 (Id);
720    end Corresponding_Discriminant;
721
722    function Corresponding_Equality (Id : E) return E is
723    begin
724       pragma Assert
725         (Ekind (Id) = E_Function
726           and then not Comes_From_Source (Id)
727           and then Chars (Id) = Name_Op_Ne);
728       return Node13 (Id);
729    end Corresponding_Equality;
730
731    function Corresponding_Record_Type (Id : E) return E is
732    begin
733       pragma Assert (Is_Concurrent_Type (Id));
734       return Node18 (Id);
735    end Corresponding_Record_Type;
736
737    function Corresponding_Remote_Type (Id : E) return E is
738    begin
739       return Node22 (Id);
740    end Corresponding_Remote_Type;
741
742    function Current_Use_Clause (Id : E) return E is
743    begin
744       pragma Assert (Ekind (Id) = E_Package or else Is_Type (Id));
745       return Node27 (Id);
746    end Current_Use_Clause;
747
748    function Current_Value (Id : E) return N is
749    begin
750       pragma Assert (Ekind (Id) in Object_Kind);
751       return Node9 (Id);
752    end Current_Value;
753
754    function CR_Discriminant (Id : E) return E is
755    begin
756       return Node23 (Id);
757    end CR_Discriminant;
758
759    function Debug_Info_Off (Id : E) return B is
760    begin
761       return Flag166 (Id);
762    end Debug_Info_Off;
763
764    function Debug_Renaming_Link (Id : E) return E is
765    begin
766       return Node25 (Id);
767    end Debug_Renaming_Link;
768
769    function Default_Expr_Function (Id : E) return E is
770    begin
771       pragma Assert (Is_Formal (Id));
772       return Node21 (Id);
773    end Default_Expr_Function;
774
775    function Default_Expressions_Processed (Id : E) return B is
776    begin
777       return Flag108 (Id);
778    end Default_Expressions_Processed;
779
780    function Default_Value (Id : E) return N is
781    begin
782       pragma Assert (Is_Formal (Id));
783       return Node20 (Id);
784    end Default_Value;
785
786    function Delay_Cleanups (Id : E) return B is
787    begin
788       return Flag114 (Id);
789    end Delay_Cleanups;
790
791    function Delay_Subprogram_Descriptors (Id : E) return B is
792    begin
793       return Flag50 (Id);
794    end Delay_Subprogram_Descriptors;
795
796    function Delta_Value (Id : E) return R is
797    begin
798       pragma Assert (Is_Fixed_Point_Type (Id));
799       return Ureal18 (Id);
800    end Delta_Value;
801
802    function Dependent_Instances (Id : E) return L is
803    begin
804       pragma Assert (Is_Generic_Instance (Id));
805       return Elist8 (Id);
806    end Dependent_Instances;
807
808    function Depends_On_Private (Id : E) return B is
809    begin
810       pragma Assert (Nkind (Id) in N_Entity);
811       return Flag14 (Id);
812    end Depends_On_Private;
813
814    function Digits_Value (Id : E) return U is
815    begin
816       pragma Assert
817         (Is_Floating_Point_Type (Id)
818           or else Is_Decimal_Fixed_Point_Type (Id));
819       return Uint17 (Id);
820    end Digits_Value;
821
822    function Directly_Designated_Type (Id : E) return E is
823    begin
824       return Node20 (Id);
825    end Directly_Designated_Type;
826
827    function Discard_Names (Id : E) return B is
828    begin
829       return Flag88 (Id);
830    end Discard_Names;
831
832    function Discriminal (Id : E) return E is
833    begin
834       pragma Assert (Ekind (Id) = E_Discriminant);
835       return Node17 (Id);
836    end Discriminal;
837
838    function Discriminal_Link (Id : E) return N is
839    begin
840       return Node10 (Id);
841    end Discriminal_Link;
842
843    function Discriminant_Checking_Func (Id : E) return E is
844    begin
845       pragma Assert (Ekind (Id) = E_Component);
846       return Node20 (Id);
847    end Discriminant_Checking_Func;
848
849    function Discriminant_Constraint (Id : E) return L is
850    begin
851       pragma Assert (Is_Composite_Type (Id) and then Has_Discriminants (Id));
852       return Elist21 (Id);
853    end Discriminant_Constraint;
854
855    function Discriminant_Default_Value (Id : E) return N is
856    begin
857       pragma Assert (Ekind (Id) = E_Discriminant);
858       return Node20 (Id);
859    end Discriminant_Default_Value;
860
861    function Discriminant_Number (Id : E) return U is
862    begin
863       pragma Assert (Ekind (Id) = E_Discriminant);
864       return Uint15 (Id);
865    end Discriminant_Number;
866
867    function Dispatch_Table_Wrapper (Id : E) return E is
868    begin
869       pragma Assert (Is_Tagged_Type (Id));
870       return Node26 (Implementation_Base_Type (Id));
871    end Dispatch_Table_Wrapper;
872
873    function DT_Entry_Count (Id : E) return U is
874    begin
875       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
876       return Uint15 (Id);
877    end DT_Entry_Count;
878
879    function DT_Offset_To_Top_Func (Id : E) return E is
880    begin
881       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
882       return Node25 (Id);
883    end DT_Offset_To_Top_Func;
884
885    function DT_Position (Id : E) return U is
886    begin
887       pragma Assert
888         ((Ekind (Id) = E_Function
889             or else Ekind (Id) = E_Procedure)
890           and then Present (DTC_Entity (Id)));
891       return Uint15 (Id);
892    end DT_Position;
893
894    function DTC_Entity (Id : E) return E is
895    begin
896       pragma Assert
897         (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
898       return Node16 (Id);
899    end DTC_Entity;
900
901    function Elaborate_Body_Desirable (Id : E) return B is
902    begin
903       pragma Assert (Ekind (Id) = E_Package);
904       return Flag210 (Id);
905    end Elaborate_Body_Desirable;
906
907    function Elaboration_Entity (Id : E) return E is
908    begin
909       pragma Assert
910         (Is_Subprogram (Id)
911            or else
912          Ekind (Id) = E_Package
913            or else
914          Is_Generic_Unit (Id));
915       return Node13 (Id);
916    end Elaboration_Entity;
917
918    function Elaboration_Entity_Required (Id : E) return B is
919    begin
920       pragma Assert
921         (Is_Subprogram (Id)
922            or else
923          Ekind (Id) = E_Package
924            or else
925          Is_Generic_Unit (Id));
926       return Flag174 (Id);
927    end Elaboration_Entity_Required;
928
929    function Enclosing_Scope (Id : E) return E is
930    begin
931       return Node18 (Id);
932    end Enclosing_Scope;
933
934    function Entry_Accepted (Id : E) return B is
935    begin
936       pragma Assert (Is_Entry (Id));
937       return Flag152 (Id);
938    end Entry_Accepted;
939
940    function Entry_Bodies_Array (Id : E) return E is
941    begin
942       return Node15 (Id);
943    end Entry_Bodies_Array;
944
945    function Entry_Cancel_Parameter (Id : E) return E is
946    begin
947       return Node23 (Id);
948    end Entry_Cancel_Parameter;
949
950    function Entry_Component (Id : E) return E is
951    begin
952       return Node11 (Id);
953    end Entry_Component;
954
955    function Entry_Formal (Id : E) return E is
956    begin
957       return Node16 (Id);
958    end Entry_Formal;
959
960    function Entry_Index_Constant (Id : E) return N is
961    begin
962       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
963       return Node18 (Id);
964    end Entry_Index_Constant;
965
966    function Entry_Parameters_Type (Id : E) return E is
967    begin
968       return Node15 (Id);
969    end Entry_Parameters_Type;
970
971    function Enum_Pos_To_Rep (Id : E) return E is
972    begin
973       pragma Assert (Ekind (Id) = E_Enumeration_Type);
974       return Node23 (Id);
975    end Enum_Pos_To_Rep;
976
977    function Enumeration_Pos (Id : E) return Uint is
978    begin
979       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
980       return Uint11 (Id);
981    end Enumeration_Pos;
982
983    function Enumeration_Rep (Id : E) return U is
984    begin
985       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
986       return Uint12 (Id);
987    end Enumeration_Rep;
988
989    function Enumeration_Rep_Expr (Id : E) return N is
990    begin
991       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
992       return Node22 (Id);
993    end Enumeration_Rep_Expr;
994
995    function Equivalent_Type (Id : E) return E is
996    begin
997       pragma Assert
998         (Ekind (Id) = E_Class_Wide_Subtype                         or else
999          Ekind (Id) = E_Access_Protected_Subprogram_Type           or else
1000          Ekind (Id) = E_Anonymous_Access_Protected_Subprogram_Type or else
1001          Ekind (Id) = E_Access_Subprogram_Type                     or else
1002          Ekind (Id) = E_Exception_Type);
1003       return Node18 (Id);
1004    end Equivalent_Type;
1005
1006    function Esize (Id : E) return Uint is
1007    begin
1008       return Uint12 (Id);
1009    end Esize;
1010
1011    function Exception_Code (Id : E) return Uint is
1012    begin
1013       pragma Assert (Ekind (Id) = E_Exception);
1014       return Uint22 (Id);
1015    end Exception_Code;
1016
1017    function Extra_Accessibility (Id : E) return E is
1018    begin
1019       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
1020       return Node13 (Id);
1021    end Extra_Accessibility;
1022
1023    function Extra_Constrained (Id : E) return E is
1024    begin
1025       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
1026       return Node23 (Id);
1027    end Extra_Constrained;
1028
1029    function Extra_Formal (Id : E) return E is
1030    begin
1031       return Node15 (Id);
1032    end Extra_Formal;
1033
1034    function Extra_Formals (Id : E) return E is
1035    begin
1036       pragma Assert
1037         (Is_Overloadable (Id)
1038           or else Ekind (Id) = E_Entry_Family
1039           or else Ekind (Id) = E_Subprogram_Body
1040           or else Ekind (Id) = E_Subprogram_Type);
1041       return Node28 (Id);
1042    end Extra_Formals;
1043
1044    function Can_Use_Internal_Rep (Id : E) return B is
1045    begin
1046       pragma Assert (Is_Access_Subprogram_Type (Base_Type (Id)));
1047       return Flag229 (Base_Type (Id));
1048    end Can_Use_Internal_Rep;
1049
1050    function Finalization_Chain_Entity (Id : E) return E is
1051    begin
1052       return Node19 (Id);
1053    end Finalization_Chain_Entity;
1054
1055    function Finalize_Storage_Only (Id : E) return B is
1056    begin
1057       pragma Assert (Is_Type (Id));
1058       return Flag158 (Base_Type (Id));
1059    end Finalize_Storage_Only;
1060
1061    function First_Entity (Id : E) return E is
1062    begin
1063       return Node17 (Id);
1064    end First_Entity;
1065
1066    function First_Index (Id : E) return N is
1067    begin
1068       pragma Assert (Is_Array_Type (Id) or else Is_String_Type (Id));
1069       return Node17 (Id);
1070    end First_Index;
1071
1072    function First_Literal (Id : E) return E is
1073    begin
1074       pragma Assert (Is_Enumeration_Type (Id));
1075       return Node17 (Id);
1076    end First_Literal;
1077
1078    function First_Optional_Parameter (Id : E) return E is
1079    begin
1080       pragma Assert
1081         (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
1082       return Node14 (Id);
1083    end First_Optional_Parameter;
1084
1085    function First_Private_Entity (Id : E) return E is
1086    begin
1087       pragma Assert (Ekind (Id) = E_Package
1088                        or else Ekind (Id) = E_Generic_Package
1089                        or else Ekind (Id) in Concurrent_Kind);
1090       return Node16 (Id);
1091    end First_Private_Entity;
1092
1093    function First_Rep_Item (Id : E) return E is
1094    begin
1095       return Node6 (Id);
1096    end First_Rep_Item;
1097
1098    function Freeze_Node (Id : E) return N is
1099    begin
1100       return Node7 (Id);
1101    end Freeze_Node;
1102
1103    function From_With_Type (Id : E) return B is
1104    begin
1105       return Flag159 (Id);
1106    end From_With_Type;
1107
1108    function Full_View (Id : E) return E is
1109    begin
1110       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Constant);
1111       return Node11 (Id);
1112    end Full_View;
1113
1114    function Function_Returns_With_DSP (Id : E) return B is
1115    begin
1116       pragma Assert
1117         (Is_Subprogram (Id) or else Ekind (Id) = E_Subprogram_Type);
1118       return Flag169 (Id);
1119    end Function_Returns_With_DSP;
1120
1121    function Generic_Homonym (Id : E) return E is
1122    begin
1123       pragma Assert (Ekind (Id) = E_Generic_Package);
1124       return Node11 (Id);
1125    end Generic_Homonym;
1126
1127    function Generic_Renamings (Id : E) return L is
1128    begin
1129       return Elist23 (Id);
1130    end Generic_Renamings;
1131
1132    function Handler_Records (Id : E) return S is
1133    begin
1134       return List10 (Id);
1135    end Handler_Records;
1136
1137    function Has_Aliased_Components (Id : E) return B is
1138    begin
1139       return Flag135 (Implementation_Base_Type (Id));
1140    end Has_Aliased_Components;
1141
1142    function Has_Alignment_Clause (Id : E) return B is
1143    begin
1144       return Flag46 (Id);
1145    end Has_Alignment_Clause;
1146
1147    function Has_All_Calls_Remote (Id : E) return B is
1148    begin
1149       return Flag79 (Id);
1150    end Has_All_Calls_Remote;
1151
1152    function Has_Anon_Block_Suffix (Id : E) return B is
1153    begin
1154       return Flag201 (Id);
1155    end Has_Anon_Block_Suffix;
1156
1157    function Has_Atomic_Components (Id : E) return B is
1158    begin
1159       return Flag86 (Implementation_Base_Type (Id));
1160    end Has_Atomic_Components;
1161
1162    function Has_Biased_Representation (Id : E) return B is
1163    begin
1164       return Flag139 (Id);
1165    end Has_Biased_Representation;
1166
1167    function Has_Completion (Id : E) return B is
1168    begin
1169       return Flag26 (Id);
1170    end Has_Completion;
1171
1172    function Has_Completion_In_Body (Id : E) return B is
1173    begin
1174       pragma Assert (Is_Type (Id));
1175       return Flag71 (Id);
1176    end Has_Completion_In_Body;
1177
1178    function Has_Complex_Representation (Id : E) return B is
1179    begin
1180       pragma Assert (Is_Type (Id));
1181       return Flag140 (Implementation_Base_Type (Id));
1182    end Has_Complex_Representation;
1183
1184    function Has_Component_Size_Clause (Id : E) return B is
1185    begin
1186       pragma Assert (Is_Array_Type (Id));
1187       return Flag68 (Implementation_Base_Type (Id));
1188    end Has_Component_Size_Clause;
1189
1190    function Has_Constrained_Partial_View (Id : E) return B is
1191    begin
1192       pragma Assert (Is_Type (Id));
1193       return Flag187 (Id);
1194    end Has_Constrained_Partial_View;
1195
1196    function Has_Controlled_Component (Id : E) return B is
1197    begin
1198       return Flag43 (Base_Type (Id));
1199    end Has_Controlled_Component;
1200
1201    function Has_Contiguous_Rep (Id : E) return B is
1202    begin
1203       return Flag181 (Id);
1204    end Has_Contiguous_Rep;
1205
1206    function Has_Controlling_Result (Id : E) return B is
1207    begin
1208       return Flag98 (Id);
1209    end Has_Controlling_Result;
1210
1211    function Has_Convention_Pragma (Id : E) return B is
1212    begin
1213       return Flag119 (Id);
1214    end Has_Convention_Pragma;
1215
1216    function Has_Delayed_Freeze (Id : E) return B is
1217    begin
1218       pragma Assert (Nkind (Id) in N_Entity);
1219       return Flag18 (Id);
1220    end Has_Delayed_Freeze;
1221
1222    function Has_Discriminants (Id : E) return B is
1223    begin
1224       pragma Assert (Nkind (Id) in N_Entity);
1225       return Flag5 (Id);
1226    end Has_Discriminants;
1227
1228    function Has_Dispatch_Table (Id : E) return B is
1229    begin
1230       pragma Assert (Is_Tagged_Type (Id));
1231       return Flag220 (Id);
1232    end Has_Dispatch_Table;
1233
1234    function Has_Enumeration_Rep_Clause (Id : E) return B is
1235    begin
1236       pragma Assert (Is_Enumeration_Type (Id));
1237       return Flag66 (Id);
1238    end Has_Enumeration_Rep_Clause;
1239
1240    function Has_Exit (Id : E) return B is
1241    begin
1242       return Flag47 (Id);
1243    end Has_Exit;
1244
1245    function Has_External_Tag_Rep_Clause (Id : E) return B is
1246    begin
1247       pragma Assert (Is_Tagged_Type (Id));
1248       return Flag110 (Id);
1249    end Has_External_Tag_Rep_Clause;
1250
1251    function Has_Forward_Instantiation (Id : E) return B is
1252    begin
1253       return Flag175 (Id);
1254    end Has_Forward_Instantiation;
1255
1256    function Has_Fully_Qualified_Name (Id : E) return B is
1257    begin
1258       return Flag173 (Id);
1259    end Has_Fully_Qualified_Name;
1260
1261    function Has_Gigi_Rep_Item (Id : E) return B is
1262    begin
1263       return Flag82 (Id);
1264    end Has_Gigi_Rep_Item;
1265
1266    function Has_Homonym (Id : E) return B is
1267    begin
1268       return Flag56 (Id);
1269    end Has_Homonym;
1270
1271    function Has_Initial_Value (Id : E) return B is
1272    begin
1273       pragma Assert
1274         (Ekind (Id) = E_Variable or else Is_Formal (Id));
1275       return Flag219 (Id);
1276    end Has_Initial_Value;
1277
1278    function Has_Machine_Radix_Clause (Id : E) return B is
1279    begin
1280       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
1281       return Flag83 (Id);
1282    end Has_Machine_Radix_Clause;
1283
1284    function Has_Master_Entity (Id : E) return B is
1285    begin
1286       return Flag21 (Id);
1287    end Has_Master_Entity;
1288
1289    function Has_Missing_Return (Id : E) return B is
1290    begin
1291       pragma Assert
1292         (Ekind (Id) = E_Function or else Ekind (Id) = E_Generic_Function);
1293       return Flag142 (Id);
1294    end Has_Missing_Return;
1295
1296    function Has_Nested_Block_With_Handler (Id : E) return B is
1297    begin
1298       return Flag101 (Id);
1299    end Has_Nested_Block_With_Handler;
1300
1301    function Has_Non_Standard_Rep (Id : E) return B is
1302    begin
1303       return Flag75 (Implementation_Base_Type (Id));
1304    end Has_Non_Standard_Rep;
1305
1306    function Has_Object_Size_Clause (Id : E) return B is
1307    begin
1308       pragma Assert (Is_Type (Id));
1309       return Flag172 (Id);
1310    end Has_Object_Size_Clause;
1311
1312    function Has_Per_Object_Constraint (Id : E) return B is
1313    begin
1314       return Flag154 (Id);
1315    end Has_Per_Object_Constraint;
1316
1317    function Has_Persistent_BSS (Id : E) return B is
1318    begin
1319       return Flag188 (Id);
1320    end Has_Persistent_BSS;
1321
1322    function Has_Postconditions (Id : E) return B is
1323    begin
1324       pragma Assert (Is_Subprogram (Id));
1325       return Flag240 (Id);
1326    end Has_Postconditions;
1327
1328    function Has_Pragma_Controlled (Id : E) return B is
1329    begin
1330       pragma Assert (Is_Access_Type (Id));
1331       return Flag27 (Implementation_Base_Type (Id));
1332    end Has_Pragma_Controlled;
1333
1334    function Has_Pragma_Elaborate_Body (Id : E) return B is
1335    begin
1336       return Flag150 (Id);
1337    end Has_Pragma_Elaborate_Body;
1338
1339    function Has_Pragma_Inline (Id : E) return B is
1340    begin
1341       return Flag157 (Id);
1342    end Has_Pragma_Inline;
1343
1344    function Has_Pragma_Inline_Always (Id : E) return B is
1345    begin
1346       return Flag230 (Id);
1347    end Has_Pragma_Inline_Always;
1348
1349    function Has_Pragma_Pack (Id : E) return B is
1350    begin
1351       pragma Assert (Is_Record_Type (Id) or else Is_Array_Type (Id));
1352       return Flag121 (Implementation_Base_Type (Id));
1353    end Has_Pragma_Pack;
1354
1355    function Has_Pragma_Preelab_Init (Id : E) return B is
1356    begin
1357       return Flag221 (Id);
1358    end Has_Pragma_Preelab_Init;
1359
1360    function Has_Pragma_Pure (Id : E) return B is
1361    begin
1362       return Flag203 (Id);
1363    end Has_Pragma_Pure;
1364
1365    function Has_Pragma_Pure_Function (Id : E) return B is
1366    begin
1367       return Flag179 (Id);
1368    end Has_Pragma_Pure_Function;
1369
1370    function Has_Pragma_Unmodified (Id : E) return B is
1371    begin
1372       return Flag233 (Id);
1373    end Has_Pragma_Unmodified;
1374
1375    function Has_Pragma_Unreferenced (Id : E) return B is
1376    begin
1377       return Flag180 (Id);
1378    end Has_Pragma_Unreferenced;
1379
1380    function Has_Pragma_Unreferenced_Objects (Id : E) return B is
1381    begin
1382       pragma Assert (Is_Type (Id));
1383       return Flag212 (Id);
1384    end Has_Pragma_Unreferenced_Objects;
1385
1386    function Has_Primitive_Operations (Id : E) return B is
1387    begin
1388       pragma Assert (Is_Type (Id));
1389       return Flag120 (Base_Type (Id));
1390    end Has_Primitive_Operations;
1391
1392    function Has_Private_Declaration (Id : E) return B is
1393    begin
1394       return Flag155 (Id);
1395    end Has_Private_Declaration;
1396
1397    function Has_Qualified_Name (Id : E) return B is
1398    begin
1399       return Flag161 (Id);
1400    end Has_Qualified_Name;
1401
1402    function Has_RACW (Id : E) return B is
1403    begin
1404       pragma Assert (Ekind (Id) = E_Package);
1405       return Flag214 (Id);
1406    end Has_RACW;
1407
1408    function Has_Record_Rep_Clause (Id : E) return B is
1409    begin
1410       pragma Assert (Is_Record_Type (Id));
1411       return Flag65 (Implementation_Base_Type (Id));
1412    end Has_Record_Rep_Clause;
1413
1414    function Has_Recursive_Call (Id : E) return B is
1415    begin
1416       pragma Assert (Is_Subprogram (Id));
1417       return Flag143 (Id);
1418    end Has_Recursive_Call;
1419
1420    function Has_Size_Clause (Id : E) return B is
1421    begin
1422       return Flag29 (Id);
1423    end Has_Size_Clause;
1424
1425    function Has_Small_Clause (Id : E) return B is
1426    begin
1427       return Flag67 (Id);
1428    end Has_Small_Clause;
1429
1430    function Has_Specified_Layout (Id : E) return B is
1431    begin
1432       pragma Assert (Is_Type (Id));
1433       return Flag100 (Implementation_Base_Type (Id));
1434    end Has_Specified_Layout;
1435
1436    function Has_Specified_Stream_Input (Id : E) return B is
1437    begin
1438       pragma Assert (Is_Type (Id));
1439       return Flag190 (Id);
1440    end Has_Specified_Stream_Input;
1441
1442    function Has_Specified_Stream_Output (Id : E) return B is
1443    begin
1444       pragma Assert (Is_Type (Id));
1445       return Flag191 (Id);
1446    end Has_Specified_Stream_Output;
1447
1448    function Has_Specified_Stream_Read (Id : E) return B is
1449    begin
1450       pragma Assert (Is_Type (Id));
1451       return Flag192 (Id);
1452    end Has_Specified_Stream_Read;
1453
1454    function Has_Specified_Stream_Write (Id : E) return B is
1455    begin
1456       pragma Assert (Is_Type (Id));
1457       return Flag193 (Id);
1458    end Has_Specified_Stream_Write;
1459
1460    function Has_Static_Discriminants (Id : E) return B is
1461    begin
1462       pragma Assert (Is_Type (Id));
1463       return Flag211 (Id);
1464    end Has_Static_Discriminants;
1465
1466    function Has_Storage_Size_Clause (Id : E) return B is
1467    begin
1468       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
1469       return Flag23 (Implementation_Base_Type (Id));
1470    end Has_Storage_Size_Clause;
1471
1472    function Has_Stream_Size_Clause (Id : E) return B is
1473    begin
1474       return Flag184 (Id);
1475    end Has_Stream_Size_Clause;
1476
1477    function Has_Subprogram_Descriptor (Id : E) return B is
1478    begin
1479       return Flag93 (Id);
1480    end Has_Subprogram_Descriptor;
1481
1482    function Has_Task (Id : E) return B is
1483    begin
1484       return Flag30 (Base_Type (Id));
1485    end Has_Task;
1486
1487    function Has_Thunks (Id : E) return B is
1488    begin
1489       pragma Assert (Ekind (Id) = E_Constant);
1490       return Flag228 (Id);
1491    end Has_Thunks;
1492
1493    function Has_Unchecked_Union (Id : E) return B is
1494    begin
1495       return Flag123 (Base_Type (Id));
1496    end Has_Unchecked_Union;
1497
1498    function Has_Unknown_Discriminants (Id : E) return B is
1499    begin
1500       pragma Assert (Is_Type (Id));
1501       return Flag72 (Id);
1502    end Has_Unknown_Discriminants;
1503
1504    function Has_Up_Level_Access (Id : E) return B is
1505    begin
1506       pragma Assert
1507         (Ekind (Id) = E_Variable
1508           or else Ekind (Id) = E_Constant
1509           or else Ekind (Id) = E_Loop_Parameter);
1510       return Flag215 (Id);
1511    end Has_Up_Level_Access;
1512
1513    function Has_Volatile_Components (Id : E) return B is
1514    begin
1515       return Flag87 (Implementation_Base_Type (Id));
1516    end Has_Volatile_Components;
1517
1518    function Has_Xref_Entry (Id : E) return B is
1519    begin
1520       return Flag182 (Implementation_Base_Type (Id));
1521    end Has_Xref_Entry;
1522
1523    function Hiding_Loop_Variable (Id : E) return E is
1524    begin
1525       pragma Assert (Ekind (Id) = E_Variable);
1526       return Node8 (Id);
1527    end Hiding_Loop_Variable;
1528
1529    function Homonym (Id : E) return E is
1530    begin
1531       return Node4 (Id);
1532    end Homonym;
1533
1534    function Implemented_By_Entry (Id : E) return B is
1535    begin
1536       pragma Assert
1537         (Ekind (Id) = E_Function
1538            or else Ekind (Id) = E_Procedure);
1539       return Flag232 (Id);
1540    end Implemented_By_Entry;
1541
1542    function In_Package_Body (Id : E) return B is
1543    begin
1544       return Flag48 (Id);
1545    end In_Package_Body;
1546
1547    function In_Private_Part (Id : E) return B is
1548    begin
1549       return Flag45 (Id);
1550    end In_Private_Part;
1551
1552    function In_Use (Id : E) return B is
1553    begin
1554       pragma Assert (Nkind (Id) in N_Entity);
1555       return Flag8 (Id);
1556    end In_Use;
1557
1558    function Inner_Instances (Id : E) return L is
1559    begin
1560       return Elist23 (Id);
1561    end Inner_Instances;
1562
1563    function Interface_Name (Id : E) return N is
1564    begin
1565       return Node21 (Id);
1566    end Interface_Name;
1567
1568    function Is_Abstract_Subprogram (Id : E) return B is
1569    begin
1570       pragma Assert (Is_Overloadable (Id));
1571       return Flag19 (Id);
1572    end Is_Abstract_Subprogram;
1573
1574    function Is_Abstract_Type (Id : E) return B is
1575    begin
1576       pragma Assert (Is_Type (Id));
1577       return Flag146 (Id);
1578    end Is_Abstract_Type;
1579
1580    function Is_Local_Anonymous_Access (Id : E) return B is
1581    begin
1582       pragma Assert (Is_Access_Type (Id));
1583       return Flag194 (Id);
1584    end Is_Local_Anonymous_Access;
1585
1586    function Is_Access_Constant (Id : E) return B is
1587    begin
1588       pragma Assert (Is_Access_Type (Id));
1589       return Flag69 (Id);
1590    end Is_Access_Constant;
1591
1592    function Is_Ada_2005_Only (Id : E) return B is
1593    begin
1594       return Flag185 (Id);
1595    end Is_Ada_2005_Only;
1596
1597    function Is_Aliased (Id : E) return B is
1598    begin
1599       pragma Assert (Nkind (Id) in N_Entity);
1600       return Flag15 (Id);
1601    end Is_Aliased;
1602
1603    function Is_AST_Entry (Id : E) return B is
1604    begin
1605       pragma Assert (Is_Entry (Id));
1606       return Flag132 (Id);
1607    end Is_AST_Entry;
1608
1609    function Is_Asynchronous (Id : E) return B is
1610    begin
1611       pragma Assert
1612         (Ekind (Id) = E_Procedure or else Is_Type (Id));
1613       return Flag81 (Id);
1614    end Is_Asynchronous;
1615
1616    function Is_Atomic (Id : E) return B is
1617    begin
1618       return Flag85 (Id);
1619    end Is_Atomic;
1620
1621    function Is_Bit_Packed_Array (Id : E) return B is
1622    begin
1623       return Flag122 (Implementation_Base_Type (Id));
1624    end Is_Bit_Packed_Array;
1625
1626    function Is_Called (Id : E) return B is
1627    begin
1628       pragma Assert
1629         (Ekind (Id) = E_Procedure or else Ekind (Id) = E_Function);
1630       return Flag102 (Id);
1631    end Is_Called;
1632
1633    function Is_Character_Type (Id : E) return B is
1634    begin
1635       return Flag63 (Id);
1636    end Is_Character_Type;
1637
1638    function Is_Child_Unit (Id : E) return B is
1639    begin
1640       return Flag73 (Id);
1641    end Is_Child_Unit;
1642
1643    function Is_Class_Wide_Equivalent_Type (Id : E) return B is
1644    begin
1645       return Flag35 (Id);
1646    end Is_Class_Wide_Equivalent_Type;
1647
1648    function Is_Compilation_Unit (Id : E) return B is
1649    begin
1650       return Flag149 (Id);
1651    end Is_Compilation_Unit;
1652
1653    function Is_Completely_Hidden (Id : E) return B is
1654    begin
1655       pragma Assert (Ekind (Id) = E_Discriminant);
1656       return Flag103 (Id);
1657    end Is_Completely_Hidden;
1658
1659    function Is_Constr_Subt_For_U_Nominal (Id : E) return B is
1660    begin
1661       return Flag80 (Id);
1662    end Is_Constr_Subt_For_U_Nominal;
1663
1664    function Is_Constr_Subt_For_UN_Aliased (Id : E) return B is
1665    begin
1666       return Flag141 (Id);
1667    end Is_Constr_Subt_For_UN_Aliased;
1668
1669    function Is_Constrained (Id : E) return B is
1670    begin
1671       pragma Assert (Nkind (Id) in N_Entity);
1672       return Flag12 (Id);
1673    end Is_Constrained;
1674
1675    function Is_Constructor (Id : E) return B is
1676    begin
1677       return Flag76 (Id);
1678    end Is_Constructor;
1679
1680    function Is_Controlled (Id : E) return B is
1681    begin
1682       return Flag42 (Base_Type (Id));
1683    end Is_Controlled;
1684
1685    function Is_Controlling_Formal (Id : E) return B is
1686    begin
1687       pragma Assert (Is_Formal (Id));
1688       return Flag97 (Id);
1689    end Is_Controlling_Formal;
1690
1691    function Is_CPP_Class (Id : E) return B is
1692    begin
1693       return Flag74 (Id);
1694    end Is_CPP_Class;
1695
1696    function Is_Descendent_Of_Address (Id : E) return B is
1697    begin
1698       pragma Assert (Is_Type (Id));
1699       return Flag223 (Id);
1700    end Is_Descendent_Of_Address;
1701
1702    function Is_Discrim_SO_Function (Id : E) return B is
1703    begin
1704       return Flag176 (Id);
1705    end Is_Discrim_SO_Function;
1706
1707    function Is_Dispatch_Table_Entity (Id : E) return B is
1708    begin
1709       return Flag234 (Id);
1710    end Is_Dispatch_Table_Entity;
1711
1712    function Is_Dispatching_Operation (Id : E) return B is
1713    begin
1714       pragma Assert (Nkind (Id) in N_Entity);
1715       return Flag6 (Id);
1716    end Is_Dispatching_Operation;
1717
1718    function Is_Eliminated (Id : E) return B is
1719    begin
1720       return Flag124 (Id);
1721    end Is_Eliminated;
1722
1723    function Is_Entry_Formal (Id : E) return B is
1724    begin
1725       return Flag52 (Id);
1726    end Is_Entry_Formal;
1727
1728    function Is_Exported (Id : E) return B is
1729    begin
1730       return Flag99 (Id);
1731    end Is_Exported;
1732
1733    function Is_First_Subtype (Id : E) return B is
1734    begin
1735       return Flag70 (Id);
1736    end Is_First_Subtype;
1737
1738    function Is_For_Access_Subtype (Id : E) return B is
1739    begin
1740       pragma Assert
1741         (Ekind (Id) = E_Record_Subtype
1742           or else
1743          Ekind (Id) = E_Private_Subtype);
1744       return Flag118 (Id);
1745    end Is_For_Access_Subtype;
1746
1747    function Is_Formal_Subprogram (Id : E) return B is
1748    begin
1749       return Flag111 (Id);
1750    end Is_Formal_Subprogram;
1751
1752    function Is_Frozen (Id : E) return B is
1753    begin
1754       return Flag4 (Id);
1755    end Is_Frozen;
1756
1757    function Is_Generic_Actual_Type (Id : E) return B is
1758    begin
1759       pragma Assert (Is_Type (Id));
1760       return Flag94 (Id);
1761    end Is_Generic_Actual_Type;
1762
1763    function Is_Generic_Instance (Id : E) return B is
1764    begin
1765       return Flag130 (Id);
1766    end Is_Generic_Instance;
1767
1768    function Is_Generic_Type (Id : E) return B is
1769    begin
1770       pragma Assert (Nkind (Id) in N_Entity);
1771       return Flag13 (Id);
1772    end Is_Generic_Type;
1773
1774    function Is_Hidden (Id : E) return B is
1775    begin
1776       return Flag57 (Id);
1777    end Is_Hidden;
1778
1779    function Is_Hidden_Open_Scope (Id : E) return B is
1780    begin
1781       return Flag171 (Id);
1782    end Is_Hidden_Open_Scope;
1783
1784    function Is_Immediately_Visible (Id : E) return B is
1785    begin
1786       pragma Assert (Nkind (Id) in N_Entity);
1787       return Flag7 (Id);
1788    end Is_Immediately_Visible;
1789
1790    function Is_Imported (Id : E) return B is
1791    begin
1792       return Flag24 (Id);
1793    end Is_Imported;
1794
1795    function Is_Inlined (Id : E) return B is
1796    begin
1797       return Flag11 (Id);
1798    end Is_Inlined;
1799
1800    function Is_Interface (Id : E) return B is
1801    begin
1802       return Flag186 (Id);
1803    end Is_Interface;
1804
1805    function Is_Instantiated (Id : E) return B is
1806    begin
1807       return Flag126 (Id);
1808    end Is_Instantiated;
1809
1810    function Is_Internal (Id : E) return B is
1811    begin
1812       pragma Assert (Nkind (Id) in N_Entity);
1813       return Flag17 (Id);
1814    end Is_Internal;
1815
1816    function Is_Interrupt_Handler (Id : E) return B is
1817    begin
1818       pragma Assert (Nkind (Id) in N_Entity);
1819       return Flag89 (Id);
1820    end Is_Interrupt_Handler;
1821
1822    function Is_Intrinsic_Subprogram (Id : E) return B is
1823    begin
1824       return Flag64 (Id);
1825    end Is_Intrinsic_Subprogram;
1826
1827    function Is_Itype (Id : E) return B is
1828    begin
1829       return Flag91 (Id);
1830    end Is_Itype;
1831
1832    function Is_Known_Non_Null (Id : E) return B is
1833    begin
1834       return Flag37 (Id);
1835    end Is_Known_Non_Null;
1836
1837    function Is_Known_Null (Id : E) return B is
1838    begin
1839       return Flag204 (Id);
1840    end Is_Known_Null;
1841
1842    function Is_Known_Valid (Id : E) return B is
1843    begin
1844       return Flag170 (Id);
1845    end Is_Known_Valid;
1846
1847    function Is_Limited_Composite (Id : E) return B is
1848    begin
1849       return Flag106 (Id);
1850    end Is_Limited_Composite;
1851
1852    function Is_Limited_Interface (Id : E) return B is
1853    begin
1854       return Flag197 (Id);
1855    end Is_Limited_Interface;
1856
1857    function Is_Limited_Record (Id : E) return B is
1858    begin
1859       return Flag25 (Id);
1860    end Is_Limited_Record;
1861
1862    function Is_Machine_Code_Subprogram (Id : E) return B is
1863    begin
1864       pragma Assert (Is_Subprogram (Id));
1865       return Flag137 (Id);
1866    end Is_Machine_Code_Subprogram;
1867
1868    function Is_Non_Static_Subtype (Id : E) return B is
1869    begin
1870       pragma Assert (Is_Type (Id));
1871       return Flag109 (Id);
1872    end Is_Non_Static_Subtype;
1873
1874    function Is_Null_Init_Proc (Id : E) return B is
1875    begin
1876       pragma Assert (Ekind (Id) = E_Procedure);
1877       return Flag178 (Id);
1878    end Is_Null_Init_Proc;
1879
1880    function Is_Obsolescent (Id : E) return B is
1881    begin
1882       return Flag153 (Id);
1883    end Is_Obsolescent;
1884
1885    function Is_Only_Out_Parameter (Id : E) return B is
1886    begin
1887       pragma Assert (Is_Formal (Id));
1888       return Flag226 (Id);
1889    end Is_Only_Out_Parameter;
1890
1891    function Is_Optional_Parameter (Id : E) return B is
1892    begin
1893       pragma Assert (Is_Formal (Id));
1894       return Flag134 (Id);
1895    end Is_Optional_Parameter;
1896
1897    function Is_Overriding_Operation (Id : E) return B is
1898    begin
1899       pragma Assert (Is_Subprogram (Id));
1900       return Flag39 (Id);
1901    end Is_Overriding_Operation;
1902
1903    function Is_Package_Body_Entity (Id : E) return B is
1904    begin
1905       return Flag160 (Id);
1906    end Is_Package_Body_Entity;
1907
1908    function Is_Packed (Id : E) return B is
1909    begin
1910       return Flag51 (Implementation_Base_Type (Id));
1911    end Is_Packed;
1912
1913    function Is_Packed_Array_Type (Id : E) return B is
1914    begin
1915       return Flag138 (Id);
1916    end Is_Packed_Array_Type;
1917
1918    function Is_Potentially_Use_Visible (Id : E) return B is
1919    begin
1920       pragma Assert (Nkind (Id) in N_Entity);
1921       return Flag9 (Id);
1922    end Is_Potentially_Use_Visible;
1923
1924    function Is_Preelaborated (Id : E) return B is
1925    begin
1926       return Flag59 (Id);
1927    end Is_Preelaborated;
1928
1929    function Is_Primitive (Id : E) return B is
1930    begin
1931       pragma Assert
1932         (Is_Overloadable (Id)
1933          or else Ekind (Id) = E_Generic_Function
1934          or else Ekind (Id) = E_Generic_Procedure);
1935       return Flag218 (Id);
1936    end Is_Primitive;
1937
1938    function Is_Primitive_Wrapper (Id : E) return B is
1939    begin
1940       pragma Assert (Ekind (Id) = E_Procedure);
1941       return Flag195 (Id);
1942    end Is_Primitive_Wrapper;
1943
1944    function Is_Private_Composite (Id : E) return B is
1945    begin
1946       pragma Assert (Is_Type (Id));
1947       return Flag107 (Id);
1948    end Is_Private_Composite;
1949
1950    function Is_Private_Descendant (Id : E) return B is
1951    begin
1952       return Flag53 (Id);
1953    end Is_Private_Descendant;
1954
1955    function Is_Protected_Interface (Id : E) return B is
1956    begin
1957       pragma Assert (Is_Interface (Id));
1958       return Flag198 (Id);
1959    end Is_Protected_Interface;
1960
1961    function Is_Public (Id : E) return B is
1962    begin
1963       pragma Assert (Nkind (Id) in N_Entity);
1964       return Flag10 (Id);
1965    end Is_Public;
1966
1967    function Is_Pure (Id : E) return B is
1968    begin
1969       return Flag44 (Id);
1970    end Is_Pure;
1971
1972    function Is_Pure_Unit_Access_Type (Id : E) return B is
1973    begin
1974       pragma Assert (Is_Access_Type (Id));
1975       return Flag189 (Id);
1976    end Is_Pure_Unit_Access_Type;
1977
1978    function Is_Raised (Id : E) return B is
1979    begin
1980       pragma Assert (Ekind (Id) = E_Exception);
1981       return Flag224 (Id);
1982    end Is_Raised;
1983
1984    function Is_Remote_Call_Interface (Id : E) return B is
1985    begin
1986       return Flag62 (Id);
1987    end Is_Remote_Call_Interface;
1988
1989    function Is_Remote_Types (Id : E) return B is
1990    begin
1991       return Flag61 (Id);
1992    end Is_Remote_Types;
1993
1994    function Is_Renaming_Of_Object (Id : E) return B is
1995    begin
1996       return Flag112 (Id);
1997    end Is_Renaming_Of_Object;
1998
1999    function Is_Return_Object (Id : E) return B is
2000    begin
2001       return Flag209 (Id);
2002    end Is_Return_Object;
2003
2004    function Is_Shared_Passive (Id : E) return B is
2005    begin
2006       return Flag60 (Id);
2007    end Is_Shared_Passive;
2008
2009    function Is_Statically_Allocated (Id : E) return B is
2010    begin
2011       return Flag28 (Id);
2012    end Is_Statically_Allocated;
2013
2014    function Is_Synchronized_Interface (Id : E) return B is
2015    begin
2016       pragma Assert (Is_Interface (Id));
2017       return Flag199 (Id);
2018    end Is_Synchronized_Interface;
2019
2020    function Is_Tag (Id : E) return B is
2021    begin
2022       pragma Assert (Nkind (Id) in N_Entity);
2023       return Flag78 (Id);
2024    end Is_Tag;
2025
2026    function Is_Tagged_Type (Id : E) return B is
2027    begin
2028       return Flag55 (Id);
2029    end Is_Tagged_Type;
2030
2031    function Is_Task_Interface (Id : E) return B is
2032    begin
2033       pragma Assert (Is_Interface (Id));
2034       return Flag200 (Id);
2035    end Is_Task_Interface;
2036
2037    function Is_Thunk (Id : E) return B is
2038    begin
2039       pragma Assert (Is_Subprogram (Id));
2040       return Flag225 (Id);
2041    end Is_Thunk;
2042
2043    function Is_Trivial_Subprogram (Id : E) return B is
2044    begin
2045       return Flag235 (Id);
2046    end Is_Trivial_Subprogram;
2047
2048    function Is_True_Constant (Id : E) return B is
2049    begin
2050       return Flag163 (Id);
2051    end Is_True_Constant;
2052
2053    function Is_Unchecked_Union (Id : E) return B is
2054    begin
2055       return Flag117 (Implementation_Base_Type (Id));
2056    end Is_Unchecked_Union;
2057
2058    function Is_Unsigned_Type (Id : E) return B is
2059    begin
2060       pragma Assert (Is_Type (Id));
2061       return Flag144 (Id);
2062    end Is_Unsigned_Type;
2063
2064    function Is_Valued_Procedure (Id : E) return B is
2065    begin
2066       pragma Assert (Ekind (Id) = E_Procedure);
2067       return Flag127 (Id);
2068    end Is_Valued_Procedure;
2069
2070    function Is_Visible_Child_Unit (Id : E) return B is
2071    begin
2072       pragma Assert (Is_Child_Unit (Id));
2073       return Flag116 (Id);
2074    end Is_Visible_Child_Unit;
2075
2076    function Is_Visible_Formal (Id : E) return B is
2077    begin
2078       return Flag206 (Id);
2079    end Is_Visible_Formal;
2080
2081    function Is_VMS_Exception (Id : E) return B is
2082    begin
2083       return Flag133 (Id);
2084    end Is_VMS_Exception;
2085
2086    function Is_Volatile (Id : E) return B is
2087    begin
2088       pragma Assert (Nkind (Id) in N_Entity);
2089
2090       if Is_Type (Id) then
2091          return Flag16 (Base_Type (Id));
2092       else
2093          return Flag16 (Id);
2094       end if;
2095    end Is_Volatile;
2096
2097    function Itype_Printed (Id : E) return B is
2098    begin
2099       pragma Assert (Is_Itype (Id));
2100       return Flag202 (Id);
2101    end Itype_Printed;
2102
2103    function Kill_Elaboration_Checks (Id : E) return B is
2104    begin
2105       return Flag32 (Id);
2106    end Kill_Elaboration_Checks;
2107
2108    function Kill_Range_Checks (Id : E) return B is
2109    begin
2110       return Flag33 (Id);
2111    end Kill_Range_Checks;
2112
2113    function Kill_Tag_Checks (Id : E) return B is
2114    begin
2115       return Flag34 (Id);
2116    end Kill_Tag_Checks;
2117
2118    function Known_To_Have_Preelab_Init (Id : E) return B is
2119    begin
2120       pragma Assert (Is_Type (Id));
2121       return Flag207 (Id);
2122    end Known_To_Have_Preelab_Init;
2123
2124    function Last_Assignment (Id : E) return N is
2125    begin
2126       pragma Assert (Is_Assignable (Id));
2127       return Node26 (Id);
2128    end Last_Assignment;
2129
2130    function Last_Entity (Id : E) return E is
2131    begin
2132       return Node20 (Id);
2133    end Last_Entity;
2134
2135    function Limited_View (Id : E) return E is
2136    begin
2137       pragma Assert (Ekind (Id) = E_Package);
2138       return Node23 (Id);
2139    end Limited_View;
2140
2141    function Lit_Indexes (Id : E) return E is
2142    begin
2143       pragma Assert (Is_Enumeration_Type (Id));
2144       return Node15 (Id);
2145    end Lit_Indexes;
2146
2147    function Lit_Strings (Id : E) return E is
2148    begin
2149       pragma Assert (Is_Enumeration_Type (Id));
2150       return Node16 (Id);
2151    end Lit_Strings;
2152
2153    function Low_Bound_Known (Id : E) return B is
2154    begin
2155       return Flag205 (Id);
2156    end Low_Bound_Known;
2157
2158    function Machine_Radix_10 (Id : E) return B is
2159    begin
2160       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
2161       return Flag84 (Id);
2162    end Machine_Radix_10;
2163
2164    function Master_Id (Id : E) return E is
2165    begin
2166       pragma Assert (Is_Access_Type (Id));
2167       return Node17 (Id);
2168    end Master_Id;
2169
2170    function Materialize_Entity (Id : E) return B is
2171    begin
2172       return Flag168 (Id);
2173    end Materialize_Entity;
2174
2175    function Mechanism (Id : E) return M is
2176    begin
2177       pragma Assert (Ekind (Id) = E_Function or else Is_Formal (Id));
2178       return UI_To_Int (Uint8 (Id));
2179    end Mechanism;
2180
2181    function Modulus (Id : E) return Uint is
2182    begin
2183       pragma Assert (Is_Modular_Integer_Type (Id));
2184       return Uint17 (Base_Type (Id));
2185    end Modulus;
2186
2187    function Must_Be_On_Byte_Boundary (Id : E) return B is
2188    begin
2189       pragma Assert (Is_Type (Id));
2190       return Flag183 (Id);
2191    end Must_Be_On_Byte_Boundary;
2192
2193    function Must_Have_Preelab_Init (Id : E) return B is
2194    begin
2195       pragma Assert (Is_Type (Id));
2196       return Flag208 (Id);
2197    end Must_Have_Preelab_Init;
2198
2199    function Needs_Debug_Info (Id : E) return B is
2200    begin
2201       return Flag147 (Id);
2202    end Needs_Debug_Info;
2203
2204    function Needs_No_Actuals (Id : E) return B is
2205    begin
2206       pragma Assert
2207         (Is_Overloadable (Id)
2208           or else Ekind (Id) = E_Subprogram_Type
2209           or else Ekind (Id) = E_Entry_Family);
2210       return Flag22 (Id);
2211    end Needs_No_Actuals;
2212
2213    function Never_Set_In_Source (Id : E) return B is
2214    begin
2215       return Flag115 (Id);
2216    end Never_Set_In_Source;
2217
2218    function Next_Inlined_Subprogram (Id : E) return E is
2219    begin
2220       return Node12 (Id);
2221    end Next_Inlined_Subprogram;
2222
2223    function No_Pool_Assigned (Id : E) return B is
2224    begin
2225       pragma Assert (Is_Access_Type (Id));
2226       return Flag131 (Root_Type (Id));
2227    end No_Pool_Assigned;
2228
2229    function No_Return (Id : E) return B is
2230    begin
2231       return Flag113 (Id);
2232    end No_Return;
2233
2234    function No_Strict_Aliasing (Id : E) return B is
2235    begin
2236       pragma Assert (Is_Access_Type (Id));
2237       return Flag136 (Base_Type (Id));
2238    end No_Strict_Aliasing;
2239
2240    function Non_Binary_Modulus (Id : E) return B is
2241    begin
2242       pragma Assert (Is_Modular_Integer_Type (Id));
2243       return Flag58 (Base_Type (Id));
2244    end Non_Binary_Modulus;
2245
2246    function Non_Limited_View (Id : E) return E is
2247    begin
2248       pragma Assert (Ekind (Id) in Incomplete_Kind);
2249       return Node17 (Id);
2250    end Non_Limited_View;
2251
2252    function Nonzero_Is_True (Id : E) return B is
2253    begin
2254       pragma Assert (Root_Type (Id) = Standard_Boolean);
2255       return Flag162 (Base_Type (Id));
2256    end Nonzero_Is_True;
2257
2258    function Normalized_First_Bit (Id : E) return U is
2259    begin
2260       pragma Assert
2261         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
2262       return Uint8 (Id);
2263    end Normalized_First_Bit;
2264
2265    function Normalized_Position (Id : E) return U is
2266    begin
2267       pragma Assert
2268         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
2269       return Uint14 (Id);
2270    end Normalized_Position;
2271
2272    function Normalized_Position_Max (Id : E) return U is
2273    begin
2274       pragma Assert
2275         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
2276       return Uint10 (Id);
2277    end Normalized_Position_Max;
2278
2279    function OK_To_Reorder_Components (Id : E) return B is
2280    begin
2281       pragma Assert (Is_Record_Type (Id));
2282       return Flag239 (Base_Type (Id));
2283    end OK_To_Reorder_Components;
2284
2285    function Optimize_Alignment_Space (Id : E) return B is
2286    begin
2287       pragma Assert
2288         (Is_Type (Id)
2289            or else Ekind (Id) = E_Constant
2290            or else Ekind (Id) = E_Variable);
2291       return Flag241 (Id);
2292    end Optimize_Alignment_Space;
2293
2294    function Optimize_Alignment_Time (Id : E) return B is
2295    begin
2296       pragma Assert
2297         (Is_Type (Id)
2298            or else Ekind (Id) = E_Constant
2299            or else Ekind (Id) = E_Variable);
2300       return Flag242 (Id);
2301    end Optimize_Alignment_Time;
2302
2303    function Original_Array_Type (Id : E) return E is
2304    begin
2305       pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
2306       return Node21 (Id);
2307    end Original_Array_Type;
2308
2309    function Original_Record_Component (Id : E) return E is
2310    begin
2311       pragma Assert
2312         (Ekind (Id) = E_Void
2313            or else Ekind (Id) = E_Component
2314            or else Ekind (Id) = E_Discriminant);
2315       return Node22 (Id);
2316    end Original_Record_Component;
2317
2318    function Overlays_Constant (Id : E) return B is
2319    begin
2320       return Flag243 (Id);
2321    end Overlays_Constant;
2322
2323    function Overridden_Operation (Id : E) return E is
2324    begin
2325       return Node26 (Id);
2326    end Overridden_Operation;
2327
2328    function Package_Instantiation (Id : E) return N is
2329    begin
2330       pragma Assert
2331         (False
2332            or else Ekind (Id) = E_Generic_Package
2333            or else Ekind (Id) = E_Package);
2334       return Node26 (Id);
2335    end Package_Instantiation;
2336
2337    function Packed_Array_Type (Id : E) return E is
2338    begin
2339       pragma Assert (Is_Array_Type (Id));
2340       return Node23 (Id);
2341    end Packed_Array_Type;
2342
2343    function Parent_Subtype (Id : E) return E is
2344    begin
2345       pragma Assert (Ekind (Id) = E_Record_Type);
2346       return Node19 (Id);
2347    end Parent_Subtype;
2348
2349    function Primitive_Operations (Id : E) return L is
2350    begin
2351       pragma Assert (Is_Tagged_Type (Id));
2352       return Elist15 (Id);
2353    end Primitive_Operations;
2354
2355    function Prival (Id : E) return E is
2356    begin
2357       pragma Assert (Is_Protected_Component (Id));
2358       return Node17 (Id);
2359    end Prival;
2360
2361    function Prival_Link (Id : E) return E is
2362    begin
2363       pragma Assert (Ekind (Id) = E_Constant
2364         or else Ekind (Id) = E_Variable);
2365       return Node20 (Id);
2366    end Prival_Link;
2367
2368    function Private_Dependents (Id : E) return L is
2369    begin
2370       pragma Assert (Is_Incomplete_Or_Private_Type (Id));
2371       return Elist18 (Id);
2372    end Private_Dependents;
2373
2374    function Private_View (Id : E) return N is
2375    begin
2376       pragma Assert (Is_Private_Type (Id));
2377       return Node22 (Id);
2378    end Private_View;
2379
2380    function Protected_Body_Subprogram (Id : E) return E is
2381    begin
2382       pragma Assert (Is_Subprogram (Id) or else Is_Entry (Id));
2383       return Node11 (Id);
2384    end Protected_Body_Subprogram;
2385
2386    function Protected_Formal (Id : E) return E is
2387    begin
2388       pragma Assert (Is_Formal (Id));
2389       return Node22 (Id);
2390    end Protected_Formal;
2391
2392    function Protection_Object (Id : E) return E is
2393    begin
2394       pragma Assert (Ekind (Id) = E_Entry
2395         or else Ekind (Id) = E_Entry_Family
2396         or else Ekind (Id) = E_Function
2397         or else Ekind (Id) = E_Procedure);
2398       return Node23 (Id);
2399    end Protection_Object;
2400
2401    function Reachable (Id : E) return B is
2402    begin
2403       return Flag49 (Id);
2404    end Reachable;
2405
2406    function Referenced (Id : E) return B is
2407    begin
2408       return Flag156 (Id);
2409    end Referenced;
2410
2411    function Referenced_As_LHS (Id : E) return B is
2412    begin
2413       return Flag36 (Id);
2414    end Referenced_As_LHS;
2415
2416    function Referenced_As_Out_Parameter (Id : E) return B is
2417    begin
2418       return Flag227 (Id);
2419    end Referenced_As_Out_Parameter;
2420
2421    function Referenced_Object (Id : E) return N is
2422    begin
2423       pragma Assert (Is_Type (Id));
2424       return Node10 (Id);
2425    end Referenced_Object;
2426
2427    function Register_Exception_Call (Id : E) return N is
2428    begin
2429       pragma Assert (Ekind (Id) = E_Exception);
2430       return Node20 (Id);
2431    end Register_Exception_Call;
2432
2433    function Related_Array_Object (Id : E) return E is
2434    begin
2435       pragma Assert (Is_Array_Type (Id));
2436       return Node19 (Id);
2437    end Related_Array_Object;
2438
2439    function Related_Instance (Id : E) return E is
2440    begin
2441       pragma Assert
2442         (Ekind (Id) = E_Package or else Ekind (Id) = E_Package_Body);
2443       return Node15 (Id);
2444    end Related_Instance;
2445
2446    function Related_Type (Id : E) return E is
2447    begin
2448       pragma Assert
2449         (Ekind (Id) = E_Component or else Ekind (Id) = E_Constant);
2450       return Node26 (Id);
2451    end Related_Type;
2452
2453    function Relative_Deadline_Variable (Id : E) return E is
2454    begin
2455       pragma Assert (Is_Task_Type (Id));
2456       return Node26 (Implementation_Base_Type (Id));
2457    end Relative_Deadline_Variable;
2458
2459    function Renamed_Entity (Id : E) return N is
2460    begin
2461       return Node18 (Id);
2462    end Renamed_Entity;
2463
2464    function Renamed_In_Spec (Id : E) return B is
2465    begin
2466       pragma Assert (Ekind (Id) = E_Package);
2467       return Flag231 (Id);
2468    end Renamed_In_Spec;
2469
2470    function Renamed_Object (Id : E) return N is
2471    begin
2472       return Node18 (Id);
2473    end Renamed_Object;
2474
2475    function Renaming_Map (Id : E) return U is
2476    begin
2477       return Uint9 (Id);
2478    end Renaming_Map;
2479
2480    function Requires_Overriding (Id : E) return B is
2481    begin
2482       pragma Assert (Is_Overloadable (Id));
2483       return Flag213 (Id);
2484    end Requires_Overriding;
2485
2486    function Return_Present (Id : E) return B is
2487    begin
2488       return Flag54 (Id);
2489    end Return_Present;
2490
2491    function Return_Applies_To (Id : E) return N is
2492    begin
2493       return Node8 (Id);
2494    end Return_Applies_To;
2495
2496    function Returns_By_Ref (Id : E) return B is
2497    begin
2498       return Flag90 (Id);
2499    end Returns_By_Ref;
2500
2501    function Reverse_Bit_Order (Id : E) return B is
2502    begin
2503       pragma Assert (Is_Record_Type (Id));
2504       return Flag164 (Base_Type (Id));
2505    end Reverse_Bit_Order;
2506
2507    function RM_Size (Id : E) return U is
2508    begin
2509       pragma Assert (Is_Type (Id));
2510       return Uint13 (Id);
2511    end RM_Size;
2512
2513    function Scalar_Range (Id : E) return N is
2514    begin
2515       return Node20 (Id);
2516    end Scalar_Range;
2517
2518    function Scale_Value (Id : E) return U is
2519    begin
2520       return Uint15 (Id);
2521    end Scale_Value;
2522
2523    function Scope_Depth_Value (Id : E) return U is
2524    begin
2525       return Uint22 (Id);
2526    end Scope_Depth_Value;
2527
2528    function Sec_Stack_Needed_For_Return (Id : E) return B is
2529    begin
2530       return Flag167 (Id);
2531    end Sec_Stack_Needed_For_Return;
2532
2533    function Shadow_Entities (Id : E) return S is
2534    begin
2535       pragma Assert
2536         (Ekind (Id) = E_Package or else Ekind (Id) = E_Generic_Package);
2537       return List14 (Id);
2538    end Shadow_Entities;
2539
2540    function Shared_Var_Assign_Proc (Id : E) return E is
2541    begin
2542       pragma Assert (Ekind (Id) = E_Variable);
2543       return Node22 (Id);
2544    end Shared_Var_Assign_Proc;
2545
2546    function Shared_Var_Read_Proc (Id : E) return E is
2547    begin
2548       pragma Assert (Ekind (Id) = E_Variable);
2549       return Node15 (Id);
2550    end Shared_Var_Read_Proc;
2551
2552    function Size_Check_Code (Id : E) return N is
2553    begin
2554       pragma Assert (Ekind (Id) = E_Constant or else Ekind (Id) = E_Variable);
2555       return Node19 (Id);
2556    end Size_Check_Code;
2557
2558    function Size_Depends_On_Discriminant (Id : E) return B is
2559    begin
2560       return Flag177 (Id);
2561    end Size_Depends_On_Discriminant;
2562
2563    function Size_Known_At_Compile_Time (Id : E) return B is
2564    begin
2565       return Flag92 (Id);
2566    end Size_Known_At_Compile_Time;
2567
2568    function Small_Value (Id : E) return R is
2569    begin
2570       pragma Assert (Is_Fixed_Point_Type (Id));
2571       return Ureal21 (Id);
2572    end Small_Value;
2573
2574    function Spec_Entity (Id : E) return E is
2575    begin
2576       pragma Assert
2577         (Ekind (Id) = E_Package_Body or else Is_Formal (Id));
2578       return Node19 (Id);
2579    end Spec_Entity;
2580
2581    function Spec_PPC_List (Id : E) return N is
2582    begin
2583       pragma Assert (Is_Subprogram (Id));
2584       return Node24 (Id);
2585    end Spec_PPC_List;
2586
2587    function Storage_Size_Variable (Id : E) return E is
2588    begin
2589       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
2590       return Node15 (Implementation_Base_Type (Id));
2591    end Storage_Size_Variable;
2592
2593    function Static_Elaboration_Desired (Id : E) return B is
2594    begin
2595       pragma Assert (Ekind (Id) = E_Package);
2596       return Flag77 (Id);
2597    end Static_Elaboration_Desired;
2598
2599    function Static_Initialization (Id : E) return N is
2600    begin
2601       pragma Assert
2602         (Ekind (Id) = E_Procedure and then not Is_Dispatching_Operation (Id));
2603       return Node26 (Id);
2604    end Static_Initialization;
2605
2606    function Stored_Constraint (Id : E) return L is
2607    begin
2608       pragma Assert
2609         (Is_Composite_Type (Id) and then not Is_Array_Type (Id));
2610       return Elist23 (Id);
2611    end Stored_Constraint;
2612
2613    function Strict_Alignment (Id : E) return B is
2614    begin
2615       return Flag145 (Implementation_Base_Type (Id));
2616    end Strict_Alignment;
2617
2618    function String_Literal_Length (Id : E) return U is
2619    begin
2620       return Uint16 (Id);
2621    end String_Literal_Length;
2622
2623    function String_Literal_Low_Bound (Id : E) return N is
2624    begin
2625       return Node15 (Id);
2626    end String_Literal_Low_Bound;
2627
2628    function Suppress_Elaboration_Warnings (Id : E) return B is
2629    begin
2630       return Flag148 (Id);
2631    end Suppress_Elaboration_Warnings;
2632
2633    function Suppress_Init_Proc (Id : E) return B is
2634    begin
2635       return Flag105 (Base_Type (Id));
2636    end Suppress_Init_Proc;
2637
2638    function Suppress_Style_Checks (Id : E) return B is
2639    begin
2640       return Flag165 (Id);
2641    end Suppress_Style_Checks;
2642
2643    function Suppress_Value_Tracking_On_Call (Id : E) return B is
2644    begin
2645       return Flag217 (Id);
2646    end Suppress_Value_Tracking_On_Call;
2647
2648    function Task_Body_Procedure (Id : E) return N is
2649    begin
2650       pragma Assert (Ekind (Id) in Task_Kind);
2651       return Node25 (Id);
2652    end Task_Body_Procedure;
2653
2654    function Treat_As_Volatile (Id : E) return B is
2655    begin
2656       return Flag41 (Id);
2657    end Treat_As_Volatile;
2658
2659    function Underlying_Full_View (Id : E) return E is
2660    begin
2661       pragma Assert (Ekind (Id) in Private_Kind);
2662       return Node19 (Id);
2663    end Underlying_Full_View;
2664
2665    function Universal_Aliasing (Id : E) return B is
2666    begin
2667       pragma Assert (Is_Type (Id));
2668       return Flag216 (Base_Type (Id));
2669    end Universal_Aliasing;
2670
2671    function Unset_Reference (Id : E) return N is
2672    begin
2673       return Node16 (Id);
2674    end Unset_Reference;
2675
2676    function Used_As_Generic_Actual (Id : E) return B is
2677    begin
2678       return Flag222 (Id);
2679    end Used_As_Generic_Actual;
2680
2681    function Uses_Sec_Stack (Id : E) return B is
2682    begin
2683       return Flag95 (Id);
2684    end Uses_Sec_Stack;
2685
2686    function Vax_Float (Id : E) return B is
2687    begin
2688       return Flag151 (Base_Type (Id));
2689    end Vax_Float;
2690
2691    function Warnings_Off (Id : E) return B is
2692    begin
2693       return Flag96 (Id);
2694    end Warnings_Off;
2695
2696    function Warnings_Off_Used (Id : E) return B is
2697    begin
2698       return Flag236 (Id);
2699    end Warnings_Off_Used;
2700
2701    function Warnings_Off_Used_Unmodified (Id : E) return B is
2702    begin
2703       return Flag237 (Id);
2704    end Warnings_Off_Used_Unmodified;
2705
2706    function Warnings_Off_Used_Unreferenced (Id : E) return B is
2707    begin
2708       return Flag238 (Id);
2709    end Warnings_Off_Used_Unreferenced;
2710
2711    function Wrapped_Entity (Id : E) return E is
2712    begin
2713       pragma Assert (Ekind (Id) = E_Procedure
2714                        and then Is_Primitive_Wrapper (Id));
2715       return Node27 (Id);
2716    end Wrapped_Entity;
2717
2718    function Was_Hidden (Id : E) return B is
2719    begin
2720       return Flag196 (Id);
2721    end Was_Hidden;
2722
2723    ------------------------------
2724    -- Classification Functions --
2725    ------------------------------
2726
2727    function Is_Access_Type                      (Id : E) return B is
2728    begin
2729       return Ekind (Id) in Access_Kind;
2730    end Is_Access_Type;
2731
2732    function Is_Access_Protected_Subprogram_Type (Id : E) return B is
2733    begin
2734       return Ekind (Id) in Access_Protected_Kind;
2735    end Is_Access_Protected_Subprogram_Type;
2736
2737    function Is_Access_Subprogram_Type           (Id : E) return B is
2738    begin
2739       return Ekind (Id) in Access_Subprogram_Kind;
2740    end Is_Access_Subprogram_Type;
2741
2742    function Is_Array_Type                       (Id : E) return B is
2743    begin
2744       return Ekind (Id) in Array_Kind;
2745    end Is_Array_Type;
2746
2747    function Is_Assignable                       (Id : E) return B is
2748    begin
2749       return Ekind (Id) in Assignable_Kind;
2750    end Is_Assignable;
2751
2752    function Is_Class_Wide_Type                  (Id : E) return B is
2753    begin
2754       return Ekind (Id) in Class_Wide_Kind;
2755    end Is_Class_Wide_Type;
2756
2757    function Is_Composite_Type                   (Id : E) return B is
2758    begin
2759       return Ekind (Id) in Composite_Kind;
2760    end Is_Composite_Type;
2761
2762    function Is_Concurrent_Body                  (Id : E) return B is
2763    begin
2764       return Ekind (Id) in
2765         Concurrent_Body_Kind;
2766    end Is_Concurrent_Body;
2767
2768    function Is_Concurrent_Record_Type           (Id : E) return B is
2769    begin
2770       return Flag20 (Id);
2771    end Is_Concurrent_Record_Type;
2772
2773    function Is_Concurrent_Type                  (Id : E) return B is
2774    begin
2775       return Ekind (Id) in Concurrent_Kind;
2776    end Is_Concurrent_Type;
2777
2778    function Is_Decimal_Fixed_Point_Type         (Id : E) return B is
2779    begin
2780       return Ekind (Id) in
2781         Decimal_Fixed_Point_Kind;
2782    end Is_Decimal_Fixed_Point_Type;
2783
2784    function Is_Digits_Type                      (Id : E) return B is
2785    begin
2786       return Ekind (Id) in Digits_Kind;
2787    end Is_Digits_Type;
2788
2789    function Is_Discrete_Or_Fixed_Point_Type     (Id : E) return B is
2790    begin
2791       return Ekind (Id) in Discrete_Or_Fixed_Point_Kind;
2792    end Is_Discrete_Or_Fixed_Point_Type;
2793
2794    function Is_Discrete_Type                    (Id : E) return B is
2795    begin
2796       return Ekind (Id) in Discrete_Kind;
2797    end Is_Discrete_Type;
2798
2799    function Is_Elementary_Type                  (Id : E) return B is
2800    begin
2801       return Ekind (Id) in Elementary_Kind;
2802    end Is_Elementary_Type;
2803
2804    function Is_Entry                            (Id : E) return B is
2805    begin
2806       return Ekind (Id) in Entry_Kind;
2807    end Is_Entry;
2808
2809    function Is_Enumeration_Type                 (Id : E) return B is
2810    begin
2811       return Ekind (Id) in
2812         Enumeration_Kind;
2813    end Is_Enumeration_Type;
2814
2815    function Is_Fixed_Point_Type                 (Id : E) return B is
2816    begin
2817       return Ekind (Id) in
2818         Fixed_Point_Kind;
2819    end Is_Fixed_Point_Type;
2820
2821    function Is_Floating_Point_Type              (Id : E) return B is
2822    begin
2823       return Ekind (Id) in Float_Kind;
2824    end Is_Floating_Point_Type;
2825
2826    function Is_Formal                           (Id : E) return B is
2827    begin
2828       return Ekind (Id) in Formal_Kind;
2829    end Is_Formal;
2830
2831    function Is_Formal_Object                    (Id : E) return B is
2832    begin
2833       return Ekind (Id) in Formal_Object_Kind;
2834    end Is_Formal_Object;
2835
2836    function Is_Generic_Subprogram               (Id : E) return B is
2837    begin
2838       return Ekind (Id) in Generic_Subprogram_Kind;
2839    end Is_Generic_Subprogram;
2840
2841    function Is_Generic_Unit                     (Id : E) return B is
2842    begin
2843       return Ekind (Id) in Generic_Unit_Kind;
2844    end Is_Generic_Unit;
2845
2846    function Is_Incomplete_Or_Private_Type       (Id : E) return B is
2847    begin
2848       return Ekind (Id) in
2849         Incomplete_Or_Private_Kind;
2850    end Is_Incomplete_Or_Private_Type;
2851
2852    function Is_Incomplete_Type                  (Id : E) return B is
2853    begin
2854       return Ekind (Id) in
2855         Incomplete_Kind;
2856    end Is_Incomplete_Type;
2857
2858    function Is_Integer_Type                     (Id : E) return B is
2859    begin
2860       return Ekind (Id) in Integer_Kind;
2861    end Is_Integer_Type;
2862
2863    function Is_Modular_Integer_Type             (Id : E) return B is
2864    begin
2865       return Ekind (Id) in
2866         Modular_Integer_Kind;
2867    end Is_Modular_Integer_Type;
2868
2869    function Is_Named_Number                     (Id : E) return B is
2870    begin
2871       return Ekind (Id) in Named_Kind;
2872    end Is_Named_Number;
2873
2874    function Is_Numeric_Type                     (Id : E) return B is
2875    begin
2876       return Ekind (Id) in Numeric_Kind;
2877    end Is_Numeric_Type;
2878
2879    function Is_Object                           (Id : E) return B is
2880    begin
2881       return Ekind (Id) in Object_Kind;
2882    end Is_Object;
2883
2884    function Is_Ordinary_Fixed_Point_Type        (Id : E) return B is
2885    begin
2886       return Ekind (Id) in
2887         Ordinary_Fixed_Point_Kind;
2888    end Is_Ordinary_Fixed_Point_Type;
2889
2890    function Is_Overloadable                     (Id : E) return B is
2891    begin
2892       return Ekind (Id) in Overloadable_Kind;
2893    end Is_Overloadable;
2894
2895    function Is_Private_Type                     (Id : E) return B is
2896    begin
2897       return Ekind (Id) in Private_Kind;
2898    end Is_Private_Type;
2899
2900    function Is_Protected_Type                   (Id : E) return B is
2901    begin
2902       return Ekind (Id) in Protected_Kind;
2903    end Is_Protected_Type;
2904
2905    function Is_Real_Type                        (Id : E) return B is
2906    begin
2907       return Ekind (Id) in Real_Kind;
2908    end Is_Real_Type;
2909
2910    function Is_Record_Type                      (Id : E) return B is
2911    begin
2912       return Ekind (Id) in Record_Kind;
2913    end Is_Record_Type;
2914
2915    function Is_Scalar_Type                      (Id : E) return B is
2916    begin
2917       return Ekind (Id) in Scalar_Kind;
2918    end Is_Scalar_Type;
2919
2920    function Is_Signed_Integer_Type              (Id : E) return B is
2921    begin
2922       return Ekind (Id) in
2923         Signed_Integer_Kind;
2924    end Is_Signed_Integer_Type;
2925
2926    function Is_Subprogram                       (Id : E) return B is
2927    begin
2928       return Ekind (Id) in Subprogram_Kind;
2929    end Is_Subprogram;
2930
2931    function Is_Task_Type                        (Id : E) return B is
2932    begin
2933       return Ekind (Id) in Task_Kind;
2934    end Is_Task_Type;
2935
2936    function Is_Type                             (Id : E) return B is
2937    begin
2938       return Ekind (Id) in Type_Kind;
2939    end Is_Type;
2940
2941    ------------------------------
2942    -- Attribute Set Procedures --
2943    ------------------------------
2944
2945    procedure Set_Abstract_Interfaces (Id : E; V : L) is
2946    begin
2947       pragma Assert (Is_Record_Type (Id));
2948       Set_Elist25 (Id, V);
2949    end Set_Abstract_Interfaces;
2950
2951    procedure Set_Abstract_Interface_Alias (Id : E; V : E) is
2952    begin
2953       pragma Assert
2954         (Is_Hidden (Id)
2955           and then
2956            (Ekind (Id) = E_Procedure or else Ekind (Id) = E_Function));
2957       Set_Node25 (Id, V);
2958    end Set_Abstract_Interface_Alias;
2959
2960    procedure Set_Accept_Address (Id : E; V : L) is
2961    begin
2962       Set_Elist21 (Id, V);
2963    end Set_Accept_Address;
2964
2965    procedure Set_Access_Disp_Table (Id : E; V : L) is
2966    begin
2967       pragma Assert (Is_Tagged_Type (Id) and then Id = Base_Type (Id));
2968       Set_Elist16 (Id, V);
2969    end Set_Access_Disp_Table;
2970
2971    procedure Set_Associated_Final_Chain (Id : E; V : E) is
2972    begin
2973       pragma Assert (Is_Access_Type (Id));
2974       Set_Node23 (Id, V);
2975    end Set_Associated_Final_Chain;
2976
2977    procedure Set_Associated_Formal_Package (Id : E; V : E) is
2978    begin
2979       Set_Node12 (Id, V);
2980    end Set_Associated_Formal_Package;
2981
2982    procedure Set_Associated_Node_For_Itype (Id : E; V : E) is
2983    begin
2984       Set_Node8 (Id, V);
2985    end Set_Associated_Node_For_Itype;
2986
2987    procedure Set_Associated_Storage_Pool (Id : E; V : E) is
2988    begin
2989       pragma Assert (Is_Access_Type (Id) and then Id = Base_Type (Id));
2990       Set_Node22 (Id, V);
2991    end Set_Associated_Storage_Pool;
2992
2993    procedure Set_Actual_Subtype (Id : E; V : E) is
2994    begin
2995       pragma Assert
2996          (Ekind (Id) = E_Constant
2997            or else Ekind (Id) = E_Variable
2998            or else Ekind (Id) = E_Generic_In_Out_Parameter
2999            or else Is_Formal (Id));
3000       Set_Node17 (Id, V);
3001    end Set_Actual_Subtype;
3002
3003    procedure Set_Address_Taken (Id : E; V : B := True) is
3004    begin
3005       Set_Flag104 (Id, V);
3006    end Set_Address_Taken;
3007
3008    procedure Set_Alias (Id : E; V : E) is
3009    begin
3010       pragma Assert
3011         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
3012       Set_Node18 (Id, V);
3013    end Set_Alias;
3014
3015    procedure Set_Alignment (Id : E; V : U) is
3016    begin
3017       pragma Assert (Is_Type (Id)
3018                        or else Is_Formal (Id)
3019                        or else Ekind (Id) = E_Loop_Parameter
3020                        or else Ekind (Id) = E_Constant
3021                        or else Ekind (Id) = E_Exception
3022                        or else Ekind (Id) = E_Variable);
3023       Set_Uint14 (Id, V);
3024    end Set_Alignment;
3025
3026    procedure Set_Barrier_Function (Id : E; V : N) is
3027    begin
3028       pragma Assert (Is_Entry (Id));
3029       Set_Node12 (Id, V);
3030    end Set_Barrier_Function;
3031
3032    procedure Set_Block_Node (Id : E; V : N) is
3033    begin
3034       pragma Assert (Ekind (Id) = E_Block);
3035       Set_Node11 (Id, V);
3036    end Set_Block_Node;
3037
3038    procedure Set_Body_Entity (Id : E; V : E) is
3039    begin
3040       pragma Assert
3041         (Ekind (Id) = E_Package or else Ekind (Id) = E_Generic_Package);
3042       Set_Node19 (Id, V);
3043    end Set_Body_Entity;
3044
3045    procedure Set_Body_Needed_For_SAL (Id : E; V : B := True) is
3046    begin
3047       pragma Assert
3048         (Ekind (Id) = E_Package
3049            or else Is_Subprogram (Id)
3050            or else Is_Generic_Unit (Id));
3051       Set_Flag40 (Id, V);
3052    end Set_Body_Needed_For_SAL;
3053
3054    procedure Set_C_Pass_By_Copy (Id : E; V : B := True) is
3055    begin
3056       pragma Assert (Is_Record_Type (Id) and then Id = Base_Type (Id));
3057       Set_Flag125 (Id, V);
3058    end Set_C_Pass_By_Copy;
3059
3060    procedure Set_Can_Never_Be_Null (Id : E; V : B := True) is
3061    begin
3062       Set_Flag38 (Id, V);
3063    end Set_Can_Never_Be_Null;
3064
3065    procedure Set_Checks_May_Be_Suppressed (Id : E; V : B := True) is
3066    begin
3067       Set_Flag31 (Id, V);
3068    end Set_Checks_May_Be_Suppressed;
3069
3070    procedure Set_Class_Wide_Type (Id : E; V : E) is
3071    begin
3072       pragma Assert (Is_Type (Id));
3073       Set_Node9 (Id, V);
3074    end Set_Class_Wide_Type;
3075
3076    procedure Set_Cloned_Subtype (Id : E; V : E) is
3077    begin
3078       pragma Assert
3079         (Ekind (Id) = E_Record_Subtype
3080          or else Ekind (Id) = E_Class_Wide_Subtype);
3081       Set_Node16 (Id, V);
3082    end Set_Cloned_Subtype;
3083
3084    procedure Set_Component_Bit_Offset (Id : E; V : U) is
3085    begin
3086       pragma Assert
3087         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
3088       Set_Uint11 (Id, V);
3089    end Set_Component_Bit_Offset;
3090
3091    procedure Set_Component_Clause (Id : E; V : N) is
3092    begin
3093       pragma Assert
3094         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
3095       Set_Node13 (Id, V);
3096    end Set_Component_Clause;
3097
3098    procedure Set_Component_Size (Id : E; V : U) is
3099    begin
3100       pragma Assert (Is_Array_Type (Id) and then Id = Base_Type (Id));
3101       Set_Uint22 (Id, V);
3102    end Set_Component_Size;
3103
3104    procedure Set_Component_Type (Id : E; V : E) is
3105    begin
3106       pragma Assert (Is_Array_Type (Id) and then Id = Base_Type (Id));
3107       Set_Node20 (Id, V);
3108    end Set_Component_Type;
3109
3110    procedure Set_Corresponding_Concurrent_Type (Id : E; V : E) is
3111    begin
3112       pragma Assert
3113         (Ekind (Id) = E_Record_Type and then Is_Concurrent_Type (V));
3114       Set_Node18 (Id, V);
3115    end Set_Corresponding_Concurrent_Type;
3116
3117    procedure Set_Corresponding_Discriminant (Id : E; V : E) is
3118    begin
3119       pragma Assert (Ekind (Id) = E_Discriminant);
3120       Set_Node19 (Id, V);
3121    end Set_Corresponding_Discriminant;
3122
3123    procedure Set_Corresponding_Equality (Id : E; V : E) is
3124    begin
3125       pragma Assert
3126         (Ekind (Id) = E_Function
3127           and then not Comes_From_Source (Id)
3128           and then Chars (Id) = Name_Op_Ne);
3129       Set_Node13 (Id, V);
3130    end Set_Corresponding_Equality;
3131
3132    procedure Set_Corresponding_Record_Type (Id : E; V : E) is
3133    begin
3134       pragma Assert (Is_Concurrent_Type (Id));
3135       Set_Node18 (Id, V);
3136    end Set_Corresponding_Record_Type;
3137
3138    procedure Set_Corresponding_Remote_Type (Id : E; V : E) is
3139    begin
3140       Set_Node22 (Id, V);
3141    end Set_Corresponding_Remote_Type;
3142
3143    procedure Set_Current_Use_Clause (Id : E; V : E) is
3144    begin
3145       pragma Assert (Ekind (Id) = E_Package or else Is_Type (Id));
3146       Set_Node27 (Id, V);
3147    end Set_Current_Use_Clause;
3148
3149    procedure Set_Current_Value (Id : E; V : N) is
3150    begin
3151       pragma Assert (Ekind (Id) in Object_Kind or else Ekind (Id) = E_Void);
3152       Set_Node9 (Id, V);
3153    end Set_Current_Value;
3154
3155    procedure Set_CR_Discriminant (Id : E; V : E) is
3156    begin
3157       Set_Node23 (Id, V);
3158    end Set_CR_Discriminant;
3159
3160    procedure Set_Debug_Info_Off (Id : E; V : B := True) is
3161    begin
3162       Set_Flag166 (Id, V);
3163    end Set_Debug_Info_Off;
3164
3165    procedure Set_Debug_Renaming_Link (Id : E; V : E) is
3166    begin
3167       Set_Node25 (Id, V);
3168    end Set_Debug_Renaming_Link;
3169
3170    procedure Set_Default_Expr_Function (Id : E; V : E) is
3171    begin
3172       pragma Assert (Is_Formal (Id));
3173       Set_Node21 (Id, V);
3174    end Set_Default_Expr_Function;
3175
3176    procedure Set_Default_Expressions_Processed (Id : E; V : B := True) is
3177    begin
3178       Set_Flag108 (Id, V);
3179    end Set_Default_Expressions_Processed;
3180
3181    procedure Set_Default_Value (Id : E; V : N) is
3182    begin
3183       pragma Assert (Is_Formal (Id));
3184       Set_Node20 (Id, V);
3185    end Set_Default_Value;
3186
3187    procedure Set_Delay_Cleanups (Id : E; V : B := True) is
3188    begin
3189       pragma Assert
3190         (Is_Subprogram (Id)
3191            or else Is_Task_Type (Id)
3192            or else Ekind (Id) = E_Block);
3193       Set_Flag114 (Id, V);
3194    end Set_Delay_Cleanups;
3195
3196    procedure Set_Delay_Subprogram_Descriptors (Id : E; V : B := True) is
3197    begin
3198       pragma Assert
3199         (Is_Subprogram (Id)
3200            or else Ekind (Id) = E_Package
3201            or else Ekind (Id) = E_Package_Body);
3202       Set_Flag50 (Id, V);
3203    end Set_Delay_Subprogram_Descriptors;
3204
3205    procedure Set_Delta_Value (Id : E; V : R) is
3206    begin
3207       pragma Assert (Is_Fixed_Point_Type (Id));
3208       Set_Ureal18 (Id, V);
3209    end Set_Delta_Value;
3210
3211    procedure Set_Dependent_Instances (Id : E; V : L) is
3212    begin
3213       pragma Assert (Is_Generic_Instance (Id));
3214       Set_Elist8 (Id, V);
3215    end Set_Dependent_Instances;
3216
3217    procedure Set_Depends_On_Private (Id : E; V : B := True) is
3218    begin
3219       pragma Assert (Nkind (Id) in N_Entity);
3220       Set_Flag14 (Id, V);
3221    end Set_Depends_On_Private;
3222
3223    procedure Set_Digits_Value (Id : E; V : U) is
3224    begin
3225       pragma Assert
3226         (Is_Floating_Point_Type (Id)
3227           or else Is_Decimal_Fixed_Point_Type (Id));
3228       Set_Uint17 (Id, V);
3229    end Set_Digits_Value;
3230
3231    procedure Set_Directly_Designated_Type (Id : E; V : E) is
3232    begin
3233       Set_Node20 (Id, V);
3234    end Set_Directly_Designated_Type;
3235
3236    procedure Set_Discard_Names (Id : E; V : B := True) is
3237    begin
3238       Set_Flag88 (Id, V);
3239    end Set_Discard_Names;
3240
3241    procedure Set_Discriminal (Id : E; V : E) is
3242    begin
3243       pragma Assert (Ekind (Id) = E_Discriminant);
3244       Set_Node17 (Id, V);
3245    end Set_Discriminal;
3246
3247    procedure Set_Discriminal_Link (Id : E; V : E) is
3248    begin
3249       Set_Node10 (Id, V);
3250    end Set_Discriminal_Link;
3251
3252    procedure Set_Discriminant_Checking_Func (Id  : E; V : E) is
3253    begin
3254       pragma Assert (Ekind (Id) = E_Component);
3255       Set_Node20 (Id, V);
3256    end Set_Discriminant_Checking_Func;
3257
3258    procedure Set_Discriminant_Constraint (Id : E; V : L) is
3259    begin
3260       pragma Assert (Nkind (Id) in N_Entity);
3261       Set_Elist21 (Id, V);
3262    end Set_Discriminant_Constraint;
3263
3264    procedure Set_Discriminant_Default_Value (Id : E; V : N) is
3265    begin
3266       Set_Node20 (Id, V);
3267    end Set_Discriminant_Default_Value;
3268
3269    procedure Set_Discriminant_Number (Id : E; V : U) is
3270    begin
3271       Set_Uint15 (Id, V);
3272    end Set_Discriminant_Number;
3273
3274    procedure Set_Dispatch_Table_Wrapper (Id : E; V : E) is
3275    begin
3276       pragma Assert (Is_Tagged_Type (Id) and then Id = Base_Type (Id));
3277       Set_Node26 (Id, V);
3278    end Set_Dispatch_Table_Wrapper;
3279
3280    procedure Set_DT_Entry_Count (Id : E; V : U) is
3281    begin
3282       pragma Assert (Ekind (Id) = E_Component);
3283       Set_Uint15 (Id, V);
3284    end Set_DT_Entry_Count;
3285
3286    procedure Set_DT_Offset_To_Top_Func (Id : E; V : E) is
3287    begin
3288       pragma Assert (Ekind (Id) = E_Component and then Is_Tag (Id));
3289       Set_Node25 (Id, V);
3290    end Set_DT_Offset_To_Top_Func;
3291
3292    procedure Set_DT_Position (Id : E; V : U) is
3293    begin
3294       pragma Assert (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
3295       Set_Uint15 (Id, V);
3296    end Set_DT_Position;
3297
3298    procedure Set_DTC_Entity (Id : E; V : E) is
3299    begin
3300       pragma Assert
3301         (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
3302       Set_Node16 (Id, V);
3303    end Set_DTC_Entity;
3304
3305    procedure Set_Elaborate_Body_Desirable (Id : E; V : B := True) is
3306    begin
3307       pragma Assert (Ekind (Id) = E_Package);
3308       Set_Flag210 (Id, V);
3309    end Set_Elaborate_Body_Desirable;
3310
3311    procedure Set_Elaboration_Entity (Id : E; V : E) is
3312    begin
3313       pragma Assert
3314         (Is_Subprogram (Id)
3315            or else
3316          Ekind (Id) = E_Package
3317            or else
3318          Is_Generic_Unit (Id));
3319       Set_Node13 (Id, V);
3320    end Set_Elaboration_Entity;
3321
3322    procedure Set_Elaboration_Entity_Required (Id : E; V : B := True) is
3323    begin
3324       pragma Assert
3325         (Is_Subprogram (Id)
3326            or else
3327          Ekind (Id) = E_Package
3328            or else
3329          Is_Generic_Unit (Id));
3330       Set_Flag174 (Id, V);
3331    end Set_Elaboration_Entity_Required;
3332
3333    procedure Set_Enclosing_Scope (Id : E; V : E) is
3334    begin
3335       Set_Node18 (Id, V);
3336    end Set_Enclosing_Scope;
3337
3338    procedure Set_Entry_Accepted (Id : E; V : B := True) is
3339    begin
3340       pragma Assert (Is_Entry (Id));
3341       Set_Flag152 (Id, V);
3342    end Set_Entry_Accepted;
3343
3344    procedure Set_Entry_Bodies_Array (Id : E; V : E) is
3345    begin
3346       Set_Node15 (Id, V);
3347    end Set_Entry_Bodies_Array;
3348
3349    procedure Set_Entry_Cancel_Parameter (Id : E; V : E) is
3350    begin
3351       Set_Node23 (Id, V);
3352    end Set_Entry_Cancel_Parameter;
3353
3354    procedure Set_Entry_Component (Id : E; V : E) is
3355    begin
3356       Set_Node11 (Id, V);
3357    end Set_Entry_Component;
3358
3359    procedure Set_Entry_Formal (Id : E; V : E) is
3360    begin
3361       Set_Node16 (Id, V);
3362    end Set_Entry_Formal;
3363
3364    procedure Set_Entry_Index_Constant (Id : E; V : E) is
3365    begin
3366       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
3367       Set_Node18 (Id, V);
3368    end Set_Entry_Index_Constant;
3369
3370    procedure Set_Entry_Parameters_Type (Id : E; V : E) is
3371    begin
3372       Set_Node15 (Id, V);
3373    end Set_Entry_Parameters_Type;
3374
3375    procedure Set_Enum_Pos_To_Rep (Id : E; V : E) is
3376    begin
3377       pragma Assert (Ekind (Id) = E_Enumeration_Type);
3378       Set_Node23 (Id, V);
3379    end Set_Enum_Pos_To_Rep;
3380
3381    procedure Set_Enumeration_Pos (Id : E; V : U) is
3382    begin
3383       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
3384       Set_Uint11 (Id, V);
3385    end Set_Enumeration_Pos;
3386
3387    procedure Set_Enumeration_Rep (Id : E; V : U) is
3388    begin
3389       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
3390       Set_Uint12 (Id, V);
3391    end Set_Enumeration_Rep;
3392
3393    procedure Set_Enumeration_Rep_Expr (Id : E; V : N) is
3394    begin
3395       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
3396       Set_Node22 (Id, V);
3397    end Set_Enumeration_Rep_Expr;
3398
3399    procedure Set_Equivalent_Type (Id : E; V : E) is
3400    begin
3401       pragma Assert
3402         (Ekind (Id) = E_Class_Wide_Type                            or else
3403          Ekind (Id) = E_Class_Wide_Subtype                         or else
3404          Ekind (Id) = E_Access_Protected_Subprogram_Type           or else
3405          Ekind (Id) = E_Anonymous_Access_Protected_Subprogram_Type or else
3406          Ekind (Id) = E_Access_Subprogram_Type                     or else
3407          Ekind (Id) = E_Exception_Type);
3408       Set_Node18 (Id, V);
3409    end Set_Equivalent_Type;
3410
3411    procedure Set_Esize (Id : E; V : U) is
3412    begin
3413       Set_Uint12 (Id, V);
3414    end Set_Esize;
3415
3416    procedure Set_Exception_Code (Id : E; V : U) is
3417    begin
3418       pragma Assert (Ekind (Id) = E_Exception);
3419       Set_Uint22 (Id, V);
3420    end Set_Exception_Code;
3421
3422    procedure Set_Extra_Accessibility (Id : E; V : E) is
3423    begin
3424       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
3425       Set_Node13 (Id, V);
3426    end Set_Extra_Accessibility;
3427
3428    procedure Set_Extra_Constrained (Id : E; V : E) is
3429    begin
3430       pragma Assert (Is_Formal (Id) or else Ekind (Id) = E_Variable);
3431       Set_Node23 (Id, V);
3432    end Set_Extra_Constrained;
3433
3434    procedure Set_Extra_Formal (Id : E; V : E) is
3435    begin
3436       Set_Node15 (Id, V);
3437    end Set_Extra_Formal;
3438
3439    procedure Set_Extra_Formals (Id : E; V : E) is
3440    begin
3441       pragma Assert
3442         (Is_Overloadable (Id)
3443           or else Ekind (Id) = E_Entry_Family
3444           or else Ekind (Id) = E_Subprogram_Body
3445           or else Ekind (Id) = E_Subprogram_Type);
3446       Set_Node28 (Id, V);
3447    end Set_Extra_Formals;
3448
3449    procedure Set_Can_Use_Internal_Rep (Id : E; V : B := True) is
3450    begin
3451       pragma Assert
3452         (Is_Access_Subprogram_Type (Id)
3453           and then Id = Base_Type (Id));
3454       Set_Flag229 (Id, V);
3455    end Set_Can_Use_Internal_Rep;
3456
3457    procedure Set_Finalization_Chain_Entity (Id : E; V : E) is
3458    begin
3459       Set_Node19 (Id, V);
3460    end Set_Finalization_Chain_Entity;
3461
3462    procedure Set_Finalize_Storage_Only (Id : E; V : B := True) is
3463    begin
3464       pragma Assert (Is_Type (Id) and then Id = Base_Type (Id));
3465       Set_Flag158 (Id, V);
3466    end Set_Finalize_Storage_Only;
3467
3468    procedure Set_First_Entity (Id : E; V : E) is
3469    begin
3470       Set_Node17 (Id, V);
3471    end Set_First_Entity;
3472
3473    procedure Set_First_Index (Id : E; V : N) is
3474    begin
3475       pragma Assert (Is_Array_Type (Id) or else Is_String_Type (Id));
3476       Set_Node17 (Id, V);
3477    end Set_First_Index;
3478
3479    procedure Set_First_Literal (Id : E; V : E) is
3480    begin
3481       pragma Assert (Is_Enumeration_Type (Id));
3482       Set_Node17 (Id, V);
3483    end Set_First_Literal;
3484
3485    procedure Set_First_Optional_Parameter (Id : E; V : E) is
3486    begin
3487       pragma Assert
3488         (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
3489       Set_Node14 (Id, V);
3490    end Set_First_Optional_Parameter;
3491
3492    procedure Set_First_Private_Entity (Id : E; V : E) is
3493    begin
3494       pragma Assert (Ekind (Id) = E_Package
3495                        or else Ekind (Id) = E_Generic_Package
3496                        or else Ekind (Id) in Concurrent_Kind);
3497       Set_Node16 (Id, V);
3498    end Set_First_Private_Entity;
3499
3500    procedure Set_First_Rep_Item (Id : E; V : N) is
3501    begin
3502       Set_Node6 (Id, V);
3503    end Set_First_Rep_Item;
3504
3505    procedure Set_Freeze_Node (Id : E; V : N) is
3506    begin
3507       Set_Node7 (Id, V);
3508    end Set_Freeze_Node;
3509
3510    procedure Set_From_With_Type (Id : E; V : B := True) is
3511    begin
3512       pragma Assert
3513         (Is_Type (Id)
3514          or else Ekind (Id) = E_Package);
3515       Set_Flag159 (Id, V);
3516    end Set_From_With_Type;
3517
3518    procedure Set_Full_View (Id : E; V : E) is
3519    begin
3520       pragma Assert (Is_Type (Id) or else Ekind (Id) = E_Constant);
3521       Set_Node11 (Id, V);
3522    end Set_Full_View;
3523
3524    procedure Set_Function_Returns_With_DSP (Id : E; V : B := True) is
3525    begin
3526       pragma Assert
3527         (Is_Subprogram (Id) or else Ekind (Id) = E_Subprogram_Type);
3528       Set_Flag169 (Id, V);
3529    end Set_Function_Returns_With_DSP;
3530
3531    procedure Set_Generic_Homonym (Id : E; V : E) is
3532    begin
3533       Set_Node11 (Id, V);
3534    end Set_Generic_Homonym;
3535
3536    procedure Set_Generic_Renamings (Id : E; V : L) is
3537    begin
3538       Set_Elist23 (Id, V);
3539    end Set_Generic_Renamings;
3540
3541    procedure Set_Handler_Records (Id : E; V : S) is
3542    begin
3543       Set_List10 (Id, V);
3544    end Set_Handler_Records;
3545
3546    procedure Set_Has_Aliased_Components (Id : E; V : B := True) is
3547    begin
3548       pragma Assert (Id = Base_Type (Id));
3549       Set_Flag135 (Id, V);
3550    end Set_Has_Aliased_Components;
3551
3552    procedure Set_Has_Alignment_Clause (Id : E; V : B := True) is
3553    begin
3554       Set_Flag46 (Id, V);
3555    end Set_Has_Alignment_Clause;
3556
3557    procedure Set_Has_All_Calls_Remote (Id : E; V : B := True) is
3558    begin
3559       Set_Flag79 (Id, V);
3560    end Set_Has_All_Calls_Remote;
3561
3562    procedure Set_Has_Anon_Block_Suffix (Id : E; V : B := True) is
3563    begin
3564       Set_Flag201 (Id, V);
3565    end Set_Has_Anon_Block_Suffix;
3566
3567    procedure Set_Has_Atomic_Components (Id : E; V : B := True) is
3568    begin
3569       pragma Assert (not Is_Type (Id) or else Id = Base_Type (Id));
3570       Set_Flag86 (Id, V);
3571    end Set_Has_Atomic_Components;
3572
3573    procedure Set_Has_Biased_Representation (Id : E; V : B := True) is
3574    begin
3575       pragma Assert
3576         ((V = False) or else (Is_Discrete_Type (Id) or else Is_Object (Id)));
3577       Set_Flag139 (Id, V);
3578    end Set_Has_Biased_Representation;
3579
3580    procedure Set_Has_Completion (Id : E; V : B := True) is
3581    begin
3582       Set_Flag26 (Id, V);
3583    end Set_Has_Completion;
3584
3585    procedure Set_Has_Completion_In_Body (Id : E; V : B := True) is
3586    begin
3587       pragma Assert (Is_Type (Id));
3588       Set_Flag71 (Id, V);
3589    end Set_Has_Completion_In_Body;
3590
3591    procedure Set_Has_Complex_Representation (Id : E; V : B := True) is
3592    begin
3593       pragma Assert (Ekind (Id) = E_Record_Type);
3594       Set_Flag140 (Id, V);
3595    end Set_Has_Complex_Representation;
3596
3597    procedure Set_Has_Component_Size_Clause (Id : E; V : B := True) is
3598    begin
3599       pragma Assert (Ekind (Id) = E_Array_Type);
3600       Set_Flag68 (Id, V);
3601    end Set_Has_Component_Size_Clause;
3602
3603    procedure Set_Has_Constrained_Partial_View (Id : E; V : B := True) is
3604    begin
3605       pragma Assert (Is_Type (Id));
3606       Set_Flag187 (Id, V);
3607    end Set_Has_Constrained_Partial_View;
3608
3609    procedure Set_Has_Contiguous_Rep (Id : E; V : B := True) is
3610    begin
3611       Set_Flag181 (Id, V);
3612    end Set_Has_Contiguous_Rep;
3613
3614    procedure Set_Has_Controlled_Component (Id : E; V : B := True) is
3615    begin
3616       pragma Assert (Id = Base_Type (Id));
3617       Set_Flag43 (Id, V);
3618    end Set_Has_Controlled_Component;
3619
3620    procedure Set_Has_Controlling_Result (Id : E; V : B := True) is
3621    begin
3622       Set_Flag98 (Id, V);
3623    end Set_Has_Controlling_Result;
3624
3625    procedure Set_Has_Convention_Pragma (Id : E; V : B := True) is
3626    begin
3627       Set_Flag119 (Id, V);
3628    end Set_Has_Convention_Pragma;
3629
3630    procedure Set_Has_Delayed_Freeze (Id : E; V : B := True) is
3631    begin
3632       pragma Assert (Nkind (Id) in N_Entity);
3633       Set_Flag18 (Id, V);
3634    end Set_Has_Delayed_Freeze;
3635
3636    procedure Set_Has_Discriminants (Id : E; V : B := True) is
3637    begin
3638       pragma Assert (Nkind (Id) in N_Entity);
3639       Set_Flag5 (Id, V);
3640    end Set_Has_Discriminants;
3641
3642    procedure Set_Has_Dispatch_Table (Id : E; V : B := True) is
3643    begin
3644       pragma Assert (Ekind (Id) = E_Record_Type
3645         and then Is_Tagged_Type (Id));
3646       Set_Flag220 (Id, V);
3647    end Set_Has_Dispatch_Table;
3648
3649    procedure Set_Has_Enumeration_Rep_Clause (Id : E; V : B := True) is
3650    begin
3651       pragma Assert (Is_Enumeration_Type (Id));
3652       Set_Flag66 (Id, V);
3653    end Set_Has_Enumeration_Rep_Clause;
3654
3655    procedure Set_Has_Exit (Id : E; V : B := True) is
3656    begin
3657       Set_Flag47 (Id, V);
3658    end Set_Has_Exit;
3659
3660    procedure Set_Has_External_Tag_Rep_Clause (Id : E; V : B := True) is
3661    begin
3662       pragma Assert (Is_Tagged_Type (Id));
3663       Set_Flag110 (Id, V);
3664    end Set_Has_External_Tag_Rep_Clause;
3665
3666    procedure Set_Has_Forward_Instantiation (Id : E; V : B := True) is
3667    begin
3668       Set_Flag175 (Id, V);
3669    end Set_Has_Forward_Instantiation;
3670
3671    procedure Set_Has_Fully_Qualified_Name (Id : E; V : B := True) is
3672    begin
3673       Set_Flag173 (Id, V);
3674    end Set_Has_Fully_Qualified_Name;
3675
3676    procedure Set_Has_Gigi_Rep_Item (Id : E; V : B := True) is
3677    begin
3678       Set_Flag82 (Id, V);
3679    end Set_Has_Gigi_Rep_Item;
3680
3681    procedure Set_Has_Homonym (Id : E; V : B := True) is
3682    begin
3683       Set_Flag56 (Id, V);
3684    end Set_Has_Homonym;
3685
3686    procedure Set_Has_Initial_Value (Id : E; V : B := True) is
3687    begin
3688       pragma Assert
3689         (Ekind (Id) = E_Variable or else Ekind (Id) = E_Out_Parameter);
3690       Set_Flag219 (Id, V);
3691    end Set_Has_Initial_Value;
3692
3693    procedure Set_Has_Machine_Radix_Clause (Id : E; V : B := True) is
3694    begin
3695       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
3696       Set_Flag83 (Id, V);
3697    end Set_Has_Machine_Radix_Clause;
3698
3699    procedure Set_Has_Master_Entity (Id : E; V : B := True) is
3700    begin
3701       Set_Flag21 (Id, V);
3702    end Set_Has_Master_Entity;
3703
3704    procedure Set_Has_Missing_Return (Id : E; V : B := True) is
3705    begin
3706       pragma Assert
3707         (Ekind (Id) = E_Function or else Ekind (Id) = E_Generic_Function);
3708       Set_Flag142 (Id, V);
3709    end Set_Has_Missing_Return;
3710
3711    procedure Set_Has_Nested_Block_With_Handler (Id : E; V : B := True) is
3712    begin
3713       Set_Flag101 (Id, V);
3714    end Set_Has_Nested_Block_With_Handler;
3715
3716    procedure Set_Has_Up_Level_Access (Id : E; V : B := True) is
3717    begin
3718       pragma Assert
3719         (Ekind (Id) = E_Variable
3720           or else Ekind (Id) = E_Constant
3721           or else Ekind (Id) = E_Loop_Parameter);
3722       Set_Flag215 (Id, V);
3723    end Set_Has_Up_Level_Access;
3724
3725    procedure Set_Has_Non_Standard_Rep (Id : E; V : B := True) is
3726    begin
3727       pragma Assert (Id = Base_Type (Id));
3728       Set_Flag75 (Id, V);
3729    end Set_Has_Non_Standard_Rep;
3730
3731    procedure Set_Has_Object_Size_Clause (Id : E; V : B := True) is
3732    begin
3733       pragma Assert (Is_Type (Id));
3734       Set_Flag172 (Id, V);
3735    end Set_Has_Object_Size_Clause;
3736
3737    procedure Set_Has_Per_Object_Constraint (Id : E; V : B := True) is
3738    begin
3739       Set_Flag154 (Id, V);
3740    end Set_Has_Per_Object_Constraint;
3741
3742    procedure Set_Has_Persistent_BSS (Id : E; V : B := True) is
3743    begin
3744       Set_Flag188 (Id, V);
3745    end Set_Has_Persistent_BSS;
3746
3747    procedure Set_Has_Postconditions (Id : E; V : B := True) is
3748    begin
3749       pragma Assert (Is_Subprogram (Id));
3750       Set_Flag240 (Id, V);
3751    end Set_Has_Postconditions;
3752
3753    procedure Set_Has_Pragma_Controlled (Id : E; V : B := True) is
3754    begin
3755       pragma Assert (Is_Access_Type (Id));
3756       Set_Flag27 (Base_Type (Id), V);
3757    end Set_Has_Pragma_Controlled;
3758
3759    procedure Set_Has_Pragma_Elaborate_Body (Id : E; V : B := True) is
3760    begin
3761       Set_Flag150 (Id, V);
3762    end Set_Has_Pragma_Elaborate_Body;
3763
3764    procedure Set_Has_Pragma_Inline (Id : E; V : B := True) is
3765    begin
3766       Set_Flag157 (Id, V);
3767    end Set_Has_Pragma_Inline;
3768
3769    procedure Set_Has_Pragma_Inline_Always (Id : E; V : B := True) is
3770    begin
3771       Set_Flag230 (Id, V);
3772    end Set_Has_Pragma_Inline_Always;
3773
3774    procedure Set_Has_Pragma_Pack (Id : E; V : B := True) is
3775    begin
3776       pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id));
3777       pragma Assert (Id = Base_Type (Id));
3778       Set_Flag121 (Id, V);
3779    end Set_Has_Pragma_Pack;
3780
3781    procedure Set_Has_Pragma_Preelab_Init (Id : E; V : B := True) is
3782    begin
3783       Set_Flag221 (Id, V);
3784    end Set_Has_Pragma_Preelab_Init;
3785
3786    procedure Set_Has_Pragma_Pure (Id : E; V : B := True) is
3787    begin
3788       Set_Flag203 (Id, V);
3789    end Set_Has_Pragma_Pure;
3790
3791    procedure Set_Has_Pragma_Pure_Function (Id : E; V : B := True) is
3792    begin
3793       Set_Flag179 (Id, V);
3794    end Set_Has_Pragma_Pure_Function;
3795
3796    procedure Set_Has_Pragma_Unmodified (Id : E; V : B := True) is
3797    begin
3798       Set_Flag233 (Id, V);
3799    end Set_Has_Pragma_Unmodified;
3800
3801    procedure Set_Has_Pragma_Unreferenced (Id : E; V : B := True) is
3802    begin
3803       Set_Flag180 (Id, V);
3804    end Set_Has_Pragma_Unreferenced;
3805
3806    procedure Set_Has_Pragma_Unreferenced_Objects (Id : E; V : B := True) is
3807    begin
3808       pragma Assert (Is_Type (Id));
3809       Set_Flag212 (Id, V);
3810    end Set_Has_Pragma_Unreferenced_Objects;
3811
3812    procedure Set_Has_Primitive_Operations (Id : E; V : B := True) is
3813    begin
3814       pragma Assert (Id = Base_Type (Id));
3815       Set_Flag120 (Id, V);
3816    end Set_Has_Primitive_Operations;
3817
3818    procedure Set_Has_Private_Declaration (Id : E; V : B := True) is
3819    begin
3820       Set_Flag155 (Id, V);
3821    end Set_Has_Private_Declaration;
3822
3823    procedure Set_Has_Qualified_Name (Id : E; V : B := True) is
3824    begin
3825       Set_Flag161 (Id, V);
3826    end Set_Has_Qualified_Name;
3827
3828    procedure Set_Has_RACW (Id : E; V : B := True) is
3829    begin
3830       pragma Assert (Ekind (Id) = E_Package);
3831       Set_Flag214 (Id, V);
3832    end Set_Has_RACW;
3833
3834    procedure Set_Has_Record_Rep_Clause (Id : E; V : B := True) is
3835    begin
3836       pragma Assert (Id = Base_Type (Id));
3837       Set_Flag65 (Id, V);
3838    end Set_Has_Record_Rep_Clause;
3839
3840    procedure Set_Has_Recursive_Call (Id : E; V : B := True) is
3841    begin
3842       pragma Assert (Is_Subprogram (Id));
3843       Set_Flag143 (Id, V);
3844    end Set_Has_Recursive_Call;
3845
3846    procedure Set_Has_Size_Clause (Id : E; V : B := True) is
3847    begin
3848       Set_Flag29 (Id, V);
3849    end Set_Has_Size_Clause;
3850
3851    procedure Set_Has_Small_Clause (Id : E; V : B := True) is
3852    begin
3853       Set_Flag67 (Id, V);
3854    end Set_Has_Small_Clause;
3855
3856    procedure Set_Has_Specified_Layout (Id : E; V : B := True) is
3857    begin
3858       pragma Assert (Id = Base_Type (Id));
3859       Set_Flag100 (Id, V);
3860    end Set_Has_Specified_Layout;
3861
3862    procedure Set_Has_Specified_Stream_Input (Id : E; V : B := True) is
3863    begin
3864       pragma Assert (Is_Type (Id));
3865       Set_Flag190 (Id, V);
3866    end Set_Has_Specified_Stream_Input;
3867
3868    procedure Set_Has_Specified_Stream_Output (Id : E; V : B := True) is
3869    begin
3870       pragma Assert (Is_Type (Id));
3871       Set_Flag191 (Id, V);
3872    end Set_Has_Specified_Stream_Output;
3873
3874    procedure Set_Has_Specified_Stream_Read (Id : E; V : B := True) is
3875    begin
3876       pragma Assert (Is_Type (Id));
3877       Set_Flag192 (Id, V);
3878    end Set_Has_Specified_Stream_Read;
3879
3880    procedure Set_Has_Specified_Stream_Write (Id : E; V : B := True) is
3881    begin
3882       pragma Assert (Is_Type (Id));
3883       Set_Flag193 (Id, V);
3884    end Set_Has_Specified_Stream_Write;
3885
3886    procedure Set_Has_Static_Discriminants (Id : E; V : B := True) is
3887    begin
3888       Set_Flag211 (Id, V);
3889    end Set_Has_Static_Discriminants;
3890
3891    procedure Set_Has_Storage_Size_Clause (Id : E; V : B := True) is
3892    begin
3893       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
3894       pragma Assert (Id = Base_Type (Id));
3895       Set_Flag23 (Id, V);
3896    end Set_Has_Storage_Size_Clause;
3897
3898    procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True) is
3899    begin
3900       pragma Assert (Is_Elementary_Type (Id));
3901       Set_Flag184 (Id, V);
3902    end Set_Has_Stream_Size_Clause;
3903
3904    procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True) is
3905    begin
3906       Set_Flag93 (Id, V);
3907    end Set_Has_Subprogram_Descriptor;
3908
3909    procedure Set_Has_Task (Id : E; V : B := True) is
3910    begin
3911       pragma Assert (Id = Base_Type (Id));
3912       Set_Flag30 (Id, V);
3913    end Set_Has_Task;
3914
3915    procedure Set_Has_Thunks (Id : E; V : B := True) is
3916    begin
3917       pragma Assert (Is_Tag (Id)
3918         and then Ekind (Id) = E_Constant);
3919       Set_Flag228 (Id, V);
3920    end Set_Has_Thunks;
3921
3922    procedure Set_Has_Unchecked_Union (Id : E; V : B := True) is
3923    begin
3924       pragma Assert (Id = Base_Type (Id));
3925       Set_Flag123 (Id, V);
3926    end Set_Has_Unchecked_Union;
3927
3928    procedure Set_Has_Unknown_Discriminants (Id : E; V : B := True) is
3929    begin
3930       pragma Assert (Is_Type (Id));
3931       Set_Flag72 (Id, V);
3932    end Set_Has_Unknown_Discriminants;
3933
3934    procedure Set_Has_Volatile_Components (Id : E; V : B := True) is
3935    begin
3936       pragma Assert (not Is_Type (Id) or else Id = Base_Type (Id));
3937       Set_Flag87 (Id, V);
3938    end Set_Has_Volatile_Components;
3939
3940    procedure Set_Has_Xref_Entry (Id : E; V : B := True) is
3941    begin
3942       Set_Flag182 (Id, V);
3943    end Set_Has_Xref_Entry;
3944
3945    procedure Set_Hiding_Loop_Variable (Id : E; V : E) is
3946    begin
3947       pragma Assert (Ekind (Id) = E_Variable);
3948       Set_Node8 (Id, V);
3949    end Set_Hiding_Loop_Variable;
3950
3951    procedure Set_Homonym (Id : E; V : E) is
3952    begin
3953       pragma Assert (Id /= V);
3954       Set_Node4 (Id, V);
3955    end Set_Homonym;
3956
3957    procedure Set_Implemented_By_Entry (Id : E; V : B := True) is
3958    begin
3959       pragma Assert
3960         (Ekind (Id) = E_Function
3961            or else Ekind (Id) = E_Procedure);
3962       Set_Flag232 (Id, V);
3963    end Set_Implemented_By_Entry;
3964
3965    procedure Set_In_Package_Body (Id : E; V : B := True) is
3966    begin
3967       Set_Flag48 (Id, V);
3968    end Set_In_Package_Body;
3969
3970    procedure Set_In_Private_Part (Id : E; V : B := True) is
3971    begin
3972       Set_Flag45 (Id, V);
3973    end Set_In_Private_Part;
3974
3975    procedure Set_In_Use (Id : E; V : B := True) is
3976    begin
3977       pragma Assert (Nkind (Id) in N_Entity);
3978       Set_Flag8 (Id, V);
3979    end Set_In_Use;
3980
3981    procedure Set_Inner_Instances (Id : E; V : L) is
3982    begin
3983       Set_Elist23 (Id, V);
3984    end Set_Inner_Instances;
3985
3986    procedure Set_Interface_Name (Id : E; V : N) is
3987    begin
3988       Set_Node21 (Id, V);
3989    end Set_Interface_Name;
3990
3991    procedure Set_Is_Abstract_Subprogram (Id : E; V : B := True) is
3992    begin
3993       pragma Assert (Is_Overloadable (Id));
3994       Set_Flag19 (Id, V);
3995    end Set_Is_Abstract_Subprogram;
3996
3997    procedure Set_Is_Abstract_Type (Id : E; V : B := True) is
3998    begin
3999       pragma Assert (Is_Type (Id));
4000       Set_Flag146 (Id, V);
4001    end Set_Is_Abstract_Type;
4002
4003    procedure Set_Is_Local_Anonymous_Access (Id : E; V : B := True) is
4004    begin
4005       pragma Assert (Is_Access_Type (Id));
4006       Set_Flag194 (Id, V);
4007    end Set_Is_Local_Anonymous_Access;
4008
4009    procedure Set_Is_Access_Constant (Id : E; V : B := True) is
4010    begin
4011       pragma Assert (Is_Access_Type (Id));
4012       Set_Flag69 (Id, V);
4013    end Set_Is_Access_Constant;
4014
4015    procedure Set_Is_Ada_2005_Only (Id : E; V : B := True) is
4016    begin
4017       Set_Flag185 (Id, V);
4018    end Set_Is_Ada_2005_Only;
4019
4020    procedure Set_Is_Aliased (Id : E; V : B := True) is
4021    begin
4022       pragma Assert (Nkind (Id) in N_Entity);
4023       Set_Flag15 (Id, V);
4024    end Set_Is_Aliased;
4025
4026    procedure Set_Is_AST_Entry (Id : E; V : B := True) is
4027    begin
4028       pragma Assert (Is_Entry (Id));
4029       Set_Flag132 (Id, V);
4030    end Set_Is_AST_Entry;
4031
4032    procedure Set_Is_Asynchronous (Id : E; V : B := True) is
4033    begin
4034       pragma Assert
4035         (Ekind (Id) = E_Procedure or else Is_Type (Id));
4036       Set_Flag81 (Id, V);
4037    end Set_Is_Asynchronous;
4038
4039    procedure Set_Is_Atomic (Id : E; V : B := True) is
4040    begin
4041       Set_Flag85 (Id, V);
4042    end Set_Is_Atomic;
4043
4044    procedure Set_Is_Bit_Packed_Array (Id : E; V : B := True) is
4045    begin
4046       pragma Assert ((not V)
4047         or else (Is_Array_Type (Id) and then Id = Base_Type (Id)));
4048
4049       Set_Flag122 (Id, V);
4050    end Set_Is_Bit_Packed_Array;
4051
4052    procedure Set_Is_Called (Id : E; V : B := True) is
4053    begin
4054       pragma Assert
4055         (Ekind (Id) = E_Procedure or else Ekind (Id) = E_Function);
4056       Set_Flag102 (Id, V);
4057    end Set_Is_Called;
4058
4059    procedure Set_Is_Character_Type (Id : E; V : B := True) is
4060    begin
4061       Set_Flag63 (Id, V);
4062    end Set_Is_Character_Type;
4063
4064    procedure Set_Is_Child_Unit (Id : E; V : B := True) is
4065    begin
4066       Set_Flag73 (Id, V);
4067    end Set_Is_Child_Unit;
4068
4069    procedure Set_Is_Class_Wide_Equivalent_Type (Id : E; V : B := True) is
4070    begin
4071       Set_Flag35 (Id, V);
4072    end Set_Is_Class_Wide_Equivalent_Type;
4073
4074    procedure Set_Is_Compilation_Unit (Id : E; V : B := True) is
4075    begin
4076       Set_Flag149 (Id, V);
4077    end Set_Is_Compilation_Unit;
4078
4079    procedure Set_Is_Completely_Hidden (Id : E; V : B := True) is
4080    begin
4081       pragma Assert (Ekind (Id) = E_Discriminant);
4082       Set_Flag103 (Id, V);
4083    end Set_Is_Completely_Hidden;
4084
4085    procedure Set_Is_Concurrent_Record_Type (Id : E; V : B := True) is
4086    begin
4087       Set_Flag20 (Id, V);
4088    end Set_Is_Concurrent_Record_Type;
4089
4090    procedure Set_Is_Constr_Subt_For_U_Nominal (Id : E; V : B := True) is
4091    begin
4092       Set_Flag80 (Id, V);
4093    end Set_Is_Constr_Subt_For_U_Nominal;
4094
4095    procedure Set_Is_Constr_Subt_For_UN_Aliased (Id : E; V : B := True) is
4096    begin
4097       Set_Flag141 (Id, V);
4098    end Set_Is_Constr_Subt_For_UN_Aliased;
4099
4100    procedure Set_Is_Constrained (Id : E; V : B := True) is
4101    begin
4102       pragma Assert (Nkind (Id) in N_Entity);
4103       Set_Flag12 (Id, V);
4104    end Set_Is_Constrained;
4105
4106    procedure Set_Is_Constructor (Id : E; V : B := True) is
4107    begin
4108       Set_Flag76 (Id, V);
4109    end Set_Is_Constructor;
4110
4111    procedure Set_Is_Controlled (Id : E; V : B := True) is
4112    begin
4113       pragma Assert (Id = Base_Type (Id));
4114       Set_Flag42 (Id, V);
4115    end Set_Is_Controlled;
4116
4117    procedure Set_Is_Controlling_Formal (Id : E; V : B := True) is
4118    begin
4119       pragma Assert (Is_Formal (Id));
4120       Set_Flag97 (Id, V);
4121    end Set_Is_Controlling_Formal;
4122
4123    procedure Set_Is_CPP_Class (Id : E; V : B := True) is
4124    begin
4125       Set_Flag74 (Id, V);
4126    end Set_Is_CPP_Class;
4127
4128    procedure Set_Is_Descendent_Of_Address (Id : E; V : B := True) is
4129    begin
4130       pragma Assert (Is_Type (Id));
4131       Set_Flag223 (Id, V);
4132    end Set_Is_Descendent_Of_Address;
4133
4134    procedure Set_Is_Discrim_SO_Function (Id : E; V : B := True) is
4135    begin
4136       Set_Flag176 (Id, V);
4137    end Set_Is_Discrim_SO_Function;
4138
4139    procedure Set_Is_Dispatch_Table_Entity (Id : E; V : B := True) is
4140    begin
4141       Set_Flag234 (Id, V);
4142    end Set_Is_Dispatch_Table_Entity;
4143
4144    procedure Set_Is_Dispatching_Operation (Id : E; V : B := True) is
4145    begin
4146       pragma Assert
4147         (V = False
4148            or else
4149          Is_Overloadable (Id)
4150            or else
4151          Ekind (Id) = E_Subprogram_Type);
4152
4153       Set_Flag6 (Id, V);
4154    end Set_Is_Dispatching_Operation;
4155
4156    procedure Set_Is_Eliminated (Id : E; V : B := True) is
4157    begin
4158       Set_Flag124 (Id, V);
4159    end Set_Is_Eliminated;
4160
4161    procedure Set_Is_Entry_Formal (Id : E; V : B := True) is
4162    begin
4163       Set_Flag52 (Id, V);
4164    end Set_Is_Entry_Formal;
4165
4166    procedure Set_Is_Exported (Id : E; V : B := True) is
4167    begin
4168       Set_Flag99 (Id, V);
4169    end Set_Is_Exported;
4170
4171    procedure Set_Is_First_Subtype (Id : E; V : B := True) is
4172    begin
4173       Set_Flag70 (Id, V);
4174    end Set_Is_First_Subtype;
4175
4176    procedure Set_Is_For_Access_Subtype (Id : E; V : B := True) is
4177    begin
4178       pragma Assert
4179         (Ekind (Id) = E_Record_Subtype
4180           or else
4181          Ekind (Id) = E_Private_Subtype);
4182       Set_Flag118 (Id, V);
4183    end Set_Is_For_Access_Subtype;
4184
4185    procedure Set_Is_Formal_Subprogram (Id : E; V : B := True) is
4186    begin
4187       Set_Flag111 (Id, V);
4188    end Set_Is_Formal_Subprogram;
4189
4190    procedure Set_Is_Frozen (Id : E; V : B := True) is
4191    begin
4192       pragma Assert (Nkind (Id) in N_Entity);
4193       Set_Flag4 (Id, V);
4194    end Set_Is_Frozen;
4195
4196    procedure Set_Is_Generic_Actual_Type (Id : E; V : B := True) is
4197    begin
4198       pragma Assert (Is_Type (Id));
4199       Set_Flag94 (Id, V);
4200    end Set_Is_Generic_Actual_Type;
4201
4202    procedure Set_Is_Generic_Instance (Id : E; V : B := True) is
4203    begin
4204       Set_Flag130 (Id, V);
4205    end Set_Is_Generic_Instance;
4206
4207    procedure Set_Is_Generic_Type (Id : E; V : B := True) is
4208    begin
4209       pragma Assert (Nkind (Id) in N_Entity);
4210       Set_Flag13 (Id, V);
4211    end Set_Is_Generic_Type;
4212
4213    procedure Set_Is_Hidden (Id : E; V : B := True) is
4214    begin
4215       Set_Flag57 (Id, V);
4216    end Set_Is_Hidden;
4217
4218    procedure Set_Is_Hidden_Open_Scope (Id : E; V : B := True) is
4219    begin
4220       Set_Flag171 (Id, V);
4221    end Set_Is_Hidden_Open_Scope;
4222
4223    procedure Set_Is_Immediately_Visible (Id : E; V : B := True) is
4224    begin
4225       pragma Assert (Nkind (Id) in N_Entity);
4226       Set_Flag7 (Id, V);
4227    end Set_Is_Immediately_Visible;
4228
4229    procedure Set_Is_Imported (Id : E; V : B := True) is
4230    begin
4231       Set_Flag24 (Id, V);
4232    end Set_Is_Imported;
4233
4234    procedure Set_Is_Inlined (Id : E; V : B := True) is
4235    begin
4236       Set_Flag11 (Id, V);
4237    end Set_Is_Inlined;
4238
4239    procedure Set_Is_Interface (Id : E; V : B := True) is
4240    begin
4241       pragma Assert
4242         (Ekind (Id) = E_Record_Type
4243           or else Ekind (Id) = E_Record_Subtype
4244           or else Ekind (Id) = E_Record_Type_With_Private
4245           or else Ekind (Id) = E_Record_Subtype_With_Private
4246           or else Ekind (Id) = E_Class_Wide_Type
4247           or else Ekind (Id) = E_Class_Wide_Subtype);
4248       Set_Flag186 (Id, V);
4249    end Set_Is_Interface;
4250
4251    procedure Set_Is_Instantiated (Id : E; V : B := True) is
4252    begin
4253       Set_Flag126 (Id, V);
4254    end Set_Is_Instantiated;
4255
4256    procedure Set_Is_Internal (Id : E; V : B := True) is
4257    begin
4258       pragma Assert (Nkind (Id) in N_Entity);
4259       Set_Flag17 (Id, V);
4260    end Set_Is_Internal;
4261
4262    procedure Set_Is_Interrupt_Handler (Id : E; V : B := True) is
4263    begin
4264       pragma Assert (Nkind (Id) in N_Entity);
4265       Set_Flag89 (Id, V);
4266    end Set_Is_Interrupt_Handler;
4267
4268    procedure Set_Is_Intrinsic_Subprogram (Id : E; V : B := True) is
4269    begin
4270       Set_Flag64 (Id, V);
4271    end Set_Is_Intrinsic_Subprogram;
4272
4273    procedure Set_Is_Itype (Id : E; V : B := True) is
4274    begin
4275       Set_Flag91 (Id, V);
4276    end Set_Is_Itype;
4277
4278    procedure Set_Is_Known_Non_Null (Id : E; V : B := True) is
4279    begin
4280       Set_Flag37 (Id, V);
4281    end Set_Is_Known_Non_Null;
4282
4283    procedure Set_Is_Known_Null (Id : E; V : B := True) is
4284    begin
4285       Set_Flag204 (Id, V);
4286    end Set_Is_Known_Null;
4287
4288    procedure Set_Is_Known_Valid (Id : E; V : B := True) is
4289    begin
4290       Set_Flag170 (Id, V);
4291    end Set_Is_Known_Valid;
4292
4293    procedure Set_Is_Limited_Composite (Id : E; V : B := True) is
4294    begin
4295       pragma Assert (Is_Type (Id));
4296       Set_Flag106 (Id, V);
4297    end Set_Is_Limited_Composite;
4298
4299    procedure Set_Is_Limited_Interface (Id : E; V : B := True) is
4300    begin
4301       pragma Assert (Is_Interface (Id));
4302       Set_Flag197 (Id, V);
4303    end Set_Is_Limited_Interface;
4304
4305    procedure Set_Is_Limited_Record (Id : E; V : B := True) is
4306    begin
4307       Set_Flag25 (Id, V);
4308    end Set_Is_Limited_Record;
4309
4310    procedure Set_Is_Machine_Code_Subprogram (Id : E; V : B := True) is
4311    begin
4312       pragma Assert (Is_Subprogram (Id));
4313       Set_Flag137 (Id, V);
4314    end Set_Is_Machine_Code_Subprogram;
4315
4316    procedure Set_Is_Non_Static_Subtype (Id : E; V : B := True) is
4317    begin
4318       pragma Assert (Is_Type (Id));
4319       Set_Flag109 (Id, V);
4320    end Set_Is_Non_Static_Subtype;
4321
4322    procedure Set_Is_Null_Init_Proc (Id : E; V : B := True) is
4323    begin
4324       pragma Assert (Ekind (Id) = E_Procedure);
4325       Set_Flag178 (Id, V);
4326    end Set_Is_Null_Init_Proc;
4327
4328    procedure Set_Is_Obsolescent (Id : E; V : B := True) is
4329    begin
4330       Set_Flag153 (Id, V);
4331    end Set_Is_Obsolescent;
4332
4333    procedure Set_Is_Only_Out_Parameter (Id : E; V : B := True) is
4334    begin
4335       pragma Assert (Ekind (Id) = E_Out_Parameter);
4336       Set_Flag226 (Id, V);
4337    end Set_Is_Only_Out_Parameter;
4338
4339    procedure Set_Is_Optional_Parameter (Id : E; V : B := True) is
4340    begin
4341       pragma Assert (Is_Formal (Id));
4342       Set_Flag134 (Id, V);
4343    end Set_Is_Optional_Parameter;
4344
4345    procedure Set_Is_Overriding_Operation (Id : E; V : B := True) is
4346    begin
4347       pragma Assert (Is_Subprogram (Id));
4348       Set_Flag39 (Id, V);
4349    end Set_Is_Overriding_Operation;
4350
4351    procedure Set_Is_Package_Body_Entity (Id : E; V : B := True) is
4352    begin
4353       Set_Flag160 (Id, V);
4354    end Set_Is_Package_Body_Entity;
4355
4356    procedure Set_Is_Packed (Id : E; V : B := True) is
4357    begin
4358       pragma Assert (Id = Base_Type (Id));
4359       Set_Flag51 (Id, V);
4360    end Set_Is_Packed;
4361
4362    procedure Set_Is_Packed_Array_Type (Id : E; V : B := True) is
4363    begin
4364       Set_Flag138 (Id, V);
4365    end Set_Is_Packed_Array_Type;
4366
4367    procedure Set_Is_Potentially_Use_Visible (Id : E; V : B := True) is
4368    begin
4369       pragma Assert (Nkind (Id) in N_Entity);
4370       Set_Flag9 (Id, V);
4371    end Set_Is_Potentially_Use_Visible;
4372
4373    procedure Set_Is_Preelaborated (Id : E; V : B := True) is
4374    begin
4375       Set_Flag59 (Id, V);
4376    end Set_Is_Preelaborated;
4377
4378    procedure Set_Is_Primitive (Id : E; V : B := True) is
4379    begin
4380       pragma Assert
4381         (Is_Overloadable (Id)
4382          or else Ekind (Id) = E_Generic_Function
4383          or else Ekind (Id) = E_Generic_Procedure);
4384       Set_Flag218 (Id, V);
4385    end Set_Is_Primitive;
4386
4387    procedure Set_Is_Primitive_Wrapper (Id : E; V : B := True) is
4388    begin
4389       pragma Assert (Ekind (Id) = E_Procedure);
4390       Set_Flag195 (Id, V);
4391    end Set_Is_Primitive_Wrapper;
4392
4393    procedure Set_Is_Private_Composite (Id : E; V : B := True) is
4394    begin
4395       pragma Assert (Is_Type (Id));
4396       Set_Flag107 (Id, V);
4397    end Set_Is_Private_Composite;
4398
4399    procedure Set_Is_Private_Descendant (Id : E; V : B := True) is
4400    begin
4401       Set_Flag53 (Id, V);
4402    end Set_Is_Private_Descendant;
4403
4404    procedure Set_Is_Protected_Interface (Id : E; V : B := True) is
4405    begin
4406       pragma Assert (Is_Interface (Id));
4407       Set_Flag198 (Id, V);
4408    end Set_Is_Protected_Interface;
4409
4410    procedure Set_Is_Public (Id : E; V : B := True) is
4411    begin
4412       pragma Assert (Nkind (Id) in N_Entity);
4413       Set_Flag10 (Id, V);
4414    end Set_Is_Public;
4415
4416    procedure Set_Is_Pure (Id : E; V : B := True) is
4417    begin
4418       Set_Flag44 (Id, V);
4419    end Set_Is_Pure;
4420
4421    procedure Set_Is_Pure_Unit_Access_Type (Id : E; V : B := True) is
4422    begin
4423       pragma Assert (Is_Access_Type (Id));
4424       Set_Flag189 (Id, V);
4425    end Set_Is_Pure_Unit_Access_Type;
4426
4427    procedure Set_Is_Raised (Id : E; V : B := True) is
4428    begin
4429       pragma Assert (Ekind (Id) = E_Exception);
4430       Set_Flag224 (Id, V);
4431    end Set_Is_Raised;
4432
4433    procedure Set_Is_Remote_Call_Interface (Id : E; V : B := True) is
4434    begin
4435       Set_Flag62 (Id, V);
4436    end Set_Is_Remote_Call_Interface;
4437
4438    procedure Set_Is_Remote_Types (Id : E; V : B := True) is
4439    begin
4440       Set_Flag61 (Id, V);
4441    end Set_Is_Remote_Types;
4442
4443    procedure Set_Is_Renaming_Of_Object (Id : E; V : B := True) is
4444    begin
4445       Set_Flag112 (Id, V);
4446    end Set_Is_Renaming_Of_Object;
4447
4448    procedure Set_Is_Return_Object (Id : E; V : B := True) is
4449    begin
4450       Set_Flag209 (Id, V);
4451    end Set_Is_Return_Object;
4452
4453    procedure Set_Is_Shared_Passive (Id : E; V : B := True) is
4454    begin
4455       Set_Flag60 (Id, V);
4456    end Set_Is_Shared_Passive;
4457
4458    procedure Set_Is_Statically_Allocated (Id : E; V : B := True) is
4459    begin
4460       pragma Assert
4461         (Ekind (Id) = E_Exception
4462           or else Ekind (Id) = E_Variable
4463           or else Ekind (Id) = E_Constant
4464           or else Is_Type (Id)
4465           or else Ekind (Id) = E_Void);
4466       Set_Flag28 (Id, V);
4467    end Set_Is_Statically_Allocated;
4468
4469    procedure Set_Is_Synchronized_Interface (Id : E; V : B := True) is
4470    begin
4471       pragma Assert (Is_Interface (Id));
4472       Set_Flag199 (Id, V);
4473    end Set_Is_Synchronized_Interface;
4474
4475    procedure Set_Is_Tag (Id : E; V : B := True) is
4476    begin
4477       pragma Assert
4478         (Ekind (Id) = E_Component
4479           or else Ekind (Id) = E_Constant);
4480       Set_Flag78 (Id, V);
4481    end Set_Is_Tag;
4482
4483    procedure Set_Is_Tagged_Type (Id : E; V : B := True) is
4484    begin
4485       Set_Flag55 (Id, V);
4486    end Set_Is_Tagged_Type;
4487
4488    procedure Set_Is_Task_Interface (Id : E; V : B := True) is
4489    begin
4490       pragma Assert (Is_Interface (Id));
4491       Set_Flag200 (Id, V);
4492    end Set_Is_Task_Interface;
4493
4494    procedure Set_Is_Thunk (Id : E; V : B := True) is
4495    begin
4496       Set_Flag225 (Id, V);
4497    end Set_Is_Thunk;
4498
4499    procedure Set_Is_Trivial_Subprogram (Id : E; V : B := True) is
4500    begin
4501       Set_Flag235 (Id, V);
4502    end Set_Is_Trivial_Subprogram;
4503
4504    procedure Set_Is_True_Constant (Id : E; V : B := True) is
4505    begin
4506       Set_Flag163 (Id, V);
4507    end Set_Is_True_Constant;
4508
4509    procedure Set_Is_Unchecked_Union (Id : E; V : B := True) is
4510    begin
4511       pragma Assert (Id = Base_Type (Id));
4512       Set_Flag117 (Id, V);
4513    end Set_Is_Unchecked_Union;
4514
4515    procedure Set_Is_Unsigned_Type (Id : E; V : B := True) is
4516    begin
4517       pragma Assert (Is_Discrete_Or_Fixed_Point_Type (Id));
4518       Set_Flag144 (Id, V);
4519    end Set_Is_Unsigned_Type;
4520
4521    procedure Set_Is_Valued_Procedure (Id : E; V : B := True) is
4522    begin
4523       pragma Assert (Ekind (Id) = E_Procedure);
4524       Set_Flag127 (Id, V);
4525    end Set_Is_Valued_Procedure;
4526
4527    procedure Set_Is_Visible_Child_Unit (Id : E; V : B := True) is
4528    begin
4529       pragma Assert (Is_Child_Unit (Id));
4530       Set_Flag116 (Id, V);
4531    end Set_Is_Visible_Child_Unit;
4532
4533    procedure Set_Is_Visible_Formal (Id : E; V : B := True) is
4534    begin
4535       Set_Flag206 (Id, V);
4536    end Set_Is_Visible_Formal;
4537
4538    procedure Set_Is_VMS_Exception (Id : E; V : B := True) is
4539    begin
4540       pragma Assert (Ekind (Id) = E_Exception);
4541       Set_Flag133 (Id, V);
4542    end Set_Is_VMS_Exception;
4543
4544    procedure Set_Is_Volatile (Id : E; V : B := True) is
4545    begin
4546       pragma Assert (Nkind (Id) in N_Entity);
4547       Set_Flag16 (Id, V);
4548    end Set_Is_Volatile;
4549
4550    procedure Set_Itype_Printed (Id : E; V : B := True) is
4551    begin
4552       pragma Assert (Is_Itype (Id));
4553       Set_Flag202 (Id, V);
4554    end Set_Itype_Printed;
4555
4556    procedure Set_Kill_Elaboration_Checks (Id : E; V : B := True) is
4557    begin
4558       Set_Flag32 (Id, V);
4559    end Set_Kill_Elaboration_Checks;
4560
4561    procedure Set_Kill_Range_Checks (Id : E; V : B := True) is
4562    begin
4563       Set_Flag33 (Id, V);
4564    end Set_Kill_Range_Checks;
4565
4566    procedure Set_Kill_Tag_Checks (Id : E; V : B := True) is
4567    begin
4568       Set_Flag34 (Id, V);
4569    end Set_Kill_Tag_Checks;
4570
4571    procedure Set_Known_To_Have_Preelab_Init (Id : E; V : B := True) is
4572    begin
4573       pragma Assert (Is_Type (Id));
4574       Set_Flag207 (Id, V);
4575    end Set_Known_To_Have_Preelab_Init;
4576
4577    procedure Set_Last_Assignment (Id : E; V : N) is
4578    begin
4579       pragma Assert (Is_Assignable (Id));
4580       Set_Node26 (Id, V);
4581    end Set_Last_Assignment;
4582
4583    procedure Set_Last_Entity (Id : E; V : E) is
4584    begin
4585       Set_Node20 (Id, V);
4586    end Set_Last_Entity;
4587
4588    procedure Set_Limited_View (Id : E; V : E) is
4589    begin
4590       pragma Assert (Ekind (Id) = E_Package);
4591       Set_Node23 (Id, V);
4592    end Set_Limited_View;
4593
4594    procedure Set_Lit_Indexes (Id : E; V : E) is
4595    begin
4596       pragma Assert (Is_Enumeration_Type (Id) and then Root_Type (Id) = Id);
4597       Set_Node15 (Id, V);
4598    end Set_Lit_Indexes;
4599
4600    procedure Set_Lit_Strings (Id : E; V : E) is
4601    begin
4602       pragma Assert (Is_Enumeration_Type (Id) and then Root_Type (Id) = Id);
4603       Set_Node16 (Id, V);
4604    end Set_Lit_Strings;
4605
4606    procedure Set_Low_Bound_Known (Id : E; V : B := True) is
4607    begin
4608       pragma Assert (Is_Formal (Id));
4609       Set_Flag205 (Id, V);
4610    end Set_Low_Bound_Known;
4611
4612    procedure Set_Machine_Radix_10 (Id : E; V : B := True) is
4613    begin
4614       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
4615       Set_Flag84 (Id, V);
4616    end Set_Machine_Radix_10;
4617
4618    procedure Set_Master_Id (Id : E; V : E) is
4619    begin
4620       pragma Assert (Is_Access_Type (Id));
4621       Set_Node17 (Id, V);
4622    end Set_Master_Id;
4623
4624    procedure Set_Materialize_Entity (Id : E; V : B := True) is
4625    begin
4626       Set_Flag168 (Id, V);
4627    end Set_Materialize_Entity;
4628
4629    procedure Set_Mechanism (Id : E; V : M) is
4630    begin
4631       pragma Assert (Ekind (Id) = E_Function or else Is_Formal (Id));
4632       Set_Uint8 (Id, UI_From_Int (V));
4633    end Set_Mechanism;
4634
4635    procedure Set_Modulus (Id : E; V : U) is
4636    begin
4637       pragma Assert (Ekind (Id) = E_Modular_Integer_Type);
4638       Set_Uint17 (Id, V);
4639    end Set_Modulus;
4640
4641    procedure Set_Must_Be_On_Byte_Boundary (Id : E; V : B := True) is
4642    begin
4643       pragma Assert (Is_Type (Id));
4644       Set_Flag183 (Id, V);
4645    end Set_Must_Be_On_Byte_Boundary;
4646
4647    procedure Set_Must_Have_Preelab_Init (Id : E; V : B := True) is
4648    begin
4649       pragma Assert (Is_Type (Id));
4650       Set_Flag208 (Id, V);
4651    end Set_Must_Have_Preelab_Init;
4652
4653    procedure Set_Needs_Debug_Info (Id : E; V : B := True) is
4654    begin
4655       Set_Flag147 (Id, V);
4656    end Set_Needs_Debug_Info;
4657
4658    procedure Set_Needs_No_Actuals (Id : E; V : B := True) is
4659    begin
4660       pragma Assert
4661         (Is_Overloadable (Id)
4662           or else Ekind (Id) = E_Subprogram_Type
4663           or else Ekind (Id) = E_Entry_Family);
4664       Set_Flag22 (Id, V);
4665    end Set_Needs_No_Actuals;
4666
4667    procedure Set_Never_Set_In_Source (Id : E; V : B := True) is
4668    begin
4669       Set_Flag115 (Id, V);
4670    end Set_Never_Set_In_Source;
4671
4672    procedure Set_Next_Inlined_Subprogram (Id : E; V : E) is
4673    begin
4674       Set_Node12 (Id, V);
4675    end Set_Next_Inlined_Subprogram;
4676
4677    procedure Set_No_Pool_Assigned (Id : E; V : B := True) is
4678    begin
4679       pragma Assert (Is_Access_Type (Id) and then Id = Base_Type (Id));
4680       Set_Flag131 (Id, V);
4681    end Set_No_Pool_Assigned;
4682
4683    procedure Set_No_Return (Id : E; V : B := True) is
4684    begin
4685       pragma Assert
4686         (V = False
4687           or else Ekind (Id) = E_Procedure
4688           or else Ekind (Id) = E_Generic_Procedure);
4689       Set_Flag113 (Id, V);
4690    end Set_No_Return;
4691
4692    procedure Set_No_Strict_Aliasing (Id : E; V : B := True) is
4693    begin
4694       pragma Assert (Is_Access_Type (Id) and then Id = Base_Type (Id));
4695       Set_Flag136 (Id, V);
4696    end Set_No_Strict_Aliasing;
4697
4698    procedure Set_Non_Binary_Modulus (Id : E; V : B := True) is
4699    begin
4700       pragma Assert (Ekind (Id) = E_Modular_Integer_Type);
4701       Set_Flag58 (Id, V);
4702    end Set_Non_Binary_Modulus;
4703
4704    procedure Set_Non_Limited_View (Id : E; V : E) is
4705    begin
4706       pragma Assert (Ekind (Id) in Incomplete_Kind);
4707       Set_Node17 (Id, V);
4708    end Set_Non_Limited_View;
4709
4710    procedure Set_Nonzero_Is_True (Id : E; V : B := True) is
4711    begin
4712       pragma Assert
4713         (Root_Type (Id) = Standard_Boolean
4714           and then Ekind (Id) = E_Enumeration_Type);
4715       Set_Flag162 (Id, V);
4716    end Set_Nonzero_Is_True;
4717
4718    procedure Set_Normalized_First_Bit (Id : E; V : U) is
4719    begin
4720       pragma Assert
4721         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
4722       Set_Uint8 (Id, V);
4723    end Set_Normalized_First_Bit;
4724
4725    procedure Set_Normalized_Position (Id : E; V : U) is
4726    begin
4727       pragma Assert
4728         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
4729       Set_Uint14 (Id, V);
4730    end Set_Normalized_Position;
4731
4732    procedure Set_Normalized_Position_Max (Id : E; V : U) is
4733    begin
4734       pragma Assert
4735         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
4736       Set_Uint10 (Id, V);
4737    end Set_Normalized_Position_Max;
4738
4739    procedure Set_OK_To_Reorder_Components (Id : E; V : B := True) is
4740    begin
4741       pragma Assert
4742         (Is_Record_Type (Id) and then Id = Base_Type (Id));
4743       Set_Flag239 (Id, V);
4744    end Set_OK_To_Reorder_Components;
4745
4746    procedure Set_Optimize_Alignment_Space (Id : E; V : B := True) is
4747    begin
4748       pragma Assert
4749         (Is_Type (Id)
4750            or else Ekind (Id) = E_Constant
4751            or else Ekind (Id) = E_Variable);
4752       Set_Flag241 (Id, V);
4753    end Set_Optimize_Alignment_Space;
4754
4755    procedure Set_Optimize_Alignment_Time (Id : E; V : B := True) is
4756    begin
4757       pragma Assert
4758         (Is_Type (Id)
4759            or else Ekind (Id) = E_Constant
4760            or else Ekind (Id) = E_Variable);
4761       Set_Flag242 (Id, V);
4762    end Set_Optimize_Alignment_Time;
4763
4764    procedure Set_Original_Array_Type (Id : E; V : E) is
4765    begin
4766       pragma Assert (Is_Array_Type (Id) or else Is_Modular_Integer_Type (Id));
4767       Set_Node21 (Id, V);
4768    end Set_Original_Array_Type;
4769
4770    procedure Set_Original_Record_Component (Id : E; V : E) is
4771    begin
4772       pragma Assert
4773         (Ekind (Id) = E_Void
4774            or else Ekind (Id) = E_Component
4775            or else Ekind (Id) = E_Discriminant);
4776       Set_Node22 (Id, V);
4777    end Set_Original_Record_Component;
4778
4779    procedure Set_Overlays_Constant (Id : E; V : B := True) is
4780    begin
4781       Set_Flag243 (Id, V);
4782    end Set_Overlays_Constant;
4783
4784    procedure Set_Overridden_Operation (Id : E; V : E) is
4785    begin
4786       Set_Node26 (Id, V);
4787    end Set_Overridden_Operation;
4788
4789    procedure Set_Package_Instantiation (Id : E; V : N) is
4790    begin
4791       pragma Assert
4792         (Ekind (Id) = E_Void
4793            or else Ekind (Id) = E_Generic_Package
4794            or else Ekind (Id) = E_Package);
4795       Set_Node26 (Id, V);
4796    end Set_Package_Instantiation;
4797
4798    procedure Set_Packed_Array_Type (Id : E; V : E) is
4799    begin
4800       pragma Assert (Is_Array_Type (Id));
4801       Set_Node23 (Id, V);
4802    end Set_Packed_Array_Type;
4803
4804    procedure Set_Parent_Subtype (Id : E; V : E) is
4805    begin
4806       pragma Assert (Ekind (Id) = E_Record_Type);
4807       Set_Node19 (Id, V);
4808    end Set_Parent_Subtype;
4809
4810    procedure Set_Primitive_Operations (Id : E; V : L) is
4811    begin
4812       pragma Assert (Is_Tagged_Type (Id));
4813       Set_Elist15 (Id, V);
4814    end Set_Primitive_Operations;
4815
4816    procedure Set_Prival (Id : E; V : E) is
4817    begin
4818       pragma Assert (Is_Protected_Component (Id));
4819       Set_Node17 (Id, V);
4820    end Set_Prival;
4821
4822    procedure Set_Prival_Link (Id : E; V : E) is
4823    begin
4824       pragma Assert (Ekind (Id) = E_Constant
4825         or else Ekind (Id) = E_Variable);
4826       Set_Node20 (Id, V);
4827    end Set_Prival_Link;
4828
4829    procedure Set_Private_Dependents (Id : E; V : L) is
4830    begin
4831       pragma Assert (Is_Incomplete_Or_Private_Type (Id));
4832       Set_Elist18 (Id, V);
4833    end Set_Private_Dependents;
4834
4835    procedure Set_Private_View (Id : E; V : N) is
4836    begin
4837       pragma Assert (Is_Private_Type (Id));
4838       Set_Node22 (Id, V);
4839    end Set_Private_View;
4840
4841    procedure Set_Protected_Body_Subprogram (Id : E; V : E) is
4842    begin
4843       pragma Assert (Is_Subprogram (Id) or else Is_Entry (Id));
4844       Set_Node11 (Id, V);
4845    end Set_Protected_Body_Subprogram;
4846
4847    procedure Set_Protected_Formal (Id : E; V : E) is
4848    begin
4849       pragma Assert (Is_Formal (Id));
4850       Set_Node22 (Id, V);
4851    end Set_Protected_Formal;
4852
4853    procedure Set_Protection_Object (Id : E; V : E) is
4854    begin
4855       pragma Assert (Ekind (Id) = E_Entry
4856         or else Ekind (Id) = E_Entry_Family
4857         or else Ekind (Id) = E_Function
4858         or else Ekind (Id) = E_Procedure);
4859       Set_Node23 (Id, V);
4860    end Set_Protection_Object;
4861
4862    procedure Set_Reachable (Id : E; V : B := True) is
4863    begin
4864       Set_Flag49 (Id, V);
4865    end Set_Reachable;
4866
4867    procedure Set_Referenced (Id : E; V : B := True) is
4868    begin
4869       Set_Flag156 (Id, V);
4870    end Set_Referenced;
4871
4872    procedure Set_Referenced_As_LHS (Id : E; V : B := True) is
4873    begin
4874       Set_Flag36 (Id, V);
4875    end Set_Referenced_As_LHS;
4876
4877    procedure Set_Referenced_As_Out_Parameter (Id : E; V : B := True) is
4878    begin
4879       Set_Flag227 (Id, V);
4880    end Set_Referenced_As_Out_Parameter;
4881
4882    procedure Set_Referenced_Object (Id : E; V : N) is
4883    begin
4884       pragma Assert (Is_Type (Id));
4885       Set_Node10 (Id, V);
4886    end Set_Referenced_Object;
4887
4888    procedure Set_Register_Exception_Call (Id : E; V : N) is
4889    begin
4890       pragma Assert (Ekind (Id) = E_Exception);
4891       Set_Node20 (Id, V);
4892    end Set_Register_Exception_Call;
4893
4894    procedure Set_Related_Array_Object (Id : E; V : E) is
4895    begin
4896       pragma Assert (Is_Array_Type (Id));
4897       Set_Node19 (Id, V);
4898    end Set_Related_Array_Object;
4899
4900    procedure Set_Related_Instance (Id : E; V : E) is
4901    begin
4902       pragma Assert
4903         (Ekind (Id) = E_Package or else Ekind (Id) = E_Package_Body);
4904       Set_Node15 (Id, V);
4905    end Set_Related_Instance;
4906
4907    procedure Set_Related_Type (Id : E; V : E) is
4908    begin
4909       pragma Assert
4910         (Ekind (Id) = E_Component or else Ekind (Id) = E_Constant);
4911       Set_Node26 (Id, V);
4912    end Set_Related_Type;
4913
4914    procedure Set_Relative_Deadline_Variable (Id : E; V : E) is
4915    begin
4916       pragma Assert (Is_Task_Type (Id) and then Id = Base_Type (Id));
4917       Set_Node26 (Id, V);
4918    end Set_Relative_Deadline_Variable;
4919
4920    procedure Set_Renamed_Entity (Id : E; V : N) is
4921    begin
4922       Set_Node18 (Id, V);
4923    end Set_Renamed_Entity;
4924
4925    procedure Set_Renamed_In_Spec (Id : E; V : B := True) is
4926    begin
4927       pragma Assert (Ekind (Id) = E_Package);
4928       Set_Flag231 (Id, V);
4929    end Set_Renamed_In_Spec;
4930
4931    procedure Set_Renamed_Object (Id : E; V : N) is
4932    begin
4933       Set_Node18 (Id, V);
4934    end Set_Renamed_Object;
4935
4936    procedure Set_Renaming_Map (Id : E; V : U) is
4937    begin
4938       Set_Uint9 (Id, V);
4939    end Set_Renaming_Map;
4940
4941    procedure Set_Requires_Overriding (Id : E; V : B := True) is
4942    begin
4943       pragma Assert (Is_Overloadable (Id));
4944       Set_Flag213 (Id, V);
4945    end Set_Requires_Overriding;
4946
4947    procedure Set_Return_Present (Id : E; V : B := True) is
4948    begin
4949       Set_Flag54 (Id, V);
4950    end Set_Return_Present;
4951
4952    procedure Set_Return_Applies_To (Id : E; V : N) is
4953    begin
4954       Set_Node8 (Id, V);
4955    end Set_Return_Applies_To;
4956
4957    procedure Set_Returns_By_Ref (Id : E; V : B := True) is
4958    begin
4959       Set_Flag90 (Id, V);
4960    end Set_Returns_By_Ref;
4961
4962    procedure Set_Reverse_Bit_Order (Id : E; V : B := True) is
4963    begin
4964       pragma Assert
4965         (Is_Record_Type (Id) and then Id = Base_Type (Id));
4966       Set_Flag164 (Id, V);
4967    end Set_Reverse_Bit_Order;
4968
4969    procedure Set_RM_Size (Id : E; V : U) is
4970    begin
4971       pragma Assert (Is_Type (Id));
4972       Set_Uint13 (Id, V);
4973    end Set_RM_Size;
4974
4975    procedure Set_Scalar_Range (Id : E; V : N) is
4976    begin
4977       Set_Node20 (Id, V);
4978    end Set_Scalar_Range;
4979
4980    procedure Set_Scale_Value (Id : E; V : U) is
4981    begin
4982       Set_Uint15 (Id, V);
4983    end Set_Scale_Value;
4984
4985    procedure Set_Scope_Depth_Value (Id : E; V : U) is
4986    begin
4987       pragma Assert (not Is_Record_Type (Id));
4988       Set_Uint22 (Id, V);
4989    end Set_Scope_Depth_Value;
4990
4991    procedure Set_Sec_Stack_Needed_For_Return (Id : E; V : B := True) is
4992    begin
4993       Set_Flag167 (Id, V);
4994    end Set_Sec_Stack_Needed_For_Return;
4995
4996    procedure Set_Shadow_Entities (Id : E; V : S) is
4997    begin
4998       pragma Assert
4999         (Ekind (Id) = E_Package or else Ekind (Id) = E_Generic_Package);
5000       Set_List14 (Id, V);
5001    end Set_Shadow_Entities;
5002
5003    procedure Set_Shared_Var_Assign_Proc (Id : E; V : E) is
5004    begin
5005       pragma Assert (Ekind (Id) = E_Variable);
5006       Set_Node22 (Id, V);
5007    end Set_Shared_Var_Assign_Proc;
5008
5009    procedure Set_Shared_Var_Read_Proc (Id : E; V : E) is
5010    begin
5011       pragma Assert (Ekind (Id) = E_Variable);
5012       Set_Node15 (Id, V);
5013    end Set_Shared_Var_Read_Proc;
5014
5015    procedure Set_Size_Check_Code (Id : E; V : N) is
5016    begin
5017       pragma Assert (Ekind (Id) = E_Constant or else Ekind (Id) = E_Variable);
5018       Set_Node19 (Id, V);
5019    end Set_Size_Check_Code;
5020
5021    procedure Set_Size_Depends_On_Discriminant (Id : E; V : B := True) is
5022    begin
5023       Set_Flag177 (Id, V);
5024    end Set_Size_Depends_On_Discriminant;
5025
5026    procedure Set_Size_Known_At_Compile_Time (Id : E; V : B := True) is
5027    begin
5028       Set_Flag92 (Id, V);
5029    end Set_Size_Known_At_Compile_Time;
5030
5031    procedure Set_Small_Value (Id : E; V : R) is
5032    begin
5033       pragma Assert (Is_Fixed_Point_Type (Id));
5034       Set_Ureal21 (Id, V);
5035    end Set_Small_Value;
5036
5037    procedure Set_Spec_Entity (Id : E; V : E) is
5038    begin
5039       pragma Assert (Ekind (Id) = E_Package_Body or else Is_Formal (Id));
5040       Set_Node19 (Id, V);
5041    end Set_Spec_Entity;
5042
5043    procedure Set_Spec_PPC_List (Id : E; V : N) is
5044    begin
5045       pragma Assert (Is_Subprogram (Id));
5046       Set_Node24 (Id, V);
5047    end Set_Spec_PPC_List;
5048
5049    procedure Set_Storage_Size_Variable (Id : E; V : E) is
5050    begin
5051       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
5052       pragma Assert (Id = Base_Type (Id));
5053       Set_Node15 (Id, V);
5054    end Set_Storage_Size_Variable;
5055
5056    procedure Set_Static_Elaboration_Desired (Id : E; V : B) is
5057    begin
5058       pragma Assert (Ekind (Id) = E_Package);
5059       Set_Flag77 (Id, V);
5060    end Set_Static_Elaboration_Desired;
5061
5062    procedure Set_Static_Initialization (Id : E; V : N) is
5063    begin
5064       pragma Assert
5065         (Ekind (Id) = E_Procedure and then not Is_Dispatching_Operation (Id));
5066       Set_Node26 (Id, V);
5067    end Set_Static_Initialization;
5068
5069    procedure Set_Stored_Constraint (Id : E; V : L) is
5070    begin
5071       pragma Assert (Nkind (Id) in N_Entity);
5072       Set_Elist23 (Id, V);
5073    end Set_Stored_Constraint;
5074
5075    procedure Set_Strict_Alignment (Id : E; V : B := True) is
5076    begin
5077       pragma Assert (Id = Base_Type (Id));
5078       Set_Flag145 (Id, V);
5079    end Set_Strict_Alignment;
5080
5081    procedure Set_String_Literal_Length (Id : E; V : U) is
5082    begin
5083       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
5084       Set_Uint16 (Id, V);
5085    end Set_String_Literal_Length;
5086
5087    procedure Set_String_Literal_Low_Bound (Id : E; V : N) is
5088    begin
5089       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
5090       Set_Node15 (Id, V);
5091    end Set_String_Literal_Low_Bound;
5092
5093    procedure Set_Suppress_Elaboration_Warnings (Id : E; V : B := True) is
5094    begin
5095       Set_Flag148 (Id, V);
5096    end Set_Suppress_Elaboration_Warnings;
5097
5098    procedure Set_Suppress_Init_Proc (Id : E; V : B := True) is
5099    begin
5100       pragma Assert (Id = Base_Type (Id));
5101       Set_Flag105 (Id, V);
5102    end Set_Suppress_Init_Proc;
5103
5104    procedure Set_Suppress_Style_Checks (Id : E; V : B := True) is
5105    begin
5106       Set_Flag165 (Id, V);
5107    end Set_Suppress_Style_Checks;
5108
5109    procedure Set_Suppress_Value_Tracking_On_Call (Id : E; V : B := True) is
5110    begin
5111       Set_Flag217 (Id, V);
5112    end Set_Suppress_Value_Tracking_On_Call;
5113
5114    procedure Set_Task_Body_Procedure (Id : E; V : N) is
5115    begin
5116       pragma Assert (Ekind (Id) in Task_Kind);
5117       Set_Node25 (Id, V);
5118    end Set_Task_Body_Procedure;
5119
5120    procedure Set_Treat_As_Volatile (Id : E; V : B := True) is
5121    begin
5122       Set_Flag41 (Id, V);
5123    end Set_Treat_As_Volatile;
5124
5125    procedure Set_Underlying_Full_View (Id : E; V : E) is
5126    begin
5127       pragma Assert (Ekind (Id) in Private_Kind);
5128       Set_Node19 (Id, V);
5129    end Set_Underlying_Full_View;
5130
5131    procedure Set_Universal_Aliasing (Id : E; V : B := True) is
5132    begin
5133       pragma Assert (Is_Type (Id) and then Id = Base_Type (Id));
5134       Set_Flag216 (Id, V);
5135    end Set_Universal_Aliasing;
5136
5137    procedure Set_Unset_Reference (Id : E; V : N) is
5138    begin
5139       Set_Node16 (Id, V);
5140    end Set_Unset_Reference;
5141
5142    procedure Set_Uses_Sec_Stack (Id : E; V : B := True) is
5143    begin
5144       Set_Flag95 (Id, V);
5145    end Set_Uses_Sec_Stack;
5146
5147    procedure Set_Used_As_Generic_Actual (Id : E; V : B := True) is
5148    begin
5149       Set_Flag222 (Id, V);
5150    end Set_Used_As_Generic_Actual;
5151
5152    procedure Set_Vax_Float (Id : E; V : B := True) is
5153    begin
5154       pragma Assert (Id = Base_Type (Id));
5155       Set_Flag151 (Id, V);
5156    end Set_Vax_Float;
5157
5158    procedure Set_Warnings_Off (Id : E; V : B := True) is
5159    begin
5160       Set_Flag96 (Id, V);
5161    end Set_Warnings_Off;
5162
5163    procedure Set_Warnings_Off_Used (Id : E; V : B := True) is
5164    begin
5165       Set_Flag236 (Id, V);
5166    end Set_Warnings_Off_Used;
5167
5168    procedure Set_Warnings_Off_Used_Unmodified (Id : E; V : B := True) is
5169    begin
5170       Set_Flag237 (Id, V);
5171    end Set_Warnings_Off_Used_Unmodified;
5172
5173    procedure Set_Warnings_Off_Used_Unreferenced (Id : E; V : B := True) is
5174    begin
5175       Set_Flag238 (Id, V);
5176    end Set_Warnings_Off_Used_Unreferenced;
5177
5178    procedure Set_Was_Hidden (Id : E; V : B := True) is
5179    begin
5180       Set_Flag196 (Id, V);
5181    end Set_Was_Hidden;
5182
5183    procedure Set_Wrapped_Entity (Id : E; V : E) is
5184    begin
5185       pragma Assert (Ekind (Id) = E_Procedure
5186                        and then Is_Primitive_Wrapper (Id));
5187       Set_Node27 (Id, V);
5188    end Set_Wrapped_Entity;
5189
5190    -----------------------------------
5191    -- Field Initialization Routines --
5192    -----------------------------------
5193
5194    procedure Init_Alignment (Id : E) is
5195    begin
5196       Set_Uint14 (Id, Uint_0);
5197    end Init_Alignment;
5198
5199    procedure Init_Alignment (Id : E; V : Int) is
5200    begin
5201       Set_Uint14 (Id, UI_From_Int (V));
5202    end Init_Alignment;
5203
5204    procedure Init_Component_Bit_Offset (Id : E) is
5205    begin
5206       Set_Uint11 (Id, No_Uint);
5207    end Init_Component_Bit_Offset;
5208
5209    procedure Init_Component_Bit_Offset (Id : E; V : Int) is
5210    begin
5211       Set_Uint11 (Id, UI_From_Int (V));
5212    end Init_Component_Bit_Offset;
5213
5214    procedure Init_Component_Size (Id : E) is
5215    begin
5216       Set_Uint22 (Id, Uint_0);
5217    end Init_Component_Size;
5218
5219    procedure Init_Component_Size (Id : E; V : Int) is
5220    begin
5221       Set_Uint22 (Id, UI_From_Int (V));
5222    end Init_Component_Size;
5223
5224    procedure Init_Digits_Value (Id : E) is
5225    begin
5226       Set_Uint17 (Id, Uint_0);
5227    end Init_Digits_Value;
5228
5229    procedure Init_Digits_Value (Id : E; V : Int) is
5230    begin
5231       Set_Uint17 (Id, UI_From_Int (V));
5232    end Init_Digits_Value;
5233
5234    procedure Init_Esize (Id : E) is
5235    begin
5236       Set_Uint12 (Id, Uint_0);
5237    end Init_Esize;
5238
5239    procedure Init_Esize (Id : E; V : Int) is
5240    begin
5241       Set_Uint12 (Id, UI_From_Int (V));
5242    end Init_Esize;
5243
5244    procedure Init_Normalized_First_Bit (Id : E) is
5245    begin
5246       Set_Uint8 (Id, No_Uint);
5247    end Init_Normalized_First_Bit;
5248
5249    procedure Init_Normalized_First_Bit (Id : E; V : Int) is
5250    begin
5251       Set_Uint8 (Id, UI_From_Int (V));
5252    end Init_Normalized_First_Bit;
5253
5254    procedure Init_Normalized_Position (Id : E) is
5255    begin
5256       Set_Uint14 (Id, No_Uint);
5257    end Init_Normalized_Position;
5258
5259    procedure Init_Normalized_Position (Id : E; V : Int) is
5260    begin
5261       Set_Uint14 (Id, UI_From_Int (V));
5262    end Init_Normalized_Position;
5263
5264    procedure Init_Normalized_Position_Max (Id : E) is
5265    begin
5266       Set_Uint10 (Id, No_Uint);
5267    end Init_Normalized_Position_Max;
5268
5269    procedure Init_Normalized_Position_Max (Id : E; V : Int) is
5270    begin
5271       Set_Uint10 (Id, UI_From_Int (V));
5272    end Init_Normalized_Position_Max;
5273
5274    procedure Init_RM_Size (Id : E) is
5275    begin
5276       Set_Uint13 (Id, Uint_0);
5277    end Init_RM_Size;
5278
5279    procedure Init_RM_Size (Id : E; V : Int) is
5280    begin
5281       Set_Uint13 (Id, UI_From_Int (V));
5282    end Init_RM_Size;
5283
5284    -----------------------------
5285    -- Init_Component_Location --
5286    -----------------------------
5287
5288    procedure Init_Component_Location (Id : E) is
5289    begin
5290       Set_Uint8  (Id, No_Uint);  -- Normalized_First_Bit
5291       Set_Uint10 (Id, No_Uint);  -- Normalized_Position_Max
5292       Set_Uint11 (Id, No_Uint);  -- Component_Bit_Offset
5293       Set_Uint12 (Id, Uint_0);   -- Esize
5294       Set_Uint14 (Id, No_Uint);  -- Normalized_Position
5295    end Init_Component_Location;
5296
5297    ---------------
5298    -- Init_Size --
5299    ---------------
5300
5301    procedure Init_Size (Id : E; V : Int) is
5302    begin
5303       Set_Uint12 (Id, UI_From_Int (V));  -- Esize
5304       Set_Uint13 (Id, UI_From_Int (V));  -- RM_Size
5305    end Init_Size;
5306
5307    ---------------------
5308    -- Init_Size_Align --
5309    ---------------------
5310
5311    procedure Init_Size_Align (Id : E) is
5312    begin
5313       Set_Uint12 (Id, Uint_0);  -- Esize
5314       Set_Uint13 (Id, Uint_0);  -- RM_Size
5315       Set_Uint14 (Id, Uint_0);  -- Alignment
5316    end Init_Size_Align;
5317
5318    ----------------------------------------------
5319    -- Type Representation Attribute Predicates --
5320    ----------------------------------------------
5321
5322    function Known_Alignment                       (E : Entity_Id) return B is
5323    begin
5324       return Uint14 (E) /= Uint_0
5325         and then Uint14 (E) /= No_Uint;
5326    end Known_Alignment;
5327
5328    function Known_Component_Bit_Offset            (E : Entity_Id) return B is
5329    begin
5330       return Uint11 (E) /= No_Uint;
5331    end Known_Component_Bit_Offset;
5332
5333    function Known_Component_Size                  (E : Entity_Id) return B is
5334    begin
5335       return Uint22 (Base_Type (E)) /= Uint_0
5336         and then Uint22 (Base_Type (E)) /= No_Uint;
5337    end Known_Component_Size;
5338
5339    function Known_Esize                           (E : Entity_Id) return B is
5340    begin
5341       return Uint12 (E) /= Uint_0
5342         and then Uint12 (E) /= No_Uint;
5343    end Known_Esize;
5344
5345    function Known_Normalized_First_Bit            (E : Entity_Id) return B is
5346    begin
5347       return Uint8 (E) /= No_Uint;
5348    end Known_Normalized_First_Bit;
5349
5350    function Known_Normalized_Position             (E : Entity_Id) return B is
5351    begin
5352       return Uint14 (E) /= No_Uint;
5353    end Known_Normalized_Position;
5354
5355    function Known_Normalized_Position_Max         (E : Entity_Id) return B is
5356    begin
5357       return Uint10 (E) /= No_Uint;
5358    end Known_Normalized_Position_Max;
5359
5360    function Known_RM_Size                         (E : Entity_Id) return B is
5361    begin
5362       return Uint13 (E) /= No_Uint
5363         and then (Uint13 (E) /= Uint_0
5364                     or else Is_Discrete_Type (E)
5365                     or else Is_Fixed_Point_Type (E));
5366    end Known_RM_Size;
5367
5368    function Known_Static_Component_Bit_Offset     (E : Entity_Id) return B is
5369    begin
5370       return Uint11 (E) /= No_Uint
5371         and then Uint11 (E) >= Uint_0;
5372    end Known_Static_Component_Bit_Offset;
5373
5374    function Known_Static_Component_Size           (E : Entity_Id) return B is
5375    begin
5376       return Uint22 (Base_Type (E)) > Uint_0;
5377    end Known_Static_Component_Size;
5378
5379    function Known_Static_Esize                    (E : Entity_Id) return B is
5380    begin
5381       return Uint12 (E) > Uint_0;
5382    end Known_Static_Esize;
5383
5384    function Known_Static_Normalized_First_Bit     (E : Entity_Id) return B is
5385    begin
5386       return Uint8 (E) /= No_Uint
5387         and then Uint8 (E) >= Uint_0;
5388    end Known_Static_Normalized_First_Bit;
5389
5390    function Known_Static_Normalized_Position      (E : Entity_Id) return B is
5391    begin
5392       return Uint14 (E) /= No_Uint
5393         and then Uint14 (E) >= Uint_0;
5394    end Known_Static_Normalized_Position;
5395
5396    function Known_Static_Normalized_Position_Max  (E : Entity_Id) return B is
5397    begin
5398       return Uint10 (E) /= No_Uint
5399         and then Uint10 (E) >= Uint_0;
5400    end Known_Static_Normalized_Position_Max;
5401
5402    function Known_Static_RM_Size                  (E : Entity_Id) return B is
5403    begin
5404       return Uint13 (E) > Uint_0
5405         or else Is_Discrete_Type (E)
5406         or else Is_Fixed_Point_Type (E);
5407    end Known_Static_RM_Size;
5408
5409    function Unknown_Alignment                     (E : Entity_Id) return B is
5410    begin
5411       return Uint14 (E) = Uint_0
5412         or else Uint14 (E) = No_Uint;
5413    end Unknown_Alignment;
5414
5415    function Unknown_Component_Bit_Offset          (E : Entity_Id) return B is
5416    begin
5417       return Uint11 (E) = No_Uint;
5418    end Unknown_Component_Bit_Offset;
5419
5420    function Unknown_Component_Size                (E : Entity_Id) return B is
5421    begin
5422       return Uint22 (Base_Type (E)) = Uint_0
5423                or else
5424              Uint22 (Base_Type (E)) = No_Uint;
5425    end Unknown_Component_Size;
5426
5427    function Unknown_Esize                         (E : Entity_Id) return B is
5428    begin
5429       return Uint12 (E) = No_Uint
5430                or else
5431              Uint12 (E) = Uint_0;
5432    end Unknown_Esize;
5433
5434    function Unknown_Normalized_First_Bit          (E : Entity_Id) return B is
5435    begin
5436       return Uint8 (E) = No_Uint;
5437    end Unknown_Normalized_First_Bit;
5438
5439    function Unknown_Normalized_Position           (E : Entity_Id) return B is
5440    begin
5441       return Uint14 (E) = No_Uint;
5442    end Unknown_Normalized_Position;
5443
5444    function Unknown_Normalized_Position_Max       (E : Entity_Id) return B is
5445    begin
5446       return Uint10 (E) = No_Uint;
5447    end Unknown_Normalized_Position_Max;
5448
5449    function Unknown_RM_Size                       (E : Entity_Id) return B is
5450    begin
5451       return (Uint13 (E) = Uint_0
5452                 and then not Is_Discrete_Type (E)
5453                 and then not Is_Fixed_Point_Type (E))
5454         or else Uint13 (E) = No_Uint;
5455    end Unknown_RM_Size;
5456
5457    --------------------
5458    -- Address_Clause --
5459    --------------------
5460
5461    function Address_Clause (Id : E) return N is
5462    begin
5463       return Rep_Clause (Id, Name_Address);
5464    end Address_Clause;
5465
5466    ----------------------
5467    -- Alignment_Clause --
5468    ----------------------
5469
5470    function Alignment_Clause (Id : E) return N is
5471    begin
5472       return Rep_Clause (Id, Name_Alignment);
5473    end Alignment_Clause;
5474
5475    ----------------------
5476    -- Ancestor_Subtype --
5477    ----------------------
5478
5479    function Ancestor_Subtype (Id : E) return E is
5480    begin
5481       --  If this is first subtype, or is a base type, then there is no
5482       --  ancestor subtype, so we return Empty to indicate this fact.
5483
5484       if Is_First_Subtype (Id) or else Id = Base_Type (Id) then
5485          return Empty;
5486       end if;
5487
5488       declare
5489          D : constant Node_Id := Declaration_Node (Id);
5490
5491       begin
5492          --  If we have a subtype declaration, get the ancestor subtype
5493
5494          if Nkind (D) = N_Subtype_Declaration then
5495             if Nkind (Subtype_Indication (D)) = N_Subtype_Indication then
5496                return Entity (Subtype_Mark (Subtype_Indication (D)));
5497             else
5498                return Entity (Subtype_Indication (D));
5499             end if;
5500
5501          --  If not, then no subtype indication is available
5502
5503          else
5504             return Empty;
5505          end if;
5506       end;
5507    end Ancestor_Subtype;
5508
5509    -------------------
5510    -- Append_Entity --
5511    -------------------
5512
5513    procedure Append_Entity (Id : Entity_Id; V : Entity_Id) is
5514    begin
5515       if Last_Entity (V) = Empty then
5516          Set_First_Entity (Id => V, V => Id);
5517       else
5518          Set_Next_Entity (Last_Entity (V), Id);
5519       end if;
5520
5521       Set_Next_Entity (Id, Empty);
5522       Set_Scope (Id, V);
5523       Set_Last_Entity (Id => V, V => Id);
5524    end Append_Entity;
5525
5526    --------------------
5527    -- Available_View --
5528    --------------------
5529
5530    function Available_View (Id : E) return E is
5531    begin
5532       if Is_Incomplete_Type (Id)
5533         and then Present (Non_Limited_View (Id))
5534       then
5535          --  The non-limited view may itself be an incomplete type, in
5536          --  which case get its full view.
5537
5538          return Get_Full_View (Non_Limited_View (Id));
5539
5540       elsif Is_Class_Wide_Type (Id)
5541         and then Is_Incomplete_Type (Etype (Id))
5542         and then Present (Non_Limited_View (Etype (Id)))
5543       then
5544          return Class_Wide_Type (Non_Limited_View (Etype (Id)));
5545
5546       else
5547          return Id;
5548       end if;
5549    end Available_View;
5550
5551    ---------------
5552    -- Base_Type --
5553    ---------------
5554
5555    function Base_Type (Id : E) return E is
5556    begin
5557       case Ekind (Id) is
5558          when E_Enumeration_Subtype          |
5559               E_Incomplete_Type              |
5560               E_Signed_Integer_Subtype       |
5561               E_Modular_Integer_Subtype      |
5562               E_Floating_Point_Subtype       |
5563               E_Ordinary_Fixed_Point_Subtype |
5564               E_Decimal_Fixed_Point_Subtype  |
5565               E_Array_Subtype                |
5566               E_String_Subtype               |
5567               E_Record_Subtype               |
5568               E_Private_Subtype              |
5569               E_Record_Subtype_With_Private  |
5570               E_Limited_Private_Subtype      |
5571               E_Access_Subtype               |
5572               E_Protected_Subtype            |
5573               E_Task_Subtype                 |
5574               E_String_Literal_Subtype       |
5575               E_Class_Wide_Subtype           =>
5576             return Etype (Id);
5577
5578          when others =>
5579             return Id;
5580       end case;
5581    end Base_Type;
5582
5583    -------------------------
5584    -- Component_Alignment --
5585    -------------------------
5586
5587    --  Component Alignment is encoded using two flags, Flag128/129 as
5588    --  follows. Note that both flags False = Align_Default, so that the
5589    --  default initialization of flags to False initializes component
5590    --  alignment to the default value as required.
5591
5592    --     Flag128      Flag129      Value
5593    --     -------      -------      -----
5594    --      False        False       Calign_Default
5595    --      False        True        Calign_Component_Size
5596    --      True         False       Calign_Component_Size_4
5597    --      True         True        Calign_Storage_Unit
5598
5599    function Component_Alignment (Id : E) return C is
5600       BT : constant Node_Id := Base_Type (Id);
5601
5602    begin
5603       pragma Assert (Is_Array_Type (Id) or else Is_Record_Type (Id));
5604
5605       if Flag128 (BT) then
5606          if Flag129 (BT) then
5607             return Calign_Storage_Unit;
5608          else
5609             return Calign_Component_Size_4;
5610          end if;
5611
5612       else
5613          if Flag129 (BT) then
5614             return Calign_Component_Size;
5615          else
5616             return Calign_Default;
5617          end if;
5618       end if;
5619    end Component_Alignment;
5620
5621    --------------------
5622    -- Constant_Value --
5623    --------------------
5624
5625    function Constant_Value (Id : E) return N is
5626       D      : constant Node_Id := Declaration_Node (Id);
5627       Full_D : Node_Id;
5628
5629    begin
5630       --  If we have no declaration node, then return no constant value.
5631       --  Not clear how this can happen, but it does sometimes ???
5632       --  To investigate, remove this check and compile discrim_po.adb.
5633
5634       if No (D) then
5635          return Empty;
5636
5637       --  Normal case where a declaration node is present
5638
5639       elsif Nkind (D) = N_Object_Renaming_Declaration then
5640          return Renamed_Object (Id);
5641
5642       --  If this is a component declaration whose entity is constant, it
5643       --  is a prival within a protected function. It does not have
5644       --  a constant value.
5645
5646       elsif Nkind (D) = N_Component_Declaration then
5647          return Empty;
5648
5649       --  If there is an expression, return it
5650
5651       elsif Present (Expression (D)) then
5652          return (Expression (D));
5653
5654       --  For a constant, see if we have a full view
5655
5656       elsif Ekind (Id) = E_Constant
5657         and then Present (Full_View (Id))
5658       then
5659          Full_D := Parent (Full_View (Id));
5660
5661          --  The full view may have been rewritten as an object renaming
5662
5663          if Nkind (Full_D) = N_Object_Renaming_Declaration then
5664             return Name (Full_D);
5665          else
5666             return Expression (Full_D);
5667          end if;
5668
5669       --  Otherwise we have no expression to return
5670
5671       else
5672          return Empty;
5673       end if;
5674    end Constant_Value;
5675
5676    ----------------------
5677    -- Declaration_Node --
5678    ----------------------
5679
5680    function Declaration_Node (Id : E) return N is
5681       P : Node_Id;
5682
5683    begin
5684       if Ekind (Id) = E_Incomplete_Type
5685         and then Present (Full_View (Id))
5686       then
5687          P := Parent (Full_View (Id));
5688       else
5689          P := Parent (Id);
5690       end if;
5691
5692       loop
5693          if Nkind (P) /= N_Selected_Component
5694            and then Nkind (P) /= N_Expanded_Name
5695            and then
5696              not (Nkind (P) = N_Defining_Program_Unit_Name
5697                    and then Is_Child_Unit (Id))
5698          then
5699             return P;
5700          else
5701             P := Parent (P);
5702          end if;
5703       end loop;
5704    end Declaration_Node;
5705
5706    ---------------------
5707    -- Designated_Type --
5708    ---------------------
5709
5710    function Designated_Type (Id : E) return E is
5711       Desig_Type : E;
5712
5713    begin
5714       Desig_Type := Directly_Designated_Type (Id);
5715
5716       if Ekind (Desig_Type) = E_Incomplete_Type
5717         and then Present (Full_View (Desig_Type))
5718       then
5719          return Full_View (Desig_Type);
5720
5721       elsif Is_Class_Wide_Type (Desig_Type)
5722         and then Ekind (Etype (Desig_Type)) = E_Incomplete_Type
5723         and then Present (Full_View (Etype (Desig_Type)))
5724         and then Present (Class_Wide_Type (Full_View (Etype (Desig_Type))))
5725       then
5726          return Class_Wide_Type (Full_View (Etype (Desig_Type)));
5727
5728       else
5729          return Desig_Type;
5730       end if;
5731    end Designated_Type;
5732
5733    -----------------------------
5734    -- Enclosing_Dynamic_Scope --
5735    -----------------------------
5736
5737    function Enclosing_Dynamic_Scope (Id : E) return E is
5738       S  : Entity_Id;
5739
5740    begin
5741       --  The following test is an error defense against some syntax
5742       --  errors that can leave scopes very messed up.
5743
5744       if Id = Standard_Standard then
5745          return Id;
5746       end if;
5747
5748       --  Normal case, search enclosing scopes
5749
5750       --  Note: the test for Present (S) should not be required, it is a
5751       --  defence against an ill-formed tree.
5752
5753       S := Scope (Id);
5754       loop
5755          --  If we somehow got an empty value for Scope, the tree must be
5756          --  malformed. Rather than blow up we return Standard in this case.
5757
5758          if No (S) then
5759             return Standard_Standard;
5760
5761          --  Quit if we get to standard or a dynamic scope
5762
5763          elsif S = Standard_Standard
5764            or else Is_Dynamic_Scope (S)
5765          then
5766             return S;
5767
5768          --  Otherwise keep climbing
5769
5770          else
5771             S := Scope (S);
5772          end if;
5773       end loop;
5774    end Enclosing_Dynamic_Scope;
5775
5776    ----------------------
5777    -- Entry_Index_Type --
5778    ----------------------
5779
5780    function Entry_Index_Type (Id : E) return N is
5781    begin
5782       pragma Assert (Ekind (Id) = E_Entry_Family);
5783       return Etype (Discrete_Subtype_Definition (Parent (Id)));
5784    end Entry_Index_Type;
5785
5786    ---------------------
5787    -- First_Component --
5788    ---------------------
5789
5790    function First_Component (Id : E) return E is
5791       Comp_Id : E;
5792
5793    begin
5794       pragma Assert
5795         (Is_Record_Type (Id) or else Is_Incomplete_Or_Private_Type (Id));
5796
5797       Comp_Id := First_Entity (Id);
5798       while Present (Comp_Id) loop
5799          exit when Ekind (Comp_Id) = E_Component;
5800          Comp_Id := Next_Entity (Comp_Id);
5801       end loop;
5802
5803       return Comp_Id;
5804    end First_Component;
5805
5806    -------------------------------------
5807    -- First_Component_Or_Discriminant --
5808    -------------------------------------
5809
5810    function First_Component_Or_Discriminant (Id : E) return E is
5811       Comp_Id : E;
5812
5813    begin
5814       pragma Assert
5815         (Is_Record_Type (Id) or else Is_Incomplete_Or_Private_Type (Id));
5816
5817       Comp_Id := First_Entity (Id);
5818       while Present (Comp_Id) loop
5819          exit when Ekind (Comp_Id) = E_Component
5820                      or else
5821                    Ekind (Comp_Id) = E_Discriminant;
5822          Comp_Id := Next_Entity (Comp_Id);
5823       end loop;
5824
5825       return Comp_Id;
5826    end First_Component_Or_Discriminant;
5827
5828    ------------------------
5829    -- First_Discriminant --
5830    ------------------------
5831
5832    function First_Discriminant (Id : E) return E is
5833       Ent : Entity_Id;
5834
5835    begin
5836       pragma Assert
5837         (Has_Discriminants (Id)
5838           or else Has_Unknown_Discriminants (Id));
5839
5840       Ent := First_Entity (Id);
5841
5842       --  The discriminants are not necessarily contiguous, because access
5843       --  discriminants will generate itypes. They are not the first entities
5844       --  either, because tag and controller record must be ahead of them.
5845
5846       if Chars (Ent) = Name_uTag then
5847          Ent := Next_Entity (Ent);
5848       end if;
5849
5850       if Chars (Ent) = Name_uController then
5851          Ent := Next_Entity (Ent);
5852       end if;
5853
5854       --  Skip all hidden stored discriminants if any
5855
5856       while Present (Ent) loop
5857          exit when Ekind (Ent) = E_Discriminant
5858            and then not Is_Completely_Hidden (Ent);
5859
5860          Ent := Next_Entity (Ent);
5861       end loop;
5862
5863       pragma Assert (Ekind (Ent) = E_Discriminant);
5864
5865       return Ent;
5866    end First_Discriminant;
5867
5868    ------------------
5869    -- First_Formal --
5870    ------------------
5871
5872    function First_Formal (Id : E) return E is
5873       Formal : E;
5874
5875    begin
5876       pragma Assert
5877         (Is_Overloadable (Id)
5878           or else Ekind (Id) = E_Entry_Family
5879           or else Ekind (Id) = E_Subprogram_Body
5880           or else Ekind (Id) = E_Subprogram_Type);
5881
5882       if Ekind (Id) = E_Enumeration_Literal then
5883          return Empty;
5884
5885       else
5886          Formal := First_Entity (Id);
5887
5888          if Present (Formal) and then Is_Formal (Formal) then
5889             return Formal;
5890          else
5891             return Empty;
5892          end if;
5893       end if;
5894    end First_Formal;
5895
5896    ------------------------------
5897    -- First_Formal_With_Extras --
5898    ------------------------------
5899
5900    function First_Formal_With_Extras (Id : E) return E is
5901       Formal : E;
5902
5903    begin
5904       pragma Assert
5905         (Is_Overloadable (Id)
5906           or else Ekind (Id) = E_Entry_Family
5907           or else Ekind (Id) = E_Subprogram_Body
5908           or else Ekind (Id) = E_Subprogram_Type);
5909
5910       if Ekind (Id) = E_Enumeration_Literal then
5911          return Empty;
5912
5913       else
5914          Formal := First_Entity (Id);
5915
5916          if Present (Formal) and then Is_Formal (Formal) then
5917             return Formal;
5918          else
5919             return Extra_Formals (Id);  -- Empty if no extra formals
5920          end if;
5921       end if;
5922    end First_Formal_With_Extras;
5923
5924    -------------------------------
5925    -- First_Stored_Discriminant --
5926    -------------------------------
5927
5928    function First_Stored_Discriminant (Id : E) return E is
5929       Ent : Entity_Id;
5930
5931       function Has_Completely_Hidden_Discriminant (Id : E) return Boolean;
5932       --  Scans the Discriminants to see whether any are Completely_Hidden
5933       --  (the mechanism for describing non-specified stored discriminants)
5934
5935       ----------------------------------------
5936       -- Has_Completely_Hidden_Discriminant --
5937       ----------------------------------------
5938
5939       function Has_Completely_Hidden_Discriminant (Id : E) return Boolean is
5940          Ent : Entity_Id := Id;
5941
5942       begin
5943          pragma Assert (Ekind (Id) = E_Discriminant);
5944
5945          while Present (Ent) and then Ekind (Ent) = E_Discriminant loop
5946             if Is_Completely_Hidden (Ent) then
5947                return True;
5948             end if;
5949
5950             Ent := Next_Entity (Ent);
5951          end loop;
5952
5953          return False;
5954       end Has_Completely_Hidden_Discriminant;
5955
5956    --  Start of processing for First_Stored_Discriminant
5957
5958    begin
5959       pragma Assert
5960         (Has_Discriminants (Id)
5961           or else Has_Unknown_Discriminants (Id));
5962
5963       Ent := First_Entity (Id);
5964
5965       if Chars (Ent) = Name_uTag then
5966          Ent := Next_Entity (Ent);
5967       end if;
5968
5969       if Chars (Ent) = Name_uController then
5970          Ent := Next_Entity (Ent);
5971       end if;
5972
5973       if Has_Completely_Hidden_Discriminant (Ent) then
5974
5975          while Present (Ent) loop
5976             exit when Is_Completely_Hidden (Ent);
5977             Ent := Next_Entity (Ent);
5978          end loop;
5979
5980       end if;
5981
5982       pragma Assert (Ekind (Ent) = E_Discriminant);
5983
5984       return Ent;
5985    end First_Stored_Discriminant;
5986
5987    -------------------
5988    -- First_Subtype --
5989    -------------------
5990
5991    function First_Subtype (Id : E) return E is
5992       B   : constant Entity_Id := Base_Type (Id);
5993       F   : constant Node_Id   := Freeze_Node (B);
5994       Ent : Entity_Id;
5995
5996    begin
5997       --  If the base type has no freeze node, it is a type in standard,
5998       --  and always acts as its own first subtype unless it is one of
5999       --  the predefined integer types. If the type is formal, it is also
6000       --  a first subtype, and its base type has no freeze node. On the other
6001       --  hand, a subtype of a generic formal is not its own first_subtype.
6002       --  Its base type, if anonymous, is attached to the formal type decl.
6003       --  from which the first subtype is obtained.
6004
6005       if No (F) then
6006
6007          if B = Base_Type (Standard_Integer) then
6008             return Standard_Integer;
6009
6010          elsif B = Base_Type (Standard_Long_Integer) then
6011             return Standard_Long_Integer;
6012
6013          elsif B = Base_Type (Standard_Short_Short_Integer) then
6014             return Standard_Short_Short_Integer;
6015
6016          elsif B = Base_Type (Standard_Short_Integer) then
6017             return Standard_Short_Integer;
6018
6019          elsif B = Base_Type (Standard_Long_Long_Integer) then
6020             return Standard_Long_Long_Integer;
6021
6022          elsif Is_Generic_Type (Id) then
6023             if Present (Parent (B)) then
6024                return Defining_Identifier (Parent (B));
6025             else
6026                return Defining_Identifier (Associated_Node_For_Itype (B));
6027             end if;
6028
6029          else
6030             return B;
6031          end if;
6032
6033       --  Otherwise we check the freeze node, if it has a First_Subtype_Link
6034       --  then we use that link, otherwise (happens with some Itypes), we use
6035       --  the base type itself.
6036
6037       else
6038          Ent := First_Subtype_Link (F);
6039
6040          if Present (Ent) then
6041             return Ent;
6042          else
6043             return B;
6044          end if;
6045       end if;
6046    end First_Subtype;
6047
6048    -------------------------------------
6049    -- Get_Attribute_Definition_Clause --
6050    -------------------------------------
6051
6052    function Get_Attribute_Definition_Clause
6053      (E  : Entity_Id;
6054       Id : Attribute_Id) return Node_Id
6055    is
6056       N : Node_Id;
6057
6058    begin
6059       N := First_Rep_Item (E);
6060       while Present (N) loop
6061          if Nkind (N) = N_Attribute_Definition_Clause
6062            and then Get_Attribute_Id (Chars (N)) = Id
6063          then
6064             return N;
6065          else
6066             Next_Rep_Item (N);
6067          end if;
6068       end loop;
6069
6070       return Empty;
6071    end Get_Attribute_Definition_Clause;
6072
6073    -------------------
6074    -- Get_Full_View --
6075    -------------------
6076
6077    function Get_Full_View (T : Entity_Id) return Entity_Id is
6078    begin
6079       if Ekind (T) = E_Incomplete_Type
6080         and then Present (Full_View (T))
6081       then
6082          return Full_View (T);
6083
6084       elsif Is_Class_Wide_Type (T)
6085         and then Ekind (Root_Type (T)) = E_Incomplete_Type
6086         and then Present (Full_View (Root_Type (T)))
6087       then
6088          return Class_Wide_Type (Full_View (Root_Type (T)));
6089
6090       else
6091          return T;
6092       end if;
6093    end Get_Full_View;
6094
6095    --------------------
6096    -- Get_Rep_Pragma --
6097    --------------------
6098
6099    function Get_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Node_Id is
6100       N : Node_Id;
6101
6102    begin
6103       N := First_Rep_Item (E);
6104       while Present (N) loop
6105          if Nkind (N) = N_Pragma and then Pragma_Name (N) = Nam then
6106             return N;
6107          end if;
6108
6109          Next_Rep_Item (N);
6110       end loop;
6111
6112       return Empty;
6113    end Get_Rep_Pragma;
6114
6115    ------------------------
6116    -- Has_Attach_Handler --
6117    ------------------------
6118
6119    function Has_Attach_Handler (Id : E) return B is
6120       Ritem : Node_Id;
6121
6122    begin
6123       pragma Assert (Is_Protected_Type (Id));
6124
6125       Ritem := First_Rep_Item (Id);
6126       while Present (Ritem) loop
6127          if Nkind (Ritem) = N_Pragma
6128            and then Pragma_Name (Ritem) = Name_Attach_Handler
6129          then
6130             return True;
6131          else
6132             Ritem := Next_Rep_Item (Ritem);
6133          end if;
6134       end loop;
6135
6136       return False;
6137    end Has_Attach_Handler;
6138
6139    -------------------------------------
6140    -- Has_Attribute_Definition_Clause --
6141    -------------------------------------
6142
6143    function Has_Attribute_Definition_Clause
6144      (E  : Entity_Id;
6145       Id : Attribute_Id) return Boolean
6146    is
6147    begin
6148       return Present (Get_Attribute_Definition_Clause (E, Id));
6149    end Has_Attribute_Definition_Clause;
6150
6151    -----------------
6152    -- Has_Entries --
6153    -----------------
6154
6155    function Has_Entries (Id : E) return B is
6156       Ent : Entity_Id;
6157
6158    begin
6159       pragma Assert (Is_Concurrent_Type (Id));
6160
6161       Ent := First_Entity (Id);
6162       while Present (Ent) loop
6163          if Is_Entry (Ent) then
6164             return True;
6165          end if;
6166
6167          Ent := Next_Entity (Ent);
6168       end loop;
6169
6170       return False;
6171    end Has_Entries;
6172
6173    ----------------------------
6174    -- Has_Foreign_Convention --
6175    ----------------------------
6176
6177    function Has_Foreign_Convention (Id : E) return B is
6178    begin
6179       return Convention (Id) in Foreign_Convention;
6180    end Has_Foreign_Convention;
6181
6182    ---------------------------
6183    -- Has_Interrupt_Handler --
6184    ---------------------------
6185
6186    function Has_Interrupt_Handler (Id : E) return B is
6187       Ritem : Node_Id;
6188
6189    begin
6190       pragma Assert (Is_Protected_Type (Id));
6191
6192       Ritem := First_Rep_Item (Id);
6193       while Present (Ritem) loop
6194          if Nkind (Ritem) = N_Pragma
6195            and then Pragma_Name (Ritem) = Name_Interrupt_Handler
6196          then
6197             return True;
6198          else
6199             Ritem := Next_Rep_Item (Ritem);
6200          end if;
6201       end loop;
6202
6203       return False;
6204    end Has_Interrupt_Handler;
6205
6206    --------------------------
6207    -- Has_Private_Ancestor --
6208    --------------------------
6209
6210    function Has_Private_Ancestor (Id : E) return B is
6211       R  : constant Entity_Id := Root_Type (Id);
6212       T1 : Entity_Id := Id;
6213    begin
6214       loop
6215          if Is_Private_Type (T1) then
6216             return True;
6217          elsif T1 = R then
6218             return False;
6219          else
6220             T1 := Etype (T1);
6221          end if;
6222       end loop;
6223    end Has_Private_Ancestor;
6224
6225    --------------------
6226    -- Has_Rep_Pragma --
6227    --------------------
6228
6229    function Has_Rep_Pragma (E : Entity_Id; Nam : Name_Id) return Boolean is
6230    begin
6231       return Present (Get_Rep_Pragma (E, Nam));
6232    end Has_Rep_Pragma;
6233
6234    --------------------
6235    -- Has_Unmodified --
6236    --------------------
6237
6238    function Has_Unmodified (E : Entity_Id) return Boolean is
6239    begin
6240       if Has_Pragma_Unmodified (E) then
6241          return True;
6242       elsif Warnings_Off (E) then
6243          Set_Warnings_Off_Used_Unmodified (E);
6244          return True;
6245       else
6246          return False;
6247       end if;
6248    end Has_Unmodified;
6249
6250    ---------------------
6251    -- Has_Unreferenced --
6252    ---------------------
6253
6254    function Has_Unreferenced (E : Entity_Id) return Boolean is
6255    begin
6256       if Has_Pragma_Unreferenced (E) then
6257          return True;
6258       elsif Warnings_Off (E) then
6259          Set_Warnings_Off_Used_Unreferenced (E);
6260          return True;
6261       else
6262          return False;
6263       end if;
6264    end Has_Unreferenced;
6265
6266    ----------------------
6267    -- Has_Warnings_Off --
6268    ----------------------
6269
6270    function Has_Warnings_Off (E : Entity_Id) return Boolean is
6271    begin
6272       if Warnings_Off (E) then
6273          Set_Warnings_Off_Used (E);
6274          return True;
6275       else
6276          return False;
6277       end if;
6278    end Has_Warnings_Off;
6279
6280    ------------------------------
6281    -- Implementation_Base_Type --
6282    ------------------------------
6283
6284    function Implementation_Base_Type (Id : E) return E is
6285       Bastyp : Entity_Id;
6286       Imptyp : Entity_Id;
6287
6288    begin
6289       Bastyp := Base_Type (Id);
6290
6291       if Is_Incomplete_Or_Private_Type (Bastyp) then
6292          Imptyp := Underlying_Type (Bastyp);
6293
6294          --  If we have an implementation type, then just return it,
6295          --  otherwise we return the Base_Type anyway. This can only
6296          --  happen in error situations and should avoid some error bombs.
6297
6298          if Present (Imptyp) then
6299             return Base_Type (Imptyp);
6300          else
6301             return Bastyp;
6302          end if;
6303
6304       else
6305          return Bastyp;
6306       end if;
6307    end Implementation_Base_Type;
6308
6309    ---------------------
6310    -- Is_Boolean_Type --
6311    ---------------------
6312
6313    function Is_Boolean_Type (Id : E) return B is
6314    begin
6315       return Root_Type (Id) = Standard_Boolean;
6316    end Is_Boolean_Type;
6317
6318    ---------------------
6319    -- Is_By_Copy_Type --
6320    ---------------------
6321
6322    function Is_By_Copy_Type (Id : E) return B is
6323    begin
6324       --  If Id is a private type whose full declaration has not been seen,
6325       --  we assume for now that it is not a By_Copy type. Clearly this
6326       --  attribute should not be used before the type is frozen, but it is
6327       --  needed to build the associated record of a protected type. Another
6328       --  place where some lookahead for a full view is needed ???
6329
6330       return
6331         Is_Elementary_Type (Id)
6332           or else (Is_Private_Type (Id)
6333                      and then Present (Underlying_Type (Id))
6334                      and then Is_Elementary_Type (Underlying_Type (Id)));
6335    end Is_By_Copy_Type;
6336
6337    --------------------------
6338    -- Is_By_Reference_Type --
6339    --------------------------
6340
6341    --  This function knows too much semantics, it should be in sem_util ???
6342
6343    function Is_By_Reference_Type (Id : E) return B is
6344       Btype : constant Entity_Id := Base_Type (Id);
6345
6346    begin
6347       if Error_Posted (Id)
6348         or else Error_Posted (Btype)
6349       then
6350          return False;
6351
6352       elsif Is_Private_Type (Btype) then
6353          declare
6354             Utyp : constant Entity_Id := Underlying_Type (Btype);
6355          begin
6356             if No (Utyp) then
6357                return False;
6358             else
6359                return Is_By_Reference_Type (Utyp);
6360             end if;
6361          end;
6362
6363       elsif Is_Incomplete_Type (Btype) then
6364          declare
6365             Ftyp : constant Entity_Id := Full_View (Btype);
6366          begin
6367             if No (Ftyp) then
6368                return False;
6369             else
6370                return Is_By_Reference_Type (Ftyp);
6371             end if;
6372          end;
6373
6374       elsif Is_Concurrent_Type (Btype) then
6375          return True;
6376
6377       elsif Is_Record_Type (Btype) then
6378          if Is_Limited_Record (Btype)
6379            or else Is_Tagged_Type (Btype)
6380            or else Is_Volatile (Btype)
6381          then
6382             return True;
6383
6384          else
6385             declare
6386                C : Entity_Id;
6387
6388             begin
6389                C := First_Component (Btype);
6390                while Present (C) loop
6391                   if Is_By_Reference_Type (Etype (C))
6392                     or else Is_Volatile (Etype (C))
6393                   then
6394                      return True;
6395                   end if;
6396
6397                   C := Next_Component (C);
6398                end loop;
6399             end;
6400
6401             return False;
6402          end if;
6403
6404       elsif Is_Array_Type (Btype) then
6405          return
6406            Is_Volatile (Btype)
6407              or else Is_By_Reference_Type (Component_Type (Btype))
6408              or else Is_Volatile (Component_Type (Btype))
6409              or else Has_Volatile_Components (Btype);
6410
6411       else
6412          return False;
6413       end if;
6414    end Is_By_Reference_Type;
6415
6416    ------------------------
6417    -- Is_Constant_Object --
6418    ------------------------
6419
6420    function Is_Constant_Object (Id : E) return B is
6421       K : constant Entity_Kind := Ekind (Id);
6422    begin
6423       return
6424         K = E_Constant or else K = E_In_Parameter or else K = E_Loop_Parameter;
6425    end Is_Constant_Object;
6426
6427    ---------------------
6428    -- Is_Derived_Type --
6429    ---------------------
6430
6431    function Is_Derived_Type (Id : E) return B is
6432       Par : Node_Id;
6433
6434    begin
6435       if Is_Type (Id)
6436         and then Base_Type (Id) /= Root_Type (Id)
6437         and then not Is_Class_Wide_Type (Id)
6438       then
6439          if not Is_Numeric_Type (Root_Type (Id)) then
6440             return True;
6441
6442          else
6443             Par := Parent (First_Subtype (Id));
6444
6445             return Present (Par)
6446               and then Nkind (Par) = N_Full_Type_Declaration
6447               and then Nkind (Type_Definition (Par)) =
6448                          N_Derived_Type_Definition;
6449          end if;
6450
6451       else
6452          return False;
6453       end if;
6454    end Is_Derived_Type;
6455
6456    --------------------
6457    -- Is_Discriminal --
6458    --------------------
6459
6460    function Is_Discriminal (Id : E) return B is
6461    begin
6462       return
6463         (Ekind (Id) = E_Constant
6464            or else Ekind (Id) = E_In_Parameter)
6465          and then Present (Discriminal_Link (Id));
6466    end Is_Discriminal;
6467
6468    ----------------------
6469    -- Is_Dynamic_Scope --
6470    ----------------------
6471
6472    function Is_Dynamic_Scope (Id : E) return B is
6473    begin
6474       return
6475         Ekind (Id) = E_Block
6476           or else
6477         Ekind (Id) = E_Function
6478           or else
6479         Ekind (Id) = E_Procedure
6480           or else
6481         Ekind (Id) = E_Subprogram_Body
6482           or else
6483         Ekind (Id) = E_Task_Type
6484           or else
6485         Ekind (Id) = E_Entry
6486           or else
6487         Ekind (Id) = E_Entry_Family
6488           or else
6489         Ekind (Id) = E_Return_Statement;
6490    end Is_Dynamic_Scope;
6491
6492    --------------------
6493    -- Is_Entity_Name --
6494    --------------------
6495
6496    function Is_Entity_Name (N : Node_Id) return Boolean is
6497       Kind : constant Node_Kind := Nkind (N);
6498
6499    begin
6500       --  Identifiers, operator symbols, expanded names are entity names
6501
6502       return Kind = N_Identifier
6503         or else Kind = N_Operator_Symbol
6504         or else Kind = N_Expanded_Name
6505
6506       --  Attribute references are entity names if they refer to an entity.
6507       --  Note that we don't do this by testing for the presence of the
6508       --  Entity field in the N_Attribute_Reference node, since it may not
6509       --  have been set yet.
6510
6511         or else (Kind = N_Attribute_Reference
6512                   and then Is_Entity_Attribute_Name (Attribute_Name (N)));
6513    end Is_Entity_Name;
6514
6515    ---------------------------
6516    -- Is_Indefinite_Subtype --
6517    ---------------------------
6518
6519    function Is_Indefinite_Subtype (Id : Entity_Id) return B is
6520       K : constant Entity_Kind := Ekind (Id);
6521
6522    begin
6523       if Is_Constrained (Id) then
6524          return False;
6525
6526       elsif K in Array_Kind
6527         or else K in Class_Wide_Kind
6528         or else Has_Unknown_Discriminants (Id)
6529       then
6530          return True;
6531
6532       --  Known discriminants: indefinite if there are no default values
6533
6534       elsif K in Record_Kind
6535         or else Is_Incomplete_Or_Private_Type (Id)
6536         or else Is_Concurrent_Type (Id)
6537       then
6538          return (Has_Discriminants (Id)
6539            and then No (Discriminant_Default_Value (First_Discriminant (Id))));
6540
6541       else
6542          return False;
6543       end if;
6544    end Is_Indefinite_Subtype;
6545
6546    --------------------------------
6547    -- Is_Inherently_Limited_Type --
6548    --------------------------------
6549
6550    function Is_Inherently_Limited_Type (Id : E) return B is
6551       Btype : constant Entity_Id := Base_Type (Id);
6552
6553    begin
6554       if Is_Private_Type (Btype) then
6555          declare
6556             Utyp : constant Entity_Id := Underlying_Type (Btype);
6557          begin
6558             if No (Utyp) then
6559                return False;
6560             else
6561                return Is_Inherently_Limited_Type (Utyp);
6562             end if;
6563          end;
6564
6565       elsif Is_Concurrent_Type (Btype) then
6566          return True;
6567
6568       elsif Is_Record_Type (Btype) then
6569          if Is_Limited_Record (Btype) then
6570             return not Is_Interface (Btype)
6571               or else Is_Protected_Interface (Btype)
6572               or else Is_Synchronized_Interface (Btype)
6573               or else Is_Task_Interface (Btype);
6574
6575          elsif Is_Class_Wide_Type (Btype) then
6576             return Is_Inherently_Limited_Type (Root_Type (Btype));
6577
6578          else
6579             declare
6580                C : Entity_Id;
6581
6582             begin
6583                C := First_Component (Btype);
6584                while Present (C) loop
6585                   if Is_Inherently_Limited_Type (Etype (C)) then
6586                      return True;
6587                   end if;
6588
6589                   C := Next_Component (C);
6590                end loop;
6591             end;
6592
6593             return False;
6594          end if;
6595
6596       elsif Is_Array_Type (Btype) then
6597          return Is_Inherently_Limited_Type (Component_Type (Btype));
6598
6599       else
6600          return False;
6601       end if;
6602    end Is_Inherently_Limited_Type;
6603
6604    ---------------------
6605    -- Is_Limited_Type --
6606    ---------------------
6607
6608    function Is_Limited_Type (Id : E) return B is
6609       Btype : constant E := Base_Type (Id);
6610       Rtype : constant E := Root_Type (Btype);
6611
6612    begin
6613       if not Is_Type (Id) then
6614          return False;
6615
6616       elsif Ekind (Btype) = E_Limited_Private_Type
6617         or else Is_Limited_Composite (Btype)
6618       then
6619          return True;
6620
6621       elsif Is_Concurrent_Type (Btype) then
6622          return True;
6623
6624          --  The Is_Limited_Record flag normally indicates that the type is
6625          --  limited. The exception is that a type does not inherit limitedness
6626          --  from its interface ancestor. So the type may be derived from a
6627          --  limited interface, but is not limited.
6628
6629       elsif Is_Limited_Record (Id)
6630         and then not Is_Interface (Id)
6631       then
6632          return True;
6633
6634       --  Otherwise we will look around to see if there is some other reason
6635       --  for it to be limited, except that if an error was posted on the
6636       --  entity, then just assume it is non-limited, because it can cause
6637       --  trouble to recurse into a murky erroneous entity!
6638
6639       elsif Error_Posted (Id) then
6640          return False;
6641
6642       elsif Is_Record_Type (Btype) then
6643
6644          if Is_Limited_Interface (Id) then
6645             return True;
6646
6647          --  AI-419: limitedness is not inherited from a limited interface
6648
6649          elsif Is_Limited_Record (Rtype) then
6650             return not Is_Interface (Rtype)
6651               or else Is_Protected_Interface (Rtype)
6652               or else Is_Synchronized_Interface (Rtype)
6653               or else Is_Task_Interface (Rtype);
6654
6655          elsif Is_Class_Wide_Type (Btype) then
6656             return Is_Limited_Type (Rtype);
6657
6658          else
6659             declare
6660                C : E;
6661
6662             begin
6663                C := First_Component (Btype);
6664                while Present (C) loop
6665                   if Is_Limited_Type (Etype (C)) then
6666                      return True;
6667                   end if;
6668
6669                   C := Next_Component (C);
6670                end loop;
6671             end;
6672
6673             return False;
6674          end if;
6675
6676       elsif Is_Array_Type (Btype) then
6677          return Is_Limited_Type (Component_Type (Btype));
6678
6679       else
6680          return False;
6681       end if;
6682    end Is_Limited_Type;
6683
6684    -----------------------------------
6685    -- Is_Package_Or_Generic_Package --
6686    -----------------------------------
6687
6688    function Is_Package_Or_Generic_Package (Id : E) return B is
6689    begin
6690       return
6691         Ekind (Id) = E_Package
6692           or else
6693         Ekind (Id) = E_Generic_Package;
6694    end Is_Package_Or_Generic_Package;
6695
6696    ---------------
6697    -- Is_Prival --
6698    ---------------
6699
6700    function Is_Prival (Id : E) return B is
6701    begin
6702       return
6703         (Ekind (Id) = E_Constant
6704            or else Ekind (Id) = E_Variable)
6705          and then Present (Prival_Link (Id));
6706    end Is_Prival;
6707
6708    ----------------------------
6709    -- Is_Protected_Component --
6710    ----------------------------
6711
6712    function Is_Protected_Component (Id : E) return B is
6713    begin
6714       return Ekind (Id) = E_Component
6715         and then Is_Protected_Type (Scope (Id));
6716    end Is_Protected_Component;
6717
6718    ------------------------------
6719    -- Is_Protected_Record_Type --
6720    ------------------------------
6721
6722    function Is_Protected_Record_Type (Id : E) return B is
6723    begin
6724       return
6725         Is_Concurrent_Record_Type (Id)
6726           and then Is_Protected_Type (Corresponding_Concurrent_Type (Id));
6727    end Is_Protected_Record_Type;
6728
6729    --------------------------------
6730    -- Is_Standard_Character_Type --
6731    --------------------------------
6732
6733    function Is_Standard_Character_Type (Id : E) return B is
6734    begin
6735       if Is_Type (Id) then
6736          declare
6737             R : constant Entity_Id := Root_Type (Id);
6738          begin
6739             return
6740               R = Standard_Character
6741                 or else
6742               R = Standard_Wide_Character
6743                 or else
6744               R = Standard_Wide_Wide_Character;
6745          end;
6746
6747       else
6748          return False;
6749       end if;
6750    end Is_Standard_Character_Type;
6751
6752    --------------------
6753    -- Is_String_Type --
6754    --------------------
6755
6756    function Is_String_Type (Id : E) return B is
6757    begin
6758       return Ekind (Id) in String_Kind
6759         or else (Is_Array_Type (Id)
6760                    and then Number_Dimensions (Id) = 1
6761                    and then Is_Character_Type (Component_Type (Id)));
6762    end Is_String_Type;
6763
6764    -------------------------
6765    -- Is_Task_Record_Type --
6766    -------------------------
6767
6768    function Is_Task_Record_Type (Id : E) return B is
6769    begin
6770       return
6771         Is_Concurrent_Record_Type (Id)
6772           and then Is_Task_Type (Corresponding_Concurrent_Type (Id));
6773    end Is_Task_Record_Type;
6774
6775    ------------------------
6776    -- Is_Wrapper_Package --
6777    ------------------------
6778
6779    function Is_Wrapper_Package (Id : E) return B is
6780    begin
6781       return (Ekind (Id) = E_Package
6782         and then Present (Related_Instance (Id)));
6783    end Is_Wrapper_Package;
6784
6785    --------------------
6786    -- Next_Component --
6787    --------------------
6788
6789    function Next_Component (Id : E) return E is
6790       Comp_Id : E;
6791
6792    begin
6793       Comp_Id := Next_Entity (Id);
6794       while Present (Comp_Id) loop
6795          exit when Ekind (Comp_Id) = E_Component;
6796          Comp_Id := Next_Entity (Comp_Id);
6797       end loop;
6798
6799       return Comp_Id;
6800    end Next_Component;
6801
6802    ------------------------------------
6803    -- Next_Component_Or_Discriminant --
6804    ------------------------------------
6805
6806    function Next_Component_Or_Discriminant (Id : E) return E is
6807       Comp_Id : E;
6808
6809    begin
6810       Comp_Id := Next_Entity (Id);
6811       while Present (Comp_Id) loop
6812          exit when Ekind (Comp_Id) = E_Component
6813                      or else
6814                    Ekind (Comp_Id) = E_Discriminant;
6815          Comp_Id := Next_Entity (Comp_Id);
6816       end loop;
6817
6818       return Comp_Id;
6819    end Next_Component_Or_Discriminant;
6820
6821    -----------------------
6822    -- Next_Discriminant --
6823    -----------------------
6824
6825    --  This function actually implements both Next_Discriminant and
6826    --  Next_Stored_Discriminant by making sure that the Discriminant
6827    --  returned is of the same variety as Id.
6828
6829    function Next_Discriminant (Id : E) return E is
6830
6831       --  Derived Tagged types with private extensions look like this...
6832
6833       --       E_Discriminant d1
6834       --       E_Discriminant d2
6835       --       E_Component    _tag
6836       --       E_Discriminant d1
6837       --       E_Discriminant d2
6838       --       ...
6839
6840       --  so it is critical not to go past the leading discriminants
6841
6842       D : E := Id;
6843
6844    begin
6845       pragma Assert (Ekind (Id) = E_Discriminant);
6846
6847       loop
6848          D := Next_Entity (D);
6849          if No (D)
6850            or else (Ekind (D) /= E_Discriminant
6851                       and then not Is_Itype (D))
6852          then
6853             return Empty;
6854          end if;
6855
6856          exit when Ekind (D) = E_Discriminant
6857            and then (Is_Completely_Hidden (D) = Is_Completely_Hidden (Id));
6858       end loop;
6859
6860       return D;
6861    end Next_Discriminant;
6862
6863    -----------------
6864    -- Next_Formal --
6865    -----------------
6866
6867    function Next_Formal (Id : E) return E is
6868       P : E;
6869
6870    begin
6871       --  Follow the chain of declared entities as long as the kind of the
6872       --  entity corresponds to a formal parameter. Skip internal entities
6873       --  that may have been created for implicit subtypes, in the process
6874       --  of analyzing default expressions.
6875
6876       P := Id;
6877
6878       loop
6879          P := Next_Entity (P);
6880
6881          if No (P) or else Is_Formal (P) then
6882             return P;
6883          elsif not Is_Internal (P) then
6884             return Empty;
6885          end if;
6886       end loop;
6887    end Next_Formal;
6888
6889    -----------------------------
6890    -- Next_Formal_With_Extras --
6891    -----------------------------
6892
6893    function Next_Formal_With_Extras (Id : E) return E is
6894    begin
6895       if Present (Extra_Formal (Id)) then
6896          return Extra_Formal (Id);
6897       else
6898          return Next_Formal (Id);
6899       end if;
6900    end Next_Formal_With_Extras;
6901
6902    ----------------
6903    -- Next_Index --
6904    ----------------
6905
6906    function Next_Index (Id : Node_Id) return Node_Id is
6907    begin
6908       return Next (Id);
6909    end Next_Index;
6910
6911    ------------------
6912    -- Next_Literal --
6913    ------------------
6914
6915    function Next_Literal (Id : E) return E is
6916    begin
6917       pragma Assert (Nkind (Id) in N_Entity);
6918       return Next (Id);
6919    end Next_Literal;
6920
6921    ------------------------------
6922    -- Next_Stored_Discriminant --
6923    ------------------------------
6924
6925    function Next_Stored_Discriminant (Id : E) return E is
6926    begin
6927       --  See comment in Next_Discriminant
6928
6929       return Next_Discriminant (Id);
6930    end Next_Stored_Discriminant;
6931
6932    -----------------------
6933    -- Number_Dimensions --
6934    -----------------------
6935
6936    function Number_Dimensions (Id : E) return Pos is
6937       N : Int;
6938       T : Node_Id;
6939
6940    begin
6941       if Ekind (Id) in String_Kind then
6942          return 1;
6943
6944       else
6945          N := 0;
6946          T := First_Index (Id);
6947          while Present (T) loop
6948             N := N + 1;
6949             T := Next (T);
6950          end loop;
6951
6952          return N;
6953       end if;
6954    end Number_Dimensions;
6955
6956    --------------------------
6957    -- Number_Discriminants --
6958    --------------------------
6959
6960    function Number_Discriminants (Id : E) return Pos is
6961       N     : Int;
6962       Discr : Entity_Id;
6963
6964    begin
6965       N := 0;
6966       Discr := First_Discriminant (Id);
6967       while Present (Discr) loop
6968          N := N + 1;
6969          Discr := Next_Discriminant (Discr);
6970       end loop;
6971
6972       return N;
6973    end Number_Discriminants;
6974
6975    --------------------
6976    -- Number_Entries --
6977    --------------------
6978
6979    function Number_Entries (Id : E) return Nat is
6980       N      : Int;
6981       Ent    : Entity_Id;
6982
6983    begin
6984       pragma Assert (Is_Concurrent_Type (Id));
6985
6986       N := 0;
6987       Ent := First_Entity (Id);
6988       while Present (Ent) loop
6989          if Is_Entry (Ent) then
6990             N := N + 1;
6991          end if;
6992
6993          Ent := Next_Entity (Ent);
6994       end loop;
6995
6996       return N;
6997    end Number_Entries;
6998
6999    --------------------
7000    -- Number_Formals --
7001    --------------------
7002
7003    function Number_Formals (Id : E) return Pos is
7004       N      : Int;
7005       Formal : Entity_Id;
7006
7007    begin
7008       N := 0;
7009       Formal := First_Formal (Id);
7010       while Present (Formal) loop
7011          N := N + 1;
7012          Formal := Next_Formal (Formal);
7013       end loop;
7014
7015       return N;
7016    end Number_Formals;
7017
7018    --------------------
7019    -- Parameter_Mode --
7020    --------------------
7021
7022    function Parameter_Mode (Id : E) return Formal_Kind is
7023    begin
7024       return Ekind (Id);
7025    end Parameter_Mode;
7026
7027    ---------------------
7028    -- Record_Rep_Item --
7029    ---------------------
7030
7031    procedure Record_Rep_Item (E : Entity_Id; N : Node_Id) is
7032    begin
7033       Set_Next_Rep_Item (N, First_Rep_Item (E));
7034       Set_First_Rep_Item (E, N);
7035    end Record_Rep_Item;
7036
7037    ---------------
7038    -- Root_Type --
7039    ---------------
7040
7041    function Root_Type (Id : E) return E is
7042       T, Etyp : E;
7043
7044    begin
7045       pragma Assert (Nkind (Id) in N_Entity);
7046
7047       T := Base_Type (Id);
7048
7049       if Ekind (T) = E_Class_Wide_Type then
7050          return Etype (T);
7051
7052       elsif Ekind (T) = E_Class_Wide_Subtype then
7053          return Etype (Base_Type (T));
7054
7055          --  ??? T comes from Base_Type, how can it be a subtype?
7056          --  Also Base_Type is supposed to be idempotent, so either way
7057          --  this is equivalent to "return Etype (T)" and should be merged
7058          --  with the E_Class_Wide_Type case.
7059
7060       --  All other cases
7061
7062       else
7063          loop
7064             Etyp := Etype (T);
7065
7066             if T = Etyp then
7067                return T;
7068
7069             --  Following test catches some error cases resulting from
7070             --  previous errors.
7071
7072             elsif No (Etyp) then
7073                return T;
7074
7075             elsif Is_Private_Type (T) and then Etyp = Full_View (T) then
7076                return T;
7077
7078             elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then
7079                return T;
7080             end if;
7081
7082             T := Etyp;
7083
7084             --  Return if there is a circularity in the inheritance chain. This
7085             --  happens in some error situations and we do not want to get
7086             --  stuck in this loop.
7087
7088             if T = Base_Type (Id) then
7089                return T;
7090             end if;
7091          end loop;
7092       end if;
7093    end Root_Type;
7094
7095    -----------------
7096    -- Scope_Depth --
7097    -----------------
7098
7099    function Scope_Depth (Id : E) return Uint is
7100       Scop : Entity_Id;
7101
7102    begin
7103       Scop := Id;
7104       while Is_Record_Type (Scop) loop
7105          Scop := Scope (Scop);
7106       end loop;
7107
7108       return Scope_Depth_Value (Scop);
7109    end Scope_Depth;
7110
7111    ---------------------
7112    -- Scope_Depth_Set --
7113    ---------------------
7114
7115    function Scope_Depth_Set (Id : E) return B is
7116    begin
7117       return not Is_Record_Type (Id)
7118         and then Field22 (Id) /= Union_Id (Empty);
7119    end Scope_Depth_Set;
7120
7121    -----------------------------
7122    -- Set_Component_Alignment --
7123    -----------------------------
7124
7125    --  Component Alignment is encoded using two flags, Flag128/129 as
7126    --  follows. Note that both flags False = Align_Default, so that the
7127    --  default initialization of flags to False initializes component
7128    --  alignment to the default value as required.
7129
7130    --     Flag128      Flag129      Value
7131    --     -------      -------      -----
7132    --      False        False       Calign_Default
7133    --      False        True        Calign_Component_Size
7134    --      True         False       Calign_Component_Size_4
7135    --      True         True        Calign_Storage_Unit
7136
7137    procedure Set_Component_Alignment (Id : E; V : C) is
7138    begin
7139       pragma Assert ((Is_Array_Type (Id) or else Is_Record_Type (Id))
7140                        and then Id = Base_Type (Id));
7141
7142       case V is
7143          when Calign_Default          =>
7144             Set_Flag128 (Id, False);
7145             Set_Flag129 (Id, False);
7146
7147          when Calign_Component_Size   =>
7148             Set_Flag128 (Id, False);
7149             Set_Flag129 (Id, True);
7150
7151          when Calign_Component_Size_4 =>
7152             Set_Flag128 (Id, True);
7153             Set_Flag129 (Id, False);
7154
7155          when Calign_Storage_Unit     =>
7156             Set_Flag128 (Id, True);
7157             Set_Flag129 (Id, True);
7158       end case;
7159    end Set_Component_Alignment;
7160
7161    -----------------
7162    -- Size_Clause --
7163    -----------------
7164
7165    function Size_Clause (Id : E) return N is
7166    begin
7167       return Rep_Clause (Id, Name_Size);
7168    end Size_Clause;
7169
7170    ------------------------
7171    -- Stream_Size_Clause --
7172    ------------------------
7173
7174    function Stream_Size_Clause (Id : E) return N is
7175    begin
7176       return Rep_Clause (Id, Name_Stream_Size);
7177    end Stream_Size_Clause;
7178
7179    ------------------
7180    -- Subtype_Kind --
7181    ------------------
7182
7183    function Subtype_Kind (K : Entity_Kind) return Entity_Kind is
7184       Kind : Entity_Kind;
7185
7186    begin
7187       case K is
7188          when Access_Kind                    =>
7189             Kind := E_Access_Subtype;
7190
7191          when E_Array_Type                   |
7192               E_Array_Subtype                =>
7193             Kind := E_Array_Subtype;
7194
7195          when E_Class_Wide_Type              |
7196               E_Class_Wide_Subtype           =>
7197             Kind := E_Class_Wide_Subtype;
7198
7199          when E_Decimal_Fixed_Point_Type     |
7200               E_Decimal_Fixed_Point_Subtype  =>
7201             Kind := E_Decimal_Fixed_Point_Subtype;
7202
7203          when E_Ordinary_Fixed_Point_Type    |
7204               E_Ordinary_Fixed_Point_Subtype =>
7205             Kind := E_Ordinary_Fixed_Point_Subtype;
7206
7207          when E_Private_Type                 |
7208               E_Private_Subtype              =>
7209             Kind := E_Private_Subtype;
7210
7211          when E_Limited_Private_Type         |
7212               E_Limited_Private_Subtype      =>
7213             Kind := E_Limited_Private_Subtype;
7214
7215          when E_Record_Type_With_Private     |
7216               E_Record_Subtype_With_Private  =>
7217             Kind := E_Record_Subtype_With_Private;
7218
7219          when E_Record_Type                  |
7220               E_Record_Subtype               =>
7221             Kind := E_Record_Subtype;
7222
7223          when E_String_Type                  |
7224               E_String_Subtype               =>
7225             Kind := E_String_Subtype;
7226
7227          when Enumeration_Kind               =>
7228             Kind := E_Enumeration_Subtype;
7229
7230          when Float_Kind                     =>
7231             Kind := E_Floating_Point_Subtype;
7232
7233          when Signed_Integer_Kind            =>
7234             Kind := E_Signed_Integer_Subtype;
7235
7236          when Modular_Integer_Kind           =>
7237             Kind := E_Modular_Integer_Subtype;
7238
7239          when Protected_Kind                 =>
7240             Kind := E_Protected_Subtype;
7241
7242          when Task_Kind                      =>
7243             Kind := E_Task_Subtype;
7244
7245          when others                         =>
7246             Kind := E_Void;
7247             raise Program_Error;
7248       end case;
7249
7250       return Kind;
7251    end Subtype_Kind;
7252
7253    -------------------------
7254    -- First_Tag_Component --
7255    -------------------------
7256
7257    function First_Tag_Component (Id : E) return E is
7258       Comp : Entity_Id;
7259       Typ  : Entity_Id := Id;
7260
7261    begin
7262       pragma Assert (Is_Tagged_Type (Typ));
7263
7264       if Is_Class_Wide_Type (Typ) then
7265          Typ := Root_Type (Typ);
7266       end if;
7267
7268       if Is_Private_Type (Typ) then
7269          Typ := Underlying_Type (Typ);
7270
7271          --  If the underlying type is missing then the source program has
7272          --  errors and there is nothing else to do (the full-type declaration
7273          --  associated with the private type declaration is missing).
7274
7275          if No (Typ) then
7276             return Empty;
7277          end if;
7278       end if;
7279
7280       Comp := First_Entity (Typ);
7281       while Present (Comp) loop
7282          if Is_Tag (Comp) then
7283             return Comp;
7284          end if;
7285
7286          Comp := Next_Entity (Comp);
7287       end loop;
7288
7289       --  No tag component found
7290
7291       return Empty;
7292    end First_Tag_Component;
7293
7294    ------------------------
7295    -- Next_Tag_Component --
7296    ------------------------
7297
7298    function Next_Tag_Component (Id : E) return E is
7299       Comp : Entity_Id;
7300       Typ  : constant Entity_Id := Scope (Id);
7301
7302    begin
7303       pragma Assert (Ekind (Id) = E_Component
7304                        and then Is_Tagged_Type (Typ));
7305
7306       Comp := Next_Entity (Id);
7307       while Present (Comp) loop
7308          if Is_Tag (Comp) then
7309             pragma Assert (Chars (Comp) /= Name_uTag);
7310             return Comp;
7311          end if;
7312
7313          Comp := Next_Entity (Comp);
7314       end loop;
7315
7316       --  No tag component found
7317
7318       return Empty;
7319    end Next_Tag_Component;
7320
7321    ---------------------
7322    -- Type_High_Bound --
7323    ---------------------
7324
7325    function Type_High_Bound (Id : E) return Node_Id is
7326       Rng : constant Node_Id := Scalar_Range (Id);
7327    begin
7328       if Nkind (Rng) = N_Subtype_Indication then
7329          return High_Bound (Range_Expression (Constraint (Rng)));
7330       else
7331          return High_Bound (Rng);
7332       end if;
7333    end Type_High_Bound;
7334
7335    --------------------
7336    -- Type_Low_Bound --
7337    --------------------
7338
7339    function Type_Low_Bound (Id : E) return Node_Id is
7340       Rng : constant Node_Id := Scalar_Range (Id);
7341    begin
7342       if Nkind (Rng) = N_Subtype_Indication then
7343          return Low_Bound (Range_Expression (Constraint (Rng)));
7344       else
7345          return Low_Bound (Rng);
7346       end if;
7347    end Type_Low_Bound;
7348
7349    ---------------------
7350    -- Underlying_Type --
7351    ---------------------
7352
7353    function Underlying_Type (Id : E) return E is
7354    begin
7355       --  For record_with_private the underlying type is always the direct
7356       --  full view. Never try to take the full view of the parent it
7357       --  doesn't make sense.
7358
7359       if Ekind (Id) = E_Record_Type_With_Private then
7360          return Full_View (Id);
7361
7362       elsif Ekind (Id) in Incomplete_Or_Private_Kind then
7363
7364          --  If we have an incomplete or private type with a full view,
7365          --  then we return the Underlying_Type of this full view
7366
7367          if Present (Full_View (Id)) then
7368             if Id = Full_View (Id) then
7369
7370                --  Previous error in declaration
7371
7372                return Empty;
7373
7374             else
7375                return Underlying_Type (Full_View (Id));
7376             end if;
7377
7378          --  If we have an incomplete entity that comes from the limited
7379          --  view then we return the Underlying_Type of its non-limited
7380          --  view.
7381
7382          elsif From_With_Type (Id)
7383            and then Present (Non_Limited_View (Id))
7384          then
7385             return Underlying_Type (Non_Limited_View (Id));
7386
7387          --  Otherwise check for the case where we have a derived type or
7388          --  subtype, and if so get the Underlying_Type of the parent type.
7389
7390          elsif Etype (Id) /= Id then
7391             return Underlying_Type (Etype (Id));
7392
7393          --  Otherwise we have an incomplete or private type that has
7394          --  no full view, which means that we have not encountered the
7395          --  completion, so return Empty to indicate the underlying type
7396          --  is not yet known.
7397
7398          else
7399             return Empty;
7400          end if;
7401
7402       --  For non-incomplete, non-private types, return the type itself
7403       --  Also for entities that are not types at all return the entity
7404       --  itself.
7405
7406       else
7407          return Id;
7408       end if;
7409    end Underlying_Type;
7410
7411    ------------------------
7412    -- Write_Entity_Flags --
7413    ------------------------
7414
7415    procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String) is
7416
7417       procedure W (Flag_Name : String; Flag : Boolean);
7418       --  Write out given flag if it is set
7419
7420       -------
7421       -- W --
7422       -------
7423
7424       procedure W (Flag_Name : String; Flag : Boolean) is
7425       begin
7426          if Flag then
7427             Write_Str (Prefix);
7428             Write_Str (Flag_Name);
7429             Write_Str (" = True");
7430             Write_Eol;
7431          end if;
7432       end W;
7433
7434    --  Start of processing for Write_Entity_Flags
7435
7436    begin
7437       if (Is_Array_Type (Id) or else Is_Record_Type (Id))
7438         and then Id = Base_Type (Id)
7439       then
7440          Write_Str (Prefix);
7441          Write_Str ("Component_Alignment = ");
7442
7443          case Component_Alignment (Id) is
7444             when Calign_Default =>
7445                Write_Str ("Calign_Default");
7446
7447             when Calign_Component_Size =>
7448                Write_Str ("Calign_Component_Size");
7449
7450             when Calign_Component_Size_4 =>
7451                Write_Str ("Calign_Component_Size_4");
7452
7453             when Calign_Storage_Unit =>
7454                Write_Str ("Calign_Storage_Unit");
7455          end case;
7456
7457          Write_Eol;
7458       end if;
7459
7460       W ("Address_Taken",                   Flag104 (Id));
7461       W ("Body_Needed_For_SAL",             Flag40  (Id));
7462       W ("C_Pass_By_Copy",                  Flag125 (Id));
7463       W ("Can_Never_Be_Null",               Flag38  (Id));
7464       W ("Checks_May_Be_Suppressed",        Flag31  (Id));
7465       W ("Debug_Info_Off",                  Flag166 (Id));
7466       W ("Default_Expressions_Processed",   Flag108 (Id));
7467       W ("Delay_Cleanups",                  Flag114 (Id));
7468       W ("Delay_Subprogram_Descriptors",    Flag50  (Id));
7469       W ("Depends_On_Private",              Flag14  (Id));
7470       W ("Discard_Names",                   Flag88  (Id));
7471       W ("Elaboration_Entity_Required",     Flag174 (Id));
7472       W ("Elaborate_Body_Desirable",        Flag210 (Id));
7473       W ("Entry_Accepted",                  Flag152 (Id));
7474       W ("Can_Use_Internal_Rep",            Flag229 (Id));
7475       W ("Finalize_Storage_Only",           Flag158 (Id));
7476       W ("From_With_Type",                  Flag159 (Id));
7477       W ("Function_Returns_With_DSP",       Flag169 (Id));
7478       W ("Has_Aliased_Components",          Flag135 (Id));
7479       W ("Has_Alignment_Clause",            Flag46  (Id));
7480       W ("Has_All_Calls_Remote",            Flag79  (Id));
7481       W ("Has_Anon_Block_Suffix",           Flag201 (Id));
7482       W ("Has_Atomic_Components",           Flag86  (Id));
7483       W ("Has_Biased_Representation",       Flag139 (Id));
7484       W ("Has_Completion",                  Flag26  (Id));
7485       W ("Has_Completion_In_Body",          Flag71  (Id));
7486       W ("Has_Complex_Representation",      Flag140 (Id));
7487       W ("Has_Component_Size_Clause",       Flag68  (Id));
7488       W ("Has_Contiguous_Rep",              Flag181 (Id));
7489       W ("Has_Controlled_Component",        Flag43  (Id));
7490       W ("Has_Controlling_Result",          Flag98  (Id));
7491       W ("Has_Convention_Pragma",           Flag119 (Id));
7492       W ("Has_Delayed_Freeze",              Flag18  (Id));
7493       W ("Has_Discriminants",               Flag5   (Id));
7494       W ("Has_Enumeration_Rep_Clause",      Flag66  (Id));
7495       W ("Has_Exit",                        Flag47  (Id));
7496       W ("Has_External_Tag_Rep_Clause",     Flag110 (Id));
7497       W ("Has_Forward_Instantiation",       Flag175 (Id));
7498       W ("Has_Fully_Qualified_Name",        Flag173 (Id));
7499       W ("Has_Gigi_Rep_Item",               Flag82  (Id));
7500       W ("Has_Homonym",                     Flag56  (Id));
7501       W ("Has_Initial_Value",               Flag219 (Id));
7502       W ("Has_Machine_Radix_Clause",        Flag83  (Id));
7503       W ("Has_Master_Entity",               Flag21  (Id));
7504       W ("Has_Missing_Return",              Flag142 (Id));
7505       W ("Has_Nested_Block_With_Handler",   Flag101 (Id));
7506       W ("Has_Non_Standard_Rep",            Flag75  (Id));
7507       W ("Has_Object_Size_Clause",          Flag172 (Id));
7508       W ("Has_Per_Object_Constraint",       Flag154 (Id));
7509       W ("Has_Persistent_BSS",              Flag188 (Id));
7510       W ("Has_Postconditions",              Flag240 (Id));
7511       W ("Has_Pragma_Controlled",           Flag27  (Id));
7512       W ("Has_Pragma_Elaborate_Body",       Flag150 (Id));
7513       W ("Has_Pragma_Inline",               Flag157 (Id));
7514       W ("Has_Pragma_Inline_Always",        Flag230 (Id));
7515       W ("Has_Pragma_Pack",                 Flag121 (Id));
7516       W ("Has_Pragma_Preelab_Init",         Flag221 (Id));
7517       W ("Has_Pragma_Pure",                 Flag203 (Id));
7518       W ("Has_Pragma_Pure_Function",        Flag179 (Id));
7519       W ("Has_Pragma_Unmodified",           Flag233 (Id));
7520       W ("Has_Pragma_Unreferenced",         Flag180 (Id));
7521       W ("Has_Pragma_Unreferenced_Objects", Flag212 (Id));
7522       W ("Has_Primitive_Operations",        Flag120 (Id));
7523       W ("Has_Private_Declaration",         Flag155 (Id));
7524       W ("Has_Qualified_Name",              Flag161 (Id));
7525       W ("Has_RACW",                        Flag214 (Id));
7526       W ("Has_Record_Rep_Clause",           Flag65  (Id));
7527       W ("Has_Recursive_Call",              Flag143 (Id));
7528       W ("Has_Size_Clause",                 Flag29  (Id));
7529       W ("Has_Small_Clause",                Flag67  (Id));
7530       W ("Has_Specified_Layout",            Flag100 (Id));
7531       W ("Has_Specified_Stream_Input",      Flag190 (Id));
7532       W ("Has_Specified_Stream_Output",     Flag191 (Id));
7533       W ("Has_Specified_Stream_Read",       Flag192 (Id));
7534       W ("Has_Specified_Stream_Write",      Flag193 (Id));
7535       W ("Has_Static_Discriminants",        Flag211 (Id));
7536       W ("Has_Storage_Size_Clause",         Flag23  (Id));
7537       W ("Has_Stream_Size_Clause",          Flag184 (Id));
7538       W ("Has_Subprogram_Descriptor",       Flag93  (Id));
7539       W ("Has_Task",                        Flag30  (Id));
7540       W ("Has_Thunks",                      Flag228 (Id));
7541       W ("Has_Unchecked_Union",             Flag123 (Id));
7542       W ("Has_Unknown_Discriminants",       Flag72  (Id));
7543       W ("Has_Up_Level_Access",             Flag215 (Id));
7544       W ("Has_Volatile_Components",         Flag87  (Id));
7545       W ("Has_Xref_Entry",                  Flag182 (Id));
7546       W ("Implemented_By_Entry",            Flag232 (Id));
7547       W ("In_Package_Body",                 Flag48  (Id));
7548       W ("In_Private_Part",                 Flag45  (Id));
7549       W ("In_Use",                          Flag8   (Id));
7550       W ("Is_AST_Entry",                    Flag132 (Id));
7551       W ("Is_Abstract_Subprogram",          Flag19  (Id));
7552       W ("Is_Abstract_Type",                Flag146  (Id));
7553       W ("Is_Local_Anonymous_Access",       Flag194 (Id));
7554       W ("Is_Access_Constant",              Flag69  (Id));
7555       W ("Is_Ada_2005_Only",                Flag185 (Id));
7556       W ("Is_Aliased",                      Flag15  (Id));
7557       W ("Is_Asynchronous",                 Flag81  (Id));
7558       W ("Is_Atomic",                       Flag85  (Id));
7559       W ("Is_Bit_Packed_Array",             Flag122 (Id));
7560       W ("Is_CPP_Class",                    Flag74  (Id));
7561       W ("Is_Called",                       Flag102 (Id));
7562       W ("Is_Character_Type",               Flag63  (Id));
7563       W ("Is_Child_Unit",                   Flag73  (Id));
7564       W ("Is_Class_Wide_Equivalent_Type",   Flag35  (Id));
7565       W ("Is_Compilation_Unit",             Flag149 (Id));
7566       W ("Is_Completely_Hidden",            Flag103 (Id));
7567       W ("Is_Concurrent_Record_Type",       Flag20  (Id));
7568       W ("Is_Constr_Subt_For_UN_Aliased",   Flag141 (Id));
7569       W ("Is_Constr_Subt_For_U_Nominal",    Flag80  (Id));
7570       W ("Is_Constrained",                  Flag12  (Id));
7571       W ("Is_Constructor",                  Flag76  (Id));
7572       W ("Is_Controlled",                   Flag42  (Id));
7573       W ("Is_Controlling_Formal",           Flag97  (Id));
7574       W ("Is_Descendent_Of_Address",        Flag223 (Id));
7575       W ("Is_Discrim_SO_Function",          Flag176 (Id));
7576       W ("Is_Dispatch_Table_Entity",        Flag234 (Id));
7577       W ("Is_Dispatching_Operation",        Flag6   (Id));
7578       W ("Is_Eliminated",                   Flag124 (Id));
7579       W ("Is_Entry_Formal",                 Flag52  (Id));
7580       W ("Is_Exported",                     Flag99  (Id));
7581       W ("Is_First_Subtype",                Flag70  (Id));
7582       W ("Is_For_Access_Subtype",           Flag118 (Id));
7583       W ("Is_Formal_Subprogram",            Flag111 (Id));
7584       W ("Is_Frozen",                       Flag4   (Id));
7585       W ("Is_Generic_Actual_Type",          Flag94  (Id));
7586       W ("Is_Generic_Instance",             Flag130 (Id));
7587       W ("Is_Generic_Type",                 Flag13  (Id));
7588       W ("Is_Hidden",                       Flag57  (Id));
7589       W ("Is_Hidden_Open_Scope",            Flag171 (Id));
7590       W ("Is_Immediately_Visible",          Flag7   (Id));
7591       W ("Is_Imported",                     Flag24  (Id));
7592       W ("Is_Inlined",                      Flag11  (Id));
7593       W ("Is_Instantiated",                 Flag126 (Id));
7594       W ("Is_Interface",                    Flag186 (Id));
7595       W ("Is_Internal",                     Flag17  (Id));
7596       W ("Is_Interrupt_Handler",            Flag89  (Id));
7597       W ("Is_Intrinsic_Subprogram",         Flag64  (Id));
7598       W ("Is_Itype",                        Flag91  (Id));
7599       W ("Is_Known_Non_Null",               Flag37  (Id));
7600       W ("Is_Known_Null",                   Flag204 (Id));
7601       W ("Is_Known_Valid",                  Flag170 (Id));
7602       W ("Is_Limited_Composite",            Flag106 (Id));
7603       W ("Is_Limited_Interface",            Flag197 (Id));
7604       W ("Is_Limited_Record",               Flag25  (Id));
7605       W ("Is_Machine_Code_Subprogram",      Flag137 (Id));
7606       W ("Is_Non_Static_Subtype",           Flag109 (Id));
7607       W ("Is_Null_Init_Proc",               Flag178 (Id));
7608       W ("Is_Obsolescent",                  Flag153 (Id));
7609       W ("Is_Only_Out_Parameter",           Flag226 (Id));
7610       W ("Is_Optional_Parameter",           Flag134 (Id));
7611       W ("Is_Overriding_Operation",         Flag39  (Id));
7612       W ("Is_Package_Body_Entity",          Flag160 (Id));
7613       W ("Is_Packed",                       Flag51  (Id));
7614       W ("Is_Packed_Array_Type",            Flag138 (Id));
7615       W ("Is_Potentially_Use_Visible",      Flag9   (Id));
7616       W ("Is_Preelaborated",                Flag59  (Id));
7617       W ("Is_Primitive_Wrapper",            Flag195 (Id));
7618       W ("Is_Private_Composite",            Flag107 (Id));
7619       W ("Is_Private_Descendant",           Flag53  (Id));
7620       W ("Is_Protected_Interface",          Flag198 (Id));
7621       W ("Is_Public",                       Flag10  (Id));
7622       W ("Is_Pure",                         Flag44  (Id));
7623       W ("Is_Pure_Unit_Access_Type",        Flag189 (Id));
7624       W ("Is_Raised",                       Flag224 (Id));
7625       W ("Is_Remote_Call_Interface",        Flag62  (Id));
7626       W ("Is_Remote_Types",                 Flag61  (Id));
7627       W ("Is_Renaming_Of_Object",           Flag112 (Id));
7628       W ("Is_Return_Object",                Flag209 (Id));
7629       W ("Is_Shared_Passive",               Flag60  (Id));
7630       W ("Is_Synchronized_Interface",       Flag199 (Id));
7631       W ("Is_Statically_Allocated",         Flag28  (Id));
7632       W ("Is_Tag",                          Flag78  (Id));
7633       W ("Is_Tagged_Type",                  Flag55  (Id));
7634       W ("Is_Task_Interface",               Flag200 (Id));
7635       W ("Is_Thunk",                        Flag225 (Id));
7636       W ("Is_Trivial_Subprogram",           Flag235 (Id));
7637       W ("Is_True_Constant",                Flag163 (Id));
7638       W ("Is_Unchecked_Union",              Flag117 (Id));
7639       W ("Is_Unsigned_Type",                Flag144 (Id));
7640       W ("Is_VMS_Exception",                Flag133 (Id));
7641       W ("Is_Valued_Procedure",             Flag127 (Id));
7642       W ("Is_Visible_Child_Unit",           Flag116 (Id));
7643       W ("Is_Visible_Formal",               Flag206 (Id));
7644       W ("Is_Volatile",                     Flag16  (Id));
7645       W ("Itype_Printed",                   Flag202 (Id));
7646       W ("Kill_Elaboration_Checks",         Flag32  (Id));
7647       W ("Kill_Range_Checks",               Flag33  (Id));
7648       W ("Kill_Tag_Checks",                 Flag34  (Id));
7649       W ("Known_To_Have_Preelab_Init",      Flag207 (Id));
7650       W ("Low_Bound_Known",                 Flag205 (Id));
7651       W ("Machine_Radix_10",                Flag84  (Id));
7652       W ("Materialize_Entity",              Flag168 (Id));
7653       W ("Must_Be_On_Byte_Boundary",        Flag183 (Id));
7654       W ("Must_Have_Preelab_Init",          Flag208 (Id));
7655       W ("Needs_Debug_Info",                Flag147 (Id));
7656       W ("Needs_No_Actuals",                Flag22  (Id));
7657       W ("Never_Set_In_Source",             Flag115 (Id));
7658       W ("No_Pool_Assigned",                Flag131 (Id));
7659       W ("No_Return",                       Flag113 (Id));
7660       W ("No_Strict_Aliasing",              Flag136 (Id));
7661       W ("Non_Binary_Modulus",              Flag58  (Id));
7662       W ("Nonzero_Is_True",                 Flag162 (Id));
7663       W ("OK_To_Reorder_Components",        Flag239 (Id));
7664       W ("Optimize_Alignment_Space",        Flag241 (Id));
7665       W ("Optimize_Alignment_Time",         Flag242 (Id));
7666       W ("Overlays_Constant",               Flag243 (Id));
7667       W ("Reachable",                       Flag49  (Id));
7668       W ("Referenced",                      Flag156 (Id));
7669       W ("Referenced_As_LHS",               Flag36  (Id));
7670       W ("Referenced_As_Out_Parameter",     Flag227 (Id));
7671       W ("Renamed_In_Spec",                 Flag231 (Id));
7672       W ("Requires_Overriding",             Flag213 (Id));
7673       W ("Return_Present",                  Flag54  (Id));
7674       W ("Returns_By_Ref",                  Flag90  (Id));
7675       W ("Reverse_Bit_Order",               Flag164 (Id));
7676       W ("Sec_Stack_Needed_For_Return",     Flag167 (Id));
7677       W ("Size_Depends_On_Discriminant",    Flag177 (Id));
7678       W ("Size_Known_At_Compile_Time",      Flag92  (Id));
7679       W ("Static_Elaboration_Desired",      Flag77  (Id));
7680       W ("Strict_Alignment",                Flag145 (Id));
7681       W ("Suppress_Elaboration_Warnings",   Flag148 (Id));
7682       W ("Suppress_Init_Proc",              Flag105 (Id));
7683       W ("Suppress_Style_Checks",           Flag165 (Id));
7684       W ("Suppress_Value_Tracking_On_Call", Flag217 (Id));
7685       W ("Is_Primitive",                    Flag218 (Id));
7686       W ("Treat_As_Volatile",               Flag41  (Id));
7687       W ("Universal_Aliasing",              Flag216 (Id));
7688       W ("Used_As_Generic_Actual",          Flag222 (Id));
7689       W ("Uses_Sec_Stack",                  Flag95  (Id));
7690       W ("Vax_Float",                       Flag151 (Id));
7691       W ("Warnings_Off",                    Flag96  (Id));
7692       W ("Warnings_Off_Used",               Flag236 (Id));
7693       W ("Warnings_Off_Used_Unmodified",    Flag237 (Id));
7694       W ("Warnings_Off_Used_Unreferenced",  Flag238 (Id));
7695       W ("Was_Hidden",                      Flag196 (Id));
7696    end Write_Entity_Flags;
7697
7698    -----------------------
7699    -- Write_Entity_Info --
7700    -----------------------
7701
7702    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String) is
7703
7704       procedure Write_Attribute (Which : String; Nam : E);
7705       --  Write attribute value with given string name
7706
7707       procedure Write_Kind (Id : Entity_Id);
7708       --  Write Ekind field of entity
7709
7710       ---------------------
7711       -- Write_Attribute --
7712       ---------------------
7713
7714       procedure Write_Attribute (Which : String; Nam : E) is
7715       begin
7716          Write_Str (Prefix);
7717          Write_Str (Which);
7718          Write_Int (Int (Nam));
7719          Write_Str (" ");
7720          Write_Name (Chars (Nam));
7721          Write_Str (" ");
7722       end Write_Attribute;
7723
7724       ----------------
7725       -- Write_Kind --
7726       ----------------
7727
7728       procedure Write_Kind (Id : Entity_Id) is
7729          K : constant String := Entity_Kind'Image (Ekind (Id));
7730
7731       begin
7732          Write_Str (Prefix);
7733          Write_Str ("   Kind    ");
7734
7735          if Is_Type (Id) and then Is_Tagged_Type (Id) then
7736             Write_Str ("TAGGED ");
7737          end if;
7738
7739          Write_Str (K (3 .. K'Length));
7740          Write_Str (" ");
7741
7742          if Is_Type (Id) and then Depends_On_Private (Id) then
7743             Write_Str ("Depends_On_Private ");
7744          end if;
7745       end Write_Kind;
7746
7747    --  Start of processing for Write_Entity_Info
7748
7749    begin
7750       Write_Eol;
7751       Write_Attribute ("Name ", Id);
7752       Write_Int (Int (Id));
7753       Write_Eol;
7754       Write_Kind (Id);
7755       Write_Eol;
7756       Write_Attribute ("   Type    ", Etype (Id));
7757       Write_Eol;
7758       Write_Attribute ("   Scope   ", Scope (Id));
7759       Write_Eol;
7760
7761       case Ekind (Id) is
7762
7763          when Discrete_Kind =>
7764             Write_Str ("Bounds: Id = ");
7765
7766             if Present (Scalar_Range (Id)) then
7767                Write_Int (Int (Type_Low_Bound (Id)));
7768                Write_Str (" .. Id = ");
7769                Write_Int (Int (Type_High_Bound (Id)));
7770             else
7771                Write_Str ("Empty");
7772             end if;
7773
7774             Write_Eol;
7775
7776          when Array_Kind =>
7777             declare
7778                Index : E;
7779
7780             begin
7781                Write_Attribute
7782                  ("   Component Type    ", Component_Type (Id));
7783                Write_Eol;
7784                Write_Str (Prefix);
7785                Write_Str ("   Indices ");
7786
7787                Index := First_Index (Id);
7788                while Present (Index) loop
7789                   Write_Attribute (" ", Etype (Index));
7790                   Index := Next_Index (Index);
7791                end loop;
7792
7793                Write_Eol;
7794             end;
7795
7796          when Access_Kind =>
7797                Write_Attribute
7798                  ("   Directly Designated Type ",
7799                   Directly_Designated_Type (Id));
7800                Write_Eol;
7801
7802          when Overloadable_Kind =>
7803             if Present (Homonym (Id)) then
7804                Write_Str ("   Homonym   ");
7805                Write_Name (Chars (Homonym (Id)));
7806                Write_Str ("   ");
7807                Write_Int (Int (Homonym (Id)));
7808                Write_Eol;
7809             end if;
7810
7811             Write_Eol;
7812
7813          when E_Component =>
7814             if Ekind (Scope (Id)) in Record_Kind then
7815                Write_Attribute (
7816                   "   Original_Record_Component   ",
7817                   Original_Record_Component (Id));
7818                Write_Int (Int (Original_Record_Component (Id)));
7819                Write_Eol;
7820             end if;
7821
7822          when others => null;
7823       end case;
7824    end Write_Entity_Info;
7825
7826    -----------------------
7827    -- Write_Field6_Name --
7828    -----------------------
7829
7830    procedure Write_Field6_Name (Id : Entity_Id) is
7831       pragma Warnings (Off, Id);
7832    begin
7833       Write_Str ("First_Rep_Item");
7834    end Write_Field6_Name;
7835
7836    -----------------------
7837    -- Write_Field7_Name --
7838    -----------------------
7839
7840    procedure Write_Field7_Name (Id : Entity_Id) is
7841       pragma Warnings (Off, Id);
7842    begin
7843       Write_Str ("Freeze_Node");
7844    end Write_Field7_Name;
7845
7846    -----------------------
7847    -- Write_Field8_Name --
7848    -----------------------
7849
7850    procedure Write_Field8_Name (Id : Entity_Id) is
7851    begin
7852       case Ekind (Id) is
7853          when E_Component                                  |
7854               E_Discriminant                               =>
7855             Write_Str ("Normalized_First_Bit");
7856
7857          when Formal_Kind                                  |
7858               E_Function                                   |
7859               E_Subprogram_Body                            =>
7860             Write_Str ("Mechanism");
7861
7862          when Type_Kind                                    =>
7863             Write_Str ("Associated_Node_For_Itype");
7864
7865          when E_Package                                    =>
7866             Write_Str ("Dependent_Instances");
7867
7868          when E_Return_Statement                           =>
7869             Write_Str ("Return_Applies_To");
7870
7871          when E_Variable                                   =>
7872             Write_Str ("Hiding_Loop_Variable");
7873
7874          when others                                       =>
7875             Write_Str ("Field8??");
7876       end case;
7877    end Write_Field8_Name;
7878
7879    -----------------------
7880    -- Write_Field9_Name --
7881    -----------------------
7882
7883    procedure Write_Field9_Name (Id : Entity_Id) is
7884    begin
7885       case Ekind (Id) is
7886          when Type_Kind                                    =>
7887             Write_Str ("Class_Wide_Type");
7888
7889          when E_Function                                   |
7890               E_Generic_Function                           |
7891               E_Generic_Package                            |
7892               E_Generic_Procedure                          |
7893               E_Package                                    |
7894               E_Procedure                                  =>
7895             Write_Str ("Renaming_Map");
7896
7897          when Object_Kind                                  =>
7898             Write_Str ("Current_Value");
7899
7900          when others                                       =>
7901             Write_Str ("Field9??");
7902       end case;
7903    end Write_Field9_Name;
7904
7905    ------------------------
7906    -- Write_Field10_Name --
7907    ------------------------
7908
7909    procedure Write_Field10_Name (Id : Entity_Id) is
7910    begin
7911       case Ekind (Id) is
7912          when Type_Kind                                    =>
7913             Write_Str ("Referenced_Object");
7914
7915          when E_In_Parameter                               |
7916               E_Constant                                   =>
7917             Write_Str ("Discriminal_Link");
7918
7919          when E_Function                                   |
7920               E_Package                                    |
7921               E_Package_Body                               |
7922               E_Procedure                                  =>
7923             Write_Str ("Handler_Records");
7924
7925          when E_Component                                  |
7926               E_Discriminant                               =>
7927             Write_Str ("Normalized_Position_Max");
7928
7929          when others                                       =>
7930             Write_Str ("Field10??");
7931       end case;
7932    end Write_Field10_Name;
7933
7934    ------------------------
7935    -- Write_Field11_Name --
7936    ------------------------
7937
7938    procedure Write_Field11_Name (Id : Entity_Id) is
7939    begin
7940       case Ekind (Id) is
7941          when Formal_Kind                                  =>
7942             Write_Str ("Entry_Component");
7943
7944          when E_Component                                  |
7945               E_Discriminant                               =>
7946             Write_Str ("Component_Bit_Offset");
7947
7948          when E_Constant                                   =>
7949             Write_Str ("Full_View");
7950
7951          when E_Enumeration_Literal                        =>
7952             Write_Str ("Enumeration_Pos");
7953
7954          when E_Block                                      =>
7955             Write_Str ("Block_Node");
7956
7957          when E_Function                                   |
7958               E_Procedure                                  |
7959               E_Entry                                      |
7960               E_Entry_Family                               =>
7961             Write_Str ("Protected_Body_Subprogram");
7962
7963          when E_Generic_Package                            =>
7964             Write_Str ("Generic_Homonym");
7965
7966          when Type_Kind                                    =>
7967             Write_Str ("Full_View");
7968
7969          when others                                       =>
7970             Write_Str ("Field11??");
7971       end case;
7972    end Write_Field11_Name;
7973
7974    ------------------------
7975    -- Write_Field12_Name --
7976    ------------------------
7977
7978    procedure Write_Field12_Name (Id : Entity_Id) is
7979    begin
7980       case Ekind (Id) is
7981          when Entry_Kind                                   =>
7982             Write_Str ("Barrier_Function");
7983
7984          when E_Enumeration_Literal                        =>
7985             Write_Str ("Enumeration_Rep");
7986
7987          when Type_Kind                                    |
7988               E_Component                                  |
7989               E_Constant                                   |
7990               E_Discriminant                               |
7991               E_Exception                                  |
7992               E_In_Parameter                               |
7993               E_In_Out_Parameter                           |
7994               E_Out_Parameter                              |
7995               E_Loop_Parameter                             |
7996               E_Variable                                   =>
7997             Write_Str ("Esize");
7998
7999          when E_Function                                   |
8000               E_Procedure                                  =>
8001             Write_Str ("Next_Inlined_Subprogram");
8002
8003          when E_Package                                    =>
8004             Write_Str ("Associated_Formal_Package");
8005
8006          when others                                       =>
8007             Write_Str ("Field12??");
8008       end case;
8009    end Write_Field12_Name;
8010
8011    ------------------------
8012    -- Write_Field13_Name --
8013    ------------------------
8014
8015    procedure Write_Field13_Name (Id : Entity_Id) is
8016    begin
8017       case Ekind (Id) is
8018          when Type_Kind                                    =>
8019             Write_Str ("RM_Size");
8020
8021          when E_Component                                  |
8022               E_Discriminant                               =>
8023             Write_Str ("Component_Clause");
8024
8025          when E_Function                                   =>
8026             if not Comes_From_Source (Id)
8027                  and then
8028                Chars (Id) = Name_Op_Ne
8029             then
8030                Write_Str ("Corresponding_Equality");
8031
8032             elsif Comes_From_Source (Id) then
8033                Write_Str ("Elaboration_Entity");
8034
8035             else
8036                Write_Str ("Field13??");
8037             end if;
8038
8039          when Formal_Kind                                  |
8040               E_Variable                                   =>
8041             Write_Str ("Extra_Accessibility");
8042
8043          when E_Procedure                                  |
8044               E_Package                                    |
8045               Generic_Unit_Kind                            =>
8046             Write_Str ("Elaboration_Entity");
8047
8048          when others                                       =>
8049             Write_Str ("Field13??");
8050       end case;
8051    end Write_Field13_Name;
8052
8053    -----------------------
8054    -- Write_Field14_Name --
8055    -----------------------
8056
8057    procedure Write_Field14_Name (Id : Entity_Id) is
8058    begin
8059       case Ekind (Id) is
8060          when Type_Kind                                    |
8061               Formal_Kind                                  |
8062               E_Constant                                   |
8063               E_Exception                                  |
8064               E_Variable                                   |
8065               E_Loop_Parameter                             =>
8066             Write_Str ("Alignment");
8067
8068          when E_Component                                  |
8069               E_Discriminant                               =>
8070             Write_Str ("Normalized_Position");
8071
8072          when E_Function                                   |
8073               E_Procedure                                  =>
8074             Write_Str ("First_Optional_Parameter");
8075
8076          when E_Package                                    |
8077               E_Generic_Package                            =>
8078             Write_Str ("Shadow_Entities");
8079
8080          when others                                       =>
8081             Write_Str ("Field14??");
8082       end case;
8083    end Write_Field14_Name;
8084
8085    ------------------------
8086    -- Write_Field15_Name --
8087    ------------------------
8088
8089    procedure Write_Field15_Name (Id : Entity_Id) is
8090    begin
8091       case Ekind (Id) is
8092          when Access_Kind                                  |
8093               Task_Kind                                    =>
8094             Write_Str ("Storage_Size_Variable");
8095
8096          when Class_Wide_Kind                              |
8097               E_Record_Type                                |
8098               E_Record_Subtype                             |
8099               Private_Kind                                 =>
8100             Write_Str ("Primitive_Operations");
8101
8102          when E_Component                                  =>
8103             Write_Str ("DT_Entry_Count");
8104
8105          when Decimal_Fixed_Point_Kind                     =>
8106             Write_Str ("Scale_Value");
8107
8108          when E_Discriminant                               =>
8109             Write_Str ("Discriminant_Number");
8110
8111          when Formal_Kind                                  =>
8112             Write_Str ("Extra_Formal");
8113
8114          when E_Function                                   |
8115               E_Procedure                                  =>
8116             Write_Str ("DT_Position");
8117
8118          when Entry_Kind                                   =>
8119             Write_Str ("Entry_Parameters_Type");
8120
8121          when Enumeration_Kind                             =>
8122             Write_Str ("Lit_Indexes");
8123
8124          when E_Package                                    |
8125               E_Package_Body                               =>
8126             Write_Str ("Related_Instance");
8127
8128          when E_Protected_Type                             =>
8129             Write_Str ("Entry_Bodies_Array");
8130
8131          when E_String_Literal_Subtype                     =>
8132             Write_Str ("String_Literal_Low_Bound");
8133
8134          when E_Variable                                   =>
8135             Write_Str ("Shared_Var_Read_Proc");
8136
8137          when others                                       =>
8138             Write_Str ("Field15??");
8139       end case;
8140    end Write_Field15_Name;
8141
8142    ------------------------
8143    -- Write_Field16_Name --
8144    ------------------------
8145
8146    procedure Write_Field16_Name (Id : Entity_Id) is
8147    begin
8148       case Ekind (Id) is
8149          when E_Component                                  =>
8150             Write_Str ("Entry_Formal");
8151
8152          when E_Function                                   |
8153               E_Procedure                                  =>
8154             Write_Str ("DTC_Entity");
8155
8156          when E_Package                                    |
8157               E_Generic_Package                            |
8158               Concurrent_Kind                              =>
8159             Write_Str ("First_Private_Entity");
8160
8161          when E_Record_Type                                |
8162               E_Record_Type_With_Private                   =>
8163             Write_Str ("Access_Disp_Table");
8164
8165          when E_String_Literal_Subtype                     =>
8166             Write_Str ("String_Literal_Length");
8167
8168          when Enumeration_Kind                             =>
8169             Write_Str ("Lit_Strings");
8170
8171          when E_Variable                                   |
8172               E_Out_Parameter                              =>
8173             Write_Str ("Unset_Reference");
8174
8175          when E_Record_Subtype                             |
8176               E_Class_Wide_Subtype                         =>
8177             Write_Str ("Cloned_Subtype");
8178
8179          when others                                       =>
8180             Write_Str ("Field16??");
8181       end case;
8182    end Write_Field16_Name;
8183
8184    ------------------------
8185    -- Write_Field17_Name --
8186    ------------------------
8187
8188    procedure Write_Field17_Name (Id : Entity_Id) is
8189    begin
8190       case Ekind (Id) is
8191          when Digits_Kind                                  =>
8192             Write_Str ("Digits_Value");
8193
8194          when E_Component                                  =>
8195             Write_Str ("Prival");
8196
8197          when E_Discriminant                               =>
8198             Write_Str ("Discriminal");
8199
8200          when E_Block                                      |
8201               Class_Wide_Kind                              |
8202               Concurrent_Kind                              |
8203               Private_Kind                                 |
8204               E_Entry                                      |
8205               E_Entry_Family                               |
8206               E_Function                                   |
8207               E_Generic_Function                           |
8208               E_Generic_Package                            |
8209               E_Generic_Procedure                          |
8210               E_Loop                                       |
8211               E_Operator                                   |
8212               E_Package                                    |
8213               E_Package_Body                               |
8214               E_Procedure                                  |
8215               E_Record_Type                                |
8216               E_Record_Subtype                             |
8217               E_Return_Statement                           |
8218               E_Subprogram_Body                            |
8219               E_Subprogram_Type                            =>
8220             Write_Str ("First_Entity");
8221
8222          when Array_Kind                                   =>
8223             Write_Str ("First_Index");
8224
8225          when Enumeration_Kind                             =>
8226             Write_Str ("First_Literal");
8227
8228          when Access_Kind                                  =>
8229             Write_Str ("Master_Id");
8230
8231          when Modular_Integer_Kind                         =>
8232             Write_Str ("Modulus");
8233
8234          when Formal_Kind                                  |
8235               E_Constant                                   |
8236               E_Generic_In_Out_Parameter                   |
8237               E_Variable                                   =>
8238             Write_Str ("Actual_Subtype");
8239
8240          when E_Incomplete_Type                            =>
8241             Write_Str ("Non_Limited_View");
8242
8243          when E_Incomplete_Subtype                         =>
8244             if From_With_Type (Id) then
8245                Write_Str ("Non_Limited_View");
8246             end if;
8247
8248          when others                                       =>
8249             Write_Str ("Field17??");
8250       end case;
8251    end Write_Field17_Name;
8252
8253    ------------------------
8254    -- Write_Field18_Name --
8255    ------------------------
8256
8257    procedure Write_Field18_Name (Id : Entity_Id) is
8258    begin
8259       case Ekind (Id) is
8260          when E_Enumeration_Literal                        |
8261               E_Function                                   |
8262               E_Operator                                   |
8263               E_Procedure                                  =>
8264             Write_Str ("Alias");
8265
8266          when E_Record_Type                                =>
8267             Write_Str ("Corresponding_Concurrent_Type");
8268
8269          when E_Entry_Index_Parameter                      =>
8270             Write_Str ("Entry_Index_Constant");
8271
8272          when E_Class_Wide_Subtype                         |
8273               E_Access_Protected_Subprogram_Type           |
8274               E_Anonymous_Access_Protected_Subprogram_Type |
8275               E_Access_Subprogram_Type                     |
8276               E_Exception_Type                             =>
8277             Write_Str ("Equivalent_Type");
8278
8279          when Fixed_Point_Kind                             =>
8280             Write_Str ("Delta_Value");
8281
8282          when Object_Kind                                  =>
8283             Write_Str ("Renamed_Object");
8284
8285          when E_Exception                                  |
8286               E_Package                                    |
8287               E_Generic_Function                           |
8288               E_Generic_Procedure                          |
8289               E_Generic_Package                            =>
8290             Write_Str ("Renamed_Entity");
8291
8292          when Incomplete_Or_Private_Kind                   =>
8293             Write_Str ("Private_Dependents");
8294
8295          when Concurrent_Kind                              =>
8296             Write_Str ("Corresponding_Record_Type");
8297
8298          when E_Label                                      |
8299               E_Loop                                       |
8300               E_Block                                      =>
8301             Write_Str ("Enclosing_Scope");
8302
8303          when others                                       =>
8304             Write_Str ("Field18??");
8305       end case;
8306    end Write_Field18_Name;
8307
8308    -----------------------
8309    -- Write_Field19_Name --
8310    -----------------------
8311
8312    procedure Write_Field19_Name (Id : Entity_Id) is
8313    begin
8314       case Ekind (Id) is
8315          when E_Array_Type                                 |
8316               E_Array_Subtype                              =>
8317             Write_Str ("Related_Array_Object");
8318
8319          when E_Block                                      |
8320               Concurrent_Kind                              |
8321               E_Function                                   |
8322               E_Procedure                                  |
8323               E_Return_Statement                           |
8324               Entry_Kind                                   =>
8325             Write_Str ("Finalization_Chain_Entity");
8326
8327          when E_Constant | E_Variable                      =>
8328             Write_Str ("Size_Check_Code");
8329
8330          when E_Discriminant                               =>
8331             Write_Str ("Corresponding_Discriminant");
8332
8333          when E_Package                                    |
8334               E_Generic_Package                            =>
8335             Write_Str ("Body_Entity");
8336
8337          when E_Package_Body                               |
8338               Formal_Kind                                  =>
8339             Write_Str ("Spec_Entity");
8340
8341          when Private_Kind                                 =>
8342             Write_Str ("Underlying_Full_View");
8343
8344          when E_Record_Type                                =>
8345             Write_Str ("Parent_Subtype");
8346
8347          when others                                       =>
8348             Write_Str ("Field19??");
8349       end case;
8350    end Write_Field19_Name;
8351
8352    -----------------------
8353    -- Write_Field20_Name --
8354    -----------------------
8355
8356    procedure Write_Field20_Name (Id : Entity_Id) is
8357    begin
8358       case Ekind (Id) is
8359          when Array_Kind                                   =>
8360             Write_Str ("Component_Type");
8361
8362          when E_In_Parameter                               |
8363               E_Generic_In_Parameter                       =>
8364             Write_Str ("Default_Value");
8365
8366          when Access_Kind                                  =>
8367             Write_Str ("Directly_Designated_Type");
8368
8369          when E_Component                                  =>
8370             Write_Str ("Discriminant_Checking_Func");
8371
8372          when E_Constant                                   |
8373               E_Variable                                   =>
8374             Write_Str ("Prival_Link");
8375
8376          when E_Discriminant                               =>
8377             Write_Str ("Discriminant_Default_Value");
8378
8379          when E_Block                                      |
8380               Class_Wide_Kind                              |
8381               Concurrent_Kind                              |
8382               Private_Kind                                 |
8383               E_Entry                                      |
8384               E_Entry_Family                               |
8385               E_Function                                   |
8386               E_Generic_Function                           |
8387               E_Generic_Package                            |
8388               E_Generic_Procedure                          |
8389               E_Loop                                       |
8390               E_Operator                                   |
8391               E_Package                                    |
8392               E_Package_Body                               |
8393               E_Procedure                                  |
8394               E_Record_Type                                |
8395               E_Record_Subtype                             |
8396               E_Return_Statement                           |
8397               E_Subprogram_Body                            |
8398               E_Subprogram_Type                            =>
8399
8400             Write_Str ("Last_Entity");
8401
8402          when Scalar_Kind                                  =>
8403             Write_Str ("Scalar_Range");
8404
8405          when E_Exception                                  =>
8406             Write_Str ("Register_Exception_Call");
8407
8408          when others                                       =>
8409             Write_Str ("Field20??");
8410       end case;
8411    end Write_Field20_Name;
8412
8413    -----------------------
8414    -- Write_Field21_Name --
8415    -----------------------
8416
8417    procedure Write_Field21_Name (Id : Entity_Id) is
8418    begin
8419       case Ekind (Id) is
8420          when E_Constant                                   |
8421               E_Exception                                  |
8422               E_Function                                   |
8423               E_Generic_Function                           |
8424               E_Procedure                                  |
8425               E_Generic_Procedure                          |
8426               E_Variable                                   =>
8427             Write_Str ("Interface_Name");
8428
8429          when Concurrent_Kind                              |
8430               Incomplete_Or_Private_Kind                   |
8431               Class_Wide_Kind                              |
8432               E_Record_Type                                |
8433               E_Record_Subtype                             =>
8434             Write_Str ("Discriminant_Constraint");
8435
8436          when Entry_Kind                                   =>
8437             Write_Str ("Accept_Address");
8438
8439          when Fixed_Point_Kind                             =>
8440             Write_Str ("Small_Value");
8441
8442          when E_In_Parameter                               =>
8443             Write_Str ("Default_Expr_Function");
8444
8445          when Array_Kind                                   |
8446               Modular_Integer_Kind                         =>
8447             Write_Str ("Original_Array_Type");
8448
8449          when others                                       =>
8450             Write_Str ("Field21??");
8451       end case;
8452    end Write_Field21_Name;
8453
8454    -----------------------
8455    -- Write_Field22_Name --
8456    -----------------------
8457
8458    procedure Write_Field22_Name (Id : Entity_Id) is
8459    begin
8460       case Ekind (Id) is
8461          when Access_Kind                                  =>
8462             Write_Str ("Associated_Storage_Pool");
8463
8464          when Array_Kind                                   =>
8465             Write_Str ("Component_Size");
8466
8467          when E_Component                                  |
8468               E_Discriminant                               =>
8469             Write_Str ("Original_Record_Component");
8470
8471          when E_Enumeration_Literal                        =>
8472             Write_Str ("Enumeration_Rep_Expr");
8473
8474          when E_Exception                                  =>
8475             Write_Str ("Exception_Code");
8476
8477          when Formal_Kind                                  =>
8478             Write_Str ("Protected_Formal");
8479
8480          when E_Record_Type                                =>
8481             Write_Str ("Corresponding_Remote_Type");
8482
8483          when E_Block                                      |
8484               E_Entry                                      |
8485               E_Entry_Family                               |
8486               E_Function                                   |
8487               E_Loop                                       |
8488               E_Package                                    |
8489               E_Package_Body                               |
8490               E_Generic_Package                            |
8491               E_Generic_Function                           |
8492               E_Generic_Procedure                          |
8493               E_Procedure                                  |
8494               E_Protected_Type                             |
8495               E_Return_Statement                           |
8496               E_Subprogram_Body                            |
8497               E_Task_Type                                  =>
8498             Write_Str ("Scope_Depth_Value");
8499
8500          when E_Record_Type_With_Private                   |
8501               E_Record_Subtype_With_Private                |
8502               E_Private_Type                               |
8503               E_Private_Subtype                            |
8504               E_Limited_Private_Type                       |
8505               E_Limited_Private_Subtype                    =>
8506             Write_Str ("Private_View");
8507
8508          when E_Variable                                   =>
8509             Write_Str ("Shared_Var_Assign_Proc");
8510
8511          when others                                       =>
8512             Write_Str ("Field22??");
8513       end case;
8514    end Write_Field22_Name;
8515
8516    ------------------------
8517    -- Write_Field23_Name --
8518    ------------------------
8519
8520    procedure Write_Field23_Name (Id : Entity_Id) is
8521    begin
8522       case Ekind (Id) is
8523          when Access_Kind                                  =>
8524             Write_Str ("Associated_Final_Chain");
8525
8526          when Array_Kind                                   =>
8527             Write_Str ("Packed_Array_Type");
8528
8529          when E_Block                                      =>
8530             Write_Str ("Entry_Cancel_Parameter");
8531
8532          when E_Discriminant                               =>
8533             Write_Str ("CR_Discriminant");
8534
8535          when E_Enumeration_Type                           =>
8536             Write_Str ("Enum_Pos_To_Rep");
8537
8538          when Formal_Kind                                  |
8539               E_Variable                                   =>
8540             Write_Str ("Extra_Constrained");
8541
8542          when E_Generic_Function                           |
8543               E_Generic_Package                            |
8544               E_Generic_Procedure                          =>
8545             Write_Str ("Inner_Instances");
8546
8547          when Concurrent_Kind                              |
8548               Incomplete_Or_Private_Kind                   |
8549               Class_Wide_Kind                              |
8550               E_Record_Type                                |
8551               E_Record_Subtype                             =>
8552             Write_Str ("Stored_Constraint");
8553
8554          when E_Function                                   |
8555               E_Procedure                                  =>
8556             if Present (Scope (Id))
8557               and then Is_Protected_Type (Scope (Id))
8558             then
8559                Write_Str ("Protection_Object");
8560             else
8561                Write_Str ("Generic_Renamings");
8562             end if;
8563
8564          when E_Package                                    =>
8565             if Is_Generic_Instance (Id) then
8566                Write_Str ("Generic_Renamings");
8567             else
8568                Write_Str ("Limited_View");
8569             end if;
8570
8571          when Entry_Kind                                   =>
8572             Write_Str ("Protection_Object");
8573
8574          when others                                       =>
8575             Write_Str ("Field23??");
8576       end case;
8577    end Write_Field23_Name;
8578
8579    ------------------------
8580    -- Write_Field24_Name --
8581    ------------------------
8582
8583    procedure Write_Field24_Name (Id : Entity_Id) is
8584    begin
8585       case Ekind (Id) is
8586          when Subprogram_Kind                              =>
8587             Write_Str ("Spec_PPC_List");
8588
8589          when others                                       =>
8590             Write_Str ("???");
8591       end case;
8592    end Write_Field24_Name;
8593
8594    ------------------------
8595    -- Write_Field25_Name --
8596    ------------------------
8597
8598    procedure Write_Field25_Name (Id : Entity_Id) is
8599    begin
8600       case Ekind (Id) is
8601          when E_Component                                  =>
8602             Write_Str ("DT_Offset_To_Top_Func");
8603
8604          when E_Procedure                                  |
8605               E_Function                                   =>
8606             Write_Str ("Abstract_Interface_Alias");
8607
8608          when E_Record_Type                                |
8609               E_Record_Subtype                             |
8610               E_Record_Type_With_Private                   |
8611               E_Record_Subtype_With_Private                =>
8612             Write_Str ("Abstract_Interfaces");
8613
8614          when Task_Kind                                    =>
8615             Write_Str ("Task_Body_Procedure");
8616
8617          when E_Variable                                   =>
8618             Write_Str ("Debug_Renaming_Link");
8619
8620          when others                                       =>
8621             Write_Str ("Field25??");
8622       end case;
8623    end Write_Field25_Name;
8624
8625    ------------------------
8626    -- Write_Field26_Name --
8627    ------------------------
8628
8629    procedure Write_Field26_Name (Id : Entity_Id) is
8630    begin
8631       case Ekind (Id) is
8632          when E_Component                                  |
8633               E_Constant                                   =>
8634             Write_Str ("Related_Type");
8635
8636          when E_Generic_Package                            |
8637               E_Package                                    =>
8638             Write_Str ("Package_Instantiation");
8639
8640          when E_Procedure                                  |
8641               E_Function                                   =>
8642
8643             if Is_Dispatching_Operation (Id) then
8644                Write_Str ("Overridden_Operation");
8645             else
8646                Write_Str ("Static_Initialization");
8647             end if;
8648
8649          when E_Record_Type                                |
8650               E_Record_Type_With_Private                   =>
8651             Write_Str ("Dispatch_Table_Wrapper");
8652
8653          when E_In_Out_Parameter                               |
8654               E_Out_Parameter                           |
8655               E_Variable                                   =>
8656             Write_Str ("Last_Assignment");
8657
8658          when Task_Kind                                    =>
8659             Write_Str ("Relative_Deadline_Variable");
8660
8661          when others                                       =>
8662             Write_Str ("Field26??");
8663       end case;
8664    end Write_Field26_Name;
8665
8666    ------------------------
8667    -- Write_Field27_Name --
8668    ------------------------
8669
8670    procedure Write_Field27_Name (Id : Entity_Id) is
8671    begin
8672       case Ekind (Id) is
8673          when E_Procedure                                  =>
8674             Write_Str ("Wrapped_Entity");
8675
8676          when E_Package | Type_Kind                        =>
8677             Write_Str ("Current_Use_Clause");
8678
8679          when others                                       =>
8680             Write_Str ("Field27??");
8681       end case;
8682    end Write_Field27_Name;
8683
8684    ------------------------
8685    -- Write_Field28_Name --
8686    ------------------------
8687
8688    procedure Write_Field28_Name (Id : Entity_Id) is
8689    begin
8690       case Ekind (Id) is
8691          when E_Procedure | E_Function | E_Entry           =>
8692             Write_Str ("Extra_Formals");
8693
8694          when others                                       =>
8695             Write_Str ("Field28??");
8696       end case;
8697    end Write_Field28_Name;
8698
8699    -------------------------
8700    -- Iterator Procedures --
8701    -------------------------
8702
8703    procedure Proc_Next_Component                 (N : in out Node_Id) is
8704    begin
8705       N := Next_Component (N);
8706    end Proc_Next_Component;
8707
8708    procedure Proc_Next_Component_Or_Discriminant (N : in out Node_Id) is
8709    begin
8710       N := Next_Entity (N);
8711       while Present (N) loop
8712          exit when Ekind (N) = E_Component
8713                      or else
8714                    Ekind (N) = E_Discriminant;
8715          N := Next_Entity (N);
8716       end loop;
8717    end Proc_Next_Component_Or_Discriminant;
8718
8719    procedure Proc_Next_Discriminant              (N : in out Node_Id) is
8720    begin
8721       N := Next_Discriminant (N);
8722    end Proc_Next_Discriminant;
8723
8724    procedure Proc_Next_Formal                    (N : in out Node_Id) is
8725    begin
8726       N := Next_Formal (N);
8727    end Proc_Next_Formal;
8728
8729    procedure Proc_Next_Formal_With_Extras        (N : in out Node_Id) is
8730    begin
8731       N := Next_Formal_With_Extras (N);
8732    end Proc_Next_Formal_With_Extras;
8733
8734    procedure Proc_Next_Index                     (N : in out Node_Id) is
8735    begin
8736       N := Next_Index (N);
8737    end Proc_Next_Index;
8738
8739    procedure Proc_Next_Inlined_Subprogram        (N : in out Node_Id) is
8740    begin
8741       N := Next_Inlined_Subprogram (N);
8742    end Proc_Next_Inlined_Subprogram;
8743
8744    procedure Proc_Next_Literal                   (N : in out Node_Id) is
8745    begin
8746       N := Next_Literal (N);
8747    end Proc_Next_Literal;
8748
8749    procedure Proc_Next_Stored_Discriminant       (N : in out Node_Id) is
8750    begin
8751       N := Next_Stored_Discriminant (N);
8752    end Proc_Next_Stored_Discriminant;
8753
8754 end Einfo;