home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / einfo.adb < prev    next >
Text File  |  1996-09-28  |  116KB  |  3,946 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                E I N F O                                 --
  6. --                                                                          --
  7. --                                 B o d y                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.334 $                            --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. with Atree;    use Atree;
  27. with Namet;    use Namet;
  28. with Nlists;   use Nlists;
  29. with Sinfo;    use Sinfo;
  30. with Snames;   use Snames;
  31. with Stand;    use Stand;
  32. with Output;   use Output;
  33.  
  34. package body Einfo is
  35.  
  36.    use Atree.Unchecked_Access;
  37.    --  This is one of the packages that is allowed direct untyped access to
  38.    --  the fields in a node, since it provides the next level abstraction
  39.    --  which incorporates appropriate checks.
  40.  
  41.    ----------------------------------------------
  42.    -- Usage of Fields in Defining Entity Nodes --
  43.    ----------------------------------------------
  44.  
  45.    --  The first five of these fields are defined in Sinfo, since they in
  46.    --  the base part of the node. The access routines for these fields and
  47.    --  the corresponding set procedures are defined in Sinfo. The are all
  48.    --  present in all entities.
  49.  
  50.    --    Chars                          Name1
  51.    --    Next_Entity                    Node2
  52.    --    Scope                          Node3
  53.    --    Homonym                        Node4
  54.    --    Etype                          Node5
  55.  
  56.    --  The remaining fields are in the node extension and are present only
  57.    --  in entities. The usage of each field depends on the particular entity
  58.    --  kind (see Einfo spec for details).
  59.  
  60.    --    Discriminant_Constraint        Elist6
  61.    --    Small_Value                    Ureal6
  62.    --    Accept_Address                 Elist6
  63.    --    Interface_Name                 Node6
  64.  
  65.    --    Alias                          Node7
  66.    --    Corresponding_Concurrent_Type  Node7
  67.    --    Delta_Value                    Ureal7
  68.    --    Entry_Parameters_Type          Node7
  69.    --    Equivalent_Type                Node7
  70.    --    Lit_Name_Table                 Node7
  71.    --    Renamed_Entity                 Node7
  72.    --    Renamed_Object                 Node7
  73.    --    Corresponding_Record_Type      Node7
  74.    --    Corresponding_Discriminant     Node7
  75.    --    Private_Dependents             Elist7
  76.  
  77.    --    Alignment_Clause               Node8
  78.    --    Enumeration_Rep_Expr           Node8
  79.    --    Original_Record_Component      Node8
  80.    --    Protected_Formal               Node8
  81.    --    Scope_Depth                    Uint8
  82.  
  83.    --    Actual_Subtype                 Node9
  84.    --    Digits_Value                   Uint9
  85.    --    Discriminal                    Node9
  86.    --    First_Entity                   Node9
  87.    --    First_Index                    Node9
  88.    --    First_Literal                  Node9
  89.    --    Master_Id                      Node9
  90.    --    Modulus                        Uint9
  91.    --    Object_Ref                     Node9
  92.    --    Prival                         Node9
  93.  
  94.    --    Component_Type                 Node10
  95.    --    Default_Value                  Node10
  96.    --    Directly_Designated_Type       Node10
  97.    --    Discriminant_Checking_Func     Node10
  98.    --    Discriminant_Default_Value     Node10
  99.    --    Last_Entity                    Node10
  100.    --    Scalar_Range                   Node10
  101.  
  102.    --    Protected_Body_Subprogram      Node11
  103.    --    Component_First_Bit            Uint11
  104.    --    Full_View                      Node11
  105.    --    Entry_Component                Node11
  106.    --    Enumeration_Pos                Uint11
  107.    --    First_Private_Entity           Node11
  108.    --    String_Literal_Length          Uint11
  109.    --    Table_High_Bound               Node11
  110.  
  111.    --    Barrier_Function               Node12
  112.    --    Enumeration_Rep                Uint12
  113.    --    Esize                          Uint12
  114.    --    Next_Inlined_Subprogram        Node12
  115.  
  116.    --    Associated_Storage_Pool        Node13
  117.    --    Component_Clause               Node13
  118.    --    Component_Size_Clause          Node13
  119.    --    Finalization_Chain_Entity      Node13
  120.    --    Primitive_Operations           Elist13
  121.  
  122.    --    Associated_Final_Chain         Node14
  123.    --    Enum_Pos_To_Rep                Node14
  124.    --    Packed_Array_Type              Node14
  125.    --    Protected_Operation            Node14
  126.    --    Storage_Size_Variable          Node14
  127.    --    Task_Activation_Chain_Entity   Node14
  128.  
  129.    --    Access_Disp_Table              Node15
  130.    --    Vtable_Entry_Count             Uint15
  131.    --    DT_Position                    Uint15
  132.    --    DT_Entry_Count                 Uint15
  133.    --    Entry_Bodies_Array             Node15
  134.    --    Scale_Value                    Uint15
  135.    --    Storage_Size_Variable          Node15
  136.  
  137.    --    Next_Itype                     Node16
  138.    --    DTC_Entity                     Node16
  139.  
  140.    --    Class_Wide_Type                Node17
  141.    --    Machine_Attribute              Node17
  142.  
  143.    --    Freeze_Node                    Node18
  144.  
  145.    --    Task_Body_Procedure            Node19
  146.  
  147.    --    Address_Clause                 Node20
  148.  
  149.    --    (unused)                       Node21
  150.  
  151.    --    (unused)                       Node22
  152.  
  153.    ---------------------------------------------
  154.    -- Usage of Flags in Defining Entity Nodes --
  155.    ---------------------------------------------
  156.  
  157.    --  All flags are unique, there is no overlaying, so each flag is physically
  158.    --  present in every entity. However, for many of the flags, it only makes
  159.    --  sense for them to be set true for certain subsets of entity kinds. See
  160.    --  the spec of Einfo for futher details.
  161.  
  162.    --    Is_Generic_Type                Flag1
  163.    --    Is_Constrained                 Flag3
  164.    --    Is_Frozen                      Flag4
  165.    --    Has_Discriminants              Flag5
  166.    --    Is_Dispatching_Operation       Flag6
  167.    --    Is_Immediately_Visible         Flag7
  168.    --    In_Use                         Flag8
  169.    --    Is_Potentially_Use_Visible     Flag9
  170.    --    Is_Public                      Flag10
  171.    --    Is_Inlined                     Flag11
  172.    --    Analyzed                       Flag12
  173.    --    Error_Posted                   Flag13
  174.    --    Depends_On_Private             Flag14
  175.    --    Is_Aliased                     Flag15
  176.    --    Is_Volatile                    Flag16
  177.    --    Is_Internal                    Flag17
  178.    --    Has_Delayed_Freeze             Flag18
  179.    --    Is_Abstract                    Flag19
  180.    --    Is_Concurrent_Record_Type      Flag20
  181.    --    Has_Master_Entity              Flag21
  182.    --    Needs_No_Actuals               Flag22
  183.    --    Has_Storage_Size_Clause        Flag23
  184.    --    Is_Imported                    Flag24
  185.    --    Is_Limited_Record              Flag25
  186.    --    Has_Completion                 Flag26
  187.    --    Has_Pragma_Controlled          Flag27
  188.    --    (unused)                       Flag28
  189.    --    Has_Size_Clause                Flag29
  190.    --    Has_Tasks                      Flag30
  191.    --    Suppress_Access_Checks         Flag31
  192.    --    Suppress_Accessibility_Checks  Flag32
  193.    --    Suppress_Discriminant_Checks   Flag33
  194.    --    Suppress_Division_Checks       Flag34
  195.    --    Suppress_Elaboration_Checks    Flag35
  196.    --    Suppress_Index_Checks          Flag36
  197.    --    Suppress_Length_Checks         Flag37
  198.    --    Suppress_Overflow_Checks       Flag38
  199.    --    Suppress_Range_Checks          Flag39
  200.    --    Suppress_Storage_Checks        Flag40
  201.    --    Suppress_Tag_Checks            Flag41
  202.    --    Is_Controlled                  Flag42
  203.    --    Has_Controlled                 Flag43
  204.    --    Is_Pure                        Flag44
  205.    --    In_Private_Part                Flag45
  206.    --    Has_Alignment_Clause           Flag46
  207.    --    Has_Exit                       Flag47
  208.    --    In_Package_Body                Flag48
  209.    --    Reachable                      Flag49
  210.    --    Needs_Discr_Check              Flag50
  211.    --    Is_Packed                      Flag51
  212.    --    Is_Entry_Formal                Flag52
  213.    --    Is_Private_Descendant          Flag53
  214.    --    Return_Present                 Flag54
  215.    --    Is_Tagged_Type                 Flag55
  216.    --    Has_Homonym                    Flag56
  217.    --    Is_Private                     Flag57
  218.    --    Non_Binary_Modulus             Flag58
  219.    --    Is_Preelaborated               Flag59
  220.    --    Is_Shared_Passive              Flag60
  221.    --    Is_Remote_Types                Flag61
  222.    --    Is_Remote_Call_Interface       Flag62
  223.    --    Is_Character_Type              Flag63
  224.    --    Is_Intrinsic_Subprogram        Flag64
  225.    --    Has_Record_Rep_Clause          Flag65
  226.    --    Has_Enumeration_Rep_Clause     Flag66
  227.    --    Has_Small_Clause               Flag67
  228.    --    Has_Component_Size_Clause      Flag68
  229.    --    Is_Access_Constant             Flag69
  230.    --    Is_First_Subtype               Flag70
  231.    --    Has_Completion_In_Body         Flag71
  232.    --    Has_Unknown_Discriminants      Flag72
  233.    --    Is_Child_Unit                  Flag73
  234.    --    Is_CPP_CLass                   Flag74
  235.    --    Has_Non_Standard_Rep           Flag75
  236.    --    Is_Constructor                 Flag76
  237.    --    Is_Destructor                  Flag77
  238.    --    Is_Tag                         Flag78
  239.    --    Has_All_Calls_Remote           Flag79
  240.    --    Has_U_Nominal_Subtype          Flag80
  241.    --    Is_Asynchronous                Flag81
  242.    --    Has_Machine_Attribute          Flag82
  243.    --    Has_Machine_Radix_Clause       Flag83
  244.    --    Machine_Radix_10               Flag84
  245.    --    Is_Atomic                      Flag85
  246.    --    Has_Atomic_Components          Flag86
  247.    --    Has_Volatile_Components        Flag87
  248.    --    Discard_Names                  Flag88
  249.    --    Is_Interrupt_Handler           Flag89
  250.    --    Returns_By_Ref                 Flag90
  251.    --    Is_Itype                       Flag91
  252.    --    Size_Known_At_Compile_Time     Flag92
  253.    --    Is_Declared_In_Package_Body    Flag93
  254.    --    Is_Generic_Actual_Type         Flag94
  255.    --    Uses_Sec_Stack                 Flag95
  256.    --    Return_By_Ref                  Flag96
  257.    --    Is_Controlling_Formal          Flag97
  258.    --    Has_Controlling_Result         Flag98
  259.    --    Is_Exported                    Flag99
  260.    --    Has_Specified_Layout           Flag100
  261.    --    Has_Nested_Block_With_Handler  Flag101
  262.    --    Is_Called                      Flag102
  263.    --    (unused)                       Flag103
  264.    --    (unused)                       Flag104
  265.    --    (unused)                       Flag105
  266.    --    (unused)                       Flag106
  267.    --    (unused)                       Flag107
  268.    --    (unused)                       Flag108
  269.    --    (unused)                       Flag109
  270.    --    (unused)                       Flag110
  271.    --    (unused)                       Flag111
  272.    --    (unused)                       Flag112
  273.  
  274.    --------------------------------
  275.    -- Attribute Access Functions --
  276.    --------------------------------
  277.  
  278.    function Accept_Address (Id : E) return L is
  279.    begin
  280.       return Elist6 (Id);
  281.    end Accept_Address;
  282.  
  283.    function Access_Disp_Table (Id : E) return E is
  284.    begin
  285.       pragma Assert (Is_Tagged_Type (Id));
  286.       return Node15 (Id);
  287.    end Access_Disp_Table;
  288.  
  289.    function Actual_Subtype (Id : E) return E is
  290.    begin
  291.       pragma Assert
  292.          (Ekind (Id) = E_Constant
  293.            or else Ekind (Id) = E_Variable
  294.            or else Ekind (Id) = E_Generic_In_Out_Parameter
  295.            or else Ekind (Id) in  E_In_Parameter .. E_In_Out_Parameter);
  296.       return Node9 (Id);
  297.    end Actual_Subtype;
  298.  
  299.    function Address_Clause (Id : E) return N is
  300.    begin
  301.       return Node20 (Id);
  302.    end Address_Clause;
  303.  
  304.    function Alias (Id : E) return E is
  305.    begin
  306.       pragma Assert
  307.         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
  308.       return Node7 (Id);
  309.    end Alias;
  310.  
  311.    function Alignment_Clause (Id : E) return N is
  312.    begin
  313.       pragma Assert
  314.         (Is_Type (Id)
  315.           or else Ekind (Id) = E_Constant
  316.           or else Ekind (Id) = E_Variable);
  317.       return Node8 (Id);
  318.    end Alignment_Clause;
  319.  
  320.    function Associated_Formal_Package (Id : E) return E is
  321.    begin
  322.       pragma Assert (Ekind (Id) = E_Package);
  323.       return Node12 (Id);
  324.    end Associated_Formal_Package;
  325.  
  326.    function Associated_Storage_Pool (Id : E) return E is
  327.    begin
  328.       pragma Assert (Is_Access_Type (Id));
  329.       return Node13 (Id);
  330.    end Associated_Storage_Pool;
  331.  
  332.    function Associated_Final_Chain (Id : E) return E is
  333.    begin
  334.       pragma Assert (Is_Access_Type (Id));
  335.       return Node14 (Id);
  336.    end Associated_Final_Chain;
  337.  
  338.    function Barrier_Function (Id : E) return N is
  339.    begin
  340.       pragma Assert (Ekind (Id) = E_Entry or else Ekind (Id) = E_Entry_Family);
  341.       return Node12 (Id);
  342.    end Barrier_Function;
  343.  
  344.    function Class_Wide_Type (Id : E) return E is
  345.    begin
  346.       return Node17 (Id);
  347.    end Class_Wide_Type;
  348.  
  349.    function Component_Clause (Id : E) return N is
  350.    begin
  351.       pragma Assert
  352.         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
  353.       return Node13 (Id);
  354.    end Component_Clause;
  355.  
  356.    function Component_First_Bit (Id : E) return U is
  357.    begin
  358.       pragma Assert
  359.         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
  360.       return Uint11 (Id);
  361.    end Component_First_Bit;
  362.  
  363.    function Component_Size_Clause (Id : E) return N is
  364.    begin
  365.       pragma Assert (Ekind (Id) = E_Array_Type);
  366.       return Node13 (Id);
  367.    end Component_Size_Clause;
  368.  
  369.    function Component_Type (Id : E) return E is
  370.    begin
  371.       return Node10 (Id);
  372.    end Component_Type;
  373.  
  374.    function Corresponding_Concurrent_Type (Id : E) return E is
  375.    begin
  376.       pragma Assert (Ekind (Id) = E_Record_Type);
  377.       return Node7 (Id);
  378.    end Corresponding_Concurrent_Type;
  379.  
  380.    function Corresponding_Discriminant (Id : E) return E is
  381.    begin
  382.       pragma Assert (Ekind (Id) = E_Discriminant);
  383.       return Node7 (Id);
  384.    end Corresponding_Discriminant;
  385.  
  386.    function Corresponding_Record_Type (Id : E) return E is
  387.    begin
  388.       pragma Assert (Is_Concurrent_Type (Id));
  389.       return Node7 (Id);
  390.    end Corresponding_Record_Type;
  391.  
  392.    function Default_Value (Id : E) return N is
  393.    begin
  394.       pragma Assert (Ekind (Id) = E_In_Parameter);
  395.       return Node10 (Id);
  396.    end Default_Value;
  397.  
  398.    function Delta_Value (Id : E) return R is
  399.    begin
  400.       pragma Assert (Is_Fixed_Point_Type (Id));
  401.       return Ureal7 (Id);
  402.    end Delta_Value;
  403.  
  404.    function Digits_Value (Id : E) return U is
  405.    begin
  406.       pragma Assert
  407.         (Is_Floating_Point_Type (Id)
  408.           or else Is_Decimal_Fixed_Point_Type (Id));
  409.       return Uint9 (Id);
  410.    end Digits_Value;
  411.  
  412.    function Directly_Designated_Type (Id : E) return E is
  413.    begin
  414.       return Node10 (Id);
  415.    end Directly_Designated_Type;
  416.  
  417.    function Discard_Names (Id : E) return B is
  418.    begin
  419.       return Flag88 (Id);
  420.    end Discard_Names;
  421.  
  422.    function Discriminal (Id : E) return N is
  423.    begin
  424.       pragma Assert (Ekind (Id) = E_Discriminant);
  425.       return Node9 (Id);
  426.    end Discriminal;
  427.  
  428.    function Discriminant_Checking_Func (Id : E) return E is
  429.    begin
  430.       pragma Assert (Ekind (Id) = E_Component);
  431.       return Node10 (Id);
  432.    end Discriminant_Checking_Func;
  433.  
  434.    function Discriminant_Constraint (Id : E) return Elist_Id is
  435.    begin
  436.       pragma Assert
  437.         (Is_Composite_Type (Id) and then not Is_Array_Type (Id));
  438.       return Elist6 (Id);
  439.    end Discriminant_Constraint;
  440.  
  441.    function Discriminant_Default_Value (Id : E) return N is
  442.    begin
  443.       pragma Assert (Ekind (Id) = E_Discriminant);
  444.       return Node10 (Id);
  445.    end Discriminant_Default_Value;
  446.  
  447.    function DTC_Entity (Id : E) return E is
  448.    begin
  449.       pragma Assert
  450.         (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
  451.       return Node16 (Id);
  452.    end DTC_Entity;
  453.  
  454.    function DT_Entry_Count (Id : E) return U is
  455.    begin
  456.       pragma Assert (Ekind (Id) = E_Component  and then Is_Tag (Id));
  457.       return Uint15 (Id);
  458.    end DT_Entry_Count;
  459.  
  460.    function DT_Position (Id : E) return U is
  461.    begin
  462.       pragma Assert
  463.         ((Ekind (Id) = E_Function
  464.             or else Ekind (Id) = E_Procedure)
  465.           and then Present (DTC_Entity (Id)));
  466.       return Uint15 (Id);
  467.    end DT_Position;
  468.  
  469.    function Entry_Bodies_Array (Id : E) return E is
  470.    begin
  471.       return Node15 (Id);
  472.    end Entry_Bodies_Array;
  473.  
  474.    function Entry_Component (Id : E) return E is
  475.    begin
  476.       return Node11 (Id);
  477.    end Entry_Component;
  478.  
  479.    function Entry_Index_Type (Id : E) return N is
  480.    begin
  481.       pragma Assert (Ekind (Id) = E_Entry_Family);
  482.       return Etype (Discrete_Subtype_Definition (Parent (Id)));
  483.    end Entry_Index_Type;
  484.  
  485.    function Entry_Index_Constant (Id : E) return N is
  486.    begin
  487.       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
  488.       return Node7 (Id);
  489.    end Entry_Index_Constant;
  490.  
  491.    function Entry_Parameters_Type (Id : E) return E is
  492.    begin
  493.       return Node7 (Id);
  494.    end Entry_Parameters_Type;
  495.  
  496.    function Enumeration_Pos (Id : E) return Uint is
  497.    begin
  498.       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
  499.       return Uint11 (Id);
  500.    end Enumeration_Pos;
  501.  
  502.    function Enumeration_Rep (Id : E) return U is
  503.    begin
  504.       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
  505.       return Uint12 (Id);
  506.    end Enumeration_Rep;
  507.  
  508.    function Enumeration_Rep_Expr (Id : E) return N is
  509.    begin
  510.       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
  511.       return Node8 (Id);
  512.    end Enumeration_Rep_Expr;
  513.  
  514.    function Enum_Pos_To_Rep (Id : E) return E is
  515.    begin
  516.       pragma Assert (Ekind (Id) = E_Enumeration_Type);
  517.       return Node14 (Id);
  518.    end Enum_Pos_To_Rep;
  519.  
  520.    function Equivalent_Type (Id : E) return E is
  521.    begin
  522.       pragma Assert (Ekind (Id) = E_Class_Wide_Subtype);
  523.       return Node7 (Id);
  524.    end Equivalent_Type;
  525.  
  526.    function Esize (Id : E) return Uint is
  527.    begin
  528.       return Uint12 (Id);
  529.    end Esize;
  530.  
  531.    function Finalization_Chain_Entity (Id : E) return E is
  532.    begin
  533.       return Node13 (Id);
  534.    end Finalization_Chain_Entity;
  535.  
  536.    function First_Entity (Id : E) return E is
  537.    begin
  538.       return Node9 (Id);
  539.    end First_Entity;
  540.  
  541.    function First_Index (Id : E) return N is
  542.    begin
  543.       return Node9 (Id);
  544.    end First_Index;
  545.  
  546.    function First_Literal (Id : E) return E is
  547.    begin
  548.       return Node9 (Id);
  549.    end First_Literal;
  550.  
  551.    function First_Private_Entity (Id : E) return E is
  552.    begin
  553.       return Node11 (Id);
  554.    end First_Private_Entity;
  555.  
  556.    function Freeze_Node (Id : E) return N is
  557.    begin
  558.       return Node18 (Id);
  559.    end Freeze_Node;
  560.  
  561.    function Full_View (Id : E) return E is
  562.    begin
  563.       return Node11 (Id);
  564.    end Full_View;
  565.  
  566.    function Has_Alignment_Clause (Id : E) return B is
  567.    begin
  568.       return Flag46 (Id);
  569.    end Has_Alignment_Clause;
  570.  
  571.    function Has_All_Calls_Remote (Id : E) return B is
  572.    begin
  573.       return Flag79 (Id);
  574.    end Has_All_Calls_Remote;
  575.  
  576.    function Has_Atomic_Components (Id : E) return B is
  577.    begin
  578.       return Flag86 (Id);
  579.    end Has_Atomic_Components;
  580.  
  581.    function Has_Completion (Id : E) return B is
  582.    begin
  583.       return Flag26 (Id);
  584.    end Has_Completion;
  585.  
  586.    function Has_Completion_In_Body (Id : E) return B is
  587.    begin
  588.       pragma Assert (Is_Type (Id));
  589.       return Flag71 (Id);
  590.    end Has_Completion_In_Body;
  591.  
  592.    function Has_Component_Size_Clause (Id : E) return B is
  593.    begin
  594.       pragma Assert (Ekind (Id) = E_Array_Type);
  595.       return Flag68 (Id);
  596.    end Has_Component_Size_Clause;
  597.  
  598.    function Has_Controlled (Id : E) return B is
  599.    begin
  600.       return Flag43 (Id);
  601.    end Has_Controlled;
  602.  
  603.    function Has_Controlling_Result (Id : E) return B is
  604.    begin
  605.       return Flag98 (Id);
  606.    end Has_Controlling_Result;
  607.  
  608.    function Has_Delayed_Freeze (Id : E) return B is
  609.    begin
  610.       pragma Assert (Nkind (Id) in N_Entity);
  611.       return Flag18 (Id);
  612.    end Has_Delayed_Freeze;
  613.  
  614.    function Has_Discriminants (Id : E) return B is
  615.    begin
  616.       pragma Assert (Nkind (Id) in N_Entity);
  617.       return Flag5 (Id);
  618.    end Has_Discriminants;
  619.  
  620.    function Has_Enumeration_Rep_Clause (Id : E) return B is
  621.    begin
  622.       pragma Assert (Is_Enumeration_Type (Id));
  623.       return Flag66 (Id);
  624.    end Has_Enumeration_Rep_Clause;
  625.  
  626.    function Has_Exit (Id : E) return B is
  627.    begin
  628.       return Flag47 (Id);
  629.    end Has_Exit;
  630.  
  631.    function Has_Homonym (Id : E) return B is
  632.    begin
  633.       return Flag56 (Id);
  634.    end Has_Homonym;
  635.  
  636.    function Has_Master_Entity (Id : E) return B is
  637.    begin
  638.       return Flag21 (Id);
  639.    end Has_Master_Entity;
  640.  
  641.    function Has_Machine_Attribute (Id : E) return B is
  642.    begin
  643.       return Flag82 (Id);
  644.    end Has_Machine_Attribute;
  645.  
  646.    function Has_Machine_Radix_Clause (Id : E) return B is
  647.    begin
  648.       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
  649.       return Flag83 (Id);
  650.    end Has_Machine_Radix_Clause;
  651.  
  652.    function Has_Nested_Block_With_Handler (Id : E) return B is
  653.    begin
  654.       return Flag101 (Id);
  655.    end Has_Nested_Block_With_Handler;
  656.  
  657.    function Has_Non_Standard_Rep (Id : E) return B is
  658.    begin
  659.       return Flag75 (Id);
  660.    end Has_Non_Standard_Rep;
  661.  
  662.    function Has_Pragma_Controlled (Id : E) return B is
  663.    begin
  664.       pragma Assert (Is_Access_Type (Id));
  665.       return Flag27 (Id);
  666.    end Has_Pragma_Controlled;
  667.  
  668.    function Has_Record_Rep_Clause (Id : E) return B is
  669.    begin
  670.       pragma Assert (Is_Record_Type (Id));
  671.       return Flag65 (Id);
  672.    end Has_Record_Rep_Clause;
  673.  
  674.    function Has_Size_Clause (Id : E) return B is
  675.    begin
  676.       return Flag29 (Id);
  677.    end Has_Size_Clause;
  678.  
  679.    function Has_Small_Clause (Id : E) return B is
  680.    begin
  681.       return Flag67 (Id);
  682.    end Has_Small_Clause;
  683.  
  684.    function Has_Specified_Layout (Id : E) return B is
  685.    begin
  686.       pragma Assert (Is_Record_Type (Id));
  687.       return Flag100 (Id);
  688.    end Has_Specified_Layout;
  689.  
  690.    function Has_Storage_Size_Clause (Id : E) return B is
  691.    begin
  692.       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
  693.       return Flag23 (Id);
  694.    end Has_Storage_Size_Clause;
  695.  
  696.    function Has_Tasks (Id : E) return B is
  697.    begin
  698.       return Flag30 (Id);
  699.    end Has_Tasks;
  700.  
  701.    function Has_U_Nominal_Subtype (Id : E) return B is
  702.    begin
  703.       return Flag80 (Id);
  704.    end Has_U_Nominal_Subtype;
  705.  
  706.    function Has_Unknown_Discriminants (Id : E) return B is
  707.    begin
  708.       pragma Assert (Is_Type (Id));
  709.       return Flag72 (Id);
  710.    end Has_Unknown_Discriminants;
  711.  
  712.    function Has_Volatile_Components (Id : E) return B is
  713.    begin
  714.       return Flag87 (Id);
  715.    end Has_Volatile_Components;
  716.  
  717.    function In_Package_Body (Id : E) return B is
  718.    begin
  719.       return Flag48 (Id);
  720.    end In_Package_Body;
  721.  
  722.    function In_Private_Part (Id : E) return B is
  723.    begin
  724.       return Flag45 (Id);
  725.    end In_Private_Part;
  726.  
  727.    function In_Use (Id : E) return B is
  728.    begin
  729.       pragma Assert (Nkind (Id) in N_Entity);
  730.       return Flag8 (Id);
  731.    end In_Use;
  732.  
  733.    function Interface_Name (Id : E) return N is
  734.    begin
  735.       return Node6 (Id);
  736.    end Interface_Name;
  737.  
  738.    function Is_Abstract (Id : E) return B is
  739.    begin
  740.       return Flag19 (Id);
  741.    end Is_Abstract;
  742.  
  743.    function Is_Access_Constant (Id : E) return B is
  744.    begin
  745.       pragma Assert (Is_Access_Type (Id));
  746.       return Flag69 (Id);
  747.    end Is_Access_Constant;
  748.  
  749.    function Is_Aliased (Id : E) return B is
  750.    begin
  751.       pragma Assert (Nkind (Id) in N_Entity);
  752.       return Flag15 (Id);
  753.    end Is_Aliased;
  754.  
  755.    function Is_Asynchronous (Id : E) return B is
  756.    begin
  757.       pragma Assert
  758.         (Ekind (Id) = E_Procedure or else Is_Type (Id));
  759.       return Flag81 (Id);
  760.    end Is_Asynchronous;
  761.  
  762.    function Is_Atomic (Id : E) return B is
  763.    begin
  764.       return Flag85 (Id);
  765.    end Is_Atomic;
  766.  
  767.    function Is_Called (Id : E) return B is
  768.    begin
  769.       pragma Assert
  770.         (Ekind (Id) = E_Procedure or else Ekind (Id) = E_Function);
  771.       return Flag102 (Id);
  772.    end Is_Called;
  773.  
  774.    function Is_Character_Type (Id : E) return B is
  775.    begin
  776.       return Flag63 (Id);
  777.    end Is_Character_Type;
  778.  
  779.    function Is_Constrained (Id : E) return B is
  780.    begin
  781.       pragma Assert (Nkind (Id) in N_Entity);
  782.       return Flag3 (Id);
  783.    end Is_Constrained;
  784.  
  785.    function Is_Constructor (Id : E) return B is
  786.    begin
  787.       return Flag76 (Id);
  788.    end Is_Constructor;
  789.  
  790.    function Is_Controlled (Id : E) return B is
  791.    begin
  792.       return Flag42 (Id);
  793.    end Is_Controlled;
  794.  
  795.    function Is_Controlling_Formal (Id : E) return B is
  796.    begin
  797.       pragma Assert (Ekind (Id) in Formal_Kind);
  798.       return Flag97 (Id);
  799.    end Is_Controlling_Formal;
  800.  
  801.    function Is_CPP_Class (Id : E) return B is
  802.    begin
  803.       return Flag74 (Id);
  804.    end Is_CPP_Class;
  805.  
  806.    function Is_Declared_In_Package_Body (Id : E) return B is
  807.    begin
  808.       return Flag93 (Id);
  809.    end Is_Declared_In_Package_Body;
  810.  
  811.    function Is_Destructor (Id : E) return B is
  812.    begin
  813.       return Flag77 (Id);
  814.    end Is_Destructor;
  815.  
  816.    function Is_Dispatching_Operation (Id : E) return B is
  817.    begin
  818.       pragma Assert
  819.         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
  820.       return Flag6 (Id);
  821.    end Is_Dispatching_Operation;
  822.  
  823.    function Is_Entry_Formal (Id : E) return B is
  824.    begin
  825.       return Flag52 (Id);
  826.    end Is_Entry_Formal;
  827.  
  828.    function Is_Exported (Id : E) return B is
  829.    begin
  830.       return Flag99 (Id);
  831.    end Is_Exported;
  832.  
  833.    function Is_Frozen (Id : E) return B is
  834.    begin
  835.       return Flag4 (Id);
  836.    end Is_Frozen;
  837.  
  838.    function Is_First_Subtype (Id : E) return B is
  839.    begin
  840.       return Flag70 (Id);
  841.    end Is_First_Subtype;
  842.  
  843.    function Is_Immediately_Visible (Id : E) return B is
  844.    begin
  845.       pragma Assert (Nkind (Id) in N_Entity);
  846.       return Flag7 (Id);
  847.    end Is_Immediately_Visible;
  848.  
  849.    function Is_Imported (Id : E) return B is
  850.    begin
  851.       return Flag24 (Id);
  852.    end Is_Imported;
  853.  
  854.    function Is_Inlined (Id : E) return B is
  855.    begin
  856.       pragma Assert
  857.         (Is_Overloadable (Id)
  858.            or else Ekind (Id) = E_Subprogram_Type
  859.            or else Ekind (Id) = E_Package);
  860.       return Flag11 (Id);
  861.    end Is_Inlined;
  862.  
  863.    function Is_Internal (Id : E) return B is
  864.    begin
  865.       pragma Assert (Nkind (Id) in N_Entity);
  866.       return Flag17 (Id);
  867.    end Is_Internal;
  868.  
  869.    function Is_Interrupt_Handler (Id : E) return B is
  870.    begin
  871.       pragma Assert (Nkind (Id) in N_Entity);
  872.       return Flag89 (Id);
  873.    end Is_Interrupt_Handler;
  874.  
  875.    function Is_Intrinsic_Subprogram (Id : E) return B is
  876.    begin
  877.       return Flag64 (Id);
  878.    end Is_Intrinsic_Subprogram;
  879.  
  880.    function Is_Itype (Id : E) return B is
  881.    begin
  882.       return Flag91 (Id);
  883.    end Is_Itype;
  884.  
  885.    function Is_Limited_Record (Id : E) return B is
  886.    begin
  887.       return Flag25 (Id);
  888.    end Is_Limited_Record;
  889.  
  890.    function Is_Named_Number (Id : E) return B is
  891.    begin
  892.       return Ekind (Id) in Named_Kind;
  893.    end Is_Named_Number;
  894.  
  895.    function Is_Overloadable (Id : E) return B is
  896.    begin
  897.       return Ekind (Id) in Overloadable_Kind;
  898.    end Is_Overloadable;
  899.  
  900.    function Is_Packed (Id : E) return B is
  901.    begin
  902.       return Flag51 (Id);
  903.    end Is_Packed;
  904.  
  905.    function Is_Potentially_Use_Visible (Id : E) return B is
  906.    begin
  907.       pragma Assert (Nkind (Id) in N_Entity);
  908.       return Flag9 (Id);
  909.    end Is_Potentially_Use_Visible;
  910.  
  911.    function Is_Preelaborated (Id : E) return B is
  912.    begin
  913.       return Flag59 (Id);
  914.    end Is_Preelaborated;
  915.  
  916.    function Is_Private (Id : E) return B is
  917.    begin
  918.       return Flag57 (Id);
  919.    end Is_Private;
  920.  
  921.    function Is_Private_Descendant (Id : E) return B is
  922.    begin
  923.       return Flag53 (Id);
  924.    end Is_Private_Descendant;
  925.  
  926.    function Is_Public (Id : E) return B is
  927.    begin
  928.       pragma Assert (Nkind (Id) in N_Entity);
  929.       return Flag10 (Id);
  930.    end Is_Public;
  931.  
  932.    function Is_Pure (Id : E) return B is
  933.    begin
  934.       return Flag44 (Id);
  935.    end Is_Pure;
  936.  
  937.    function Is_Remote_Call_Interface (Id : E) return B is
  938.    begin
  939.       return Flag62 (Id);
  940.    end Is_Remote_Call_Interface;
  941.  
  942.    function Is_Remote_Types (Id : E) return B is
  943.    begin
  944.       return Flag61 (Id);
  945.    end Is_Remote_Types;
  946.  
  947.    function Is_Shared_Passive (Id : E) return B is
  948.    begin
  949.       return Flag60 (Id);
  950.    end Is_Shared_Passive;
  951.  
  952.    function Is_Subprogram (Id : E) return B is
  953.    begin
  954.       return Ekind (Id) in Subprogram_Kind;
  955.    end Is_Subprogram;
  956.  
  957.    function Is_Tag (Id : E) return B is
  958.    begin
  959.       pragma Assert (Nkind (Id) in N_Entity);
  960.       return Flag78 (Id);
  961.    end Is_Tag;
  962.  
  963.    function Is_Volatile (Id : E) return B is
  964.    begin
  965.       pragma Assert (Nkind (Id) in N_Entity);
  966.       return Flag16 (Id);
  967.    end Is_Volatile;
  968.  
  969.    function Last_Entity (Id : E) return E is
  970.    begin
  971.       return Node10 (Id);
  972.    end Last_Entity;
  973.  
  974.    function Lit_Name_Table (Id : E) return E is
  975.    begin
  976.       return Node7 (Id);
  977.    end Lit_Name_Table;
  978.  
  979.    function Machine_Attribute (Id : E) return N is
  980.    begin
  981.       return Node17 (Id);
  982.    end Machine_Attribute;
  983.  
  984.    function Machine_Radix_10 (Id : E) return B is
  985.    begin
  986.       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
  987.       return Flag84 (Id);
  988.    end Machine_Radix_10;
  989.  
  990.    function Master_Id (Id : E) return E is
  991.    begin
  992.       return Node9 (Id);
  993.    end Master_Id;
  994.  
  995.    function Modulus (Id : E) return Uint is
  996.    begin
  997.       return Uint9 (Id);
  998.    end Modulus;
  999.  
  1000.    function Needs_Discr_Check (Id : E) return B is
  1001.    begin
  1002.       return Flag50 (Id);
  1003.    end Needs_Discr_Check;
  1004.  
  1005.    function Needs_No_Actuals (Id : E) return B is
  1006.    begin
  1007.       pragma Assert
  1008.         (Is_Overloadable (Id)
  1009.           or else Ekind (Id) = E_Subprogram_Type
  1010.           or else Ekind (Id) = E_Entry_Family);
  1011.       return Flag22 (Id);
  1012.    end Needs_No_Actuals;
  1013.  
  1014.    function Next_Inlined_Subprogram (Id : E) return E is
  1015.    begin
  1016.       return Node12 (Id);
  1017.    end Next_Inlined_Subprogram;
  1018.  
  1019.    function Next_Itype (Id : E) return E is
  1020.    begin
  1021.       return Node16 (Id);
  1022.    end Next_Itype;
  1023.  
  1024.    function Non_Binary_Modulus (Id : E) return B is
  1025.    begin
  1026.       pragma Assert (Is_Modular_Integer_Type (Id));
  1027.       return Flag58 (Id);
  1028.    end Non_Binary_Modulus;
  1029.  
  1030.    function Object_Ref (Id : E) return E is
  1031.    begin
  1032.       pragma Assert (Ekind (Id) = E_Protected_Body);
  1033.       return Node9 (Id);
  1034.    end Object_Ref;
  1035.  
  1036.    function Original_Record_Component (Id : E) return E is
  1037.    begin
  1038.       return Node8 (Id);
  1039.    end Original_Record_Component;
  1040.  
  1041.    function Packed_Array_Type (Id : E) return E is
  1042.    begin
  1043.       pragma Assert (Is_Array_Type (Id));
  1044.       return Node14 (Id);
  1045.    end Packed_Array_Type;
  1046.  
  1047.    function Primitive_Operations (Id : E) return Elist_Id is
  1048.    begin
  1049.       pragma Assert (Is_Tagged_Type (Id));
  1050.       return Elist13 (Id);
  1051.    end Primitive_Operations;
  1052.  
  1053.    function Prival (Id : E) return E is
  1054.    begin
  1055.       pragma Assert (Is_Protected_Private (Id));
  1056.       return Node9 (Id);
  1057.    end Prival;
  1058.  
  1059.    function Private_Dependents (Id : E) return L is
  1060.    begin
  1061.       pragma Assert (Is_Private_Type (Id));
  1062.       return Elist7 (Id);
  1063.    end Private_Dependents;
  1064.  
  1065.    function Protected_Body_Subprogram (Id : E) return E is
  1066.    begin
  1067.       pragma Assert (Is_Subprogram (Id) or else
  1068.         Ekind (Id) = E_Entry or else Ekind (Id) = E_Entry_Family);
  1069.       return Node11 (Id);
  1070.    end Protected_Body_Subprogram;
  1071.  
  1072.    function Protected_Formal (Id : E) return E is
  1073.    begin
  1074.       pragma Assert (Ekind (Id) in Formal_Kind);
  1075.       return Node8 (Id);
  1076.    end Protected_Formal;
  1077.  
  1078.    function Protected_Operation (Id : E) return N is
  1079.    begin
  1080.       pragma Assert (Is_Protected_Private (Id));
  1081.       return Node14 (Id);
  1082.    end Protected_Operation;
  1083.  
  1084.    function Reachable (Id : E) return B is
  1085.    begin
  1086.       return Flag49 (Id);
  1087.    end Reachable;
  1088.  
  1089.    function Renamed_Entity (Id : E) return N is
  1090.    begin
  1091.       return Node7 (Id);
  1092.    end Renamed_Entity;
  1093.  
  1094.    function Renamed_Object (Id : E) return N is
  1095.    begin
  1096.       return Node7 (Id);
  1097.    end Renamed_Object;
  1098.  
  1099.    function Return_Present (Id : E) return B is
  1100.    begin
  1101.       return Flag54 (Id);
  1102.    end Return_Present;
  1103.  
  1104.    function Returns_By_Ref (Id : E) return B is
  1105.    begin
  1106.       return Flag90 (Id);
  1107.    end Returns_By_Ref;
  1108.  
  1109.    function Scalar_Range (Id : E) return N is
  1110.    begin
  1111.       return Node10 (Id);
  1112.    end Scalar_Range;
  1113.  
  1114.    function Scale_Value (Id : E) return U is
  1115.    begin
  1116.       return Uint15 (Id);
  1117.    end Scale_Value;
  1118.  
  1119.    function Scope_Depth (Id : E) return U is
  1120.    begin
  1121.       return Uint8 (Id);
  1122.    end Scope_Depth;
  1123.  
  1124.    function Size_Known_At_Compile_Time (Id : E) return B is
  1125.    begin
  1126.       pragma Assert (Is_Type (Id));
  1127.       return  Flag92 (Id);
  1128.    end Size_Known_At_Compile_Time;
  1129.  
  1130.    function Small_Value (Id : E) return R is
  1131.    begin
  1132.       pragma Assert (Is_Fixed_Point_Type (Id));
  1133.       return Ureal6 (Id);
  1134.    end Small_Value;
  1135.  
  1136.    function Storage_Size_Variable (Id : E) return E is
  1137.    begin
  1138.       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
  1139.       return Node15 (Id);
  1140.    end Storage_Size_Variable;
  1141.  
  1142.    function String_Literal_Length (Id : E) return Uint is
  1143.    begin
  1144.       return Uint11 (Id);
  1145.    end String_Literal_Length;
  1146.  
  1147.    function Suppress_Access_Checks (Id : E) return B is
  1148.    begin
  1149.       return Flag31 (Id);
  1150.    end Suppress_Access_Checks;
  1151.  
  1152.    function Suppress_Accessibility_Checks (Id : E) return B is
  1153.    begin
  1154.       return Flag32 (Id);
  1155.    end Suppress_Accessibility_Checks;
  1156.  
  1157.    function Suppress_Discriminant_Checks (Id : E) return B is
  1158.    begin
  1159.       return Flag33 (Id);
  1160.    end Suppress_Discriminant_Checks;
  1161.  
  1162.    function Suppress_Division_Checks (Id : E) return B is
  1163.    begin
  1164.       return Flag34 (Id);
  1165.    end Suppress_Division_Checks;
  1166.  
  1167.    function Suppress_Elaboration_Checks (Id : E) return B is
  1168.    begin
  1169.       return Flag35 (Id);
  1170.    end Suppress_Elaboration_Checks;
  1171.  
  1172.    function Suppress_Index_Checks (Id : E) return B is
  1173.    begin
  1174.       return Flag36 (Id);
  1175.    end Suppress_Index_Checks;
  1176.  
  1177.    function Suppress_Length_Checks (Id : E) return B is
  1178.    begin
  1179.       return Flag37 (Id);
  1180.    end Suppress_Length_Checks;
  1181.  
  1182.    function Suppress_Overflow_Checks (Id : E) return B is
  1183.    begin
  1184.       return Flag38 (Id);
  1185.    end Suppress_Overflow_Checks;
  1186.  
  1187.    function Suppress_Range_Checks (Id : E) return B is
  1188.    begin
  1189.       return Flag39 (Id);
  1190.    end Suppress_Range_Checks;
  1191.  
  1192.    function Suppress_Storage_Checks (Id : E) return B is
  1193.    begin
  1194.       return Flag40 (Id);
  1195.    end Suppress_Storage_Checks;
  1196.  
  1197.    function Suppress_Tag_Checks (Id : E) return B is
  1198.    begin
  1199.       return Flag41 (Id);
  1200.    end Suppress_Tag_Checks;
  1201.  
  1202.    function Table_High_Bound (Id : E) return N is
  1203.    begin
  1204.       return Node11 (Id);
  1205.    end Table_High_Bound;
  1206.  
  1207.    function Task_Activation_Chain_Entity (Id : E) return E is
  1208.    begin
  1209.       return Node14 (Id);
  1210.    end Task_Activation_Chain_Entity;
  1211.  
  1212.    function Task_Body_Procedure (Id : E) return E is
  1213.    begin
  1214.       return Node19 (Id);
  1215.    end Task_Body_Procedure;
  1216.  
  1217.    function Uses_Sec_Stack (Id : E) return B is
  1218.    begin
  1219.       return Flag95 (Id);
  1220.    end Uses_Sec_Stack;
  1221.  
  1222.    ------------------------------
  1223.    -- Classification Functions --
  1224.    ------------------------------
  1225.  
  1226.    function Is_Access_Type (Id : E) return B is
  1227.    begin
  1228.       return Ekind (Id) in Access_Kind;
  1229.    end Is_Access_Type;
  1230.  
  1231.    function Is_Array_Type (Id : E) return B is
  1232.    begin
  1233.       return Ekind (Id) in Array_Kind;
  1234.    end Is_Array_Type;
  1235.  
  1236.    function Is_Class_Wide_Type (Id : E) return B is
  1237.    begin
  1238.       return Ekind (Id) in Class_Wide_Kind;
  1239.    end Is_Class_Wide_Type;
  1240.  
  1241.    function Is_Child_Unit (Id : E) return B is
  1242.    begin
  1243.       return Flag73 (Id);
  1244.    end Is_Child_Unit;
  1245.  
  1246.    function Is_Composite_Type (Id : E) return B is
  1247.    begin
  1248.       return Ekind (Id) in Composite_Kind;
  1249.    end Is_Composite_Type;
  1250.  
  1251.    function Is_Concurrent_Body (Id : E) return B is
  1252.    begin
  1253.       return Ekind (Id) in Concurrent_Body_Kind;
  1254.    end Is_Concurrent_Body;
  1255.  
  1256.    function Is_Concurrent_Record_Type (Id : E) return B is
  1257.    begin
  1258.       return Flag20 (Id);
  1259.    end Is_Concurrent_Record_Type;
  1260.  
  1261.    function Is_Concurrent_Type (Id : E) return B is
  1262.    begin
  1263.       return Ekind (Id) in Concurrent_Kind;
  1264.    end Is_Concurrent_Type;
  1265.  
  1266.    function Is_Decimal_Fixed_Point_Type (Id : E) return B is
  1267.    begin
  1268.       return Ekind (Id) in Decimal_Fixed_Point_Kind;
  1269.    end Is_Decimal_Fixed_Point_Type;
  1270.  
  1271.    function Is_Digits_Type (Id : E) return B is
  1272.    begin
  1273.       return Ekind (Id) in Digits_Kind;
  1274.    end Is_Digits_Type;
  1275.  
  1276.    function Is_Discrete_Type (Id : E) return B is
  1277.    begin
  1278.       return Ekind (Id) in Discrete_Kind;
  1279.    end Is_Discrete_Type;
  1280.  
  1281.    function Is_Elementary_Type (Id : E) return B is
  1282.    begin
  1283.       return Ekind (Id) in Elementary_Kind;
  1284.    end Is_Elementary_Type;
  1285.  
  1286.    function Is_Enumeration_Type (Id : E) return B is
  1287.    begin
  1288.       return Ekind (Id) in Enumeration_Kind;
  1289.    end Is_Enumeration_Type;
  1290.  
  1291.    function Is_Fixed_Point_Type (Id : E) return B is
  1292.    begin
  1293.       return Ekind (Id) in Fixed_Point_Kind;
  1294.    end Is_Fixed_Point_Type;
  1295.  
  1296.    function Is_Floating_Point_Type (Id : E) return B is
  1297.    begin
  1298.       return Ekind (Id) in Float_Kind;
  1299.    end Is_Floating_Point_Type;
  1300.  
  1301.    function Is_Generic_Type (Id : E) return B is
  1302.    begin
  1303.       pragma Assert (Nkind (Id) in N_Entity);
  1304.       return Flag1 (Id);
  1305.    end Is_Generic_Type;
  1306.  
  1307.    function Is_Generic_Actual_Type (Id : E) return B is
  1308.    begin
  1309.       pragma Assert (Is_Type (Id));
  1310.       return Flag94 (Id);
  1311.    end Is_Generic_Actual_Type;
  1312.  
  1313.    function Is_Incomplete_Or_Private_Type (Id : E) return B is
  1314.    begin
  1315.       return Ekind (Id) in Incomplete_Or_Private_Kind;
  1316.    end Is_Incomplete_Or_Private_Type;
  1317.  
  1318.    function Is_Integer_Type (Id : E) return B is
  1319.    begin
  1320.       return Ekind (Id) in Integer_Kind;
  1321.    end Is_Integer_Type;
  1322.  
  1323.    function Is_Modular_Integer_Type (Id : E) return B is
  1324.    begin
  1325.       return Ekind (Id) in Modular_Integer_Kind;
  1326.    end Is_Modular_Integer_Type;
  1327.  
  1328.    function Is_Numeric_Type (Id : E) return B is
  1329.    begin
  1330.       return Ekind (Id) in Numeric_Kind;
  1331.    end Is_Numeric_Type;
  1332.  
  1333.    function Is_Object (Id : E) return B is
  1334.    begin
  1335.       return Ekind (Id) in Object_Kind;
  1336.    end Is_Object;
  1337.  
  1338.    function Is_Ordinary_Fixed_Point_Type (Id : E) return B is
  1339.    begin
  1340.       return Ekind (Id) in Ordinary_Fixed_Point_Kind;
  1341.    end Is_Ordinary_Fixed_Point_Type;
  1342.  
  1343.    function Depends_On_Private (Id : E) return B is
  1344.    begin
  1345.       pragma Assert (Nkind (Id) in N_Entity);
  1346.       return Flag14 (Id);
  1347.    end Depends_On_Private;
  1348.  
  1349.    function Is_Private_Type (Id : E) return B is
  1350.    begin
  1351.       return Ekind (Id) in Private_Kind;
  1352.    end Is_Private_Type;
  1353.  
  1354.    function Is_Protected_Type (Id : E) return B is
  1355.    begin
  1356.       return Ekind (Id) in Protected_Kind;
  1357.    end Is_Protected_Type;
  1358.  
  1359.    function Is_Real_Type (Id : E) return B is
  1360.    begin
  1361.       return Ekind (Id) in Real_Kind;
  1362.    end Is_Real_Type;
  1363.  
  1364.    function Is_Record_Type (Id : E) return B is
  1365.    begin
  1366.       return Ekind (Id) in Record_Kind;
  1367.    end Is_Record_Type;
  1368.  
  1369.    function Is_Scalar_Type (Id : E) return B is
  1370.    begin
  1371.       return Ekind (Id) in Scalar_Kind;
  1372.    end Is_Scalar_Type;
  1373.  
  1374.    function Is_Signed_Integer_Type (Id : E) return B is
  1375.    begin
  1376.       return Ekind (Id) in Signed_Integer_Kind;
  1377.    end Is_Signed_Integer_Type;
  1378.  
  1379.    function Is_Tagged_Type (Id : E) return B is
  1380.    begin
  1381.       return Flag55 (Id);
  1382.    end Is_Tagged_Type;
  1383.  
  1384.    function Is_Task_Type (Id : E) return B is
  1385.    begin
  1386.       return Ekind (Id) in Task_Kind;
  1387.    end Is_Task_Type;
  1388.  
  1389.    function Is_Type (Id : E) return B is
  1390.    begin
  1391.       return Ekind (Id) in Type_Kind;
  1392.    end Is_Type;
  1393.  
  1394.    ------------------------------
  1395.    -- Attribute Set Procedures --
  1396.    ------------------------------
  1397.  
  1398.    procedure Set_Accept_Address (Id : E; V : L) is
  1399.    begin
  1400.       Set_Elist6 (Id, V);
  1401.    end Set_Accept_Address;
  1402.  
  1403.    procedure Set_Access_Disp_Table (Id : E; V : E) is
  1404.    begin
  1405.       pragma Assert (Is_Tagged_Type (Id));
  1406.       Set_Node15 (Id, V);
  1407.    end Set_Access_Disp_Table;
  1408.  
  1409.    procedure Set_Actual_Subtype (Id : E; V : E) is
  1410.    begin
  1411.       pragma Assert
  1412.          (Ekind (Id) = E_Constant
  1413.            or else Ekind (Id) = E_Variable
  1414.            or else Ekind (Id) = E_Generic_In_Out_Parameter
  1415.            or else Ekind (Id) in  E_In_Parameter .. E_In_Out_Parameter);
  1416.       Set_Node9 (Id, V);
  1417.    end Set_Actual_Subtype;
  1418.  
  1419.    procedure Set_Address_Clause (Id : E; V : N) is
  1420.    begin
  1421.       Set_Node20 (Id, V);
  1422.    end Set_Address_Clause;
  1423.  
  1424.    procedure Set_Alias (Id : E; V : E) is
  1425.    begin
  1426.       pragma Assert
  1427.         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
  1428.       Set_Node7 (Id, V);
  1429.    end Set_Alias;
  1430.  
  1431.    procedure Set_Alignment_Clause (Id : E; V : N) is
  1432.    begin
  1433.       pragma Assert
  1434.         (Is_Type (Id)
  1435.           or else Ekind (Id) = E_Constant
  1436.           or else Ekind (Id) = E_Variable);
  1437.       Set_Node8 (Id, V);
  1438.    end Set_Alignment_Clause;
  1439.  
  1440.    procedure Set_Associated_Formal_Package (Id : E; V : E) is
  1441.    begin
  1442.       Set_Node12 (Id, V);
  1443.    end Set_Associated_Formal_Package;
  1444.  
  1445.    procedure Set_Associated_Storage_Pool (Id : E; V : E) is
  1446.    begin
  1447.       pragma Assert (Is_Access_Type (Id));
  1448.       Set_Node13 (Id, V);
  1449.    end Set_Associated_Storage_Pool;
  1450.  
  1451.    procedure Set_Associated_Final_Chain (Id : E; V : E) is
  1452.    begin
  1453.       pragma Assert (Is_Access_Type (Id));
  1454.       Set_Node14 (Id, V);
  1455.    end Set_Associated_Final_Chain;
  1456.  
  1457.    procedure Set_Barrier_Function (Id : E; V : N) is
  1458.    begin
  1459.       pragma Assert (Ekind (Id) = E_Entry or else Ekind (Id) = E_Entry_Family);
  1460.       Set_Node12 (Id, V);
  1461.    end Set_Barrier_Function;
  1462.  
  1463.    procedure Set_Class_Wide_Type (Id : E; V : E) is
  1464.    begin
  1465.       pragma Assert (Is_Type (Id));
  1466.       Set_Node17 (Id, V);
  1467.    end Set_Class_Wide_Type;
  1468.  
  1469.    procedure Set_Component_Clause (Id : E; V : N) is
  1470.    begin
  1471.       pragma Assert
  1472.         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
  1473.       Set_Node13 (Id, V);
  1474.    end Set_Component_Clause;
  1475.  
  1476.    procedure Set_Component_First_Bit (Id : E; V : U) is
  1477.    begin
  1478.       pragma Assert
  1479.         (Ekind (Id) = E_Component or else Ekind (Id) = E_Discriminant);
  1480.       Set_Uint11 (Id, V);
  1481.    end Set_Component_First_Bit;
  1482.  
  1483.    procedure Set_Component_Size_Clause (Id : E; V : N) is
  1484.    begin
  1485.       pragma Assert (Ekind (Id) = E_Array_Type);
  1486.       Set_Node13 (Id, V);
  1487.    end Set_Component_Size_Clause;
  1488.  
  1489.    procedure Set_Component_Type (Id : E; V : E) is
  1490.    begin
  1491.       Set_Node10 (Id, V);
  1492.    end Set_Component_Type;
  1493.  
  1494.    procedure Set_Corresponding_Concurrent_Type (Id : E; V : E) is
  1495.    begin
  1496.       pragma Assert
  1497.         (Ekind (Id) = E_Record_Type and then Is_Concurrent_Type (V));
  1498.       Set_Node7 (Id, V);
  1499.    end Set_Corresponding_Concurrent_Type;
  1500.  
  1501.    procedure Set_Corresponding_Discriminant (Id : E; V : E) is
  1502.    begin
  1503.       pragma Assert (Ekind (Id) = E_Discriminant);
  1504.       Set_Node7 (Id, V);
  1505.    end Set_Corresponding_Discriminant;
  1506.  
  1507.    procedure Set_Corresponding_Record_Type (Id : E; V : E) is
  1508.    begin
  1509.       pragma Assert (Is_Concurrent_Type (Id));
  1510.       Set_Node7 (Id, V);
  1511.    end Set_Corresponding_Record_Type;
  1512.  
  1513.    procedure Set_Default_Value (Id : E; V : N) is
  1514.    begin
  1515.       pragma Assert (Ekind (Id) = E_In_Parameter);
  1516.       Set_Node10 (Id, V);
  1517.    end Set_Default_Value;
  1518.  
  1519.    procedure Set_Delta_Value (Id : E; V : R) is
  1520.    begin
  1521.       pragma Assert (Is_Fixed_Point_Type (Id));
  1522.       Set_Ureal7 (Id, V);
  1523.    end Set_Delta_Value;
  1524.  
  1525.    procedure Set_Digits_Value (Id : E; V : U) is
  1526.    begin
  1527.       pragma Assert
  1528.         (Is_Floating_Point_Type (Id)
  1529.           or else Is_Decimal_Fixed_Point_Type (Id));
  1530.       Set_Uint9 (Id, V);
  1531.    end Set_Digits_Value;
  1532.  
  1533.    procedure Set_Directly_Designated_Type (Id : E; V : E) is
  1534.    begin
  1535.       Set_Node10 (Id, V);
  1536.    end Set_Directly_Designated_Type;
  1537.  
  1538.    procedure Set_Discard_Names (Id : E; V : B := True) is
  1539.    begin
  1540.       Set_Flag88 (Id, V);
  1541.    end Set_Discard_Names;
  1542.  
  1543.    procedure Set_Discriminal (Id : E; V : E) is
  1544.    begin
  1545.       pragma Assert (Ekind (Id) = E_Discriminant);
  1546.       Set_Node9 (Id, V);
  1547.    end Set_Discriminal;
  1548.  
  1549.    procedure Set_Discriminant_Checking_Func (Id  : E; V : E) is
  1550.    begin
  1551.       pragma Assert
  1552.         (Ekind (Id) = E_Component and Ekind (Scope (Id)) in Record_Kind);
  1553.       Set_Node10 (Id, V);
  1554.    end Set_Discriminant_Checking_Func;
  1555.  
  1556.    procedure Set_Discriminant_Constraint (Id : E; V : L) is
  1557.    begin
  1558.       pragma Assert (Nkind (Id) in N_Entity);
  1559.       Set_Elist6 (Id, V);
  1560.    end Set_Discriminant_Constraint;
  1561.  
  1562.    procedure Set_Discriminant_Default_Value (Id : E; V : N) is
  1563.    begin
  1564.       Set_Node10 (Id, V);
  1565.    end Set_Discriminant_Default_Value;
  1566.  
  1567.    procedure Set_DTC_Entity (Id : E; V : E) is
  1568.    begin
  1569.       pragma Assert
  1570.         (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
  1571.       Set_Node16 (Id, V);
  1572.    end Set_DTC_Entity;
  1573.  
  1574.    procedure Set_DT_Entry_Count (Id : E; V : U) is
  1575.    begin
  1576.       pragma Assert (Ekind (Id) = E_Component);
  1577.       Set_Uint15 (Id, V);
  1578.    end Set_DT_Entry_Count;
  1579.  
  1580.    procedure Set_DT_Position (Id : E; V : U) is
  1581.    begin
  1582.       pragma Assert (Ekind (Id) = E_Function or else Ekind (Id) = E_Procedure);
  1583.       Set_Uint15 (Id, V);
  1584.    end Set_DT_Position;
  1585.  
  1586.    procedure Set_Entry_Bodies_Array (Id : E; V : E) is
  1587.    begin
  1588.       Set_Node15 (Id, V);
  1589.    end Set_Entry_Bodies_Array;
  1590.  
  1591.    procedure Set_Entry_Component (Id : E; V : E) is
  1592.    begin
  1593.       Set_Node11 (Id, V);
  1594.    end Set_Entry_Component;
  1595.  
  1596.    procedure Set_Entry_Index_Constant (Id : E; V : E) is
  1597.    begin
  1598.       pragma Assert (Ekind (Id) = E_Entry_Index_Parameter);
  1599.       Set_Node7 (Id, V);
  1600.    end Set_Entry_Index_Constant;
  1601.  
  1602.    procedure Set_Entry_Parameters_Type (Id : E; V : E) is
  1603.    begin
  1604.       Set_Node7 (Id, V);
  1605.    end Set_Entry_Parameters_Type;
  1606.  
  1607.    procedure Set_Enumeration_Pos (Id : E; V : U) is
  1608.    begin
  1609.       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
  1610.       Set_Uint11 (Id, V);
  1611.    end Set_Enumeration_Pos;
  1612.  
  1613.    procedure Set_Enumeration_Rep (Id : E; V : U) is
  1614.    begin
  1615.       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
  1616.       Set_Uint12 (Id, V);
  1617.    end Set_Enumeration_Rep;
  1618.  
  1619.    procedure Set_Enumeration_Rep_Expr (Id : E; V : N) is
  1620.    begin
  1621.       pragma Assert (Ekind (Id) = E_Enumeration_Literal);
  1622.       Set_Node8 (Id, V);
  1623.    end Set_Enumeration_Rep_Expr;
  1624.  
  1625.    procedure Set_Enum_Pos_To_Rep (Id : E; V : E) is
  1626.    begin
  1627.       pragma Assert (Ekind (Id) = E_Enumeration_Type);
  1628.       Set_Node14 (Id, V);
  1629.    end Set_Enum_Pos_To_Rep;
  1630.  
  1631.    procedure Set_Equivalent_Type (Id : E; V : E) is
  1632.    begin
  1633.       pragma Assert (Ekind (Id) = E_Class_Wide_Subtype);
  1634.       Set_Node7 (Id, V);
  1635.    end Set_Equivalent_Type;
  1636.  
  1637.    procedure Set_Esize (Id : E; V : U) is
  1638.    begin
  1639.       Set_Uint12 (Id, V);
  1640.    end Set_Esize;
  1641.  
  1642.    procedure Set_Finalization_Chain_Entity (Id : E; V : E) is
  1643.    begin
  1644.       Set_Node13 (Id, V);
  1645.    end Set_Finalization_Chain_Entity;
  1646.  
  1647.    procedure Set_First_Entity (Id : E; V : E) is
  1648.    begin
  1649.       Set_Node9 (Id, V);
  1650.    end Set_First_Entity;
  1651.  
  1652.    procedure Set_First_Index (Id : E; V : N) is
  1653.    begin
  1654.       Set_Node9 (Id, V);
  1655.    end Set_First_Index;
  1656.  
  1657.    procedure Set_First_Literal (Id : E; V : E) is
  1658.    begin
  1659.       Set_Node9 (Id, V);
  1660.    end Set_First_Literal;
  1661.  
  1662.    procedure Set_First_Private_Entity (Id : E; V : E) is
  1663.    begin
  1664.       pragma Assert (Nkind (Id) in N_Entity);
  1665.       Set_Node11 (Id, V);
  1666.    end Set_First_Private_Entity;
  1667.  
  1668.    procedure Set_Freeze_Node (Id : E; V : N) is
  1669.    begin
  1670.       Set_Node18 (Id, V);
  1671.    end Set_Freeze_Node;
  1672.  
  1673.    procedure Set_Full_View (Id : E; V : E) is
  1674.    begin
  1675.       Set_Node11 (Id, V);
  1676.    end Set_Full_View;
  1677.  
  1678.    procedure Set_Has_Alignment_Clause (Id : E; V : B := True) is
  1679.    begin
  1680.       Set_Flag46 (Id, V);
  1681.    end Set_Has_Alignment_Clause;
  1682.  
  1683.    procedure Set_Has_All_Calls_Remote (Id : E; V : B := True) is
  1684.    begin
  1685.       Set_Flag79 (Id, V);
  1686.    end Set_Has_All_Calls_Remote;
  1687.  
  1688.    procedure Set_Has_Atomic_Components (Id : E; V : B := True) is
  1689.    begin
  1690.       Set_Flag86 (Id, V);
  1691.    end Set_Has_Atomic_Components;
  1692.  
  1693.    procedure Set_Has_Completion (Id : E; V : B := True) is
  1694.    begin
  1695.       Set_Flag26 (Id, V);
  1696.    end Set_Has_Completion;
  1697.  
  1698.    procedure Set_Has_Completion_In_Body (Id : E; V : B := True) is
  1699.    begin
  1700.       pragma Assert (Ekind (Id) = E_Incomplete_Type);
  1701.       Set_Flag71 (Id, V);
  1702.    end Set_Has_Completion_In_Body;
  1703.  
  1704.    procedure Set_Has_Component_Size_Clause (Id : E; V : B := True) is
  1705.    begin
  1706.       pragma Assert (Ekind (Id) = E_Array_Type);
  1707.       Set_Flag68 (Id, V);
  1708.    end Set_Has_Component_Size_Clause;
  1709.  
  1710.    procedure Set_Has_Controlled (Id : E; V : B := True) is
  1711.    begin
  1712.       Set_Flag43 (Id, V);
  1713.    end Set_Has_Controlled;
  1714.  
  1715.    procedure Set_Has_Controlling_Result (Id : E; V : B := True) is
  1716.    begin
  1717.       Set_Flag98 (Id, V);
  1718.    end Set_Has_Controlling_Result;
  1719.  
  1720.    procedure Set_Has_Delayed_Freeze (Id : E; V : B := True) is
  1721.    begin
  1722.       pragma Assert (Nkind (Id) in N_Entity);
  1723.       Set_Flag18 (Id, V);
  1724.    end Set_Has_Delayed_Freeze;
  1725.  
  1726.    procedure Set_Has_Discriminants (Id : E; V : B := True) is
  1727.    begin
  1728.       pragma Assert (Nkind (Id) in N_Entity);
  1729.       Set_Flag5 (Id, V);
  1730.    end Set_Has_Discriminants;
  1731.  
  1732.    procedure Set_Has_Enumeration_Rep_Clause (Id : E; V : B := True) is
  1733.    begin
  1734.       pragma Assert (Is_Enumeration_Type (Id));
  1735.       Set_Flag66 (Id, V);
  1736.    end Set_Has_Enumeration_Rep_Clause;
  1737.  
  1738.    procedure Set_Has_Exit (Id : E; V : B := True) is
  1739.    begin
  1740.       Set_Flag47 (Id, V);
  1741.    end Set_Has_Exit;
  1742.  
  1743.    procedure Set_Has_Homonym (Id : E; V : B := True) is
  1744.    begin
  1745.       Set_Flag56 (Id, V);
  1746.    end Set_Has_Homonym;
  1747.  
  1748.    procedure Set_Has_Master_Entity (Id : E; V : B := True) is
  1749.    begin
  1750.       Set_Flag21 (Id, V);
  1751.    end Set_Has_Master_Entity;
  1752.  
  1753.    procedure Set_Has_Machine_Attribute (Id : E; V : B := True) is
  1754.    begin
  1755.       Set_Flag82 (Id, V);
  1756.    end Set_Has_Machine_Attribute;
  1757.  
  1758.    procedure Set_Has_Machine_Radix_Clause (Id : E; V : B := True) is
  1759.    begin
  1760.       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
  1761.       Set_Flag83 (Id, V);
  1762.    end Set_Has_Machine_Radix_Clause;
  1763.  
  1764.    procedure Set_Has_Nested_Block_With_Handler (Id : E; V : B := True) is
  1765.    begin
  1766.       Set_Flag101 (Id, V);
  1767.    end Set_Has_Nested_Block_With_Handler;
  1768.  
  1769.    procedure Set_Has_Non_Standard_Rep (Id : E; V : B := True) is
  1770.    begin
  1771.       Set_Flag75 (Id, V);
  1772.    end Set_Has_Non_Standard_Rep;
  1773.  
  1774.    procedure Set_Has_Pragma_Controlled (Id : E; V : B := True) is
  1775.    begin
  1776.       pragma Assert (Is_Access_Type (Id));
  1777.       Set_Flag27 (Id, V);
  1778.    end Set_Has_Pragma_Controlled;
  1779.  
  1780.    procedure Set_Has_Record_Rep_Clause (Id : E; V : B := True) is
  1781.    begin
  1782.       pragma Assert (Is_Record_Type (Id));
  1783.       Set_Flag65 (Id, V);
  1784.    end Set_Has_Record_Rep_Clause;
  1785.  
  1786.    procedure Set_Has_Size_Clause (Id : E; V : B := True) is
  1787.    begin
  1788.       Set_Flag29 (Id, V);
  1789.    end Set_Has_Size_Clause;
  1790.  
  1791.    procedure Set_Has_Small_Clause (Id : E; V : B := True) is
  1792.    begin
  1793.       Set_Flag67 (Id, V);
  1794.    end Set_Has_Small_Clause;
  1795.  
  1796.    procedure Set_Has_Specified_Layout (Id : E; V : B := True) is
  1797.    begin
  1798.       pragma Assert (Is_Record_Type (Id));
  1799.       Set_Flag100 (Id, V);
  1800.    end Set_Has_Specified_Layout;
  1801.  
  1802.    procedure Set_Has_Storage_Size_Clause (Id : E; V : B := True) is
  1803.    begin
  1804.       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
  1805.       Set_Flag23 (Id, V);
  1806.    end Set_Has_Storage_Size_Clause;
  1807.  
  1808.    procedure Set_Has_Tasks (Id : E; V : B := True) is
  1809.    begin
  1810.       Set_Flag30 (Id, V);
  1811.    end Set_Has_Tasks;
  1812.  
  1813.    procedure Set_Has_U_Nominal_Subtype (Id : E; V : B := True) is
  1814.    begin
  1815.       Set_Flag80 (Id, V);
  1816.    end Set_Has_U_Nominal_Subtype;
  1817.  
  1818.    procedure Set_Has_Unknown_Discriminants (Id : E; V : B := True) is
  1819.    begin
  1820.       pragma Assert (Is_Type (Id));
  1821.       Set_Flag72 (Id, V);
  1822.    end Set_Has_Unknown_Discriminants;
  1823.  
  1824.    procedure Set_Has_Volatile_Components (Id : E; V : B := True) is
  1825.    begin
  1826.       Set_Flag87 (Id, V);
  1827.    end Set_Has_Volatile_Components;
  1828.  
  1829.    procedure Set_In_Package_Body (Id : E; V : B := True) is
  1830.    begin
  1831.       Set_Flag48 (Id, V);
  1832.    end Set_In_Package_Body;
  1833.  
  1834.    procedure Set_In_Private_Part (Id : E; V : B := True) is
  1835.    begin
  1836.       Set_Flag45 (Id, V);
  1837.    end Set_In_Private_Part;
  1838.  
  1839.    procedure Set_In_Use (Id : E; V : B := True) is
  1840.    begin
  1841.       pragma Assert (Nkind (Id) in N_Entity);
  1842.       Set_Flag8 (Id, V);
  1843.    end Set_In_Use;
  1844.  
  1845.    procedure Set_Interface_Name (Id : E; V : N) is
  1846.    begin
  1847.       Set_Node6 (Id, V);
  1848.    end Set_Interface_Name;
  1849.  
  1850.    procedure Set_Is_Abstract (Id : E; V : B := True) is
  1851.    begin
  1852.       Set_Flag19 (Id, V);
  1853.    end Set_Is_Abstract;
  1854.  
  1855.    procedure Set_Is_Access_Constant (Id : E; V : B := True) is
  1856.    begin
  1857.       pragma Assert (Is_Access_Type (Id));
  1858.       Set_Flag69 (Id, V);
  1859.    end Set_Is_Access_Constant;
  1860.  
  1861.    procedure Set_Is_Aliased (Id : E; V : B := True) is
  1862.    begin
  1863.       pragma Assert (Nkind (Id) in N_Entity);
  1864.       Set_Flag15 (Id, V);
  1865.    end Set_Is_Aliased;
  1866.  
  1867.    procedure Set_Is_Asynchronous (Id : E; V : B := True) is
  1868.    begin
  1869.       pragma Assert
  1870.         (Ekind (Id) = E_Procedure or else Is_Type (Id));
  1871.       Set_Flag81 (Id, V);
  1872.    end Set_Is_Asynchronous;
  1873.  
  1874.    procedure Set_Is_Atomic (Id : E; V : B := True) is
  1875.    begin
  1876.       Set_Flag85 (Id, V);
  1877.    end Set_Is_Atomic;
  1878.  
  1879.    procedure Set_Is_Called (Id : E; V : B := True) is
  1880.    begin
  1881.       pragma Assert
  1882.         (Ekind (Id) = E_Procedure or else Ekind (Id) = E_Function);
  1883.       Set_Flag102 (Id, V);
  1884.    end Set_Is_Called;
  1885.  
  1886.    procedure Set_Is_Character_Type (Id : E; V : B := True) is
  1887.    begin
  1888.       Set_Flag63 (Id, V);
  1889.    end Set_Is_Character_Type;
  1890.  
  1891.    procedure Set_Is_Child_Unit (Id : E; V : B := True) is
  1892.    begin
  1893.       Set_Flag73 (Id, V);
  1894.    end Set_Is_Child_Unit;
  1895.  
  1896.    procedure Set_Is_Constrained (Id : E; V : B := True) is
  1897.    begin
  1898.       pragma Assert (Nkind (Id) in N_Entity);
  1899.       Set_Flag3 (Id, V);
  1900.    end Set_Is_Constrained;
  1901.  
  1902.    procedure Set_Is_Constructor (Id : E; V : B := True) is
  1903.    begin
  1904.       Set_Flag76 (Id, V);
  1905.    end Set_Is_Constructor;
  1906.  
  1907.    procedure Set_Is_Controlled (Id : E; V : B := True) is
  1908.    begin
  1909.       Set_Flag42 (Id, V);
  1910.    end Set_Is_Controlled;
  1911.  
  1912.    procedure Set_Is_Controlling_Formal (Id : E; V : B := True) is
  1913.    begin
  1914.       pragma Assert (Ekind (Id) in Formal_Kind);
  1915.       Set_Flag97 (Id, V);
  1916.    end Set_Is_Controlling_Formal;
  1917.  
  1918.    procedure Set_Is_CPP_Class (Id : E; V : B := True) is
  1919.    begin
  1920.       Set_Flag74 (Id, V);
  1921.    end Set_Is_CPP_Class;
  1922.  
  1923.    procedure Set_Is_Declared_In_Package_Body (Id : E; V : B := True) is
  1924.    begin
  1925.       Set_Flag93 (Id, V);
  1926.    end Set_Is_Declared_In_Package_Body;
  1927.  
  1928.    procedure Set_Is_Destructor (Id : E; V : B := True) is
  1929.    begin
  1930.       Set_Flag77 (Id, V);
  1931.    end Set_Is_Destructor;
  1932.  
  1933.    procedure Set_Is_Dispatching_Operation (Id : E; V : B := True) is
  1934.    begin
  1935.       pragma Assert
  1936.         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
  1937.       Set_Flag6 (Id, V);
  1938.    end Set_Is_Dispatching_Operation;
  1939.  
  1940.    procedure Set_Is_Entry_Formal (Id : E; V : B := True) is
  1941.    begin
  1942.       Set_Flag52 (Id, V);
  1943.    end Set_Is_Entry_Formal;
  1944.  
  1945.    procedure Set_Is_Exported (Id : E; V : B := True) is
  1946.    begin
  1947.       Set_Flag99 (Id, V);
  1948.    end Set_Is_Exported;
  1949.  
  1950.    procedure Set_Is_First_Subtype (Id : E; V : B := True) is
  1951.    begin
  1952.       Set_Flag70 (Id, V);
  1953.    end Set_Is_First_Subtype;
  1954.  
  1955.    procedure Set_Is_Frozen (Id : E; V : B := True) is
  1956.    begin
  1957.       pragma Assert (Nkind (Id) in N_Entity);
  1958.       Set_Flag4 (Id, V);
  1959.    end Set_Is_Frozen;
  1960.  
  1961.    procedure Set_Is_Generic_Type (Id : E; V : B := True) is
  1962.    begin
  1963.       pragma Assert (Nkind (Id) in N_Entity);
  1964.       Set_Flag1 (Id, V);
  1965.    end Set_Is_Generic_Type;
  1966.  
  1967.    procedure Set_Is_Generic_Actual_Type (Id : E; V : B := True) is
  1968.    begin
  1969.       pragma Assert (Is_Type (Id));
  1970.       Set_Flag94 (Id, V);
  1971.    end Set_Is_Generic_Actual_Type;
  1972.  
  1973.    procedure Set_Is_Immediately_Visible (Id : E; V : B := True) is
  1974.    begin
  1975.       pragma Assert (Nkind (Id) in N_Entity);
  1976.       Set_Flag7 (Id, V);
  1977.    end Set_Is_Immediately_Visible;
  1978.  
  1979.    procedure Set_Is_Imported (Id : E; V : B := True) is
  1980.    begin
  1981.       Set_Flag24 (Id, V);
  1982.    end Set_Is_Imported;
  1983.  
  1984.    procedure Set_Is_Inlined (Id : E; V : B := True) is
  1985.    begin
  1986.       pragma Assert
  1987.         (Is_Overloadable (Id)
  1988.            or else Ekind (Id) = E_Subprogram_Type
  1989.            or else Ekind (Id) = E_Package);
  1990.       Set_Flag11 (Id, V);
  1991.    end Set_Is_Inlined;
  1992.  
  1993.    procedure Set_Is_Internal (Id : E; V : B := True) is
  1994.    begin
  1995.       pragma Assert (Nkind (Id) in N_Entity);
  1996.       Set_Flag17 (Id, V);
  1997.    end Set_Is_Internal;
  1998.  
  1999.    procedure Set_Is_Interrupt_Handler (Id : E; V : B := True) is
  2000.    begin
  2001.       pragma Assert (Nkind (Id) in N_Entity);
  2002.       Set_Flag89 (Id, V);
  2003.    end Set_Is_Interrupt_Handler;
  2004.  
  2005.    procedure Set_Is_Intrinsic_Subprogram (Id : E; V : B := True) is
  2006.    begin
  2007.       Set_Flag64 (Id, V);
  2008.    end Set_Is_Intrinsic_Subprogram;
  2009.  
  2010.    procedure Set_Is_Itype (Id : E; V : B := True) is
  2011.    begin
  2012.       Set_Flag91 (Id, V);
  2013.    end Set_Is_Itype;
  2014.  
  2015.    procedure Set_Is_Limited_Record (Id : E; V : B := True) is
  2016.    begin
  2017.       Set_Flag25 (Id, V);
  2018.    end Set_Is_Limited_Record;
  2019.  
  2020.    procedure Set_Is_Packed (Id : E; V : B := True) is
  2021.    begin
  2022.       Set_Flag51 (Id, V);
  2023.    end Set_Is_Packed;
  2024.  
  2025.    procedure Set_Is_Potentially_Use_Visible (Id : E; V : B := True) is
  2026.    begin
  2027.       pragma Assert (Nkind (Id) in N_Entity);
  2028.       Set_Flag9 (Id, V);
  2029.    end Set_Is_Potentially_Use_Visible;
  2030.  
  2031.    procedure Set_Is_Preelaborated (Id : E; V : B := True) is
  2032.    begin
  2033.       Set_Flag59 (Id, V);
  2034.    end Set_Is_Preelaborated;
  2035.  
  2036.    procedure Set_Is_Private (Id : E; V : B := True) is
  2037.    begin
  2038.       Set_Flag57 (Id, V);
  2039.    end Set_Is_Private;
  2040.  
  2041.    procedure Set_Is_Private_Descendant (Id : E; V : B := True) is
  2042.    begin
  2043.       Set_Flag53 (Id, V);
  2044.    end Set_Is_Private_Descendant;
  2045.  
  2046.    procedure Set_Depends_On_Private (Id : E; V : B := True) is
  2047.    begin
  2048.       pragma Assert (Nkind (Id) in N_Entity);
  2049.       Set_Flag14 (Id, V);
  2050.    end Set_Depends_On_Private;
  2051.  
  2052.    procedure Set_Is_Public (Id : E; V : B := True) is
  2053.    begin
  2054.       pragma Assert (Nkind (Id) in N_Entity);
  2055.       Set_Flag10 (Id, V);
  2056.    end Set_Is_Public;
  2057.  
  2058.    procedure Set_Is_Pure (Id : E; V : B := True) is
  2059.    begin
  2060.       Set_Flag44 (Id, V);
  2061.    end Set_Is_Pure;
  2062.  
  2063.    procedure Set_Is_Remote_Call_Interface (Id : E; V : B := True) is
  2064.    begin
  2065.       Set_Flag62 (Id, V);
  2066.    end Set_Is_Remote_Call_Interface;
  2067.  
  2068.    procedure Set_Is_Remote_Types (Id : E; V : B := True) is
  2069.    begin
  2070.       Set_Flag61 (Id, V);
  2071.    end Set_Is_Remote_Types;
  2072.  
  2073.    procedure Set_Is_Shared_Passive (Id : E; V : B := True) is
  2074.    begin
  2075.       Set_Flag60 (Id, V);
  2076.    end Set_Is_Shared_Passive;
  2077.  
  2078.    procedure Set_Is_Tagged_Type (Id : E; V : B := True) is
  2079.    begin
  2080.       Set_Flag55 (Id, V);
  2081.    end Set_Is_Tagged_Type;
  2082.  
  2083.    procedure Set_Is_Concurrent_Record_Type (Id : E; V : B := True) is
  2084.    begin
  2085.       Set_Flag20 (Id, V);
  2086.    end Set_Is_Concurrent_Record_Type;
  2087.  
  2088.    procedure Set_Is_Tag (Id : E; V : B := True) is
  2089.    begin
  2090.       pragma Assert (Nkind (Id) in N_Entity);
  2091.       Set_Flag78 (Id, V);
  2092.    end Set_Is_Tag;
  2093.  
  2094.    procedure Set_Is_Volatile (Id : E; V : B := True) is
  2095.    begin
  2096.       pragma Assert (Nkind (Id) in N_Entity);
  2097.       Set_Flag16 (Id, V);
  2098.    end Set_Is_Volatile;
  2099.  
  2100.    procedure Set_Last_Entity (Id : E; V : E) is
  2101.    begin
  2102.       Set_Node10 (Id, V);
  2103.    end Set_Last_Entity;
  2104.  
  2105.    procedure Set_Lit_Name_Table (Id : E; V : E) is
  2106.    begin
  2107.       Set_Node7 (Id, V);
  2108.    end Set_Lit_Name_Table;
  2109.  
  2110.    procedure Set_Machine_Attribute (Id : E; V : N) is
  2111.    begin
  2112.       Set_Node17 (Id, V);
  2113.    end Set_Machine_Attribute;
  2114.  
  2115.    procedure Set_Machine_Radix_10 (Id : E; V : B := True) is
  2116.    begin
  2117.       pragma Assert (Is_Decimal_Fixed_Point_Type (Id));
  2118.       Set_Flag84 (Id, V);
  2119.    end Set_Machine_Radix_10;
  2120.  
  2121.    procedure Set_Master_Id (Id : E; V : E) is
  2122.    begin
  2123.       Set_Node9 (Id, V);
  2124.    end Set_Master_Id;
  2125.  
  2126.    procedure Set_Modulus (Id : E; V : U) is
  2127.    begin
  2128.       Set_Uint9 (Id, V);
  2129.    end Set_Modulus;
  2130.  
  2131.    procedure Set_Needs_Discr_Check (Id : E; V : B := True) is
  2132.    begin
  2133.       pragma Assert (Ekind (Id) = E_Component);
  2134.       Set_Flag50 (Id, V);
  2135.    end Set_Needs_Discr_Check;
  2136.  
  2137.    procedure Set_Needs_No_Actuals (Id : E; V : B := True) is
  2138.    begin
  2139.       pragma Assert
  2140.         (Is_Overloadable (Id)
  2141.           or else Ekind (Id) = E_Subprogram_Type
  2142.           or else Ekind (Id) = E_Entry_Family);
  2143.       Set_Flag22 (Id, V);
  2144.    end Set_Needs_No_Actuals;
  2145.  
  2146.    procedure Set_Next_Inlined_Subprogram (Id : E; V : E) is
  2147.    begin
  2148.       Set_Node12 (Id, V);
  2149.    end Set_Next_Inlined_Subprogram;
  2150.  
  2151.    procedure Set_Next_Itype (Id : E; V : E) is
  2152.    begin
  2153.       Set_Node16 (Id, V);
  2154.    end Set_Next_Itype;
  2155.  
  2156.    procedure Set_Non_Binary_Modulus (Id : E; V : B := True) is
  2157.    begin
  2158.       pragma Assert (Is_Modular_Integer_Type (Id));
  2159.       Set_Flag58 (Id, V);
  2160.    end Set_Non_Binary_Modulus;
  2161.  
  2162.    procedure Set_Object_Ref (Id : E; V : E) is
  2163.    begin
  2164.       pragma Assert (Ekind (Id) = E_Protected_Body);
  2165.       Set_Node9 (Id, V);
  2166.    end Set_Object_Ref;
  2167.  
  2168.    procedure Set_Original_Record_Component (Id : E; V : E) is
  2169.    begin
  2170.       Set_Node8 (Id, V);
  2171.    end Set_Original_Record_Component;
  2172.  
  2173.    procedure Set_Packed_Array_Type (Id : E; V : E) is
  2174.    begin
  2175.       pragma Assert (Is_Array_Type (Id));
  2176.       Set_Node14 (Id, V);
  2177.    end Set_Packed_Array_Type;
  2178.  
  2179.    procedure Set_Primitive_Operations (Id : E; V : L) is
  2180.    begin
  2181.       pragma Assert (Is_Tagged_Type (Id));
  2182.       Set_Elist13 (Id, V);
  2183.    end Set_Primitive_Operations;
  2184.  
  2185.    procedure Set_Prival (Id : E; V : E) is
  2186.    begin
  2187.       pragma Assert (Is_Protected_Private (Id));
  2188.       Set_Node9 (Id, V);
  2189.    end Set_Prival;
  2190.  
  2191.    procedure Set_Private_Dependents (Id : E; V : L) is
  2192.    begin
  2193.       pragma Assert (Is_Private_Type (Id));
  2194.       Set_Elist7 (Id, V);
  2195.    end Set_Private_Dependents;
  2196.  
  2197.    procedure Set_Protected_Body_Subprogram (Id : E; V : E) is
  2198.    begin
  2199.       pragma Assert (Is_Subprogram (Id) or else
  2200.         Ekind (Id) = E_Entry or else Ekind (Id) = E_Entry_Family);
  2201.       Set_Node11 (Id, V);
  2202.    end Set_Protected_Body_Subprogram;
  2203.  
  2204.    procedure Set_Protected_Formal (Id : E; V : E) is
  2205.    begin
  2206.       pragma Assert (Ekind (Id) in Formal_Kind);
  2207.       Set_Node8 (Id, V);
  2208.    end Set_Protected_Formal;
  2209.  
  2210.    procedure Set_Protected_Operation (Id : E; V : N) is
  2211.    begin
  2212.       pragma Assert (Is_Protected_Private (Id));
  2213.       Set_Node14 (Id, V);
  2214.    end Set_Protected_Operation;
  2215.  
  2216.    procedure Set_Reachable (Id : E; V : B := True) is
  2217.    begin
  2218.       Set_Flag49 (Id, V);
  2219.    end Set_Reachable;
  2220.  
  2221.    procedure Set_Renamed_Entity (Id : E; V : N) is
  2222.    begin
  2223.       Set_Node7 (Id, V);
  2224.    end Set_Renamed_Entity;
  2225.  
  2226.    procedure Set_Renamed_Object (Id : E; V : N) is
  2227.    begin
  2228.       Set_Node7 (Id, V);
  2229.    end Set_Renamed_Object;
  2230.  
  2231.    procedure Set_Return_Present (Id : E; V : B := True) is
  2232.    begin
  2233.       Set_Flag54 (Id, V);
  2234.    end Set_Return_Present;
  2235.  
  2236.    procedure Set_Returns_By_Ref (Id : E; V : B := True) is
  2237.    begin
  2238.       Set_Flag90 (Id, V);
  2239.    end Set_Returns_By_Ref;
  2240.  
  2241.    procedure Set_Scalar_Range (Id : E; V : N) is
  2242.    begin
  2243.       Set_Node10 (Id, V);
  2244.    end Set_Scalar_Range;
  2245.  
  2246.    procedure Set_Scale_Value (Id : E; V : U) is
  2247.    begin
  2248.       Set_Uint15 (Id, V);
  2249.    end Set_Scale_Value;
  2250.  
  2251.    procedure Set_Scope_Depth (Id : E; V : U) is
  2252.    begin
  2253.       Set_Uint8 (Id, V);
  2254.    end Set_Scope_Depth;
  2255.  
  2256.    procedure Set_Size_Known_At_Compile_Time (Id : E; V : B := True) is
  2257.    begin
  2258.       pragma Assert (Is_Type (Id));
  2259.       Set_Flag92 (Id, V);
  2260.    end Set_Size_Known_At_Compile_Time;
  2261.  
  2262.    procedure Set_Small_Value (Id : E; V : R) is
  2263.    begin
  2264.       pragma Assert (Is_Fixed_Point_Type (Id));
  2265.       Set_Ureal6 (Id, V);
  2266.    end Set_Small_Value;
  2267.  
  2268.    procedure Set_Storage_Size_Variable (Id : E; V : E) is
  2269.    begin
  2270.       pragma Assert (Is_Access_Type (Id) or else Is_Task_Type (Id));
  2271.       Set_Node15 (Id, V);
  2272.    end Set_Storage_Size_Variable;
  2273.  
  2274.    procedure Set_String_Literal_Length (Id : E; V : U) is
  2275.    begin
  2276.       pragma Assert (Ekind (Id) = E_String_Literal_Subtype);
  2277.       Set_Uint11 (Id, V);
  2278.    end Set_String_Literal_Length;
  2279.  
  2280.    procedure Set_Suppress_Access_Checks (Id : E; V : B := True) is
  2281.    begin
  2282.       Set_Flag31 (Id, V);
  2283.    end Set_Suppress_Access_Checks;
  2284.  
  2285.    procedure Set_Suppress_Accessibility_Checks (Id : E; V : B := True) is
  2286.    begin
  2287.       Set_Flag32 (Id, V);
  2288.    end Set_Suppress_Accessibility_Checks;
  2289.  
  2290.    procedure Set_Suppress_Discriminant_Checks (Id : E; V : B := True) is
  2291.    begin
  2292.       Set_Flag33 (Id, V);
  2293.    end Set_Suppress_Discriminant_Checks;
  2294.  
  2295.    procedure Set_Suppress_Division_Checks (Id : E; V : B := True) is
  2296.    begin
  2297.       Set_Flag34 (Id, V);
  2298.    end Set_Suppress_Division_Checks;
  2299.  
  2300.    procedure Set_Suppress_Elaboration_Checks (Id : E; V : B := True) is
  2301.    begin
  2302.       Set_Flag35 (Id, V);
  2303.    end Set_Suppress_Elaboration_Checks;
  2304.  
  2305.    procedure Set_Suppress_Index_Checks (Id : E; V : B := True) is
  2306.    begin
  2307.       Set_Flag36 (Id, V);
  2308.    end Set_Suppress_Index_Checks;
  2309.  
  2310.    procedure Set_Suppress_Length_Checks (Id : E; V : B := True) is
  2311.    begin
  2312.       Set_Flag37 (Id, V);
  2313.    end Set_Suppress_Length_Checks;
  2314.  
  2315.    procedure Set_Suppress_Overflow_Checks (Id : E; V : B := True) is
  2316.    begin
  2317.       Set_Flag38 (Id, V);
  2318.    end Set_Suppress_Overflow_Checks;
  2319.  
  2320.    procedure Set_Suppress_Range_Checks (Id : E; V : B := True) is
  2321.    begin
  2322.       Set_Flag39 (Id, V);
  2323.    end Set_Suppress_Range_Checks;
  2324.  
  2325.    procedure Set_Suppress_Storage_Checks (Id : E; V : B := True) is
  2326.    begin
  2327.       Set_Flag40 (Id, V);
  2328.    end Set_Suppress_Storage_Checks;
  2329.  
  2330.    procedure Set_Suppress_Tag_Checks (Id : E; V : B := True) is
  2331.    begin
  2332.       Set_Flag41 (Id, V);
  2333.    end Set_Suppress_Tag_Checks;
  2334.  
  2335.    procedure Set_Table_High_Bound (Id : E; V : N) is
  2336.    begin
  2337.       pragma Assert (Ekind (Id) = E_Enum_Table_Type);
  2338.       Set_Node11 (Id, V);
  2339.    end Set_Table_High_Bound;
  2340.  
  2341.    procedure Set_Task_Activation_Chain_Entity (Id : E; V : E) is
  2342.    begin
  2343.       Set_Node14 (Id, V);
  2344.    end Set_Task_Activation_Chain_Entity;
  2345.  
  2346.    procedure Set_Task_Body_Procedure (Id : E; V : E) is
  2347.    begin
  2348.       Set_Node19 (Id, V);
  2349.    end Set_Task_Body_Procedure;
  2350.  
  2351.    procedure Set_Uses_Sec_Stack (Id : E; V : B := True) is
  2352.    begin
  2353.       Set_Flag95 (Id, V);
  2354.    end Set_Uses_Sec_Stack;
  2355.  
  2356.    ----------------------
  2357.    -- Ancestor_Subtype --
  2358.    ----------------------
  2359.  
  2360.    function Ancestor_Subtype (Id : E) return E is
  2361.    begin
  2362.       --  If this is first subtype, or is a base type, then there is no
  2363.       --  ancestor subtype, so we return Empty to indicate this fact.
  2364.  
  2365.       if Is_First_Subtype (Id)
  2366.         or else Id = Base_Type (Id)
  2367.       then
  2368.          return Empty;
  2369.       end if;
  2370.  
  2371.       declare
  2372.          D : constant Node_Id := Declaration_Node (Id);
  2373.  
  2374.       begin
  2375.          --  If we have a subtype declaration, get the ancestor subtype
  2376.  
  2377.          if Nkind (D) = N_Subtype_Declaration then
  2378.             if Nkind (Subtype_Indication (D)) = N_Subtype_Indication then
  2379.                return Entity (Subtype_Mark (Subtype_Indication (D)));
  2380.             else
  2381.                return Entity (Subtype_Indication (D));
  2382.             end if;
  2383.  
  2384.          --  If not, then no subtype indication is available
  2385.  
  2386.          else
  2387.             return Empty;
  2388.          end if;
  2389.       end;
  2390.    end Ancestor_Subtype;
  2391.  
  2392.    -------------------
  2393.    -- Append_Entity --
  2394.    -------------------
  2395.  
  2396.    procedure Append_Entity (Id : Entity_Id; V : Entity_Id) is
  2397.    begin
  2398.       if Last_Entity (V) = Empty then
  2399.          Set_First_Entity (V, Id);
  2400.       else
  2401.          Set_Next_Entity (Last_Entity (V), Id);
  2402.       end if;
  2403.  
  2404.       Set_Next_Entity (Id, Empty);
  2405.       Set_Scope (Id, V);
  2406.       Set_Last_Entity (V, Id);
  2407.    end Append_Entity;
  2408.  
  2409.    ---------------
  2410.    -- Base_Type --
  2411.    ---------------
  2412.  
  2413.    function Base_Type (Id : E) return E is
  2414.    begin
  2415.       case Ekind (Id) is
  2416.          when E_Enumeration_Subtype          |
  2417.               E_Signed_Integer_Subtype       |
  2418.               E_Modular_Integer_Subtype      |
  2419.               E_Floating_Point_Subtype       |
  2420.               E_Ordinary_Fixed_Point_Subtype |
  2421.               E_Decimal_Fixed_Point_Subtype  |
  2422.               E_Array_Subtype                |
  2423.               E_String_Subtype               |
  2424.               E_Record_Subtype               |
  2425.               E_Private_Subtype              |
  2426.               E_Record_Subtype_With_Private  |
  2427.               E_Limited_Private_Subtype      |
  2428.               E_Access_Subtype               |
  2429.               E_Protected_Subtype            |
  2430.               E_Task_Subtype                 |
  2431.               E_String_Literal_Subtype       |
  2432.               E_Class_Wide_Subtype           =>
  2433.             return Etype (Id);
  2434.  
  2435.          when others =>
  2436.             return Id;
  2437.       end case;
  2438.    end Base_Type;
  2439.  
  2440.    --------------------
  2441.    -- Constant_Value --
  2442.    --------------------
  2443.  
  2444.    function Constant_Value (Id : E) return N is
  2445.    begin
  2446.       pragma Assert (Nkind (Id) in N_Entity);
  2447.  
  2448.       if Nkind (Parent (Id)) = N_Object_Renaming_Declaration then
  2449.          return Renamed_Object (Id);
  2450.       else
  2451.          if Present (Expression (Parent (Id))) then
  2452.             return (Expression (Parent (Id)));
  2453.          elsif Present (Full_View (Id)) then
  2454.             return (Expression (Parent (Full_View (Id))));
  2455.          else
  2456.             return Empty;
  2457.          end if;
  2458.       end if;
  2459.    end Constant_Value;
  2460.  
  2461.    ----------------------
  2462.    -- Declaration_Node --
  2463.    ----------------------
  2464.  
  2465.    function Declaration_Node (Id : E) return N is
  2466.       P : Node_Id;
  2467.  
  2468.    begin
  2469.       if Ekind (Id) = E_Incomplete_Type
  2470.         and then Present (Full_View (Id))
  2471.       then
  2472.          P := Parent (Full_View (Id));
  2473.       else
  2474.          P := Parent (Id);
  2475.       end if;
  2476.  
  2477.       loop
  2478.          if Nkind (P) /= N_Selected_Component
  2479.            and then Nkind (P) /= N_Expanded_Name
  2480.          then
  2481.             return P;
  2482.          else
  2483.             P := Parent (P);
  2484.          end if;
  2485.       end loop;
  2486.  
  2487.    end Declaration_Node;
  2488.  
  2489.    ---------------------
  2490.    -- Designated_Type --
  2491.    ---------------------
  2492.  
  2493.    function Designated_Type (Id : E) return E is
  2494.       Desig_Type : E;
  2495.  
  2496.    begin
  2497.       Desig_Type := Directly_Designated_Type (Id);
  2498.  
  2499.       if (Ekind (Desig_Type) = E_Incomplete_Type
  2500.         and then Present (Full_View (Desig_Type)))
  2501.       then
  2502.          return Full_View (Desig_Type);
  2503.  
  2504.       elsif Is_Class_Wide_Type (Desig_Type)
  2505.         and then Ekind (Etype (Desig_Type)) = E_Incomplete_Type
  2506.         and then Present (Full_View (Etype (Desig_Type)))
  2507.       then
  2508.          return Class_Wide_Type (Full_View (Etype (Desig_Type)));
  2509.  
  2510.       else
  2511.          return Desig_Type;
  2512.       end if;
  2513.    end Designated_Type;
  2514.  
  2515.    ---------------------
  2516.    -- First_Component --
  2517.    ---------------------
  2518.  
  2519.    function First_Component (Id : E) return E is
  2520.       Comp_Id : E;
  2521.  
  2522.    begin
  2523.       pragma Assert
  2524.         (Is_Record_Type (Id) or else Is_Incomplete_Or_Private_Type (Id));
  2525.  
  2526.       Comp_Id := First_Entity (Id);
  2527.  
  2528.       while Present (Comp_Id) loop
  2529.          exit when Ekind (Comp_Id) = E_Component;
  2530.          Comp_Id := Next_Entity (Comp_Id);
  2531.       end loop;
  2532.  
  2533.       return Comp_Id;
  2534.    end First_Component;
  2535.  
  2536.    ------------------------
  2537.    -- First_Discriminant --
  2538.    ------------------------
  2539.  
  2540.    function First_Discriminant (Id : E) return E is
  2541.       Ent : Entity_Id;
  2542.  
  2543.    begin
  2544.       pragma Assert (Has_Discriminants (Id));
  2545.  
  2546.       Ent := First_Entity (Id);
  2547.  
  2548.       if Chars (Ent) = Name_uTag then
  2549.          pragma Assert (Is_Tagged_Type (Id));
  2550.          return Next_Entity (Ent);
  2551.       else
  2552.          return Ent;
  2553.       end if;
  2554.    end First_Discriminant;
  2555.  
  2556.    ------------------
  2557.    -- First_Formal --
  2558.    ------------------
  2559.  
  2560.    function First_Formal (Id : E) return E is
  2561.       Formal : E;
  2562.  
  2563.    begin
  2564.       pragma Assert
  2565.         (Is_Overloadable (Id)
  2566.           or else Ekind (Id) = E_Entry_Family
  2567.           or else Ekind (Id) = E_Subprogram_Type);
  2568.  
  2569.       if Ekind (Id) = E_Enumeration_Literal then
  2570.          return Empty;
  2571.  
  2572.       else
  2573.          Formal := First_Entity (Id);
  2574.  
  2575.          if Present (Formal) and then Ekind (Formal) in Formal_Kind then
  2576.             return Formal;
  2577.          else
  2578.             return Empty;
  2579.          end if;
  2580.       end if;
  2581.    end First_Formal;
  2582.  
  2583.    -------------------
  2584.    -- First_Subtype --
  2585.    -------------------
  2586.  
  2587.    function First_Subtype (Id : E) return E is
  2588.       B   : constant Entity_Id := Base_Type (Id);
  2589.       F   : constant Node_Id   := Freeze_Node (B);
  2590.       Ent : Entity_Id;
  2591.  
  2592.    begin
  2593.       --  If the base type has no freeze node, it is a type in standard,
  2594.       --  and always acts as its own first subtype
  2595.  
  2596.       if No (F) then
  2597.          return B;
  2598.  
  2599.       --  Otherwise we check the freeze node, if it has a First_Subtype_Link
  2600.       --  then we use that link, otherwise (happens with some Itypes), we use
  2601.       --  the base type itself.
  2602.  
  2603.       else
  2604.          Ent := First_Subtype_Link (F);
  2605.  
  2606.          if Present (Ent) then
  2607.             return Ent;
  2608.          else
  2609.             return B;
  2610.          end if;
  2611.       end if;
  2612.    end First_Subtype;
  2613.  
  2614.    -----------------
  2615.    -- Has_Entries --
  2616.    -----------------
  2617.  
  2618.    function Has_Entries (Id : E) return B is
  2619.       Result : Boolean := False;
  2620.       Ent    : Entity_Id;
  2621.  
  2622.    begin
  2623.       pragma Assert (Is_Concurrent_Type (Id));
  2624.       Ent := First_Entity (Id);
  2625.  
  2626.       while Present (Ent) loop
  2627.          if Ekind (Ent) = E_Entry or else Ekind (Ent) = E_Entry_Family then
  2628.             Result := True;
  2629.             exit;
  2630.          end if;
  2631.          Ent := Next_Entity (Ent);
  2632.       end loop;
  2633.  
  2634.       return Result;
  2635.    end Has_Entries;
  2636.  
  2637.    ----------------------------
  2638.    -- Has_Foreign_Convention --
  2639.    ----------------------------
  2640.  
  2641.    function Has_Foreign_Convention (Id : E) return B is
  2642.    begin
  2643.       return Convention (Id) >= Foreign_Convention'First;
  2644.    end Has_Foreign_Convention;
  2645.  
  2646.    ---------------------
  2647.    -- Is_Boolean_Type --
  2648.    ---------------------
  2649.  
  2650.    function Is_Boolean_Type (Id : E) return B is
  2651.    begin
  2652.       return Root_Type (Id) = Standard_Boolean;
  2653.    end Is_Boolean_Type;
  2654.  
  2655.    ---------------------
  2656.    -- Is_By_Copy_Type --
  2657.    ---------------------
  2658.  
  2659.    function Is_By_Copy_Type (Id : E) return B is
  2660.    begin
  2661.       --  If Id is a private type whose full declaration has not been seen,
  2662.       --  we assume for now that it is not a By_Copy type. Clearly this
  2663.       --  attribute should not be used before the type is frozen, but it is
  2664.       --  needed to build the associated record of a protected type. Another
  2665.       --  place where some lookahead for a full view is needed ???
  2666.  
  2667.       return
  2668.         Is_Elementary_Type (Id)
  2669.           or else (Is_Private_Type (Id)
  2670.                      and then Present (Underlying_Type (Id))
  2671.                      and then Is_Elementary_Type (Underlying_Type (Id)));
  2672.    end Is_By_Copy_Type;
  2673.  
  2674.    ---------------------
  2675.    -- Is_Derived_Type --
  2676.    ---------------------
  2677.  
  2678.    function Is_Derived_Type (Id : E) return B is
  2679.    begin
  2680.       return Base_Type (Id) /= Root_Type (Id)
  2681.         and not Is_Generic_Type (Id)
  2682.         and not Is_Class_Wide_Type (Id);
  2683.    end Is_Derived_Type;
  2684.  
  2685.    ------------------------
  2686.    -- Is_Indefinite_Subtype --
  2687.    ------------------------
  2688.  
  2689.    function Is_Indefinite_Subtype (Id : Entity_Id) return B is
  2690.       K : constant Entity_Kind := Ekind (Id);
  2691.  
  2692.    begin
  2693.       if Is_Constrained (Id) then
  2694.          return False;
  2695.  
  2696.       elsif K in Array_Kind
  2697.         or else K in Class_Wide_Kind
  2698.         or else Has_Unknown_Discriminants (Id)
  2699.       then
  2700.          return True;
  2701.  
  2702.       --  Known discriminants: indefinite if there are no default values
  2703.  
  2704.       elsif K in Record_Kind
  2705.         or else Is_Incomplete_Or_Private_Type (Id)
  2706.       then
  2707.          return (Has_Discriminants (Id)
  2708.            and then No (Discriminant_Default_Value (First_Discriminant (Id))));
  2709.  
  2710.       else
  2711.          return False;
  2712.       end if;
  2713.    end Is_Indefinite_Subtype;
  2714.  
  2715.    ---------------------
  2716.    -- Is_Limited_Type --
  2717.    ---------------------
  2718.  
  2719.    function Is_Limited_Type (Id : E) return B is
  2720.       Btype : constant E := Base_Type (Id);
  2721.  
  2722.    begin
  2723.       if Ekind (Btype) = E_Limited_Private_Type then
  2724.          return True;
  2725.  
  2726.       elsif Is_Concurrent_Type (Btype) then
  2727.          return True;
  2728.  
  2729.       elsif Is_Record_Type (Btype) then
  2730.          if Is_Limited_Record (Btype) then
  2731.             return True;
  2732.  
  2733.          elsif Is_Class_Wide_Type (Btype) then
  2734.             return Is_Limited_Type (Root_Type (Btype));
  2735.  
  2736.          else
  2737.             declare
  2738.                C : E := First_Component (Btype);
  2739.             begin
  2740.                while Present (C) loop
  2741.                   if Is_Limited_Type (Etype (C)) then
  2742.                      return True;
  2743.                   end if;
  2744.  
  2745.                   C := Next_Component (C);
  2746.                end loop;
  2747.             end;
  2748.  
  2749.             return False;
  2750.          end if;
  2751.  
  2752.       elsif Is_Array_Type (Btype) then
  2753.          return Is_Limited_Type (Component_Type (Btype));
  2754.  
  2755.       else
  2756.          return False;
  2757.       end if;
  2758.    end Is_Limited_Type;
  2759.  
  2760.    --------------------------
  2761.    -- Is_Protected_Private --
  2762.    --------------------------
  2763.  
  2764.    function Is_Protected_Private (Id : E) return B is
  2765.  
  2766.    begin
  2767.       pragma Assert (Ekind (Id) = E_Component);
  2768.       return Is_Protected_Type (Scope (Id));
  2769.    end Is_Protected_Private;
  2770.  
  2771.    ------------------------------
  2772.    -- Is_Protected_Record_Type --
  2773.    ------------------------------
  2774.  
  2775.    function Is_Protected_Record_Type (Id : E) return B is
  2776.    begin
  2777.       return
  2778.         Is_Concurrent_Record_Type (Id)
  2779.           and then Is_Protected_Type (Corresponding_Concurrent_Type (Id));
  2780.    end Is_Protected_Record_Type;
  2781.  
  2782.    ---------------------------------
  2783.    -- Is_Return_By_Reference_Type --
  2784.    ---------------------------------
  2785.  
  2786.    function Is_Return_By_Reference_Type (Id : E) return B is
  2787.       Btype : constant E := Base_Type (Id);
  2788.  
  2789.    begin
  2790.  
  2791.       if Is_Private_Type (Btype) then
  2792.          declare
  2793.             Utyp : constant E := Underlying_Type (Btype);
  2794.          begin
  2795.             if No (Utyp) then
  2796.                return False;
  2797.             else
  2798.                return Is_Return_By_Reference_Type (Utyp);
  2799.             end if;
  2800.          end;
  2801.  
  2802.       elsif Is_Concurrent_Type (Btype) then
  2803.          return True;
  2804.  
  2805.       elsif Is_Record_Type (Btype) then
  2806.          if Is_Limited_Record (Btype) then
  2807.             return True;
  2808.  
  2809.          elsif Is_Class_Wide_Type (Btype) then
  2810.             return Is_Return_By_Reference_Type (Root_Type (Btype));
  2811.  
  2812.          else
  2813.             declare
  2814.                C : E := First_Component (Btype);
  2815.             begin
  2816.                while Present (C) loop
  2817.                   if Is_Return_By_Reference_Type (Etype (C)) then
  2818.                      return True;
  2819.                   end if;
  2820.  
  2821.                   C := Next_Component (C);
  2822.                end loop;
  2823.             end;
  2824.  
  2825.             return False;
  2826.          end if;
  2827.  
  2828.       elsif Is_Array_Type (Btype) then
  2829.          return Is_Return_By_Reference_Type (Component_Type (Btype));
  2830.  
  2831.       else
  2832.          return False;
  2833.       end if;
  2834.    end Is_Return_By_Reference_Type;
  2835.  
  2836.    -------------------------
  2837.    -- Is_Task_Record_Type --
  2838.    -------------------------
  2839.  
  2840.    function Is_Task_Record_Type (Id : E) return B is
  2841.    begin
  2842.       return
  2843.         Is_Concurrent_Record_Type (Id)
  2844.           and then Is_Task_Type (Corresponding_Concurrent_Type (Id));
  2845.    end Is_Task_Record_Type;
  2846.  
  2847.    --------------------
  2848.    -- Is_String_Type --
  2849.    --------------------
  2850.  
  2851.    function Is_String_Type (Id : E) return B is
  2852.    begin
  2853.       return Ekind (Id) in String_Kind
  2854.         or else (Is_Array_Type (Id)
  2855.                   and then Number_Dimensions (Id) = 1
  2856.                   and then Is_Character_Type (Component_Type (Id)));
  2857.    end Is_String_Type;
  2858.  
  2859.    --------------------
  2860.    -- Next_Component --
  2861.    --------------------
  2862.  
  2863.    function Next_Component (Id : E) return E is
  2864.       Comp_Id : E;
  2865.  
  2866.    begin
  2867.       Comp_Id := Next_Entity (Id);
  2868.  
  2869.       while Present (Comp_Id) loop
  2870.          exit when Ekind (Comp_Id) = E_Component;
  2871.          Comp_Id := Next_Entity (Comp_Id);
  2872.       end loop;
  2873.  
  2874.       return Comp_Id;
  2875.    end Next_Component;
  2876.  
  2877.    -----------------------
  2878.    -- Next_Discriminant --
  2879.    -----------------------
  2880.  
  2881.    function Next_Discriminant (Id : E) return E is
  2882.       D : constant E := Next_Entity (Id);
  2883.  
  2884.    begin
  2885.       pragma Assert (Ekind (Id) = E_Discriminant);
  2886.  
  2887.       if Present (D) and then Ekind (D) = E_Discriminant then
  2888.          return D;
  2889.       else
  2890.          return Empty;
  2891.       end if;
  2892.    end Next_Discriminant;
  2893.  
  2894.    -----------------
  2895.    -- Next_Formal --
  2896.    -----------------
  2897.  
  2898.    function Next_Formal (Id : E) return E is
  2899.       P : E;
  2900.  
  2901.    begin
  2902.       --  Follow the chain of declared entities as long as the kind of
  2903.       --  the entity corresponds to a formal parameter. Skip internal
  2904.       --  entities that may have been created for implicit subtypes,
  2905.       --  in the process of analyzing default expressions.
  2906.  
  2907.       P := Id;
  2908.  
  2909.       loop
  2910.          P := Next_Entity (P);
  2911.  
  2912.          if No (P) or else Ekind (P) in Formal_Kind then
  2913.             return P;
  2914.          elsif not Is_Internal (P) then
  2915.             return Empty;
  2916.          end if;
  2917.       end loop;
  2918.    end Next_Formal;
  2919.  
  2920.    ----------------
  2921.    -- Next_Index --
  2922.    ----------------
  2923.  
  2924.    function Next_Index (Id : Node_Id) return Node_Id is
  2925.    begin
  2926.       return Next (Id);
  2927.    end Next_Index;
  2928.  
  2929.    ------------------
  2930.    -- Next_Literal --
  2931.    ------------------
  2932.  
  2933.    function Next_Literal (Id : E) return E is
  2934.    begin
  2935.       pragma Assert (Nkind (Id) in N_Entity);
  2936.       return Next (Id);
  2937.    end Next_Literal;
  2938.  
  2939.    --------------------
  2940.    -- Next_Overloads --
  2941.    --------------------
  2942.  
  2943.    function Next_Overloads (Id : E) return E is
  2944.    begin
  2945.       pragma Assert
  2946.         (Is_Overloadable (Id) or else Ekind (Id) = E_Subprogram_Type);
  2947.       return Homonym (Id);
  2948.    end Next_Overloads;
  2949.  
  2950.    -----------------------
  2951.    -- Number_Dimensions --
  2952.    -----------------------
  2953.  
  2954.    function Number_Dimensions (Id : E) return Pos is
  2955.       N : Int;
  2956.       T : Node_Id;
  2957.  
  2958.    begin
  2959.       N := 0;
  2960.       T := First_Index (Id);
  2961.  
  2962.       while Present (T) loop
  2963.          N := N + 1;
  2964.          T := Next (T);
  2965.       end loop;
  2966.  
  2967.       return N;
  2968.    end Number_Dimensions;
  2969.  
  2970.    --------------------------
  2971.    -- Number_Discriminants --
  2972.    --------------------------
  2973.  
  2974.    function Number_Discriminants (Id : E) return Pos is
  2975.       N     : Int;
  2976.       Discr : Entity_Id;
  2977.  
  2978.    begin
  2979.       N := 0;
  2980.       Discr := First_Discriminant (Id);
  2981.  
  2982.       while Present (Discr) loop
  2983.          N := N + 1;
  2984.          Discr := Next_Discriminant (Discr);
  2985.       end loop;
  2986.  
  2987.       return N;
  2988.    end Number_Discriminants;
  2989.  
  2990.    --------------------
  2991.    -- Parameter_Mode --
  2992.    --------------------
  2993.  
  2994.    function Parameter_Mode (Id : E) return Formal_Kind is
  2995.    begin
  2996.       return Ekind (Id);
  2997.    end Parameter_Mode;
  2998.  
  2999.    ---------------
  3000.    -- Root_Type --
  3001.    ---------------
  3002.  
  3003.    function Root_Type (Id : E) return E is
  3004.       T : E;
  3005.  
  3006.    begin
  3007.       pragma Assert (Nkind (Id) in N_Entity);
  3008.  
  3009.       T := Base_Type (Id);
  3010.  
  3011.       if Ekind (T) = E_Class_Wide_Type then
  3012.          return Etype (T);
  3013.  
  3014.       else
  3015.          while T /= Etype (T) loop
  3016.             T := Etype (T);
  3017.          end loop;
  3018.  
  3019.          return T;
  3020.       end if;
  3021.    end Root_Type;
  3022.  
  3023.    ------------------
  3024.    -- Subtype_Kind --
  3025.    ------------------
  3026.  
  3027.    function Subtype_Kind (K : Entity_Kind) return Entity_Kind is
  3028.       Kind : Entity_Kind;
  3029.  
  3030.    begin
  3031.       case K is
  3032.          when Access_Kind                 => Kind := E_Access_Subtype;
  3033.  
  3034.          when E_Array_Type                |
  3035.               E_Array_Subtype             => Kind := E_Array_Subtype;
  3036.  
  3037.          when E_Class_Wide_Type           |
  3038.               E_Class_Wide_Subtype        => Kind := E_Class_Wide_Subtype;
  3039.  
  3040.          when E_Decimal_Fixed_Point_Type  |
  3041.               E_Decimal_Fixed_Point_Subtype
  3042.                                           => Kind :=
  3043.                                                E_Decimal_Fixed_Point_Subtype;
  3044.  
  3045.          when E_Ordinary_Fixed_Point_Type |
  3046.               E_Ordinary_Fixed_Point_Subtype
  3047.                                           => Kind :=
  3048.                                                E_Ordinary_Fixed_Point_Subtype;
  3049.  
  3050.          when E_Private_Type              |
  3051.               E_Private_Subtype           => Kind := E_Private_Subtype;
  3052.  
  3053.          when E_Limited_Private_Type      |
  3054.               E_Limited_Private_Subtype   => Kind := E_Limited_Private_Subtype;
  3055.  
  3056.          when E_Record_Type_With_Private  |
  3057.               E_Record_Subtype_With_Private
  3058.                                       => Kind := E_Record_Subtype_With_Private;
  3059.  
  3060.          when E_Record_Type               |
  3061.               E_Record_Subtype            => Kind := E_Record_Subtype;
  3062.  
  3063.          when E_String_Type               |
  3064.               E_String_Subtype            => Kind := E_String_Subtype;
  3065.  
  3066.          when Enumeration_Kind            => Kind := E_Enumeration_Subtype;
  3067.          when Float_Kind                  => Kind := E_Floating_Point_Subtype;
  3068.          when Signed_Integer_Kind         => Kind := E_Signed_Integer_Subtype;
  3069.          when Modular_Integer_Kind        => Kind := E_Modular_Integer_Subtype;
  3070.          when Protected_Kind              => Kind := E_Protected_Subtype;
  3071.          when Task_Kind                   => Kind := E_Task_Subtype;
  3072.  
  3073.          when others =>
  3074.             pragma Assert (False); null;
  3075.       end case;
  3076.  
  3077.       return Kind;
  3078.    end Subtype_Kind;
  3079.  
  3080.    -------------------
  3081.    -- Tag_Component --
  3082.    -------------------
  3083.  
  3084.    function Tag_Component (Id : E) return E is
  3085.       Comp : Entity_Id;
  3086.       Typ  : Entity_Id := Id;
  3087.  
  3088.    begin
  3089.       pragma Assert (Is_Tagged_Type (Typ));
  3090.  
  3091.       if Is_Class_Wide_Type (Typ) then
  3092.          Typ := Root_Type (Typ);
  3093.       end if;
  3094.  
  3095.       if Is_Private_Type (Typ) then
  3096.          Typ := Underlying_Type (Typ);
  3097.       end if;
  3098.  
  3099.       Comp := First_Entity (Typ);
  3100.       while Present (Comp) loop
  3101.          if Is_Tag (Comp) then
  3102.             return Comp;
  3103.          end if;
  3104.  
  3105.          Comp := Next_Entity (Comp);
  3106.       end loop;
  3107.  
  3108.       --  no tag component found
  3109.  
  3110.       return Empty;
  3111.    end Tag_Component;
  3112.  
  3113.    ---------------------
  3114.    -- Type_High_Bound --
  3115.    ---------------------
  3116.  
  3117.    function Type_High_Bound (Id : E) return Node_Id is
  3118.    begin
  3119.       return High_Bound (Scalar_Range (Id));
  3120.    end Type_High_Bound;
  3121.  
  3122.    --------------------
  3123.    -- Type_Low_Bound --
  3124.    --------------------
  3125.  
  3126.    function Type_Low_Bound (Id : E) return Node_Id is
  3127.    begin
  3128.       return Low_Bound (Scalar_Range (Id));
  3129.    end Type_Low_Bound;
  3130.  
  3131.    ---------------------
  3132.    -- Underlying_Type --
  3133.    ---------------------
  3134.  
  3135.    function Underlying_Type (Id : E) return E is
  3136.    begin
  3137.  
  3138.       --  For record_with_private the underlying type is always the direct
  3139.       --  full view. Never try to take the full view of the parent it
  3140.       --  doesn't make sense.
  3141.  
  3142.       if Ekind (Id) = E_Record_Type_With_Private then
  3143.          return Full_View (Id);
  3144.  
  3145.       elsif Ekind (Id) in Incomplete_Or_Private_Kind then
  3146.  
  3147.          --  If we have an incomplete or private type with a full view,
  3148.          --  then we return the Underlying_Type of this full view
  3149.  
  3150.          if Present (Full_View (Id)) then
  3151.             return Underlying_Type (Full_View (Id));
  3152.  
  3153.          --  Otherwise check for the case where we have a derived type or
  3154.          --  subtype, and if so get the Underlying_Type of the parent type.
  3155.  
  3156.          elsif Etype (Id) /= Id then
  3157.             return Underlying_Type (Etype (Id));
  3158.  
  3159.          --  Otherwise we have an incomplete or private type that has
  3160.          --  no full view, which means that we have not encountered the
  3161.          --  completion, so return Empty to indicate the underlying type
  3162.          --  is not yet known.
  3163.  
  3164.          else
  3165.             return Empty;
  3166.          end if;
  3167.  
  3168.       --  For non-incomplete, non-private types, return the type itself
  3169.  
  3170.       else
  3171.          return Id;
  3172.       end if;
  3173.    end Underlying_Type;
  3174.  
  3175.    ------------------------
  3176.    -- Write_Entity_Flags --
  3177.    ------------------------
  3178.  
  3179.    procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String) is
  3180.  
  3181.       procedure W (Flag_Name : String; Flag : Boolean);
  3182.       --  Write out given flag if it is set
  3183.  
  3184.       procedure W (Flag_Name : String; Flag : Boolean) is
  3185.       begin
  3186.          if Flag then
  3187.             Write_Str (Prefix);
  3188.             Write_Str (Flag_Name);
  3189.             Write_Str (" = True");
  3190.             Write_Eol;
  3191.          end if;
  3192.       end W;
  3193.  
  3194.    --  Start of processing for Write_Entity_Flags
  3195.  
  3196.    begin
  3197.       W ("Depends_On_Private",            Flag14  (Id));
  3198.       W ("Discard_Names",                 Flag88  (Id));
  3199.       W ("Has_Alignment_Clause",          Flag46  (Id));
  3200.       W ("Has_All_Calls_Remote",          Flag79  (Id));
  3201.       W ("Has_Atomic_Components",         Flag86  (Id));
  3202.       W ("Has_Completion",                Flag26  (Id));
  3203.       W ("Has_Completion_In_Body",        Flag71  (Id));
  3204.       W ("Has_Component_Size_Clause",     Flag68  (Id));
  3205.       W ("Has_Controlled",                Flag43  (Id));
  3206.       W ("Has_Controlling_Result",        Flag98  (Id));
  3207.       W ("Has_Delayed_Freeze",            Flag18  (Id));
  3208.       W ("Has_Discriminants",             Flag5   (Id));
  3209.       W ("Has_Enumeration_Rep_Clause",    Flag66  (Id));
  3210.       W ("Has_Exit",                      Flag47  (Id));
  3211.       W ("Has_Homonym",                   Flag56  (Id));
  3212.       W ("Has_Machine_Attribute",         Flag82  (Id));
  3213.       W ("Has_Machine_Radix_Clause",      Flag83  (Id));
  3214.       W ("Has_Master_Entity",             Flag21  (Id));
  3215.       W ("Has_Nested_Block_With_Handler", Flag101 (Id));
  3216.       W ("Has_Non_Standard_Rep",          Flag75  (Id));
  3217.       W ("Has_Pragma_Controlled",         Flag27  (Id));
  3218.       W ("Has_Record_Rep_Clause",         Flag65  (Id));
  3219.       W ("Has_Size_Clause",               Flag29  (Id));
  3220.       W ("Has_Small_Clause",              Flag67  (Id));
  3221.       W ("Has_Specified_Layout",          Flag100 (Id));
  3222.       W ("Has_Storage_Size_Clause",       Flag23  (Id));
  3223.       W ("Has_Tasks",                     Flag30  (Id));
  3224.       W ("Has_U_Nominal_Subtype",         Flag80  (Id));
  3225.       W ("Has_Unknown_Discriminants",     Flag72  (Id));
  3226.       W ("Has_Volatile_Components",       Flag87  (Id));
  3227.       W ("In_Package_Body",               Flag48  (Id));
  3228.       W ("In_Private_Part",               Flag45  (Id));
  3229.       W ("In_Use",                        Flag8   (Id));
  3230.       W ("Is_Abstract",                   Flag19  (Id));
  3231.       W ("Is_Access_Constant",            Flag69  (Id));
  3232.       W ("Is_Aliased",                    Flag15  (Id));
  3233.       W ("Is_Asynchronous",               Flag81  (Id));
  3234.       W ("Is_Atomic",                     Flag85  (Id));
  3235.       W ("Is_Called",                     Flag102 (Id));
  3236.       W ("Is_CPP_Class",                  Flag74  (Id));
  3237.       W ("Is_Character_Type",             Flag63  (Id));
  3238.       W ("Is_Child_Unit",                 Flag73  (Id));
  3239.       W ("Is_Concurrent_Record_Type",     Flag20  (Id));
  3240.       W ("Is_Constrained",                Flag3   (Id));
  3241.       W ("Is_Constructor",                Flag76  (Id));
  3242.       W ("Is_Controlled",                 Flag42  (Id));
  3243.       W ("Is_Controlling_Formal",         Flag97  (Id));
  3244.       W ("Is_Declared_In_Package_Body",   Flag93  (Id));
  3245.       W ("Is_Destructor",                 Flag77  (Id));
  3246.       W ("Is_Dispatching_Operation",      Flag6   (Id));
  3247.       W ("Is_Entry_Formal",               Flag52  (Id));
  3248.       W ("Is_Exported",                   Flag99  (Id));
  3249.       W ("Is_First_Subtype",              Flag70  (Id));
  3250.       W ("Is_Frozen",                     Flag4   (Id));
  3251.       W ("Is_Generic_Actual_Type",        Flag94  (Id));
  3252.       W ("Is_Generic_Type",               Flag1   (Id));
  3253.       W ("Is_Immediately_Visible",        Flag7   (Id));
  3254.       W ("Is_Imported",                   Flag24  (Id));
  3255.       W ("Is_Inlined",                    Flag11  (Id));
  3256.       W ("Is_Internal",                   Flag17  (Id));
  3257.       W ("Is_Interrupt_Handler",          Flag89  (Id));
  3258.       W ("Is_Intrinsic_Subprogram",       Flag64  (Id));
  3259.       W ("Is_Itype",                      Flag91  (Id));
  3260.       W ("Is_Limited_Record",             Flag25  (Id));
  3261.       W ("Is_Packed",                     Flag51  (Id));
  3262.       W ("Is_Potentially_Use_Visible",    Flag9   (Id));
  3263.       W ("Is_Preelaborated",              Flag59  (Id));
  3264.       W ("Is_Private",                    Flag57  (Id));
  3265.       W ("Is_Private_Descendant",         Flag53  (Id));
  3266.       W ("Is_Public",                     Flag10  (Id));
  3267.       W ("Is_Pure",                       Flag44  (Id));
  3268.       W ("Is_Remote_Call_Interface",      Flag62  (Id));
  3269.       W ("Is_Remote_Types",               Flag61  (Id));
  3270.       W ("Is_Shared_Passive",             Flag60  (Id));
  3271.       W ("Is_Tag",                        Flag78  (Id));
  3272.       W ("Is_Tagged_Type",                Flag55  (Id));
  3273.       W ("Is_Volatile",                   Flag16  (Id));
  3274.       W ("Machine_Radix_10",              Flag84  (Id));
  3275.       W ("Needs_Discr_Check",             Flag50  (Id));
  3276.       W ("Needs_No_Actuals",              Flag22  (Id));
  3277.       W ("Non_Binary_Modulus",            Flag58  (Id));
  3278.       W ("Reachable",                     Flag49  (Id));
  3279.       W ("Return_Present",                Flag54  (Id));
  3280.       W ("Returns_By_Ref",                Flag90  (Id));
  3281.       W ("Size_Known_At_Compile_Time",    Flag92  (Id));
  3282.       W ("Suppress_Access_Checks",        Flag31  (Id));
  3283.       W ("Suppress_Accessibility_Checks", Flag32  (Id));
  3284.       W ("Suppress_Discriminant_Checks",  Flag33  (Id));
  3285.       W ("Suppress_Division_Checks",      Flag34  (Id));
  3286.       W ("Suppress_Elaboration_Checks",   Flag35  (Id));
  3287.       W ("Suppress_Index_Checks",         Flag36  (Id));
  3288.       W ("Suppress_Length_Checks",        Flag37  (Id));
  3289.       W ("Suppress_Overflow_Checks",      Flag38  (Id));
  3290.       W ("Suppress_Range_Checks",         Flag39  (Id));
  3291.       W ("Suppress_Storage_Checks",       Flag40  (Id));
  3292.       W ("Suppress_Tag_Checks",           Flag41  (Id));
  3293.  
  3294.    end Write_Entity_Flags;
  3295.  
  3296.    -----------------------
  3297.    -- Write_Entity_Info --
  3298.    -----------------------
  3299.  
  3300.    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String) is
  3301.  
  3302.       procedure Write_Kind (Id : Entity_Id);
  3303.       --  Write Ekind field of entity
  3304.  
  3305.       procedure Write_Attribute (Which : String; Nam : E);
  3306.       --  Write attribute value with given string name
  3307.  
  3308.  
  3309.       procedure Write_Kind (Id : Entity_Id) is
  3310.          K : constant String := Entity_Kind'Image (Ekind (Id));
  3311.  
  3312.       begin
  3313.          Write_Str (Prefix);
  3314.          Write_Str ("   Kind    ");
  3315.  
  3316.          if Is_Type (Id) and then Is_Tagged_Type (Id) then
  3317.             Write_Str ("TAGGED ");
  3318.          end if;
  3319.  
  3320.          Write_Str (K (3 .. K'Length));
  3321.          Write_Str (" ");
  3322.  
  3323.          if Is_Type (Id) and then Depends_On_Private (Id) then
  3324.             Write_Str ("Depends_On_Private ");
  3325.          end if;
  3326.       end Write_Kind;
  3327.  
  3328.       procedure Write_Attribute (Which : String; Nam : E) is
  3329.       begin
  3330.          Write_Str (Prefix);
  3331.          Write_Str (Which);
  3332.          Write_Int (Int (Nam));
  3333.          Write_Str (" ");
  3334.          Write_Name (Chars (Nam));
  3335.          Write_Str (" ");
  3336.       end Write_Attribute;
  3337.  
  3338.    --  Start of processing for Write_Entity_Info
  3339.  
  3340.    begin
  3341.       Write_Eol;
  3342.       Write_Attribute ("Name ", Id);
  3343.       Write_Int (Int (Id));
  3344.       Write_Eol;
  3345.       Write_Kind (Id);
  3346.       Write_Eol;
  3347.       Write_Attribute ("   Type    ", Etype (Id));
  3348.       Write_Eol;
  3349.       Write_Attribute ("   Scope   ", Scope (Id));
  3350.       Write_Eol;
  3351.  
  3352.       case Ekind (Id) is
  3353.  
  3354.          when Discrete_Kind =>
  3355.             Write_Str ("Bounds: Id = ");
  3356.  
  3357.             if Present (Scalar_Range (Id)) then
  3358.                Write_Int (Int (Type_Low_Bound (Id)));
  3359.                Write_Str (" .. Id = ");
  3360.                Write_Int (Int (Type_High_Bound (Id)));
  3361.             else
  3362.                Write_Str ("Empty");
  3363.             end if;
  3364.  
  3365.             Write_Eol;
  3366.  
  3367.          when Array_Kind =>
  3368.             declare
  3369.                Index : E;
  3370.  
  3371.             begin
  3372.                Write_Attribute ("   Component Type    ",
  3373.                                                    Component_Type (Id));
  3374.                Write_Eol;
  3375.                Write_Str (Prefix);
  3376.                Write_Str ("   Indices ");
  3377.  
  3378.                Index := First_Index (Id);
  3379.  
  3380.                while Present (Index) loop
  3381.                   Write_Attribute (" ", Etype (Index));
  3382.                   Index := Next_Index (Index);
  3383.                end loop;
  3384.  
  3385.                Write_Eol;
  3386.             end;
  3387.  
  3388.          when Access_Kind =>
  3389.                Write_Attribute
  3390.                  ("   Directly Designated Type ",
  3391.                   Directly_Designated_Type (Id));
  3392.                Write_Eol;
  3393.  
  3394.          when Overloadable_Kind =>
  3395.             if Present (Homonym (Id)) then
  3396.                Write_Str ("   Homonym   ");
  3397.                Write_Name (Chars (Homonym (Id)));
  3398.                Write_Str ("   ");
  3399.                Write_Int (Int (Homonym (Id)));
  3400.                Write_Eol;
  3401.             end if;
  3402.  
  3403.             Write_Eol;
  3404.  
  3405.          when E_Component =>
  3406.             if Ekind (Scope (Id)) in Record_Kind then
  3407.                Write_Attribute (
  3408.                   "   Original_Record_Component   ",
  3409.                   Original_Record_Component (Id));
  3410.                Write_Int (Int (Original_Record_Component (Id)));
  3411.                Write_Eol;
  3412.             end if;
  3413.  
  3414.          when others => null;
  3415.       end case;
  3416.    end Write_Entity_Info;
  3417.  
  3418.    -----------------------
  3419.    -- Write_Field6_Name --
  3420.    -----------------------
  3421.  
  3422.    procedure Write_Field6_Name (Id : Entity_Id) is
  3423.    begin
  3424.       case Ekind (Id) is
  3425.          when E_Constant                                 |
  3426.               E_Function                                 |
  3427.               E_Generic_Function                         |
  3428.               E_Procedure                                |
  3429.               E_Generic_Procedure                        |
  3430.               E_Variable                                 =>
  3431.             Write_Str ("Interface_Name");
  3432.  
  3433.          when Concurrent_Kind                            |
  3434.               Incomplete_Or_Private_Kind                 |
  3435.               Class_Wide_Kind                            |
  3436.               E_Record_Type                              |
  3437.               E_Record_Subtype                           =>
  3438.             Write_Str ("Discriminant_Constraint");
  3439.  
  3440.          when E_Entry                                    |
  3441.               E_Entry_Family                             =>
  3442.             Write_Str ("Accept_Address");
  3443.  
  3444.          when Fixed_Point_Kind                           =>
  3445.             Write_Str ("Small_Value");
  3446.  
  3447.          when others                                     =>
  3448.             Write_Str ("Field6??");
  3449.       end case;
  3450.    end Write_Field6_Name;
  3451.  
  3452.    -----------------------
  3453.    -- Write_Field7_Name --
  3454.    -----------------------
  3455.  
  3456.    procedure Write_Field7_Name (Id : Entity_Id) is
  3457.    begin
  3458.       case Ekind (Id) is
  3459.          when E_Discriminant                             =>
  3460.             Write_Str ("Corresponding_Discriminant");
  3461.  
  3462.          when E_Enumeration_Literal                      |
  3463.               E_Function                                 |
  3464.               E_Operator                                 |
  3465.               E_Procedure                                =>
  3466.             Write_Str ("Alias");
  3467.  
  3468.          when E_Record_Type                =>
  3469.             Write_Str ("Corresponding_Concurrent_Type");
  3470.  
  3471.          when E_Entry                                    |
  3472.               E_Entry_Family                             =>
  3473.             Write_Str ("Entry_Parameters_Type");
  3474.  
  3475.          when E_Entry_Index_Parameter                    =>
  3476.             Write_Str ("Entry_Index_Constant");
  3477.  
  3478.          when E_Class_Wide_Subtype                       =>
  3479.             Write_Str ("Equivalent_Type");
  3480.  
  3481.          when Enumeration_Kind                           =>
  3482.             Write_Str ("Lit_Name_Table");
  3483.  
  3484.          when Fixed_Point_Kind                           =>
  3485.             Write_Str ("Delta_Value");
  3486.  
  3487.          when E_Constant                                 |
  3488.               E_Variable                                 =>
  3489.             Write_Str ("Renamed_Object");
  3490.  
  3491.          when E_Exception                                |
  3492.               E_Package                                  |
  3493.               E_Generic_Function                         |
  3494.               E_Generic_Procedure                        |
  3495.               E_Generic_Package                          =>
  3496.             Write_Str ("Renamed_Entity");
  3497.  
  3498.          when Private_Kind                               =>
  3499.             Write_Str ("Private_Dependents");
  3500.  
  3501.          when Concurrent_Kind                            =>
  3502.             Write_Str ("Corresponding_Record_Type");
  3503.  
  3504.          when others                                     =>
  3505.             Write_Str ("Field7??");
  3506.       end case;
  3507.    end Write_Field7_Name;
  3508.  
  3509.    -----------------------
  3510.    -- Write_Field8_Name --
  3511.    -----------------------
  3512.  
  3513.    procedure Write_Field8_Name (Id : Entity_Id) is
  3514.    begin
  3515.       case Ekind (Id) is
  3516.          when E_Component                                |
  3517.               E_Discriminant                             =>
  3518.             Write_Str ("Original_Record_Component");
  3519.  
  3520.          when E_Enumeration_Literal                      =>
  3521.             Write_Str ("Enumeration_Rep_Expr");
  3522.  
  3523.          when Formal_Kind                                =>
  3524.             Write_Str ("Protected_Formal");
  3525.  
  3526.          when Type_Kind                                  |
  3527.               E_Variable                                 |
  3528.               E_Constant                                 =>
  3529.             Write_Str ("Alignment_Clause");
  3530.  
  3531.          when E_Block                                    |
  3532.               E_Function                                 |
  3533.               E_Loop                                     |
  3534.               E_Package                                  |
  3535.               E_Generic_Package                          |
  3536.               E_Generic_Function                         |
  3537.               E_Generic_Procedure                        |
  3538.               E_Procedure                                =>
  3539.             Write_Str ("Scope_Depth");
  3540.  
  3541.          when others                                     =>
  3542.             Write_Str ("Field8??");
  3543.       end case;
  3544.    end Write_Field8_Name;
  3545.  
  3546.    -----------------------
  3547.    -- Write_Field9_Name --
  3548.    -----------------------
  3549.  
  3550.    procedure Write_Field9_Name (Id : Entity_Id) is
  3551.    begin
  3552.       case Ekind (Id) is
  3553.          when Digits_Kind                                =>
  3554.             Write_Str ("Digits_Value");
  3555.  
  3556.          when E_Component                                =>
  3557.             Write_Str ("Prival");
  3558.  
  3559.          when E_Discriminant                             =>
  3560.             Write_Str ("Discriminal");
  3561.  
  3562.          when E_Block                                    |
  3563.               Class_Wide_Kind                            |
  3564.               Concurrent_Kind                            |
  3565.               Private_Kind                               |
  3566.               E_Entry                                    |
  3567.               E_Entry_Family                             |
  3568.               E_Function                                 |
  3569.               E_Generic_Function                         |
  3570.               E_Generic_Package                          |
  3571.               E_Generic_Procedure                        |
  3572.               E_Loop                                     |
  3573.               E_Operator                                 |
  3574.               E_Package                                  |
  3575.               E_Procedure                                |
  3576.               E_Record_Type                              |
  3577.               E_Record_Subtype                           |
  3578.               E_Subprogram_Type                          =>
  3579.             Write_Str ("First_Entity");
  3580.  
  3581.          when Array_Kind                                 =>
  3582.             Write_Str ("First_Index");
  3583.  
  3584.          when E_Protected_Body                           =>
  3585.             Write_Str ("Object_Ref");
  3586.  
  3587.          when Enumeration_Kind                           =>
  3588.             Write_Str ("First_Literal");
  3589.  
  3590.          when Access_Kind                                =>
  3591.             Write_Str ("Master_Id");
  3592.  
  3593.          when Modular_Integer_Kind                       =>
  3594.             Write_Str ("Modulus");
  3595.  
  3596.          when Formal_Kind                                |
  3597.                E_Constant                                |
  3598.                E_Generic_In_Out_Parameter                |
  3599.                E_Variable                                =>
  3600.             Write_Str ("Actual_Subtype");
  3601.  
  3602.          when others                                     =>
  3603.             Write_Str ("Field9??");
  3604.  
  3605.       end case;
  3606.    end Write_Field9_Name;
  3607.  
  3608.    ------------------------
  3609.    -- Write_Field10_Name --
  3610.    ------------------------
  3611.  
  3612.    procedure Write_Field10_Name (Id : Entity_Id) is
  3613.    begin
  3614.       case Ekind (Id) is
  3615.          when Array_Kind                                 =>
  3616.             Write_Str ("Component_Type");
  3617.  
  3618.          when E_In_Parameter                            |
  3619.               E_Generic_In_Parameter                     =>
  3620.             Write_Str ("Default_Value");
  3621.  
  3622.          when Access_Kind                                =>
  3623.             Write_Str ("Directly_Designated_Type");
  3624.  
  3625.          when E_Component                                =>
  3626.             Write_Str ("Discriminant_Checking_Func");
  3627.  
  3628.          when E_Discriminant                             =>
  3629.             Write_Str ("Discriminant_Default_Value");
  3630.  
  3631.          when E_Block                                    |
  3632.               Class_Wide_Kind                            |
  3633.               Concurrent_Kind                            |
  3634.               Private_Kind                               |
  3635.               E_Entry                                    |
  3636.               E_Entry_Family                             |
  3637.               E_Function                                 |
  3638.               E_Generic_Function                         |
  3639.               E_Generic_Package                          |
  3640.               E_Generic_Procedure                        |
  3641.               E_Loop                                     |
  3642.               E_Operator                                 |
  3643.               E_Package                                  |
  3644.               E_Procedure                                |
  3645.               E_Record_Type                              |
  3646.               E_Record_Subtype                           |
  3647.               E_Subprogram_Type                          =>
  3648.  
  3649.             Write_Str ("Last_Entity");
  3650.  
  3651.          when Scalar_Kind                                =>
  3652.             Write_Str ("Scalar_Range");
  3653.  
  3654.          when others                                     =>
  3655.             Write_Str ("Field10??");
  3656.       end case;
  3657.    end Write_Field10_Name;
  3658.  
  3659.    ------------------------
  3660.    -- Write_Field11_Name --
  3661.    ------------------------
  3662.  
  3663.    procedure Write_Field11_Name (Id : Entity_Id) is
  3664.    begin
  3665.       case Ekind (Id) is
  3666.          when Formal_Kind                                =>
  3667.             Write_Str ("Entry_Component");
  3668.  
  3669.          when E_Component                                |
  3670.               E_Discriminant                             =>
  3671.             Write_Str ("Component_First_Bit");
  3672.  
  3673.          when E_Constant                                 =>
  3674.             Write_Str ("Full_View");
  3675.  
  3676.          when E_Enumeration_Literal                      =>
  3677.             Write_Str ("Enumeration_Pos");
  3678.  
  3679.          when E_String_Literal_Subtype                   =>
  3680.             Write_Str ("String_Literal_Length");
  3681.  
  3682.          when E_Enum_Table_Type                          =>
  3683.             Write_Str ("Table_High_Bound");
  3684.  
  3685.          when E_Function                                 |
  3686.               E_Procedure                                |
  3687.               E_Entry                                    |
  3688.               E_Entry_Family                             =>
  3689.             Write_Str ("Protected_Body_Subprogram");
  3690.  
  3691.          when E_Package                                  |
  3692.               E_Generic_Package                          |
  3693.               Concurrent_Kind                            =>
  3694.             Write_Str ("First_Private_Entity");
  3695.  
  3696.          when Incomplete_Or_Private_Kind                 =>
  3697.             Write_Str ("Full_View");
  3698.  
  3699.          when Scalar_Kind                                =>
  3700.             Write_Str ("Ancestor_Subtype");
  3701.  
  3702.          when others                                     =>
  3703.             Write_Str ("Field11??");
  3704.       end case;
  3705.    end Write_Field11_Name;
  3706.  
  3707.    ------------------------
  3708.    -- Write_Field12_Name --
  3709.    ------------------------
  3710.  
  3711.    procedure Write_Field12_Name (Id : Entity_Id) is
  3712.    begin
  3713.       case Ekind (Id) is
  3714.          when E_Entry                                    |
  3715.               E_Entry_Family                             =>
  3716.             Write_Str ("Barrier_Function");
  3717.  
  3718.          when E_Enumeration_Literal                      =>
  3719.             Write_Str ("Enumeration_Rep");
  3720.  
  3721.          when Type_Kind                                  |
  3722.               E_Component                                |
  3723.               E_Constant                                 |
  3724.               E_Discriminant                             |
  3725.               E_Variable                                 =>
  3726.             Write_Str ("Esize");
  3727.  
  3728.          when E_Function                                 |
  3729.               E_Procedure                                =>
  3730.             Write_Str ("Next_Overloaded_Subprogram");
  3731.  
  3732.          when E_Package                                  =>
  3733.             Write_Str ("Associated_Formal_Package");
  3734.  
  3735.          when others                                     =>
  3736.             Write_Str ("Field12??");
  3737.       end case;
  3738.    end Write_Field12_Name;
  3739.  
  3740.    ------------------------
  3741.    -- Write_Field13_Name --
  3742.    ------------------------
  3743.  
  3744.    procedure Write_Field13_Name (Id : Entity_Id) is
  3745.    begin
  3746.       case Ekind (Id) is
  3747.          when Access_Kind                                =>
  3748.             Write_Str ("Associated_Storage_Pool");
  3749.  
  3750.          when Array_Kind                                 =>
  3751.             Write_Str ("Component_Size_Clause");
  3752.  
  3753.          when E_Component                                |
  3754.               E_Discriminant                             =>
  3755.             Write_Str ("Component_Clause");
  3756.  
  3757.          when Class_Wide_Kind                            |
  3758.               E_Record_Type                              |
  3759.               E_Record_Subtype                           |
  3760.               Private_Kind                               =>
  3761.             Write_Str ("Primitive_Operations");
  3762.  
  3763.          when E_Block                                    |
  3764.               Concurrent_Kind                            |
  3765.               E_Function                                 |
  3766.               E_Procedure                                |
  3767.               E_Entry                                    |
  3768.               E_Entry_Family                             =>
  3769.             Write_Str ("Finalization_Chain_Entity");
  3770.  
  3771.          when others                                     =>
  3772.             Write_Str ("FIeld13??");
  3773.       end case;
  3774.    end Write_Field13_Name;
  3775.  
  3776.    ------------------------
  3777.    -- Write_Field14_Name --
  3778.    ------------------------
  3779.  
  3780.    procedure Write_Field14_Name (Id : Entity_Id) is
  3781.    begin
  3782.       case Ekind (Id) is
  3783.          when Access_Kind                                =>
  3784.             Write_Str ("Associated_Final_Chain");
  3785.  
  3786.          when Array_Kind                                 =>
  3787.             Write_Str ("Packed_Array_Type");
  3788.  
  3789.          when E_Component                                =>
  3790.             Write_Str ("Protected_Operation");
  3791.  
  3792.          when E_Block                                    |
  3793.               Task_Kind                                  |
  3794.               E_Entry                                    |
  3795.               E_Entry_Family                             |
  3796.               E_Function                                 |
  3797.               E_Package                                  |
  3798.               E_Procedure                                =>
  3799.             Write_Str ("Task_Activation_Chain_Entity");
  3800.  
  3801.          when E_Enumeration_Type                         =>
  3802.             Write_Str ("Enum_Pos_To_Rep");
  3803.  
  3804.          when others                                     =>
  3805.             Write_Str ("Field14??");
  3806.       end case;
  3807.    end Write_Field14_Name;
  3808.  
  3809.    ------------------------
  3810.    -- Write_Field15_Name --
  3811.    ------------------------
  3812.  
  3813.    procedure Write_Field15_Name (Id : Entity_Id) is
  3814.    begin
  3815.       case Ekind (Id) is
  3816.          when Access_Kind                                |
  3817.               Task_Kind                                  =>
  3818.             Write_Str ("Storage_Size_Variable");
  3819.  
  3820.          when Decimal_Fixed_Point_Kind                   =>
  3821.             Write_Str ("Scale_Value");
  3822.  
  3823.          when Record_Kind                                =>
  3824.             Write_Str ("Access_Disp_Table");
  3825.  
  3826.          when E_Function                                 |
  3827.               E_Procedure                                =>
  3828.             Write_Str ("DT_Position");
  3829.  
  3830.          when E_Component                                =>
  3831.             Write_Str ("DT_Entry_Count");
  3832.  
  3833.          when E_Protected_Type                           =>
  3834.             Write_Str ("Entry_Bodies_Array");
  3835.  
  3836.          when others                                     =>
  3837.             Write_Str ("Field15??");
  3838.       end case;
  3839.    end Write_Field15_Name;
  3840.  
  3841.    ------------------------
  3842.    -- Write_Field16_Name --
  3843.    ------------------------
  3844.  
  3845.    procedure Write_Field16_Name (Id : Entity_Id) is
  3846.    begin
  3847.       case Ekind (Id) is
  3848.          when Type_Kind                                  =>
  3849.             Write_Str ("Next_Itype");
  3850.  
  3851.          when E_Function                                 |
  3852.               E_Procedure                                =>
  3853.             Write_Str ("DTC_Entity");
  3854.  
  3855.          when others                                     =>
  3856.             Write_Str ("Field16??");
  3857.       end case;
  3858.    end Write_Field16_Name;
  3859.  
  3860.    ------------------------
  3861.    -- Write_Field17_Name --
  3862.    ------------------------
  3863.  
  3864.    procedure Write_Field17_Name (Id : Entity_Id) is
  3865.    begin
  3866.       case Ekind (Id) is
  3867.          when Type_Kind                                  =>
  3868.             Write_Str ("Class_Wide_Type");
  3869.  
  3870.          when E_Function                                 |
  3871.               E_Procedure                                |
  3872.               E_Generic_Function                         |
  3873.               E_Generic_Procedure                        =>
  3874.             Write_Str ("Machine_Attribute");
  3875.  
  3876.          when others                                     =>
  3877.             Write_Str ("Field17??");
  3878.       end case;
  3879.    end Write_Field17_Name;
  3880.  
  3881.    -----------------------
  3882.    -- Write_Field18_Name --
  3883.    -----------------------
  3884.  
  3885.    procedure Write_Field18_Name (Id : Entity_Id) is
  3886.    begin
  3887.       Write_Str ("Freeze_Node");
  3888.    end Write_Field18_Name;
  3889.  
  3890.    -----------------------
  3891.    -- Write_Field19_Name --
  3892.    -----------------------
  3893.  
  3894.    procedure Write_Field19_Name (Id : Entity_Id) is
  3895.    begin
  3896.       case Ekind (Id) is
  3897.          when Task_Kind                                  =>
  3898.             Write_Str ("Task_Body_Procedure");
  3899.  
  3900.          when others                                     =>
  3901.             Write_Str ("Field19??");
  3902.       end case;
  3903.    end Write_Field19_Name;
  3904.  
  3905.    -----------------------
  3906.    -- Write_Field20_Name --
  3907.    -----------------------
  3908.  
  3909.    procedure Write_Field20_Name (Id : Entity_Id) is
  3910.    begin
  3911.       case Ekind (Id) is
  3912.          when E_Constant                                 |
  3913.               E_Entry                                    |
  3914.               E_Entry_Family                             |
  3915.               E_Function                                 |
  3916.               E_Generic_Function                         |
  3917.               E_Generic_Procedure                        |
  3918.               E_Procedure                                |
  3919.               E_Variable                                 =>
  3920.             Write_Str ("Address_Clause");
  3921.  
  3922.          when others                                     =>
  3923.             Write_Str ("Field20??");
  3924.       end case;
  3925.    end Write_Field20_Name;
  3926.  
  3927.    -----------------------
  3928.    -- Write_Field21_Name --
  3929.    -----------------------
  3930.  
  3931.    procedure Write_Field21_Name (Id : Entity_Id) is
  3932.    begin
  3933.       Write_Str ("Field21??");
  3934.    end Write_Field21_Name;
  3935.  
  3936.    -----------------------
  3937.    -- Write_Field22_Name --
  3938.    -----------------------
  3939.  
  3940.    procedure Write_Field22_Name (Id : Entity_Id) is
  3941.    begin
  3942.       Write_Str ("Field22??");
  3943.    end Write_Field22_Name;
  3944.  
  3945. end Einfo;
  3946.