/****************************************************************************
 *                                                                          *
 *                         GNAT COMPILER COMPONENTS                         *
 *                                                                          *
 *                                T Y P E S                                 *
 *                                                                          *
 *                              C Header File                               *
 *                                                                          *
 *          Copyright (C) 1992-2021, Free Software Foundation, Inc.         *
 *                                                                          *
 * GNAT is free software;  you can  redistribute it  and/or modify it under *
 * terms of the  GNU General Public License as published  by the Free Soft- *
 * ware  Foundation;  either version 3,  or (at your option) any later ver- *
 * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
 * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
 * for  more details.  You should have  received  a copy of the GNU General *
 * Public License  distributed with GNAT; see file COPYING3.  If not, go to *
 * http://www.gnu.org/licenses for a complete copy of the license.          *
 *                                                                          *
 * GNAT was originally developed  by the GNAT team at  New York University. *
 * Extensive contributions were provided by Ada Core Technologies Inc.      *
 *                                                                          *
 ****************************************************************************/

/* This is the C header that corresponds to the Ada package specification for
   Types.  It was created manually from types.ads and must be kept synchronized
   with changes in this file.

   This package contains host independent type definitions which are used
   throughout the compiler modules. The comments in the C version are brief
   reminders of the purpose of each declaration.  For complete documentation,
   see the Ada version of these definitions.  */

/* Boolean Types:  */

/* Boolean type (cannot use enum, because of bit field restriction on some
   compilers).  */
typedef unsigned char Boolean;
#define False 0
#define True  1

/* General Use Integer Types */

/* Signed 32-bit integer */
typedef int Int;

/* Signed 16-bit integer */
typedef short Short;

/* Non-negative Int values */
typedef Int Nat;

/* Positive Int values */
typedef Int Pos;

/* 8-bit unsigned integer */
typedef unsigned char Byte;

/* 8-Bit Character and String Types:  */

/* 8-bit character type */
typedef char Char;

/* Graphic characters, as defined in ARM */
typedef Char Graphic_Character;

/* Line terminator characters (LF, VT, FF, CR) */
typedef Char Line_Terminator;

/* Characters with the upper bit set */
typedef Char Upper_Half_Character;

/* String type built on Char (note that zero is an OK index) */
typedef Char *Str;

/* Pointer to string of Chars */
typedef Char *Str_Ptr;

/* Types for the fat pointer used for strings and the template it points to.
   The fat pointer is conceptually a couple of pointers, but it is wrapped
   up in a special record type.  On the Ada side, the record is naturally
   aligned (i.e. given pointer alignment) on regular platforms, but it is
   given twice this alignment on strict-alignment platforms for performance
   reasons.  On the C side, for the sake of portability and simplicity, we
   overalign it on all platforms (so the machine mode is always the same as
   on the Ada side) but arrange to pass it in an even scalar position as a
   parameter to functions (so the scalar parameter alignment is always the
   same as on the Ada side).  */
typedef struct { int Low_Bound, High_Bound; } String_Template;
typedef struct { const char *Array; String_Template *Bounds; }
	__attribute ((aligned (sizeof (char *) * 2))) String_Pointer;

/* Types for Node/Entity Kinds:  */

/* The reason that these are defined here in the C version, rather than in the
   corresponding packages is that the requirement for putting bodies of
   inlined stuff IN the C header changes the dependencies.  Both sinfo.h
   and einfo.h now reference routines defined in tree.h.

   Note: these types would more naturally be defined as unsigned char, but
   once again, the annoying restriction on bit fields for some compilers
   bites us!  */

typedef unsigned int Node_Kind;
typedef unsigned int Entity_Kind;

/* Types used for Text Buffer Handling:  */

/* Type used for subscripts in text buffer.  */
typedef Int Text_Ptr;

/* Text buffer used to hold source file or library information file.  */
typedef Char *Text_Buffer;

/* Pointer to text buffer.  */
typedef Char *Text_Buffer_Ptr;

/* Types used for Source Input Handling:  */

/* Line number type, used for storing all line numbers.  */
typedef Int Line_Number_Type;

/* Column number type, used for storing all column numbers.  */
typedef Short Column_Number_Type;

/* Type used to store text of a source file.  */
typedef Text_Buffer Source_Buffer;

/* Pointer to source buffer. */
typedef Text_Buffer_Ptr Source_Buffer_Ptr;

/* Type used for source location.  */
typedef Text_Ptr Source_Ptr;

/* Value used to indicate no source position set.  */
#define No_Location -1

/* Used for Sloc in all nodes in the representation of package Standard.  */
#define Standard_Location -2

/* Convention identifiers.  */
typedef Byte Convention_Id;

/* Instance identifiers.  */
typedef Nat Instance_Id;

/* Type used for union of all possible ID values covering all ranges.  */
typedef int Union_Id;

/* Range definitions for Tree Data:  */

#define List_Low_Bound		-99999999
#define List_High_Bound		0

