mirror of
https://github.com/autc04/Retro68.git
synced 2024-06-13 08:29:53 +00:00
595 lines
18 KiB
Ada
595 lines
18 KiB
Ada
------------------------------------------------------------------------------
|
|
-- --
|
|
-- GNAT COMPILER COMPONENTS --
|
|
-- --
|
|
-- G E N _ I L . T Y P E S --
|
|
-- --
|
|
-- S p e c --
|
|
-- --
|
|
-- Copyright (C) 2020-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. --
|
|
-- --
|
|
------------------------------------------------------------------------------
|
|
|
|
package Gen_IL.Types is
|
|
|
|
-- Enumeration of all the types that are "of interest". We have an
|
|
-- enumeration literal here for every node kind, every entity kind,
|
|
-- and every type that can be the type of a field.
|
|
|
|
-- The following is "optional type enumeration" -- i.e. it is Type_Enum
|
|
-- (declared below) plus the special null value No_Type. See the spec of
|
|
-- Gen_IL.Gen for how to modify this. (Of course, in Ada we have to define
|
|
-- this backwards from the above conceptual description.)
|
|
|
|
-- Note that there are various subranges of this type declared below,
|
|
-- which might need to be kept in sync when modifying this.
|
|
|
|
-- The "Between_..." literals below are simply for making the subranges.
|
|
-- When adding literals to this enumeration type, be sure to put them in
|
|
-- the right place so they end up in the appropriate subranges
|
|
-- (Abstract_Node, Abstract_Entity, Concrete_Node, Concrete_Entity).
|
|
|
|
type Opt_Type_Enum is
|
|
(No_Type,
|
|
|
|
Flag,
|
|
-- We use Flag for Boolean, so we don't conflict with
|
|
-- Standard.Boolean.
|
|
|
|
Node_Id,
|
|
List_Id,
|
|
Elist_Id,
|
|
Name_Id,
|
|
String_Id,
|
|
Uint,
|
|
Valid_Uint,
|
|
Unat,
|
|
Upos,
|
|
Nonzero_Uint,
|
|
Ureal,
|
|
|
|
Node_Kind_Type, -- Type of result of Nkind function, i.e. Node_Kind
|
|
Entity_Kind_Type, -- Type of result of Ekind function, i.e. Entity_Kind
|
|
Source_Ptr,
|
|
Small_Paren_Count_Type,
|
|
Union_Id,
|
|
Convention_Id,
|
|
|
|
Component_Alignment_Kind,
|
|
Mechanism_Type,
|
|
|
|
Between_Special_And_Abstract_Node_Types,
|
|
|
|
-- Abstract node types:
|
|
|
|
Node_Kind, -- root of node type hierarchy
|
|
N_Access_To_Subprogram_Definition,
|
|
N_Alternative,
|
|
N_Array_Type_Definition,
|
|
N_Binary_Op,
|
|
N_Body_Stub,
|
|
N_Declaration,
|
|
N_Delay_Statement,
|
|
N_Direct_Name,
|
|
N_Entity,
|
|
N_Entity_Name,
|
|
N_Formal_Subprogram_Declaration,
|
|
N_Generic_Declaration,
|
|
N_Generic_Instantiation,
|
|
N_Generic_Renaming_Declaration,
|
|
N_Has_Bounds,
|
|
N_Has_Chars,
|
|
N_Has_Condition,
|
|
N_Has_Entity,
|
|
N_Has_Etype,
|
|
N_Is_Case_Choice,
|
|
N_Is_Decl,
|
|
N_Is_Exception_Choice,
|
|
N_Is_Index,
|
|
N_Is_Range,
|
|
N_Multiplying_Operator,
|
|
N_Later_Decl_Item,
|
|
N_Membership_Test,
|
|
N_Numeric_Or_String_Literal,
|
|
N_Op,
|
|
N_Op_Boolean,
|
|
N_Op_Compare,
|
|
N_Op_Shift,
|
|
N_Proper_Body,
|
|
N_Push_xxx_Label,
|
|
N_Pop_xxx_Label,
|
|
N_Push_Pop_xxx_Label,
|
|
N_Raise_xxx_Error,
|
|
N_Renaming_Declaration,
|
|
N_Representation_Clause,
|
|
N_Short_Circuit,
|
|
N_SCIL_Node,
|
|
N_Statement_Other_Than_Procedure_Call,
|
|
N_Subprogram_Call,
|
|
N_Subprogram_Instantiation,
|
|
N_Subexpr,
|
|
N_Subprogram_Specification,
|
|
N_Unary_Op,
|
|
N_Unit_Body,
|
|
|
|
-- End of abstract node types.
|
|
|
|
Between_Abstract_Node_And_Abstract_Entity_Types,
|
|
|
|
-- Abstract entity types:
|
|
|
|
Entity_Kind, -- root of entity type hierarchy
|
|
Access_Kind,
|
|
Access_Subprogram_Kind,
|
|
Access_Protected_Kind,
|
|
Aggregate_Kind,
|
|
Allocatable_Kind,
|
|
Anonymous_Access_Kind,
|
|
Array_Kind,
|
|
Assignable_Kind,
|
|
Class_Wide_Kind,
|
|
Composite_Kind,
|
|
Concurrent_Kind,
|
|
Concurrent_Body_Kind,
|
|
Constant_Or_Variable_Kind,
|
|
Decimal_Fixed_Point_Kind,
|
|
Digits_Kind,
|
|
Discrete_Kind,
|
|
Discrete_Or_Fixed_Point_Kind,
|
|
Elementary_Kind,
|
|
Enumeration_Kind,
|
|
Entry_Kind,
|
|
Evaluable_Kind,
|
|
Exception_Or_Object_Kind,
|
|
Fixed_Point_Kind,
|
|
Float_Kind,
|
|
Formal_Kind,
|
|
Formal_Object_Kind,
|
|
Generic_Subprogram_Kind,
|
|
Generic_Unit_Kind,
|
|
Global_Name_Kind,
|
|
Incomplete_Kind,
|
|
Incomplete_Or_Private_Kind,
|
|
Integer_Kind,
|
|
Modular_Integer_Kind,
|
|
Named_Access_Kind,
|
|
Named_Kind,
|
|
Numeric_Kind,
|
|
Object_Kind,
|
|
Ordinary_Fixed_Point_Kind,
|
|
Overloadable_Kind,
|
|
Private_Kind,
|
|
Protected_Kind,
|
|
Real_Kind,
|
|
Record_Kind,
|
|
Record_Field_Kind,
|
|
Scalar_Kind,
|
|
Signed_Integer_Kind,
|
|
Subprogram_Type_Or_Kind,
|
|
Subprogram_Kind,
|
|
Task_Kind,
|
|
Type_Kind,
|
|
Void_Or_Type_Kind,
|
|
|
|
-- End of abstract entity types.
|
|
|
|
Between_Abstract_Entity_And_Concrete_Node_Types,
|
|
|
|
-- Concrete node types:
|
|
|
|
N_Unused_At_Start,
|
|
N_At_Clause,
|
|
N_Component_Clause,
|
|
N_Enumeration_Representation_Clause,
|
|
N_Mod_Clause,
|
|
N_Record_Representation_Clause,
|
|
N_Attribute_Definition_Clause,
|
|
N_Empty,
|
|
N_Pragma_Argument_Association,
|
|
N_Error,
|
|
N_Defining_Character_Literal,
|
|
N_Defining_Identifier,
|
|
N_Defining_Operator_Symbol,
|
|
N_Expanded_Name,
|
|
N_Identifier,
|
|
N_Operator_Symbol,
|
|
N_Character_Literal,
|
|
N_Op_Add,
|
|
N_Op_Concat,
|
|
N_Op_Expon,
|
|
N_Op_Subtract,
|
|
N_Op_Divide,
|
|
N_Op_Mod,
|
|
N_Op_Multiply,
|
|
N_Op_Rem,
|
|
N_Op_And,
|
|
N_Op_Eq,
|
|
N_Op_Ge,
|
|
N_Op_Gt,
|
|
N_Op_Le,
|
|
N_Op_Lt,
|
|
N_Op_Ne,
|
|
N_Op_Or,
|
|
N_Op_Xor,
|
|
N_Op_Rotate_Left,
|
|
N_Op_Rotate_Right,
|
|
N_Op_Shift_Left,
|
|
N_Op_Shift_Right,
|
|
N_Op_Shift_Right_Arithmetic,
|
|
N_Op_Abs,
|
|
N_Op_Minus,
|
|
N_Op_Not,
|
|
N_Op_Plus,
|
|
N_Attribute_Reference,
|
|
N_In,
|
|
N_Not_In,
|
|
N_And_Then,
|
|
N_Or_Else,
|
|
N_Function_Call,
|
|
N_Procedure_Call_Statement,
|
|
N_Raise_Constraint_Error,
|
|
N_Raise_Program_Error,
|
|
N_Raise_Storage_Error,
|
|
N_Integer_Literal,
|
|
N_Real_Literal,
|
|
N_String_Literal,
|
|
N_Explicit_Dereference,
|
|
N_Expression_With_Actions,
|
|
N_If_Expression,
|
|
N_Indexed_Component,
|
|
N_Null,
|
|
N_Qualified_Expression,
|
|
N_Quantified_Expression,
|
|
N_Aggregate,
|
|
N_Allocator,
|
|
N_Case_Expression,
|
|
N_Delta_Aggregate,
|
|
N_Extension_Aggregate,
|
|
N_Raise_Expression,
|
|
N_Range,
|
|
N_Reference,
|
|
N_Selected_Component,
|
|
N_Slice,
|
|
N_Target_Name,
|
|
N_Type_Conversion,
|
|
N_Unchecked_Expression,
|
|
N_Unchecked_Type_Conversion,
|
|
N_Subtype_Indication,
|
|
N_Component_Declaration,
|
|
N_Entry_Declaration,
|
|
N_Expression_Function,
|
|
N_Formal_Object_Declaration,
|
|
N_Formal_Type_Declaration,
|
|
N_Full_Type_Declaration,
|
|
N_Incomplete_Type_Declaration,
|
|
N_Iterator_Specification,
|
|
N_Loop_Parameter_Specification,
|
|
N_Object_Declaration,
|
|
N_Protected_Type_Declaration,
|
|
N_Private_Extension_Declaration,
|
|
N_Private_Type_Declaration,
|
|
N_Subtype_Declaration,
|
|
N_Function_Specification,
|
|
N_Procedure_Specification,
|
|
N_Access_Function_Definition,
|
|
N_Access_Procedure_Definition,
|
|
N_Task_Type_Declaration,
|
|
N_Package_Body_Stub,
|
|
N_Protected_Body_Stub,
|
|
N_Subprogram_Body_Stub,
|
|
N_Task_Body_Stub,
|
|
N_Function_Instantiation,
|
|
N_Procedure_Instantiation,
|
|
N_Package_Instantiation,
|
|
N_Package_Body,
|
|
N_Subprogram_Body,
|
|
N_Protected_Body,
|
|
N_Task_Body,
|
|
N_Implicit_Label_Declaration,
|
|
N_Package_Declaration,
|
|
N_Single_Task_Declaration,
|
|
N_Subprogram_Declaration,
|
|
N_Use_Package_Clause,
|
|
N_Generic_Package_Declaration,
|
|
N_Generic_Subprogram_Declaration,
|
|
N_Constrained_Array_Definition,
|
|
N_Unconstrained_Array_Definition,
|
|
N_Exception_Renaming_Declaration,
|
|
N_Object_Renaming_Declaration,
|
|
N_Package_Renaming_Declaration,
|
|
N_Subprogram_Renaming_Declaration,
|
|
N_Generic_Function_Renaming_Declaration,
|
|
N_Generic_Package_Renaming_Declaration,
|
|
N_Generic_Procedure_Renaming_Declaration,
|
|
N_Abort_Statement,
|
|
N_Accept_Statement,
|
|
N_Assignment_Statement,
|
|
N_Asynchronous_Select,
|
|
N_Block_Statement,
|
|
N_Case_Statement,
|
|
N_Code_Statement,
|
|
N_Compound_Statement,
|
|
N_Conditional_Entry_Call,
|
|
N_Delay_Relative_Statement,
|
|
N_Delay_Until_Statement,
|
|
N_Entry_Call_Statement,
|
|
N_Free_Statement,
|
|
N_Goto_Statement,
|
|
N_Goto_When_Statement,
|
|
N_Loop_Statement,
|
|
N_Null_Statement,
|
|
N_Raise_Statement,
|
|
N_Raise_When_Statement,
|
|
N_Requeue_Statement,
|
|
N_Simple_Return_Statement,
|
|
N_Extended_Return_Statement,
|
|
N_Return_When_Statement,
|
|
N_Selective_Accept,
|
|
N_Timed_Entry_Call,
|
|
N_Exit_Statement,
|
|
N_If_Statement,
|
|
N_Accept_Alternative,
|
|
N_Delay_Alternative,
|
|
N_Elsif_Part,
|
|
N_Entry_Body_Formal_Part,
|
|
N_Iteration_Scheme,
|
|
N_Terminate_Alternative,
|
|
N_Formal_Abstract_Subprogram_Declaration,
|
|
N_Formal_Concrete_Subprogram_Declaration,
|
|
N_Push_Constraint_Error_Label,
|
|
N_Push_Program_Error_Label,
|
|
N_Push_Storage_Error_Label,
|
|
N_Pop_Constraint_Error_Label,
|
|
N_Pop_Program_Error_Label,
|
|
N_Pop_Storage_Error_Label,
|
|
N_SCIL_Dispatch_Table_Tag_Init,
|
|
N_SCIL_Dispatching_Call,
|
|
N_SCIL_Membership_Test,
|
|
N_Abortable_Part,
|
|
N_Abstract_Subprogram_Declaration,
|
|
N_Access_Definition,
|
|
N_Access_To_Object_Definition,
|
|
N_Aspect_Specification,
|
|
N_Call_Marker,
|
|
N_Case_Expression_Alternative,
|
|
N_Case_Statement_Alternative,
|
|
N_Compilation_Unit,
|
|
N_Compilation_Unit_Aux,
|
|
N_Component_Association,
|
|
N_Component_Definition,
|
|
N_Component_List,
|
|
N_Contract,
|
|
N_Derived_Type_Definition,
|
|
N_Decimal_Fixed_Point_Definition,
|
|
N_Defining_Program_Unit_Name,
|
|
N_Delta_Constraint,
|
|
N_Designator,
|
|
N_Digits_Constraint,
|
|
N_Discriminant_Association,
|
|
N_Discriminant_Specification,
|
|
N_Enumeration_Type_Definition,
|
|
N_Entry_Body,
|
|
N_Entry_Call_Alternative,
|
|
N_Entry_Index_Specification,
|
|
N_Exception_Declaration,
|
|
N_Exception_Handler,
|
|
N_Floating_Point_Definition,
|
|
N_Formal_Decimal_Fixed_Point_Definition,
|
|
N_Formal_Derived_Type_Definition,
|
|
N_Formal_Discrete_Type_Definition,
|
|
N_Formal_Floating_Point_Definition,
|
|
N_Formal_Modular_Type_Definition,
|
|
N_Formal_Ordinary_Fixed_Point_Definition,
|
|
N_Formal_Package_Declaration,
|
|
N_Formal_Private_Type_Definition,
|
|
N_Formal_Incomplete_Type_Definition,
|
|
N_Formal_Signed_Integer_Type_Definition,
|
|
N_Freeze_Entity,
|
|
N_Freeze_Generic_Entity,
|
|
N_Generic_Association,
|
|
N_Handled_Sequence_Of_Statements,
|
|
N_Index_Or_Discriminant_Constraint,
|
|
N_Iterated_Component_Association,
|
|
N_Iterated_Element_Association,
|
|
N_Itype_Reference,
|
|
N_Label,
|
|
N_Modular_Type_Definition,
|
|
N_Number_Declaration,
|
|
N_Ordinary_Fixed_Point_Definition,
|
|
N_Others_Choice,
|
|
N_Package_Specification,
|
|
N_Parameter_Association,
|
|
N_Parameter_Specification,
|
|
N_Pragma,
|
|
N_Protected_Definition,
|
|
N_Range_Constraint,
|
|
N_Real_Range_Specification,
|
|
N_Record_Definition,
|
|
N_Signed_Integer_Type_Definition,
|
|
N_Single_Protected_Declaration,
|
|
N_Subunit,
|
|
N_Task_Definition,
|
|
N_Triggering_Alternative,
|
|
N_Use_Type_Clause,
|
|
N_Validate_Unchecked_Conversion,
|
|
N_Variable_Reference_Marker,
|
|
N_Variant,
|
|
N_Variant_Part,
|
|
N_With_Clause,
|
|
N_Unused_At_End,
|
|
|
|
-- End of concrete node types.
|
|
|
|
Between_Concrete_Node_And_Concrete_Entity_Types,
|
|
|
|
-- Concrete entity types:
|
|
|
|
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_Access_Protected_Subprogram_Type,
|
|
E_Anonymous_Access_Protected_Subprogram_Type,
|
|
E_Anonymous_Access_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_Body,
|
|
E_Task_Body,
|
|
E_Subprogram_Body
|
|
|
|
-- End of concrete entity types.
|
|
|
|
); -- Type_Enum
|
|
|
|
subtype Type_Enum is Opt_Type_Enum
|
|
range Opt_Type_Enum'Succ (No_Type) .. Opt_Type_Enum'Last;
|
|
-- Enumeration of types -- Opt_Type_Enum without the special null value
|
|
-- No_Type.
|
|
|
|
subtype Node_Or_Entity_Type is
|
|
Type_Enum range
|
|
Type_Enum'Succ (Between_Special_And_Abstract_Node_Types) ..
|
|
Type_Enum'Last;
|
|
|
|
subtype Abstract_Type is
|
|
Type_Enum range
|
|
Type_Enum'Succ (Between_Special_And_Abstract_Node_Types) ..
|
|
Type_Enum'Pred (Between_Abstract_Entity_And_Concrete_Node_Types);
|
|
subtype Abstract_Node is
|
|
Abstract_Type range
|
|
Type_Enum'Succ (Between_Special_And_Abstract_Node_Types) ..
|
|
Type_Enum'Pred (Between_Abstract_Node_And_Abstract_Entity_Types);
|
|
subtype Abstract_Entity is
|
|
Abstract_Type range
|
|
Type_Enum'Succ (Between_Abstract_Node_And_Abstract_Entity_Types) ..
|
|
Type_Enum'Pred (Between_Abstract_Entity_And_Concrete_Node_Types);
|
|
|
|
subtype Concrete_Type is
|
|
Type_Enum range
|
|
Type_Enum'Succ (Between_Abstract_Entity_And_Concrete_Node_Types) ..
|
|
Type_Enum'Last;
|
|
subtype Concrete_Node is
|
|
Concrete_Type range
|
|
Type_Enum'Succ (Between_Abstract_Entity_And_Concrete_Node_Types) ..
|
|
Type_Enum'Pred (Between_Concrete_Node_And_Concrete_Entity_Types);
|
|
subtype Concrete_Entity is
|
|
Concrete_Type range
|
|
Type_Enum'Succ (Between_Concrete_Node_And_Concrete_Entity_Types) ..
|
|
Type_Enum'Last;
|
|
|
|
subtype Root_Type is Abstract_Type with
|
|
Predicate => Root_Type in Node_Kind | Entity_Kind;
|
|
|
|
subtype Node_Type is Node_Or_Entity_Type with
|
|
Predicate => Node_Type in Abstract_Node | Concrete_Node;
|
|
subtype Entity_Type is Node_Or_Entity_Type with
|
|
Predicate => Entity_Type in Abstract_Entity | Concrete_Entity;
|
|
|
|
subtype Special_Type is Type_Enum range
|
|
Flag .. Type_Enum'Pred (Between_Special_And_Abstract_Node_Types);
|
|
|
|
subtype Traversed_Field_Type is Type_Enum with Predicate =>
|
|
Traversed_Field_Type in Node_Id | List_Id | Node_Type;
|
|
-- These are the types of fields traversed by Traverse_Func
|
|
|
|
subtype Entity_Node is Node_Type with
|
|
Predicate => Entity_Node in
|
|
N_Defining_Character_Literal
|
|
| N_Defining_Identifier
|
|
| N_Defining_Operator_Symbol;
|
|
|
|
subtype Opt_Abstract_Type is Opt_Type_Enum with
|
|
Predicate => Opt_Abstract_Type in No_Type | Abstract_Type;
|
|
|
|
subtype Type_Boundaries is Type_Enum with
|
|
Predicate => Type_Boundaries in
|
|
Between_Abstract_Node_And_Abstract_Entity_Types |
|
|
Between_Abstract_Entity_And_Concrete_Node_Types |
|
|
Between_Concrete_Node_And_Concrete_Entity_Types;
|
|
-- These are not used, other than to separate the various subranges.
|
|
|
|
subtype Uint_Subtype is Type_Enum with
|
|
Predicate => Uint_Subtype in Valid_Uint | Unat | Upos | Nonzero_Uint;
|
|
-- These are the subtypes of Uint that have predicates restricting their
|
|
-- values.
|
|
|
|
end Gen_IL.Types;
|