with Unchecked_Conversion;

package Debug10_Pkg is

   type Node_Id is range 0 .. 99_999_999;

   Empty : constant Node_Id := 0;

   subtype Entity_Id is Node_Id;

   type Union_Id is new Integer;

   function My_Is_Entity_Name (N : Node_Id) return Boolean;

   function My_Scalar_Range (Id : Entity_Id) return Node_Id;

   function My_Test (N : Node_Id) return Boolean;

   type Node_Kind is (N_Unused_At_Start, N_Unused_At_End);

   type Entity_Kind is (

      E_Void,
      E_Component,
      E_Constant,
      E_Discriminant,
      E_Loop_Parameter,
      E_Variable,
      E_Out_Parameter,
      E_In_Out_Parameter,
      E_In_Parameter,
      E_Generic_In_Out_Parameter,
      E_Generic_In_Parameter,
      E_Named_Integer,
      E_Named_Real,
      E_Enumeration_Type,
      E_Enumeration_Subtype,
      E_Signed_Integer_Type,
      E_Signed_Integer_Subtype,
      E_Modular_Integer_Type,
      E_Modular_Integer_Subtype,
      E_Ordinary_Fixed_Point_Type,
      E_Ordinary_Fixed_Point_Subtype,
      E_Decimal_Fixed_Point_Type,
      E_Decimal_Fixed_Point_Subtype,
      E_Floating_Point_Type,
      E_Floating_Point_Subtype,
      E_Access_Type,
      E_Access_Subtype,
      E_Access_Attribute_Type,
      E_Allocator_Type,
      E_General_Access_Type,
      E_Access_Subprogram_Type,
      E_Anonymous_Access_Subprogram_Type,
      E_Access_Protected_Subprogram_Type,
      E_Anonymous_Access_Protected_Subprogram_Type,
      E_Anonymous_Access_Type,
      E_Array_Type,
      E_Array_Subtype,
      E_String_Literal_Subtype,
      E_Class_Wide_Type,
      E_Class_Wide_Subtype,
      E_Record_Type,
      E_Record_Subtype,
      E_Record_Type_With_Private,
      E_Record_Subtype_With_Private,
      E_Private_Type,
      E_Private_Subtype,
      E_Limited_Private_Type,
      E_Limited_Private_Subtype,
      E_Incomplete_Type,
      E_Incomplete_Subtype,
      E_Task_Type,
      E_Task_Subtype,
      E_Protected_Type,
      E_Protected_Subtype,
      E_Exception_Type,
      E_Subprogram_Type,
      E_Enumeration_Literal,
      E_Function,
      E_Operator,
      E_Procedure,
      E_Abstract_State,
      E_Entry,
      E_Entry_Family,
      E_Block,
      E_Entry_Index_Parameter,
      E_Exception,
      E_Generic_Function,
      E_Generic_Procedure,
      E_Generic_Package,
      E_Label,
      E_Loop,
      E_Return_Statement,
      E_Package,
      E_Package_Body,
      E_Protected_Object,
      E_Protected_Body,
      E_Task_Body,
      E_Subprogram_Body
   );

   subtype Access_Kind                 is Entity_Kind range
       E_Access_Type ..
       E_Anonymous_Access_Type;

   subtype Array_Kind                  is Entity_Kind range
       E_Array_Type ..
       E_String_Literal_Subtype;

   subtype Object_Kind                 is Entity_Kind range
       E_Component ..
       E_Generic_In_Parameter;

   subtype Record_Kind                 is Entity_Kind range
       E_Class_Wide_Type ..
       E_Record_Subtype_With_Private;

   subtype Scalar_Kind                 is Entity_Kind range
       E_Enumeration_Type ..
       E_Floating_Point_Subtype;

   subtype Type_Kind                   is Entity_Kind range
       E_Enumeration_Type ..
       E_Subprogram_Type;

   type Node_Record (Is_Extension : Boolean := False) is record
      Flag16 : Boolean;
      Nkind : Node_Kind;
   end record;

   function N_To_E is new Unchecked_Conversion (Node_Kind, Entity_Kind);

   type Arr is array (Node_Id) of Node_Record;

   Nodes : Arr;

end Debug10_Pkg;