#define Node_Low_Bound		0
#define Node_High_Bound		1999999999
/* Above is the correct value of Node_High_Bound for 64-bit machines. It is
   wrong for 32-bit machines, but that doesn't matter. */

#define Elist_Low_Bound		-199999999
#define Elist_High_Bound	-100000000

#define Elmt_Low_Bound		-299999999
#define Elmt_High_Bound		-200000000

#define Names_Low_Bound		-399999999
#define Names_High_Bound	-300000000

#define Strings_Low_Bound	-499999999
#define Strings_High_Bound	-400000000

#define Ureal_Low_Bound		-599999999
#define Ureal_High_Bound        -500000000

#define Uint_Low_Bound		-2100000000
#define Uint_Table_Start        -699999999
#define Uint_High_Bound	        -600000000

SUBTYPE (List_Range,      Int, List_Low_Bound,    List_High_Bound)
SUBTYPE (Node_Range,      Int, Node_Low_Bound,    Node_High_Bound)
SUBTYPE (Elist_Range,     Int, Elist_Low_Bound,   Elist_High_Bound)
SUBTYPE (Elmt_Range,      Int, Elmt_Low_Bound,    Elmt_High_Bound)
SUBTYPE (Names_Range,     Int, Names_Low_Bound,   Names_High_Bound)
SUBTYPE (Strings_Range,   Int, Strings_Low_Bound, Strings_High_Bound)
SUBTYPE (Uint_Range,      Int, Uint_Low_Bound,    Uint_High_Bound)
SUBTYPE (Ureal_Range,     Int, Ureal_Low_Bound,   Ureal_High_Bound)

/* Types for Names_Table Package:  */

typedef Int Name_Id;

/* Name_Id value for no name present.  */
#define No_Name Names_Low_Bound

/* Name_Id value for bad name.  */
#define Error_Name (Names_Low_Bound + 1)

/* First subscript of names table. */
#define First_Name_Id (Names_Low_Bound + 2)

/* Types for Tree Package:  */

/* Subscript of nodes table entry.  */
typedef Int Node_Id;

/* Used in semantics for Node_Id value referencing an entity.  */
typedef Node_Id Entity_Id;

/* Null node.  */
#define Empty 0

/* Error node.  */
#define Error 1

/* Subscript of first allocated node.  */
#define First_Node_Id Empty

/* Subscript of entry in lists table.  */
typedef Int List_Id;

/* Indicates absence of a list.  */
#define No_List 0

/* Error list. */
#define Error_List List_Low_Bound

/* Subscript of first allocated list header.  */
#define First_List_Id Error_List

/* Element list Id, subscript value of entry in lists table.  */
typedef Int Elist_Id;

/* Used to indicate absence of an element list.  */
#define No_Elist Elist_Low_Bound

/* Subscript of first allocated elist header */
#define First_Elist_Id (No_Elist + 1)

/* Element Id, subscript value of entry in elements table.  */
typedef Int Elmt_Id;

/* Used to indicate absence of a list element.  */
#define No_Elmt Elmt_Low_Bound

/* Subscript of first allocated element */
#define First_Elmt_Id (No_Elmt + 1)

/* Types for String_Table Package:  */

/* Subscript of strings table entry.  */
typedef Int String_Id;

/* Used to indicate missing string Id.  */
#define No_String Strings_Low_Bound

/* Subscript of first entry in strings table.  */
#define First_String_Id (No_String + 1)

/* Types for Uint_Support Package:  */

/* Type used for representation of universal integers.  */
typedef Int Uint;
typedef Int Valid_Uint;
typedef Int Unat;
typedef Int Upos;
typedef Int Nonzero_Uint;

/* Used to indicate missing Uint value.  */
#define No_Uint Uint_Low_Bound

/* Base value used to represent Uint values.  */
#define Base 32768

/* Minimum and maximum integers directly representable as Uint values */
#define Min_Direct (-(Base - 1))
#define Max_Direct ((Base - 1) * (Base - 1))

#define Uint_Direct_Bias  (Uint_Low_Bound + Base)
#define Uint_Direct_First (Uint_Direct_Bias + Min_Direct)
#define Uint_Direct_Last  (Uint_Direct_Bias + Max_Direct)

/* Define range of direct biased values */
SUBTYPE (Uint_Direct, Uint, Uint_Direct_First, Uint_Direct_Last)

/* Constants in Uint format.  */
#define Uint_0  (Uint_Direct_Bias + 0)
#define Uint_1  (Uint_Direct_Bias + 1)
#define Uint_2  (Uint_Direct_Bias + 2)
#define Uint_10 (Uint_Direct_Bias + 10)
#define Uint_16 (Uint_Direct_Bias + 16)

#define Uint_Minus_1 (Uint_Direct_Bias - 1)

/* Types for Ureal_Support Package:  */

/* Type used for representation of universal reals.  */
typedef Int Ureal;

/* Used to indicate missing Uint value.  */
#define No_Ureal Ureal_Low_Bound

