| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT COMPILER COMPONENTS -- |
| -- -- |
| -- S T A N D -- |
| -- -- |
| -- S p e c -- |
| -- -- |
| -- Copyright (C) 1992-2022, 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 package contains the declarations of entities in package Standard, |
| -- These values are initialized either by calling CStand.Create_Standard, |
| -- or by calling Stand.Tree_Read. |
| |
| with Types; use Types; |
| |
| package Stand is |
| |
| -- Warning: the entities defined in this package are written out by the |
| -- Tree_Write routine, and read back in by the Tree_Read routine, so be |
| -- sure to modify these two routines if you add entities that are not |
| -- part of Standard_Entity. |
| |
| type Standard_Entity_Type is ( |
| -- This enumeration type contains an entry for each name in Standard |
| |
| -- Package names |
| |
| S_Standard, |
| S_ASCII, |
| |
| -- Types and subtypes defined in package Standard (in the order in which |
| -- they appear in the RM, so that the declarations are in the right |
| -- order for the purposes of e.g. ASIS traversals |
| |
| S_Boolean, |
| |
| S_Short_Short_Integer, |
| S_Short_Integer, |
| S_Integer, |
| S_Long_Integer, |
| S_Long_Long_Integer, |
| S_Long_Long_Long_Integer, |
| |
| S_Natural, |
| S_Positive, |
| |
| S_Short_Float, |
| S_Float, |
| S_Long_Float, |
| S_Long_Long_Float, |
| |
| S_Character, |
| S_Wide_Character, |
| S_Wide_Wide_Character, |
| |
| S_String, |
| S_Wide_String, |
| S_Wide_Wide_String, |
| |
| S_Duration, |
| |
| -- Enumeration literals for type Boolean |
| |
| S_False, |
| S_True, |
| |
| -- Exceptions declared in package Standard |
| |
| S_Constraint_Error, |
| S_Numeric_Error, |
| S_Program_Error, |
| S_Storage_Error, |
| S_Tasking_Error, |
| |
| -- Binary Operators declared in package Standard |
| |
| S_Op_Add, |
| S_Op_And, |
| S_Op_Concat, |
| S_Op_Concatw, |
| S_Op_Concatww, |
| S_Op_Divide, |
| S_Op_Eq, |
| S_Op_Expon, |
| S_Op_Ge, |
| S_Op_Gt, |
| S_Op_Le, |
| S_Op_Lt, |
| S_Op_Mod, |
| S_Op_Multiply, |
| S_Op_Ne, |
| S_Op_Or, |
| S_Op_Rem, |
| S_Op_Subtract, |
| S_Op_Xor, |
| |
| -- Unary operators declared in package Standard |
| |
| S_Op_Abs, |
| S_Op_Minus, |
| S_Op_Not, |
| S_Op_Plus, |
| |
| -- Constants defined in package ASCII (with value in hex). |
| -- First the thirty-two C0 control characters) |
| |
| S_NUL, -- 16#00# |
| S_SOH, -- 16#01# |
| S_STX, -- 16#02# |
| S_ETX, -- 16#03# |
| S_EOT, -- 16#04# |
| S_ENQ, -- 16#05# |
| S_ACK, -- 16#06# |
| S_BEL, -- 16#07# |
| S_BS, -- 16#08# |
| S_HT, -- 16#09# |
| S_LF, -- 16#0A# |
| S_VT, -- 16#0B# |
| S_FF, -- 16#0C# |
| S_CR, -- 16#0D# |
| S_SO, -- 16#0E# |
| S_SI, -- 16#0F# |
| S_DLE, -- 16#10# |
| S_DC1, -- 16#11# |
| S_DC2, -- 16#12# |
| S_DC3, -- 16#13# |
| S_DC4, -- 16#14# |
| S_NAK, -- 16#15# |
| S_SYN, -- 16#16# |
| S_ETB, -- 16#17# |
| S_CAN, -- 16#18# |
| S_EM, -- 16#19# |
| S_SUB, -- 16#1A# |
| S_ESC, -- 16#1B# |
| S_FS, -- 16#1C# |
| S_GS, -- 16#1D# |
| S_RS, -- 16#1E# |
| S_US, -- 16#1F# |
| |
| -- Here are the ones for Colonel Whitaker's O26 keypunch |
| |
| S_Exclam, -- 16#21# |
| S_Quotation, -- 16#22# |
| S_Sharp, -- 16#23# |
| S_Dollar, -- 16#24# |
| S_Percent, -- 16#25# |
| S_Ampersand, -- 16#26# |
| |
| S_Colon, -- 16#3A# |
| S_Semicolon, -- 16#3B# |
| |
| S_Query, -- 16#3F# |
| S_At_Sign, -- 16#40# |
| |
| S_L_Bracket, -- 16#5B# |
| S_Back_Slash, -- 16#5C# |
| S_R_Bracket, -- 16#5D# |
| S_Circumflex, -- 16#5E# |
| S_Underline, -- 16#5F# |
| S_Grave, -- 16#60# |
| |
| S_LC_A, -- 16#61# |
| S_LC_B, -- 16#62# |
| S_LC_C, -- 16#63# |
| S_LC_D, -- 16#64# |
| S_LC_E, -- 16#65# |
| S_LC_F, -- 16#66# |
| S_LC_G, -- 16#67# |
| S_LC_H, -- 16#68# |
| S_LC_I, -- 16#69# |
| S_LC_J, -- 16#6A# |
| S_LC_K, -- 16#6B# |
| S_LC_L, -- 16#6C# |
| S_LC_M, -- 16#6D# |
| S_LC_N, -- 16#6E# |
| S_LC_O, -- 16#6F# |
| S_LC_P, -- 16#70# |
| S_LC_Q, -- 16#71# |
| S_LC_R, -- 16#72# |
| S_LC_S, -- 16#73# |
| S_LC_T, -- 16#74# |
| S_LC_U, -- 16#75# |
| S_LC_V, -- 16#76# |
| S_LC_W, -- 16#77# |
| S_LC_X, -- 16#78# |
| S_LC_Y, -- 16#79# |
| S_LC_Z, -- 16#7A# |
| |
| S_L_BRACE, -- 16#7B# |
| S_BAR, -- 16#7C# |
| S_R_BRACE, -- 16#7D# |
| S_TILDE, -- 16#7E# |
| |
| -- And one more control character, all on its own |
| |
| S_DEL); -- 16#7F# |
| |
| subtype S_Types is |
| Standard_Entity_Type range S_Boolean .. S_Duration; |
| |
| subtype S_Exceptions is |
| Standard_Entity_Type range S_Constraint_Error .. S_Tasking_Error; |
| |
| subtype S_ASCII_Names is |
| Standard_Entity_Type range S_NUL .. S_DEL; |
| |
| subtype S_Binary_Ops is |
| Standard_Entity_Type range S_Op_Add .. S_Op_Xor; |
| |
| subtype S_Unary_Ops is |
| Standard_Entity_Type range S_Op_Abs .. S_Op_Plus; |
| |
| type Standard_Entity_Array_Type is array (Standard_Entity_Type) of Node_Id; |
| |
| Standard_Entity : Standard_Entity_Array_Type; |
| -- This array contains pointers to the Defining Identifier nodes for each |
| -- of the visible entities defined in Standard_Entities_Type. The array is |
| -- initialized by the Create_Standard procedure. |
| |
| Standard_Package_Node : Node_Id; |
| -- Points to the N_Package_Declaration node for standard. Also |
| -- initialized by the Create_Standard procedure. |
| |
| -- The following Entities are the pointers to the Defining Identifier |
| -- nodes for some visible entities defined in Standard_Entities_Type. |
| |
| SE : Standard_Entity_Array_Type renames Standard_Entity; |
| |
| Standard_Standard : Entity_Id renames SE (S_Standard); |
| |
| Standard_ASCII : Entity_Id renames SE (S_ASCII); |
| Standard_Character : Entity_Id renames SE (S_Character); |
| Standard_Wide_Character : Entity_Id renames SE (S_Wide_Character); |
| Standard_Wide_Wide_Character : Entity_Id renames SE (S_Wide_Wide_Character); |
| Standard_String : Entity_Id renames SE (S_String); |
| Standard_Wide_String : Entity_Id renames SE (S_Wide_String); |
| Standard_Wide_Wide_String : Entity_Id renames SE (S_Wide_Wide_String); |
| |
| Standard_Boolean : Entity_Id renames SE (S_Boolean); |
| Standard_False : Entity_Id renames SE (S_False); |
| Standard_True : Entity_Id renames SE (S_True); |
| |
| Standard_Duration : Entity_Id renames SE (S_Duration); |
| |
| Standard_Natural : Entity_Id renames SE (S_Natural); |
| Standard_Positive : Entity_Id renames SE (S_Positive); |
| |
| Standard_Constraint_Error : Entity_Id renames SE (S_Constraint_Error); |
| Standard_Numeric_Error : Entity_Id renames SE (S_Numeric_Error); |
| Standard_Program_Error : Entity_Id renames SE (S_Program_Error); |
| Standard_Storage_Error : Entity_Id renames SE (S_Storage_Error); |
| Standard_Tasking_Error : Entity_Id renames SE (S_Tasking_Error); |
| |
| Standard_Short_Float : Entity_Id renames SE (S_Short_Float); |
| Standard_Float : Entity_Id renames SE (S_Float); |
| Standard_Long_Float : Entity_Id renames SE (S_Long_Float); |
| Standard_Long_Long_Float : Entity_Id renames SE (S_Long_Long_Float); |
| |
| Standard_Short_Short_Integer : Entity_Id renames SE (S_Short_Short_Integer); |
| Standard_Short_Integer : Entity_Id renames SE (S_Short_Integer); |
| Standard_Integer : Entity_Id renames SE (S_Integer); |
| Standard_Long_Integer : Entity_Id renames SE (S_Long_Integer); |
| Standard_Long_Long_Integer : Entity_Id renames SE (S_Long_Long_Integer); |
| |
| Standard_Long_Long_Long_Integer : Entity_Id renames |
| SE (S_Long_Long_Long_Integer); |
| |
| Standard_Op_Add : Entity_Id renames SE (S_Op_Add); |
| Standard_Op_And : Entity_Id renames SE (S_Op_And); |
| Standard_Op_Concat : Entity_Id renames SE (S_Op_Concat); |
| Standard_Op_Concatw : Entity_Id renames SE (S_Op_Concatw); |
| Standard_Op_Concatww : Entity_Id renames SE (S_Op_Concatww); |
| Standard_Op_Divide : Entity_Id renames SE (S_Op_Divide); |
| Standard_Op_Eq : Entity_Id renames SE (S_Op_Eq); |
| Standard_Op_Expon : Entity_Id renames SE (S_Op_Expon); |
| Standard_Op_Ge : Entity_Id renames SE (S_Op_Ge); |
| Standard_Op_Gt : Entity_Id renames SE (S_Op_Gt); |
| Standard_Op_Le : Entity_Id renames SE (S_Op_Le); |
| Standard_Op_Lt : Entity_Id renames SE (S_Op_Lt); |
| Standard_Op_Mod : Entity_Id renames SE (S_Op_Mod); |
| Standard_Op_Multiply : Entity_Id renames SE (S_Op_Multiply); |
| Standard_Op_Ne : Entity_Id renames SE (S_Op_Ne); |
| Standard_Op_Or : Entity_Id renames SE (S_Op_Or); |
| Standard_Op_Rem : Entity_Id renames SE (S_Op_Rem); |
| Standard_Op_Subtract : Entity_Id renames SE (S_Op_Subtract); |
| Standard_Op_Xor : Entity_Id renames SE (S_Op_Xor); |
| |
| Standard_Op_Abs : Entity_Id renames SE (S_Op_Abs); |
| Standard_Op_Minus : Entity_Id renames SE (S_Op_Minus); |
| Standard_Op_Not : Entity_Id renames SE (S_Op_Not); |
| Standard_Op_Plus : Entity_Id renames SE (S_Op_Plus); |
| |
| Last_Standard_Node_Id : Node_Id; |
| -- Highest Node_Id value used by Standard |
| |
| Last_Standard_List_Id : List_Id; |
| -- Highest List_Id value used by Standard (including those used by |
| -- normal list headers, element list headers, and list elements) |
| |
| Boolean_Literals : array (Boolean) of Entity_Id; |
| -- Entities for the two boolean literals, used by the expander |
| |
| ------------------------------------- |
| -- Semantic Phase Special Entities -- |
| ------------------------------------- |
| |
| -- The semantic phase needs a number of entities for internal processing |
| -- that are logically at the level of Standard, and hence defined in this |
| -- package. However, they are never visible to a program, and are not |
| -- chained on to the Decls list of Standard. The names of all these |
| -- types are relevant only in certain debugging and error message |
| -- situations. They have names that are suitable for use in such |
| -- error messages (see body for actual names used). |
| |
| Standard_Void_Type : Entity_Id; |
| -- This is a type used to represent the return type of procedures |
| |
| Standard_Exception_Type : Entity_Id; |
| -- This is a type used to represent the Etype of exceptions |
| |
| Standard_A_String : Entity_Id; |
| -- An access to String type used for building elements of tables carrying |
| -- the enumeration literal names. |
| |
| Standard_A_Char : Entity_Id; |
| -- An access to character type, used as a component of the exception type |
| -- to denote a thin pointer component. Needed for non-GCC back-ends. |
| |
| Standard_Debug_Renaming_Type : Entity_Id; |
| -- A zero-size subtype of Integer, used as the type of variables used to |
| -- provide the debugger with name encodings for renaming declarations. |
| |
| Predefined_Float_Types : Elist_Id; |
| -- Entities for predefined floating point types. These are used by |
| -- the semantic phase to select appropriate types for floating point |
| -- declarations. This list is ordered by preference. All types up to |
| -- Long_Long_Float_Type are considered for plain "digits N" declarations, |
| -- while selection of later types requires a range specification and |
| -- possibly other attributes or pragmas. |
| |
| -- The entities labeled Any_xxx are used in situations where the full |
| -- characteristics of an entity are not yet known, e.g. Any_Character |
| -- is used to label a character literal before resolution is complete. |
| -- These entities are also used to construct appropriate references in |
| -- error messages ("expecting an integer type"). |
| |
| Any_Id : Entity_Id; |
| -- Used to represent some unknown identifier. Used to label undefined |
| -- identifier references to prevent cascaded errors. |
| |
| Any_Type : Entity_Id; |
| -- Used to represent some unknown type. Any_Type is the type of an |
| -- unresolved operator, and it is the type of a node where a type error |
| -- has been detected. Any_Type plays an important role in avoiding cascaded |
| -- errors, because it is compatible with all other types, and is propagated |
| -- to any expression that has a subexpression of Any_Type. When resolving |
| -- operators, Any_Type is the initial type of the node before any of its |
| -- candidate interpretations has been examined. If after examining all of |
| -- them the type is still Any_Type, the node has no possible interpretation |
| -- and an error can be emitted (and Any_Type will be propagated upwards). |
| |
| Any_Array : Entity_Id; |
| -- Used to represent some unknown array type |
| |
| Any_Boolean : Entity_Id; |
| -- The context type of conditions in IF and WHILE statements |
| |
| Any_Character : Entity_Id; |
| -- Any_Character is used to label character literals, which in general |
| -- will not have an explicit declaration (this is true of the predefined |
| -- character types). |
| |
| Any_Composite : Entity_Id; |
| -- The type Any_Composite is used for aggregates before type resolution. |
| -- It is compatible with any array or non-limited record type. |
| |
| Any_Discrete : Entity_Id; |
| -- Used to represent some unknown discrete type |
| |
| Any_Fixed : Entity_Id; |
| -- Used to represent some unknown fixed-point type |
| |
| Any_Integer : Entity_Id; |
| -- Used to represent some unknown integer type |
| |
| Any_Modular : Entity_Id; |
| -- Used to represent the result type of a boolean operation on an integer |
| -- literal. The result is not Universal_Integer, because it is only legal |
| -- in a modular context. |
| |
| Any_Numeric : Entity_Id; |
| -- Used to represent some unknown numeric type |
| |
| Any_Real : Entity_Id; |
| -- Used to represent some unknown real type |
| |
| Any_Scalar : Entity_Id; |
| -- Used to represent some unknown scalar type |
| |
| Any_String : Entity_Id; |
| -- The type Any_String is used for string literals before type resolution. |
| -- It corresponds to array (Positive range <>) of character where the |
| -- component type is compatible with any character type, not just |
| -- Standard_Character. |
| |
| Raise_Type : Entity_Id; |
| -- The type Raise_Type denotes the type of a Raise_Expression. It is |
| -- compatible with all other types, and must eventually resolve to a |
| -- concrete type that is imposed by the context. |
| -- |
| -- Historical note: we used to use Any_Type for this purpose, but the |
| -- confusion of meanings (Any_Type normally indicates an error) caused |
| -- difficulties. In particular some needed expansions were skipped since |
| -- the nodes in question looked like they had an error. |
| |
| Universal_Integer : Entity_Id; |
| -- Entity for universal integer type. The bounds of this type correspond |
| -- to the largest supported integer type (i.e. Long_Long_Long_Integer). |
| -- It is the type used for runtime calculations in type universal integer. |
| |
| Universal_Real : Entity_Id; |
| -- Entity for universal real type. The bounds of this type correspond to |
| -- to the largest supported real type (i.e. Long_Long_Float). It is the |
| -- type used for runtime calculations in type universal real. Note that |
| -- this type is always IEEE format. |
| |
| Universal_Fixed : Entity_Id; |
| -- Entity for universal fixed type. This is a type with arbitrary |
| -- precision that can only appear in a context with a specific type. |
| -- Universal_Fixed labels the result of multiplication or division of |
| -- two fixed point numbers, and has no specified bounds (since, unlike |
| -- universal integer and universal real, it is never used for runtime |
| -- calculations). |
| |
| Universal_Access : Entity_Id; |
| -- Entity for universal access type. It is only used for the literal null |
| |
| Standard_Integer_8 : Entity_Id; |
| Standard_Integer_16 : Entity_Id; |
| Standard_Integer_32 : Entity_Id; |
| Standard_Integer_64 : Entity_Id; |
| Standard_Integer_128 : Entity_Id; |
| -- These are signed integer types with the indicated sizes. Used for the |
| -- underlying implementation types for fixed-point and enumeration types. |
| |
| Standard_Short_Short_Unsigned : Entity_Id; |
| Standard_Short_Unsigned : Entity_Id; |
| Standard_Unsigned : Entity_Id; |
| Standard_Long_Unsigned : Entity_Id; |
| Standard_Long_Long_Unsigned : Entity_Id; |
| Standard_Long_Long_Long_Unsigned : Entity_Id; |
| -- Unsigned types with same Esize as corresponding signed integer types |
| |
| Standard_Unsigned_64 : Entity_Id; |
| -- Entity for an unsigned type mod 2 ** 64, size of 64 bits. |
| |
| Standard_Address : Entity_Id; |
| -- Entity for an unsigned type mod 2 ** System_Address_Size, size of |
| -- System_Address_Size bits. Used for implementing Allow_Integer_Address. |
| |
| Abort_Signal : Entity_Id; |
| -- Entity for abort signal exception |
| |
| Standard_Op_Rotate_Left : Entity_Id; |
| Standard_Op_Rotate_Right : Entity_Id; |
| Standard_Op_Shift_Left : Entity_Id; |
| Standard_Op_Shift_Right : Entity_Id; |
| Standard_Op_Shift_Right_Arithmetic : Entity_Id; |
| -- These entities are used for shift operators generated by the expander |
| |
| end Stand; |