| /**************************************************************************** |
| * * |
| * GNAT COMPILER COMPONENTS * |
| * * |
| * T Y P E S * |
| * * |
| * C Header File * |
| * * |
| * Copyright (C) 1992-2003, 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 2, 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 COPYING. If not, write * |
| * to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, * |
| * MA 02111-1307, USA. * |
| * * |
| * 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 file that corresponds to the Ada package spec Types. It was |
| created manually from the files types.ads and types.adb. |
| |
| 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 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. */ |
| typedef struct {int Low_Bound, High_Bound; } String_Template; |
| typedef struct {const char *Array; String_Template *Bounds; } |
| __attribute ((aligned (sizeof (char *) * 2))) Fat_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 Int 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 |
| |
| /* 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 -100000000 |
| #define List_High_Bound 0 |
| |
| #define Node_Low_Bound 0 |
| #define Node_High_Bound 99999999 |
| |
| #define Elist_Low_Bound 100000000 |
| #define Elist_High_Bound 199999999 |
| |
| #define Elmt_Low_Bound 200000000 |
| #define Elmt_High_Bound 299999999 |
| |
| #define Names_Low_Bound 300000000 |
| #define Names_High_Bound 399999999 |
| |
| #define Strings_Low_Bound 400000000 |
| #define Strings_High_Bound 499999999 |
| |
| #define Ureal_Low_Bound 500000000 |
| #define Ureal_High_Bound 599999999 |
| |
| #define Uint_Low_Bound 600000000 |
| #define Uint_Table_Start 2000000000 |
| #define Uint_High_Bound 2099999999 |
| |
| #define Char_Code_Bias 2100000000 |
| |
| 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) |
| SUBTYPE (Char_Code_Range, Int, Char_Code_Bias, (Char_Code_Bias + 65535)) |
| |
| /* 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; |
| |
| /* 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) |
| |
| /* 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 16 bits. */ |
| typedef short 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 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) |
| |
| /* Definitions of Reason codes for Raise_xxx_Error nodes */ |
| #define CE_Access_Check_Failed 0 |
| #define CE_Access_Parameter_Is_Null 1 |
| #define CE_Discriminant_Check_Failed 2 |
| #define CE_Divide_By_Zero 3 |
| #define CE_Explicit_Raise 4 |
| #define CE_Index_Check_Failed 5 |
| #define CE_Invalid_Data 6 |
| #define CE_Length_Check_Failed 7 |
| #define CE_Overflow_Check_Failed 8 |
| #define CE_Partition_Check_Failed 9 |
| #define CE_Range_Check_Failed 10 |
| #define CE_Tag_Check_Failed 11 |
| #define PE_Access_Before_Elaboration 12 |
| #define PE_Accessibility_Check_Failed 13 |
| #define PE_All_Guards_Closed 14 |
| #define PE_Duplicated_Entry_Address 15 |
| #define PE_Explicit_Raise 16 |
| #define PE_Finalize_Raised_Exception 17 |
| #define PE_Misaligned_Address_Value 18 |
| #define PE_Missing_Return 19 |
| #define PE_Overlaid_Controlled_Object 20 |
| #define PE_Potentially_Blocking_Operation 21 |
| #define PE_Stubbed_Subprogram_Called 22 |
| #define PE_Unchecked_Union_Restriction 23 |
| #define SE_Empty_Storage_Pool 24 |
| #define SE_Explicit_Raise 25 |
| #define SE_Infinite_Recursion 26 |
| #define SE_Object_Too_Large 27 |
| #define SE_Restriction_Violation 28 |
| |
| #define LAST_REASON_CODE 28 |