/* Subscript of first entry in Ureal table.  */
#define Ureal_First_Entry (No_Ureal + 1)

/* Character Code Type:  */

/* Character code value, intended to be 32 bits.  */
typedef unsigned Char_Code;

/* Types Used for Library Management:  */

/* Unit number.  */
typedef Int Unit_Number_Type;

/* Unit number value for main unit.  */
#define Main_Unit 0

/* Type used to index the source file table.  */
typedef Nat Source_File_Index;

/* Type used for lines table.  */
typedef Source_Ptr *Lines_Table_Type;

/* Type used for pointer to lines table.  */
typedef Source_Ptr *Lines_Table_Ptr;

/* Length of time stamp value.  */
#define Time_Stamp_Length 22

/* Type used to represent time stamp.  */
typedef Char *Time_Stamp_Type;

/* Name_Id synonym used for file names.  */
typedef Name_Id File_Name_Type;

/* Constant used to indicate no file found.  */
#define No_File No_Name

/* Name_Id synonym used for unit names.  */
typedef Name_Id Unit_Name_Type;

/* Definitions for mechanism type and values */
typedef Int Mechanism_Type;
#define Default            0
#define By_Copy            (-1)
#define By_Reference       (-2)
#define By_Descriptor      (-3)
#define By_Descriptor_UBS  (-4)
#define By_Descriptor_UBSB (-5)
#define By_Descriptor_UBA  (-6)
#define By_Descriptor_S    (-7)
#define By_Descriptor_SB   (-8)
#define By_Descriptor_A    (-9)
#define By_Descriptor_NCA  (-10)
#define By_Descriptor_Last (-10)
#define By_Short_Descriptor      (-11)
#define By_Short_Descriptor_UBS  (-12)
#define By_Short_Descriptor_UBSB (-13)
#define By_Short_Descriptor_UBA  (-14)
#define By_Short_Descriptor_S    (-15)
#define By_Short_Descriptor_SB   (-16)
#define By_Short_Descriptor_A    (-17)
#define By_Short_Descriptor_NCA  (-18)
#define By_Short_Descriptor_Last (-18)

typedef char Component_Alignment_Kind;
#define Calign_Default           0
#define Calign_Component_Size    1
#define Calign_Component_Size_4  2
#define Calign_Storage_Unit      3

typedef char Float_Rep_Kind;
#define IEEE_Binary              0
#define AAMP                     1

typedef Nat Small_Paren_Count_Type;

typedef Nat Field_Offset;

typedef unsigned int any_slot;

#define Slot_Size (sizeof (any_slot) * 8)

/* Slots are 32 bits (for now, but we might want to make that 64).
   The first bootstrap stage uses -std=gnu++98, so we cannot use
   static_assert in that case.  */
#if __cplusplus >= 201402L
static_assert (Slot_Size == 32);
#endif

/* Definitions of Reason codes for Raise_xxx_Error nodes.  */
enum RT_Exception_Code
{
  CE_Access_Check_Failed            = 0,
  CE_Access_Parameter_Is_Null       = 1,
  CE_Discriminant_Check_Failed      = 2,
  CE_Divide_By_Zero                 = 3,
  CE_Explicit_Raise                 = 4,
  CE_Index_Check_Failed             = 5,
  CE_Invalid_Data                   = 6,
  CE_Length_Check_Failed            = 7,
  CE_Null_Exception_Id              = 8,
  CE_Null_Not_Allowed               = 9,

  CE_Overflow_Check_Failed          = 10,
  CE_Partition_Check_Failed         = 11,
  CE_Range_Check_Failed             = 12,
  CE_Tag_Check_Failed               = 13,
  PE_Access_Before_Elaboratio       = 14,
  PE_Accessibility_Check_Failed     = 15,
  PE_Address_Of_Intrinsic           = 16,
  PE_Aliased_Parameters             = 17,
  PE_All_Guards_Closed              = 18,
  PE_Bad_Predicated_Generic_Type    = 19,

  PE_Current_Task_In_Entry_Body     = 20,
  PE_Duplicated_Entry_Address       = 21,
  PE_Explicit_Raise                 = 22,
  PE_Finalize_Raised_Exception      = 23,
  PE_Implicit_Return                = 24,
  PE_Misaligned_Address_Value       = 25,
  PE_Missing_Return                 = 26,
  PE_Overlaid_Controlled_Object     = 27,
  PE_Potentially_Blocking_Operation = 28,
  PE_Stubbed_Subprogram_Called      = 29,

  PE_Unchecked_Union_Restriction    = 30,
  PE_Non_Transportable_Actual       = 31,
  SE_Empty_Storage_Pool             = 32,
  SE_Explicit_Raise                 = 33,
  SE_Infinite_Recursion             = 34,
  SE_Object_Too_Large               = 35,
  PE_Stream_Operation_Not_Allowed   = 36,
  PE_Build_In_Place_Mismatch        = 37
};

#define LAST_REASON_CODE 37
