blob: 2ad6e60dae88b4d0dbde3e242c57a982084f37c2 [file] [log] [blame]
------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- G E N _ I L . G E N . G E N _ N O D E S --
-- --
-- B o d y --
-- --
-- Copyright (C) 2020-2023, 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. --
-- --
------------------------------------------------------------------------------
procedure Gen_IL.Gen.Gen_Nodes is
procedure Ab -- Short for "Abstract"
(T : Abstract_Node; Parent : Abstract_Type;
Fields : Field_Sequence := No_Fields)
renames Create_Abstract_Node_Type;
procedure Cc -- Short for "ConCrete"
(T : Concrete_Node; Parent : Abstract_Type;
Fields : Field_Sequence := No_Fields;
Nmake_Assert : String := "")
renames Create_Concrete_Node_Type;
function Sy -- Short for "Syntactic"
(Field : Node_Field; Field_Type : Type_Enum;
Default_Value : Field_Default_Value := No_Default;
Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
renames Create_Syntactic_Field;
function Sm -- Short for "Semantic"
(Field : Field_Enum; Field_Type : Type_Enum;
Type_Only : Type_Only_Enum := No_Type_Only;
Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
renames Create_Semantic_Field;
procedure Union (T : Abstract_Node; Children : Type_Array)
renames Create_Node_Union_Type;
begin -- Gen_IL.Gen.Gen_Nodes
pragma Style_Checks ("M200");
Create_Root_Node_Type (Node_Kind,
(Sm (Nkind, Node_Kind_Type),
Sm (Sloc, Source_Ptr),
Sm (In_List, Flag),
Sm (Rewrite_Ins, Flag),
Sm (Comes_From_Source, Flag),
Sm (Analyzed, Flag),
Sm (Error_Posted, Flag),
Sm (Small_Paren_Count, Small_Paren_Count_Type),
Sm (Check_Actuals, Flag),
Sm (Has_Aspects, Flag),
Sm (Is_Ignored_Ghost_Node, Flag),
Sm (Link, Union_Id)));
Cc (N_Unused_At_Start, Node_Kind);
Ab (N_Representation_Clause, Node_Kind);
Cc (N_At_Clause, N_Representation_Clause,
(Sy (Identifier, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Component_Clause, N_Representation_Clause,
(Sy (Component_Name, Node_Id),
Sy (Position, Node_Id),
Sy (First_Bit, Node_Id),
Sy (Last_Bit, Node_Id)));
Cc (N_Enumeration_Representation_Clause, N_Representation_Clause,
(Sy (Identifier, Node_Id, Default_Empty),
Sy (Array_Aggregate, Node_Id),
Sm (Next_Rep_Item, Node_Id)));
Cc (N_Mod_Clause, N_Representation_Clause,
(Sy (Expression, Node_Id, Default_Empty),
Sy (Pragmas_Before, List_Id, Default_No_List)));
Cc (N_Record_Representation_Clause, N_Representation_Clause,
(Sy (Identifier, Node_Id, Default_Empty),
Sy (Mod_Clause, Node_Id, Default_Empty),
Sy (Component_Clauses, List_Id),
Sm (Next_Rep_Item, Node_Id)));
Cc (N_Attribute_Definition_Clause, N_Representation_Clause,
(Sy (Name, Node_Id, Default_Empty),
Sy (Chars, Name_Id, Default_No_Name),
Sy (Expression, Node_Id, Default_Empty),
Sm (Address_Warning_Posted, Flag),
Sm (Check_Address_Alignment, Flag),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
Sm (From_Aspect_Specification, Flag),
Sm (From_At_Mod, Flag),
Sm (Is_Delayed_Aspect, Flag),
Sm (Next_Rep_Item, Node_Id)));
Cc (N_Empty, Node_Kind,
(Sy (Chars, Name_Id, Default_No_Name)));
-- The following getters and setters are called on Empty,
-- and are currently inherited from Node_Kind:
--
-- Set_Comes_From_Source
-- Set_Sloc
--
-- Comes_From_Source
-- Error_Posted
-- In_List
-- Link
-- Rewrite_Ins
-- Sloc
-- Small_Paren_Count
Cc (N_Pragma_Argument_Association, Node_Kind,
(Sy (Chars, Name_Id, Default_No_Name),
Sy (Expression, Node_Id, Default_Empty),
Sm (Expression_Copy, Node_Id)));
Ab (N_Has_Etype, Node_Kind,
(Sm (Etype, Node_Id)));
Cc (N_Error, N_Has_Etype,
(Sy (Chars, Name_Id, Default_No_Name)));
Ab (N_Entity, N_Has_Etype,
(Sm (Next_Entity, Node_Id),
Sm (Scope, Node_Id)));
Cc (N_Defining_Character_Literal, N_Entity,
(Sy (Chars, Name_Id, Default_No_Name)));
Cc (N_Defining_Identifier, N_Entity,
(Sy (Chars, Name_Id, Default_No_Name)));
Cc (N_Defining_Operator_Symbol, N_Entity,
(Sy (Chars, Name_Id, Default_No_Name)));
Ab (N_Subexpr, N_Has_Etype,
-- Nodes with expression fields
(Sm (Assignment_OK, Flag),
Sm (Do_Range_Check, Flag),
Sm (Has_Dynamic_Length_Check, Flag),
Sm (Is_Controlling_Actual, Flag),
Sm (Is_Overloaded, Flag),
Sm (Is_Static_Expression, Flag),
Sm (Must_Not_Freeze, Flag),
Sm (Raises_Constraint_Error, Flag)));
Ab (N_Has_Entity, N_Subexpr,
-- Nodes that have Entity fields
-- Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity,
-- N_Aspect_Specification, or N_Attribute_Definition_Clause.
(Sm (Entity_Or_Associated_Node, Node_Id))); -- both
Cc (N_Expanded_Name, N_Has_Entity,
(Sy (Chars, Name_Id, Default_No_Name),
Sy (Prefix, Node_Id),
Sy (Selector_Name, Node_Id, Default_Empty),
Sm (Atomic_Sync_Required, Flag),
Sm (Has_Private_View, Flag),
Sm (Has_Secondary_Private_View, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (Redundant_Use, Flag)));
Ab (N_Direct_Name, N_Has_Entity,
(Sm (Has_Private_View, Flag),
Sm (Has_Secondary_Private_View, Flag)));
Cc (N_Identifier, N_Direct_Name,
(Sy (Chars, Name_Id, Default_No_Name),
Sm (Atomic_Sync_Required, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (Original_Discriminant, Node_Id),
Sm (Redundant_Use, Flag)));
Cc (N_Operator_Symbol, N_Direct_Name,
(Sy (Chars, Name_Id, Default_No_Name),
Sy (Strval, String_Id)));
Cc (N_Character_Literal, N_Direct_Name,
(Sy (Chars, Name_Id, Default_No_Name),
Sy (Char_Literal_Value, Unat)));
Ab (N_Op, N_Has_Entity,
(Sm (Do_Overflow_Check, Flag),
Sm (Has_Private_View, Flag),
Sm (Has_Secondary_Private_View, Flag)));
Ab (N_Binary_Op, N_Op);
Cc (N_Op_Add, N_Binary_Op,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Concat, N_Binary_Op,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Is_Component_Left_Opnd, Flag),
Sm (Is_Component_Right_Opnd, Flag)));
Cc (N_Op_Expon, N_Binary_Op,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Is_Power_Of_2_For_Shift, Flag)));
Cc (N_Op_Subtract, N_Binary_Op,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Ab (N_Multiplying_Operator, N_Binary_Op);
Cc (N_Op_Divide, N_Multiplying_Operator,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Do_Division_Check, Flag),
Sm (Rounded_Result, Flag)));
Cc (N_Op_Mod, N_Multiplying_Operator,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Do_Division_Check, Flag)));
Cc (N_Op_Multiply, N_Multiplying_Operator,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Rounded_Result, Flag)));
Cc (N_Op_Rem, N_Multiplying_Operator,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Do_Division_Check, Flag)));
Ab (N_Op_Boolean, N_Binary_Op);
-- Binary operators that take operands of a boolean type, and yield a
-- result of a boolean type.
Cc (N_Op_And, N_Op_Boolean,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Do_Length_Check, Flag)));
Ab (N_Op_Compare, N_Op_Boolean);
Cc (N_Op_Eq, N_Op_Compare,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Ge, N_Op_Compare,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Gt, N_Op_Compare,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Le, N_Op_Compare,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Lt, N_Op_Compare,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Ne, N_Op_Compare,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Or, N_Op_Boolean,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Do_Length_Check, Flag)));
Cc (N_Op_Xor, N_Op_Boolean,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Do_Length_Check, Flag)));
Ab (N_Op_Shift, N_Binary_Op,
(Sm (Shift_Count_OK, Flag)));
Cc (N_Op_Rotate_Left, N_Op_Shift,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Rotate_Right, N_Op_Shift,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Shift_Left, N_Op_Shift,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Shift_Right, N_Op_Shift,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Shift_Right_Arithmetic, N_Op_Shift,
(Sm (Chars, Name_Id),
Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id)));
Ab (N_Unary_Op, N_Op);
Cc (N_Op_Abs, N_Unary_Op,
(Sm (Chars, Name_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Minus, N_Unary_Op,
(Sm (Chars, Name_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Not, N_Unary_Op,
(Sm (Chars, Name_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Op_Plus, N_Unary_Op,
(Sm (Chars, Name_Id),
Sy (Right_Opnd, Node_Id)));
Cc (N_Attribute_Reference, N_Has_Entity,
(Sy (Prefix, Node_Id),
Sy (Attribute_Name, Name_Id),
Sy (Expressions, List_Id, Default_No_List),
Sm (Do_Overflow_Check, Flag),
Sm (Header_Size_Added, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (Must_Be_Byte_Aligned, Flag),
Sm (Redundant_Use, Flag)));
Ab (N_Membership_Test, N_Subexpr);
Cc (N_In, N_Membership_Test,
(Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sy (Alternatives, List_Id, Default_No_List),
Sy (No_Minimize_Eliminate, Flag)));
Cc (N_Not_In, N_Membership_Test,
(Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sy (Alternatives, List_Id, Default_No_List),
Sy (No_Minimize_Eliminate, Flag)));
Ab (N_Short_Circuit, N_Subexpr);
Cc (N_And_Then, N_Short_Circuit,
(Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Actions, List_Id)));
Cc (N_Or_Else, N_Short_Circuit,
(Sy (Left_Opnd, Node_Id),
Sy (Right_Opnd, Node_Id),
Sm (Actions, List_Id)));
Ab (N_Subprogram_Call, N_Subexpr,
(Sm (Controlling_Argument, Node_Id),
Sm (First_Named_Actual, Node_Id),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_Known_Guaranteed_ABE, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (No_Elaboration_Check, Flag)));
Cc (N_Function_Call, N_Subprogram_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Parameter_Associations, List_Id, Default_No_List),
Sm (Is_Expanded_Build_In_Place_Call, Flag)));
Cc (N_Procedure_Call_Statement, N_Subprogram_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Parameter_Associations, List_Id, Default_No_List)));
Ab (N_Raise_xxx_Error, N_Subexpr);
Cc (N_Raise_Constraint_Error, N_Raise_xxx_Error,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Reason, Unat)));
Cc (N_Raise_Program_Error, N_Raise_xxx_Error,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Reason, Unat)));
Cc (N_Raise_Storage_Error, N_Raise_xxx_Error,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Reason, Unat)));
Ab (N_Numeric_Or_String_Literal, N_Subexpr);
Cc (N_Integer_Literal, N_Numeric_Or_String_Literal,
(Sy (Intval, Valid_Uint),
Sm (Original_Entity, Node_Id),
Sm (Print_In_Hex, Flag)));
Cc (N_Real_Literal, N_Numeric_Or_String_Literal,
(Sy (Realval, Ureal),
Sm (Corresponding_Integer_Value, Valid_Uint),
Sm (Is_Machine_Number, Flag),
Sm (Original_Entity, Node_Id)));
Cc (N_String_Literal, N_Numeric_Or_String_Literal,
(Sy (Strval, String_Id),
Sy (Is_Folded_In_Parser, Flag),
Sm (Has_Wide_Character, Flag),
Sm (Has_Wide_Wide_Character, Flag)));
Cc (N_Interpolated_String_Literal, N_Numeric_Or_String_Literal,
(Sy (Expressions, List_Id, Default_No_List)));
Cc (N_Explicit_Dereference, N_Subexpr,
(Sy (Prefix, Node_Id),
Sm (Actual_Designated_Subtype, Node_Id),
Sm (Atomic_Sync_Required, Flag),
Sm (Has_Dereference_Action, Flag)));
Cc (N_Expression_With_Actions, N_Subexpr,
(Sy (Actions, List_Id, Default_No_List),
Sy (Expression, Node_Id, Default_Empty)));
Cc (N_If_Expression, N_Subexpr,
(Sy (Expressions, List_Id, Default_No_List),
Sy (Is_Elsif, Flag),
Sm (Do_Overflow_Check, Flag),
Sm (Else_Actions, List_Id),
Sm (Then_Actions, List_Id)));
Cc (N_Indexed_Component, N_Subexpr,
(Sy (Prefix, Node_Id),
Sy (Expressions, List_Id, Default_No_List),
Sm (Atomic_Sync_Required, Flag),
Sm (Generalized_Indexing, Node_Id)));
Cc (N_Null, N_Subexpr);
Cc (N_Qualified_Expression, N_Subexpr,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sm (Is_Qualified_Universal_Literal, Flag)));
Cc (N_Quantified_Expression, N_Subexpr,
(Sy (Iterator_Specification, Node_Id, Default_Empty),
Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
Sy (Condition, Node_Id, Default_Empty),
Sy (All_Present, Flag)));
Cc (N_Aggregate, N_Subexpr,
(Sy (Expressions, List_Id, Default_No_List),
Sy (Component_Associations, List_Id, Default_No_List),
Sy (Null_Record_Present, Flag),
Sy (Is_Parenthesis_Aggregate, Flag),
Sy (Is_Homogeneous_Aggregate, Flag),
Sy (Is_Enum_Array_Aggregate, Flag),
Sm (Aggregate_Bounds, Node_Id),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
Sm (Compile_Time_Known_Aggregate, Flag),
Sm (Expansion_Delayed, Flag),
Sm (Has_Self_Reference, Flag)));
Cc (N_Allocator, N_Subexpr,
(Sy (Expression, Node_Id, Default_Empty),
Sy (Subpool_Handle_Name, Node_Id, Default_Empty),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sm (For_Special_Return_Object, Flag),
Sm (Do_Storage_Check, Flag),
Sm (Is_Dynamic_Coextension, Flag),
Sm (Is_Static_Coextension, Flag),
Sm (No_Initialization, Flag),
Sm (Procedure_To_Call, Node_Id),
Sm (Storage_Pool, Node_Id)));
Cc (N_Case_Expression, N_Subexpr,
(Sy (Expression, Node_Id, Default_Empty),
Sy (Alternatives, List_Id, Default_No_List),
Sm (Do_Overflow_Check, Flag)));
Cc (N_Delta_Aggregate, N_Subexpr,
(Sy (Expression, Node_Id, Default_Empty),
Sy (Is_Homogeneous_Aggregate, Flag),
Sy (Component_Associations, List_Id, Default_No_List)));
Cc (N_Extension_Aggregate, N_Subexpr,
(Sy (Ancestor_Part, Node_Id),
Sy (Expressions, List_Id, Default_No_List),
Sy (Component_Associations, List_Id, Default_No_List),
Sy (Null_Record_Present, Flag),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
Sm (Expansion_Delayed, Flag),
Sm (Has_Self_Reference, Flag)));
Cc (N_Raise_Expression, N_Subexpr,
(Sy (Name, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Range, N_Subexpr,
(Sy (Low_Bound, Node_Id),
Sy (High_Bound, Node_Id),
Sm (Cannot_Be_Superflat, Flag),
Sm (Includes_Infinities, Flag)));
Cc (N_Reference, N_Subexpr,
(Sy (Prefix, Node_Id)));
Cc (N_Selected_Component, N_Subexpr,
(Sy (Prefix, Node_Id),
Sy (Selector_Name, Node_Id, Default_Empty),
Sm (Atomic_Sync_Required, Flag),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
Sm (Do_Discriminant_Check, Flag),
Sm (Is_In_Discriminant_Check, Flag),
Sm (Is_Prefixed_Call, Flag)));
Cc (N_Slice, N_Subexpr,
(Sy (Prefix, Node_Id),
Sy (Discrete_Range, Node_Id)));
Cc (N_Target_Name, N_Subexpr);
Cc (N_Type_Conversion, N_Subexpr,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sm (Conversion_OK, Flag),
Sm (Do_Discriminant_Check, Flag),
Sm (Do_Length_Check, Flag),
Sm (Do_Overflow_Check, Flag),
Sm (Float_Truncate, Flag),
Sm (Rounded_Result, Flag)));
Cc (N_Unchecked_Expression, N_Subexpr,
(Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Unchecked_Type_Conversion, N_Subexpr,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sm (Kill_Range_Check, Flag),
Sm (No_Truncation, Flag)),
Nmake_Assert => "True or else Nkind (Expression) /= N_Unchecked_Type_Conversion");
-- Nmake_Assert => "Nkind (Expression) /= N_Unchecked_Type_Conversion");
-- Assert that we don't have unchecked conversions of unchecked
-- conversions; if Expression might be an unchecked conversion,
-- then Tbuild.Unchecked_Convert_To should be used.
Cc (N_Subtype_Indication, N_Has_Etype,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Constraint, Node_Id),
Sm (Must_Not_Freeze, Flag)));
Ab (N_Declaration, Node_Kind);
-- Note: this includes all constructs normally thought of as declarations
-- except those that are separately grouped in N_Later_Decl_Item. But
-- Declaration_Node may return yet more node types; see N_Is_Decl below.
Cc (N_Component_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Component_Definition, Node_Id),
Sy (Expression, Node_Id, Default_Empty),
Sm (More_Ids, Flag),
Sm (Prev_Ids, Flag)));
Cc (N_Entry_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty),
Sy (Parameter_Specifications, List_Id, Default_No_List),
Sy (Must_Override, Flag),
Sy (Must_Not_Override, Flag),
Sm (Corresponding_Body, Node_Id)));
Cc (N_Expression_Function, N_Declaration,
(Sy (Specification, Node_Id),
Sy (Expression, Node_Id, Default_Empty),
Sm (Corresponding_Spec, Node_Id)));
Cc (N_Formal_Object_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (In_Present, Flag),
Sy (Out_Present, Flag),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Access_Definition, Node_Id, Default_Empty),
Sy (Default_Expression, Node_Id, Default_Empty),
Sm (More_Ids, Flag),
Sm (Prev_Ids, Flag)));
Cc (N_Formal_Type_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Formal_Type_Definition, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Unknown_Discriminants_Present, Flag),
Sy (Default_Subtype_Mark, Node_Id)));
Cc (N_Full_Type_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Type_Definition, Node_Id),
Sm (Discr_Check_Funcs_Built, Flag),
Sm (Incomplete_View, Node_Id)));
Cc (N_Incomplete_Type_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Unknown_Discriminants_Present, Flag),
Sy (Tagged_Present, Flag),
Sm (Premature_Use, Node_Id)));
Cc (N_Iterator_Specification, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sy (Reverse_Present, Flag),
Sy (Of_Present, Flag),
Sy (Iterator_Filter, Node_Id, Default_Empty),
Sy (Subtype_Indication, Node_Id, Default_Empty)));
Cc (N_Loop_Parameter_Specification, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Reverse_Present, Flag),
Sy (Iterator_Filter, Node_Id, Default_Empty),
Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty)));
Cc (N_Object_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Aliased_Present, Flag),
Sy (Constant_Present, Flag),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Object_Definition, Node_Id),
Sy (Expression, Node_Id, Default_Empty),
Sy (Has_Init_Expression, Flag),
Sm (Assignment_OK, Flag),
Sm (Corresponding_Generic_Association, Node_Id),
Sm (Exception_Junk, Flag),
Sm (Handler_List_Entry, Node_Id),
Sm (Is_Subprogram_Descriptor, Flag),
Sm (More_Ids, Flag),
Sm (No_Initialization, Flag),
Sm (Prev_Ids, Flag),
Sm (Suppress_Assignment_Checks, Flag)));
Cc (N_Protected_Type_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Interface_List, List_Id, Default_No_List),
Sy (Protected_Definition, Node_Id),
Sm (Corresponding_Body, Node_Id)));
Cc (N_Private_Extension_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Unknown_Discriminants_Present, Flag),
Sy (Abstract_Present, Flag),
Sy (Limited_Present, Flag),
Sy (Synchronized_Present, Flag),
Sy (Subtype_Indication, Node_Id, Default_Empty),
Sy (Interface_List, List_Id, Default_No_List),
Sm (Uninitialized_Variable, Node_Id)));
Cc (N_Private_Type_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Unknown_Discriminants_Present, Flag),
Sy (Abstract_Present, Flag),
Sy (Tagged_Present, Flag),
Sy (Limited_Present, Flag)));
Cc (N_Subtype_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Subtype_Indication, Node_Id, Default_Empty),
Sm (Exception_Junk, Flag),
Sm (Generic_Parent_Type, Node_Id)));
Ab (N_Subprogram_Specification, N_Declaration,
(Sm (Generic_Parent, Node_Id)));
Cc (N_Function_Specification, N_Subprogram_Specification,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Parameter_Specifications, List_Id, Default_No_List),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Result_Definition, Node_Id),
Sy (Must_Override, Flag),
Sy (Must_Not_Override, Flag)));
Cc (N_Procedure_Specification, N_Subprogram_Specification,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Parameter_Specifications, List_Id, Default_No_List),
Sy (Null_Present, Flag),
Sy (Must_Override, Flag),
Sy (Must_Not_Override, Flag),
Sm (Null_Statement, Node_Id)));
Ab (N_Access_To_Subprogram_Definition, Node_Kind);
Cc (N_Access_Function_Definition, N_Access_To_Subprogram_Definition,
(Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Null_Exclusion_In_Return_Present, Flag),
Sy (Protected_Present, Flag),
Sy (Parameter_Specifications, List_Id, Default_No_List),
Sy (Result_Definition, Node_Id)));
Cc (N_Access_Procedure_Definition, N_Access_To_Subprogram_Definition,
(Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Protected_Present, Flag),
Sy (Parameter_Specifications, List_Id, Default_No_List)));
Ab (N_Later_Decl_Item, Node_Kind);
-- Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes
-- only those items which can appear as later declarative items. This also
-- includes N_Implicit_Label_Declaration which is not specifically in the
-- grammar but may appear as a valid later declarative items. It does NOT
-- include N_Pragma which can also appear among later declarative items.
-- It does however include N_Protected_Body, which is a bit peculiar, but
-- harmless since this cannot appear in Ada 83 mode anyway.
Cc (N_Task_Type_Declaration, N_Later_Decl_Item,
(Sy (Defining_Identifier, Node_Id),
Sy (Discriminant_Specifications, List_Id, Default_No_List),
Sy (Interface_List, List_Id, Default_No_List),
Sy (Task_Definition, Node_Id, Default_Empty),
Sm (Corresponding_Body, Node_Id)));
Ab (N_Body_Stub, N_Later_Decl_Item,
(Sm (Corresponding_Body, Node_Id),
Sm (Corresponding_Spec_Of_Stub, Node_Id),
Sm (Library_Unit, Node_Id)));
Cc (N_Package_Body_Stub, N_Body_Stub,
(Sy (Defining_Identifier, Node_Id)));
Cc (N_Protected_Body_Stub, N_Body_Stub,
(Sy (Defining_Identifier, Node_Id)));
Cc (N_Subprogram_Body_Stub, N_Body_Stub,
(Sy (Specification, Node_Id)));
Cc (N_Task_Body_Stub, N_Body_Stub,
(Sy (Defining_Identifier, Node_Id)));
Ab (N_Generic_Instantiation, N_Later_Decl_Item,
(Sm (Instance_Spec, Node_Id),
Sm (Is_Declaration_Level_Node, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_Known_Guaranteed_ABE, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (Parent_Spec, Node_Id)));
Ab (N_Subprogram_Instantiation, N_Generic_Instantiation);
Cc (N_Function_Instantiation, N_Subprogram_Instantiation,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sy (Generic_Associations, List_Id, Default_No_List),
Sy (Must_Override, Flag),
Sy (Must_Not_Override, Flag)));
Cc (N_Procedure_Instantiation, N_Subprogram_Instantiation,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sy (Generic_Associations, List_Id, Default_No_List),
Sy (Must_Override, Flag),
Sy (Must_Not_Override, Flag)));
Cc (N_Package_Instantiation, N_Generic_Instantiation,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sy (Generic_Associations, List_Id, Default_No_List)));
Ab (N_Proper_Body, N_Later_Decl_Item,
(Sm (Corresponding_Spec, Node_Id),
Sm (Was_Originally_Stub, Flag)));
Ab (N_Unit_Body, N_Proper_Body);
Cc (N_Package_Body, N_Unit_Body,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Declarations, List_Id, Default_No_List),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sy (At_End_Proc, Node_Id, Default_Empty)));
Cc (N_Subprogram_Body, N_Unit_Body,
(Sy (Specification, Node_Id),
Sy (Declarations, List_Id, Default_No_List),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sy (Bad_Is_Detected, Flag),
Sy (At_End_Proc, Node_Id, Default_Empty),
Sm (Activation_Chain_Entity, Node_Id),
Sm (Acts_As_Spec, Flag),
Sm (Corresponding_Entry_Body, Node_Id),
Sm (Do_Storage_Check, Flag),
Sm (Has_Relative_Deadline_Pragma, Flag),
Sm (Is_Entry_Barrier_Function, Flag),
Sm (Is_Protected_Subprogram_Body, Flag),
Sm (Is_Task_Body_Procedure, Flag),
Sm (Is_Task_Master, Flag),
Sm (Was_Attribute_Reference, Flag),
Sm (Was_Expression_Function, Flag)));
Cc (N_Protected_Body, N_Proper_Body,
(Sy (Defining_Identifier, Node_Id),
Sy (Declarations, List_Id, Default_No_List),
Sy (End_Label, Node_Id, Default_Empty)));
Cc (N_Task_Body, N_Proper_Body,
(Sy (Defining_Identifier, Node_Id),
Sy (Declarations, List_Id, Default_No_List),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sy (At_End_Proc, Node_Id, Default_Empty),
Sm (Activation_Chain_Entity, Node_Id),
Sm (Is_Task_Master, Flag)));
Cc (N_Implicit_Label_Declaration, N_Later_Decl_Item,
(Sy (Defining_Identifier, Node_Id),
Sm (Label_Construct, Node_Id)));
Cc (N_Package_Declaration, N_Later_Decl_Item,
(Sy (Specification, Node_Id),
Sm (Activation_Chain_Entity, Node_Id),
Sm (Corresponding_Body, Node_Id),
Sm (Parent_Spec, Node_Id)));
Cc (N_Single_Task_Declaration, N_Later_Decl_Item,
(Sy (Defining_Identifier, Node_Id),
Sy (Interface_List, List_Id, Default_No_List),
Sy (Task_Definition, Node_Id, Default_Empty)));
Cc (N_Subprogram_Declaration, N_Later_Decl_Item,
(Sy (Specification, Node_Id),
Sm (Body_To_Inline, Node_Id),
Sm (Corresponding_Body, Node_Id),
Sm (Is_Entry_Barrier_Function, Flag),
Sm (Is_Task_Body_Procedure, Flag),
Sm (Parent_Spec, Node_Id)));
Cc (N_Use_Package_Clause, N_Later_Decl_Item,
(Sy (Name, Node_Id, Default_Empty),
Sy (Is_Effective_Use_Clause, Flag),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
Sm (Hidden_By_Use_Clause, Elist_Id),
Sm (More_Ids, Flag),
Sm (Next_Use_Clause, Node_Id),
Sm (Prev_Ids, Flag),
Sm (Prev_Use_Clause, Node_Id)));
Ab (N_Generic_Declaration, N_Later_Decl_Item,
(Sm (Corresponding_Body, Node_Id),
Sm (Parent_Spec, Node_Id)));
Cc (N_Generic_Package_Declaration, N_Generic_Declaration,
(Sy (Specification, Node_Id),
Sy (Generic_Formal_Declarations, List_Id),
Sm (Activation_Chain_Entity, Node_Id)));
Cc (N_Generic_Subprogram_Declaration, N_Generic_Declaration,
(Sy (Specification, Node_Id),
Sy (Generic_Formal_Declarations, List_Id)));
Ab (N_Array_Type_Definition, Node_Kind);
Cc (N_Constrained_Array_Definition, N_Array_Type_Definition,
(Sy (Discrete_Subtype_Definitions, List_Id),
Sy (Component_Definition, Node_Id)));
Cc (N_Unconstrained_Array_Definition, N_Array_Type_Definition,
(Sy (Subtype_Marks, List_Id),
Sy (Component_Definition, Node_Id)));
Ab (N_Renaming_Declaration, Node_Kind);
Cc (N_Exception_Renaming_Declaration, N_Renaming_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Name, Node_Id, Default_Empty)));
Cc (N_Object_Renaming_Declaration, N_Renaming_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Access_Definition, Node_Id, Default_Empty),
Sy (Name, Node_Id, Default_Empty),
Sm (Comes_From_Iterator, Flag),
Sm (Corresponding_Generic_Association, Node_Id)));
Cc (N_Package_Renaming_Declaration, N_Renaming_Declaration,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sm (Parent_Spec, Node_Id)));
Cc (N_Subprogram_Renaming_Declaration, N_Renaming_Declaration,
(Sy (Specification, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sm (Corresponding_Formal_Spec, Node_Id),
Sm (Corresponding_Spec, Node_Id),
Sm (From_Default, Flag),
Sm (Parent_Spec, Node_Id)));
Ab (N_Generic_Renaming_Declaration, N_Renaming_Declaration,
(Sm (Parent_Spec, Node_Id)));
Cc (N_Generic_Function_Renaming_Declaration, N_Generic_Renaming_Declaration,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty)));
Cc (N_Generic_Package_Renaming_Declaration, N_Generic_Renaming_Declaration,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty)));
Cc (N_Generic_Procedure_Renaming_Declaration, N_Generic_Renaming_Declaration,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Name, Node_Id, Default_Empty)));
Ab (N_Statement_Other_Than_Procedure_Call, Node_Kind);
-- Note that this includes all statement types except for the cases of the
-- N_Procedure_Call_Statement which is considered to be a subexpression
-- (since overloading is possible, so it needs to go through the normal
-- overloading resolution for expressions).
Cc (N_Abort_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Names, List_Id)));
Cc (N_Accept_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Entry_Direct_Name, Node_Id),
Sy (Entry_Index, Node_Id, Default_Empty),
Sy (Parameter_Specifications, List_Id, Default_No_List),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sy (Declarations, List_Id, Default_No_List)));
Cc (N_Assignment_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sm (Backwards_OK, Flag),
Sm (Componentwise_Assignment, Flag),
Sm (Do_Discriminant_Check, Flag),
Sm (Do_Length_Check, Flag),
Sm (Forwards_OK, Flag),
Sm (Has_Target_Names, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Code, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (No_Ctrl_Actions, Flag),
Sm (No_Finalize_Actions, Flag),
Sm (Suppress_Assignment_Checks, Flag)));
Cc (N_Asynchronous_Select, N_Statement_Other_Than_Procedure_Call,
(Sy (Triggering_Alternative, Node_Id),
Sy (Abortable_Part, Node_Id)));
Cc (N_Block_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Identifier, Node_Id, Default_Empty),
Sy (Declarations, List_Id, Default_No_List),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sy (Has_Created_Identifier, Flag),
Sy (Is_Asynchronous_Call_Block, Flag),
Sy (Is_Task_Allocation_Block, Flag),
Sy (At_End_Proc, Node_Id, Default_Empty),
Sm (Activation_Chain_Entity, Node_Id),
Sm (Cleanup_Actions, List_Id),
Sm (Exception_Junk, Flag),
Sm (Is_Abort_Block, Flag),
Sm (Is_Finalization_Wrapper, Flag),
Sm (Is_Initialization_Block, Flag),
Sm (Is_Task_Master, Flag)));
Cc (N_Case_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Expression, Node_Id, Default_Empty),
Sy (Alternatives, List_Id, Default_No_List),
Sy (End_Span, Unat, Default_Uint_0),
Sm (From_Conditional_Expression, Flag)));
Cc (N_Code_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Compound_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Actions, List_Id, Default_No_List)));
Cc (N_Conditional_Entry_Call, N_Statement_Other_Than_Procedure_Call,
(Sy (Entry_Call_Alternative, Node_Id),
Sy (Else_Statements, List_Id, Default_No_List)));
Ab (N_Delay_Statement, N_Statement_Other_Than_Procedure_Call);
Cc (N_Delay_Relative_Statement, N_Delay_Statement,
(Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Delay_Until_Statement, N_Delay_Statement,
(Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Entry_Call_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Parameter_Associations, List_Id, Default_No_List),
Sm (First_Named_Actual, Node_Id),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag)));
Cc (N_Free_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Expression, Node_Id, Default_Empty),
Sm (Actual_Designated_Subtype, Node_Id),
Sm (Procedure_To_Call, Node_Id),
Sm (Storage_Pool, Node_Id)));
Cc (N_Goto_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sm (Exception_Junk, Flag)));
Cc (N_Goto_When_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Condition, Node_Id, Default_Empty)));
Cc (N_Loop_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Identifier, Node_Id, Default_Empty),
Sy (Iteration_Scheme, Node_Id, Default_Empty),
Sy (Statements, List_Id, Default_Empty_List),
Sy (End_Label, Node_Id, Default_Empty),
Sy (Has_Created_Identifier, Flag),
Sy (Is_Null_Loop, Flag),
Sy (Suppress_Loop_Warnings, Flag)));
Cc (N_Null_Statement, N_Statement_Other_Than_Procedure_Call,
(Sm (Next_Rep_Item, Node_Id)));
Cc (N_Raise_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Raise_When_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sy (Condition, Node_Id, Default_Empty)));
Cc (N_Requeue_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Abort_Present, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag)));
Cc (N_Simple_Return_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Expression, Node_Id, Default_Empty),
Sm (Comes_From_Extended_Return_Statement, Flag),
Sm (Procedure_To_Call, Node_Id),
Sm (Return_Statement_Entity, Node_Id),
Sm (Storage_Pool, Node_Id)));
Cc (N_Extended_Return_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Return_Object_Declarations, List_Id),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sm (Procedure_To_Call, Node_Id),
Sm (Return_Statement_Entity, Node_Id),
Sm (Storage_Pool, Node_Id)));
Cc (N_Return_When_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Expression, Node_Id, Default_Empty),
Sy (Condition, Node_Id, Default_Empty)));
Cc (N_Selective_Accept, N_Statement_Other_Than_Procedure_Call,
(Sy (Select_Alternatives, List_Id),
Sy (Else_Statements, List_Id, Default_No_List)));
Cc (N_Timed_Entry_Call, N_Statement_Other_Than_Procedure_Call,
(Sy (Entry_Call_Alternative, Node_Id),
Sy (Delay_Alternative, Node_Id)));
Cc (N_Exit_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Name, Node_Id, Default_Empty),
Sy (Condition, Node_Id, Default_Empty),
Sm (Next_Exit_Statement, Node_Id)));
Cc (N_If_Statement, N_Statement_Other_Than_Procedure_Call,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Then_Statements, List_Id),
Sy (Elsif_Parts, List_Id, Default_No_List),
Sy (Else_Statements, List_Id, Default_No_List),
Sy (End_Span, Unat, Default_Uint_0),
Sm (From_Conditional_Expression, Flag),
Sm (Comes_From_Check_Or_Contract, Flag)));
Cc (N_Accept_Alternative, Node_Kind,
(Sy (Accept_Statement, Node_Id),
Sy (Condition, Node_Id, Default_Empty),
Sy (Statements, List_Id, Default_Empty_List),
Sy (Pragmas_Before, List_Id, Default_No_List),
Sm (Accept_Handler_Records, List_Id)));
Cc (N_Delay_Alternative, Node_Kind,
(Sy (Delay_Statement, Node_Id),
Sy (Condition, Node_Id, Default_Empty),
Sy (Statements, List_Id, Default_Empty_List),
Sy (Pragmas_Before, List_Id, Default_No_List)));
Cc (N_Elsif_Part, Node_Kind,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Then_Statements, List_Id),
Sm (Condition_Actions, List_Id)));
Cc (N_Entry_Body_Formal_Part, Node_Kind,
(Sy (Entry_Index_Specification, Node_Id, Default_Empty),
Sy (Parameter_Specifications, List_Id, Default_No_List),
Sy (Condition, Node_Id, Default_Empty)));
Cc (N_Iteration_Scheme, Node_Kind,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Iterator_Specification, Node_Id, Default_Empty),
Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
Sm (Condition_Actions, List_Id)));
Cc (N_Terminate_Alternative, Node_Kind,
(Sy (Condition, Node_Id, Default_Empty),
Sy (Pragmas_Before, List_Id, Default_No_List),
Sy (Pragmas_After, List_Id, Default_No_List)));
Ab (N_Formal_Subprogram_Declaration, Node_Kind);
Cc (N_Formal_Abstract_Subprogram_Declaration, N_Formal_Subprogram_Declaration,
(Sy (Specification, Node_Id),
Sy (Default_Name, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sy (Box_Present, Flag)));
Cc (N_Formal_Concrete_Subprogram_Declaration, N_Formal_Subprogram_Declaration,
(Sy (Specification, Node_Id),
Sy (Default_Name, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sy (Box_Present, Flag)));
Ab (N_Push_Pop_xxx_Label, Node_Kind);
Ab (N_Push_xxx_Label, N_Push_Pop_xxx_Label,
(Sm (Exception_Label, Node_Id)));
Cc (N_Push_Constraint_Error_Label, N_Push_xxx_Label);
Cc (N_Push_Program_Error_Label, N_Push_xxx_Label);
Cc (N_Push_Storage_Error_Label, N_Push_xxx_Label);
Ab (N_Pop_xxx_Label, N_Push_Pop_xxx_Label);
Cc (N_Pop_Constraint_Error_Label, N_Pop_xxx_Label);
Cc (N_Pop_Program_Error_Label, N_Pop_xxx_Label);
Cc (N_Pop_Storage_Error_Label, N_Pop_xxx_Label);
Ab (N_SCIL_Node, Node_Kind,
(Sm (SCIL_Entity, Node_Id)));
Cc (N_SCIL_Dispatch_Table_Tag_Init, N_SCIL_Node);
Cc (N_SCIL_Dispatching_Call, N_SCIL_Node,
(Sm (SCIL_Controlling_Tag, Node_Id),
Sm (SCIL_Target_Prim, Node_Id)));
Cc (N_SCIL_Membership_Test, N_SCIL_Node,
(Sm (SCIL_Tag_Value, Node_Id)));
Cc (N_Abortable_Part, Node_Kind,
(Sy (Statements, List_Id, Default_Empty_List)));
Cc (N_Abstract_Subprogram_Declaration, Node_Kind,
(Sy (Specification, Node_Id)));
Cc (N_Access_Definition, Node_Kind,
(Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (All_Present, Flag),
Sy (Constant_Present, Flag),
Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Access_To_Subprogram_Definition, Node_Id, Default_Empty)));
Cc (N_Access_To_Object_Definition, Node_Kind,
(Sy (All_Present, Flag),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Null_Excluding_Subtype, Flag),
Sy (Subtype_Indication, Node_Id, Default_Empty),
Sy (Constant_Present, Flag)));
Cc (N_Aspect_Specification, Node_Kind,
(Sy (Identifier, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sy (Class_Present, Flag),
Sy (Split_PPC, Flag),
Sm (Aspect_On_Partial_View, Flag),
Sm (Aspect_Rep_Item, Node_Id),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
Sm (Is_Boolean_Aspect, Flag),
Sm (Is_Checked, Flag),
Sm (Is_Delayed_Aspect, Flag),
Sm (Is_Disabled, Flag),
Sm (Is_Ignored, Flag),
Sm (Next_Rep_Item, Node_Id)));
Cc (N_Call_Marker, Node_Kind,
(Sm (Is_Declaration_Level_Node, Flag),
Sm (Is_Dispatching_Call, Flag),
Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_Known_Guaranteed_ABE, Flag),
Sm (Is_Preelaborable_Call, Flag),
Sm (Is_Source_Call, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (Target, Node_Id)));
Cc (N_Case_Expression_Alternative, Node_Kind,
(Sm (Actions, List_Id),
Sy (Discrete_Choices, List_Id),
Sy (Expression, Node_Id, Default_Empty),
Sm (Has_SP_Choice, Flag)));
Cc (N_Case_Statement_Alternative, Node_Kind,
(Sy (Discrete_Choices, List_Id),
Sy (Statements, List_Id, Default_Empty_List),
Sm (Has_SP_Choice, Flag),
Sm (Multidefined_Bindings, Flag)));
Cc (N_Compilation_Unit, Node_Kind,
(Sy (Context_Items, List_Id),
Sy (Private_Present, Flag),
Sy (Unit, Node_Id),
Sy (Aux_Decls_Node, Node_Id),
Sm (Acts_As_Spec, Flag),
Sm (Body_Required, Flag),
Sm (Context_Pending, Flag),
Sm (First_Inlined_Subprogram, Node_Id),
Sm (Has_No_Elaboration_Code, Flag),
Sm (Has_Pragma_Suppress_All, Flag),
Sm (Library_Unit, Node_Id),
Sm (Save_Invocation_Graph_Of_Body, Flag)));
Cc (N_Compilation_Unit_Aux, Node_Kind,
(Sy (Declarations, List_Id, Default_No_List),
Sy (Actions, List_Id, Default_No_List),
Sy (Pragmas_After, List_Id, Default_No_List),
Sy (Config_Pragmas, List_Id, Default_Empty_List),
Sm (Default_Storage_Pool, Node_Id)));
Cc (N_Component_Association, Node_Kind,
(Sy (Choices, List_Id),
Sy (Expression, Node_Id, Default_Empty),
Sy (Box_Present, Flag),
Sy (Inherited_Discriminant, Flag),
Sy (Binding_Chars, Name_Id, Default_No_Name),
Sm (Loop_Actions, List_Id),
Sm (Was_Default_Init_Box_Association, Flag)));
Cc (N_Component_Definition, Node_Kind,
(Sy (Aliased_Present, Flag),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Subtype_Indication, Node_Id, Default_Empty),
Sy (Access_Definition, Node_Id, Default_Empty)));
Cc (N_Component_List, Node_Kind,
(Sy (Component_Items, List_Id),
Sy (Variant_Part, Node_Id, Default_Empty),
Sy (Null_Present, Flag)));
Cc (N_Contract, Node_Kind,
(Sm (Classifications, Node_Id),
Sm (Contract_Test_Cases, Node_Id),
Sm (Is_Expanded_Contract, Flag),
Sm (Pre_Post_Conditions, Node_Id)));
Cc (N_Derived_Type_Definition, Node_Kind,
(Sy (Abstract_Present, Flag),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Subtype_Indication, Node_Id, Default_Empty),
Sy (Record_Extension_Part, Node_Id, Default_Empty),
Sy (Limited_Present, Flag),
Sy (Task_Present, Flag),
Sy (Protected_Present, Flag),
Sy (Synchronized_Present, Flag),
Sy (Interface_List, List_Id, Default_No_List),
Sy (Interface_Present, Flag)));
Cc (N_Decimal_Fixed_Point_Definition, Node_Kind,
(Sy (Delta_Expression, Node_Id),
Sy (Digits_Expression, Node_Id),
Sy (Real_Range_Specification, Node_Id, Default_Empty)));
Cc (N_Defining_Program_Unit_Name, Node_Kind,
(Sy (Name, Node_Id, Default_Empty),
Sy (Defining_Identifier, Node_Id)));
Cc (N_Delta_Constraint, Node_Kind,
(Sy (Delta_Expression, Node_Id),
Sy (Range_Constraint, Node_Id, Default_Empty)));
Cc (N_Designator, Node_Kind,
(Sy (Name, Node_Id, Default_Empty),
Sy (Identifier, Node_Id, Default_Empty)));
Cc (N_Digits_Constraint, Node_Kind,
(Sy (Digits_Expression, Node_Id),
Sy (Range_Constraint, Node_Id, Default_Empty)));
Cc (N_Discriminant_Association, Node_Kind,
(Sy (Selector_Names, List_Id),
Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Discriminant_Specification, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Discriminant_Type, Node_Id),
Sy (Expression, Node_Id, Default_Empty),
Sm (More_Ids, Flag),
Sm (Prev_Ids, Flag)));
Cc (N_Enumeration_Type_Definition, Node_Kind,
(Sy (Literals, List_Id),
Sy (End_Label, Node_Id, Default_Empty)));
Cc (N_Entry_Body, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Entry_Body_Formal_Part, Node_Id),
Sy (Declarations, List_Id, Default_No_List),
Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
Sy (At_End_Proc, Node_Id, Default_Empty),
Sm (Activation_Chain_Entity, Node_Id),
Sm (Corresponding_Spec, Node_Id)));
Cc (N_Entry_Call_Alternative, Node_Kind,
(Sy (Entry_Call_Statement, Node_Id),
Sy (Statements, List_Id, Default_Empty_List),
Sy (Pragmas_Before, List_Id, Default_No_List)));
Cc (N_Entry_Index_Specification, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty)));
Cc (N_Exception_Declaration, N_Declaration,
(Sy (Defining_Identifier, Node_Id),
Sm (Expression, Node_Id),
Sm (More_Ids, Flag),
Sm (Prev_Ids, Flag),
Sm (Renaming_Exception, Node_Id)));
Cc (N_Exception_Handler, Node_Kind,
(Sy (Choice_Parameter, Node_Id, Default_Empty),
Sy (Exception_Choices, List_Id),
Sy (Statements, List_Id, Default_Empty_List),
Sm (Exception_Label, Node_Id),
Sm (Has_Local_Raise, Flag),
Sm (Local_Raise_Not_OK, Flag),
Sm (Local_Raise_Statements, Elist_Id)));
Cc (N_Floating_Point_Definition, Node_Kind,
(Sy (Digits_Expression, Node_Id),
Sy (Real_Range_Specification, Node_Id, Default_Empty)));
Cc (N_Formal_Decimal_Fixed_Point_Definition, Node_Kind);
Cc (N_Formal_Derived_Type_Definition, Node_Kind,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Private_Present, Flag),
Sy (Abstract_Present, Flag),
Sy (Limited_Present, Flag),
Sy (Synchronized_Present, Flag),
Sy (Interface_List, List_Id, Default_No_List)));
Cc (N_Formal_Discrete_Type_Definition, Node_Kind);
Cc (N_Formal_Floating_Point_Definition, Node_Kind);
Cc (N_Formal_Modular_Type_Definition, Node_Kind);
Cc (N_Formal_Ordinary_Fixed_Point_Definition, Node_Kind);
Cc (N_Formal_Package_Declaration, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Name, Node_Id, Default_Empty),
Sy (Generic_Associations, List_Id, Default_No_List),
Sy (Box_Present, Flag),
Sm (Instance_Spec, Node_Id),
Sm (Is_Known_Guaranteed_ABE, Flag)));
Cc (N_Formal_Private_Type_Definition, Node_Kind,
(Sy (Abstract_Present, Flag),
Sy (Tagged_Present, Flag),
Sy (Limited_Present, Flag),
Sm (Uninitialized_Variable, Node_Id)));
Cc (N_Formal_Incomplete_Type_Definition, Node_Kind,
(Sy (Tagged_Present, Flag)));
Cc (N_Formal_Signed_Integer_Type_Definition, Node_Kind);
Cc (N_Freeze_Entity, Node_Kind,
(Sy (Actions, List_Id, Default_No_List),
Sm (Access_Types_To_Process, Elist_Id),
Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
Sm (First_Subtype_Link, Node_Id),
Sm (TSS_Elist, Elist_Id)));
Cc (N_Freeze_Generic_Entity, Node_Kind,
Sm (Entity_Or_Associated_Node, Node_Id)); -- just Entity
Cc (N_Generic_Association, Node_Kind,
(Sy (Selector_Name, Node_Id, Default_Empty),
Sy (Explicit_Generic_Actual_Parameter, Node_Id),
Sy (Box_Present, Flag)));
Cc (N_Handled_Sequence_Of_Statements, Node_Kind,
(Sy (Statements, List_Id, Default_Empty_List),
Sy (End_Label, Node_Id, Default_Empty),
Sy (Exception_Handlers, List_Id, Default_No_List),
Sy (At_End_Proc, Node_Id, Default_Empty)));
Cc (N_Index_Or_Discriminant_Constraint, Node_Kind,
(Sy (Constraints, List_Id)));
Cc (N_Iterated_Component_Association, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Iterator_Specification, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sy (Discrete_Choices, List_Id),
Sy (Box_Present, Flag),
Sm (Loop_Actions, List_Id)));
Cc (N_Iterated_Element_Association, Node_Kind,
(Sy (Key_Expression, Node_Id),
Sy (Iterator_Specification, Node_Id, Default_Empty),
Sy (Expression, Node_Id, Default_Empty),
Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
Sy (Box_Present, Flag),
Sm (Loop_Actions, List_Id)));
Cc (N_Itype_Reference, Node_Kind,
(Sm (Itype, Node_Id)));
Cc (N_Label, Node_Kind,
(Sy (Identifier, Node_Id, Default_Empty),
Sm (Exception_Junk, Flag)));
Cc (N_Modular_Type_Definition, Node_Kind,
(Sy (Expression, Node_Id, Default_Empty)));
Cc (N_Number_Declaration, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Expression, Node_Id, Default_Empty),
Sm (More_Ids, Flag),
Sm (Prev_Ids, Flag)));
Cc (N_Ordinary_Fixed_Point_Definition, Node_Kind,
(Sy (Delta_Expression, Node_Id),
Sy (Real_Range_Specification, Node_Id, Default_Empty)));
Cc (N_Others_Choice, Node_Kind,
(Sm (All_Others, Flag),
Sm (Others_Discrete_Choices, List_Id)));
Cc (N_Package_Specification, Node_Kind,
(Sy (Defining_Unit_Name, Node_Id),
Sy (Visible_Declarations, List_Id),
Sy (Private_Declarations, List_Id, Default_No_List),
Sy (End_Label, Node_Id, Default_Empty),
Sm (Generic_Parent, Node_Id),
Sm (Limited_View_Installed, Flag)));
Cc (N_Parameter_Association, Node_Kind,
(Sy (Selector_Name, Node_Id, Default_Empty),
Sy (Explicit_Actual_Parameter, Node_Id),
Sm (Is_Accessibility_Actual, Flag),
Sm (Next_Named_Actual, Node_Id)));
Cc (N_Parameter_Specification, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Aliased_Present, Flag),
Sy (In_Present, Flag),
Sy (Out_Present, Flag),
Sy (Null_Exclusion_Present, Flag, Default_False),
Sy (Parameter_Type, Node_Id),
Sy (Expression, Node_Id, Default_Empty),
Sm (Default_Expression, Node_Id),
Sm (More_Ids, Flag),
Sm (Prev_Ids, Flag)));
Cc (N_Pragma, Node_Kind,
(Sy (Pragma_Argument_Associations, List_Id, Default_No_List),
Sy (Pragma_Identifier, Node_Id),
Sy (Class_Present, Flag),
Sy (Split_PPC, Flag),
Sm (Corresponding_Aspect, Node_Id),
Sm (From_Aspect_Specification, Flag),
Sm (Import_Interface_Present, Flag),
Sm (Is_Analyzed_Pragma, Flag),
Sm (Is_Checked, Flag),
Sm (Is_Checked_Ghost_Pragma, Flag),
Sm (Is_Delayed_Aspect, Flag),
Sm (Is_Disabled, Flag),
Sm (Is_Generic_Contract_Pragma, Flag),
Sm (Is_Ignored, Flag),
Sm (Is_Ignored_Ghost_Pragma, Flag),
Sm (Is_Inherited_Pragma, Flag),
Sm (Next_Pragma, Node_Id),
Sm (Next_Rep_Item, Node_Id),
Sm (Uneval_Old_Accept, Flag),
Sm (Uneval_Old_Warn, Flag)));
Cc (N_Protected_Definition, Node_Kind,
(Sy (Visible_Declarations, List_Id),
Sy (Private_Declarations, List_Id, Default_No_List),
Sy (End_Label, Node_Id, Default_Empty)));
Cc (N_Range_Constraint, Node_Kind,
(Sy (Range_Expression, Node_Id)));
Cc (N_Real_Range_Specification, Node_Kind,
(Sy (Low_Bound, Node_Id),
Sy (High_Bound, Node_Id)));
Cc (N_Record_Definition, Node_Kind,
(Sy (End_Label, Node_Id, Default_Empty),
Sy (Abstract_Present, Flag),
Sy (Tagged_Present, Flag),
Sy (Limited_Present, Flag),
Sy (Component_List, Node_Id),
Sy (Null_Present, Flag),
Sy (Task_Present, Flag),
Sy (Protected_Present, Flag),
Sy (Synchronized_Present, Flag),
Sy (Interface_Present, Flag),
Sy (Interface_List, List_Id, Default_No_List)));
Cc (N_Signed_Integer_Type_Definition, Node_Kind,
(Sy (Low_Bound, Node_Id),
Sy (High_Bound, Node_Id)));
Cc (N_Single_Protected_Declaration, Node_Kind,
(Sy (Defining_Identifier, Node_Id),
Sy (Interface_List, List_Id, Default_No_List),
Sy (Protected_Definition, Node_Id)));
Cc (N_Subunit, Node_Kind,
(Sy (Name, Node_Id, Default_Empty),
Sy (Proper_Body, Node_Id),
Sm (Corresponding_Stub, Node_Id)));
Cc (N_Task_Definition, Node_Kind,
(Sy (Visible_Declarations, List_Id),
Sy (Private_Declarations, List_Id, Default_No_List),
Sy (End_Label, Node_Id, Default_Empty),
Sm (Has_Relative_Deadline_Pragma, Flag),
Sm (Has_Storage_Size_Pragma, Flag)));
Cc (N_Triggering_Alternative, Node_Kind,
(Sy (Triggering_Statement, Node_Id),
Sy (Statements, List_Id, Default_Empty_List),
Sy (Pragmas_Before, List_Id, Default_No_List)));
Cc (N_Use_Type_Clause, Node_Kind,
(Sy (Subtype_Mark, Node_Id, Default_Empty),
Sy (Is_Effective_Use_Clause, Flag),
Sy (All_Present, Flag),
Sm (Hidden_By_Use_Clause, Elist_Id),
Sm (More_Ids, Flag),
Sm (Next_Use_Clause, Node_Id),
Sm (Prev_Ids, Flag),
Sm (Prev_Use_Clause, Node_Id),
Sm (Used_Operations, Elist_Id)));
Cc (N_Validate_Unchecked_Conversion, Node_Kind,
(Sm (Source_Type, Node_Id),
Sm (Target_Type, Node_Id)));
Cc (N_Variable_Reference_Marker, Node_Kind,
(Sm (Is_Elaboration_Checks_OK_Node, Flag),
Sm (Is_Elaboration_Warnings_OK_Node, Flag),
Sm (Is_Read, Flag),
Sm (Is_SPARK_Mode_On_Node, Flag),
Sm (Is_Write, Flag),
Sm (Target, Node_Id)));
Cc (N_Variant, Node_Kind,
(Sy (Discrete_Choices, List_Id),
Sy (Component_List, Node_Id),
Sm (Dcheck_Function, Node_Id),
Sm (Enclosing_Variant, Node_Id),
Sm (Has_SP_Choice, Flag),
Sm (Present_Expr, Uint)));
Cc (N_Variant_Part, Node_Kind,
(Sy (Name, Node_Id, Default_Empty),
Sy (Variants, List_Id)));
Cc (N_With_Clause, Node_Kind,
(Sy (Name, Node_Id, Default_Empty),
Sy (Private_Present, Flag),
Sy (Limited_Present, Flag),
Sy (First_Name, Flag, Default_True),
Sy (Last_Name, Flag, Default_True),
Sm (Context_Installed, Flag),
Sm (Corresponding_Spec, Node_Id),
Sm (Elaborate_All_Desirable, Flag),
Sm (Elaborate_All_Present, Flag),
Sm (Elaborate_Desirable, Flag),
Sm (Elaborate_Present, Flag),
Sm (Implicit_With, Flag),
Sm (Library_Unit, Node_Id),
Sm (Limited_View_Installed, Flag),
Sm (Next_Implicit_With, Node_Id),
Sm (No_Entities_Ref_In_Spec, Flag),
Sm (Parent_With, Flag),
Sm (Unreferenced_In_Spec, Flag)));
Cc (N_Unused_At_End, Node_Kind);
-- Union types. These don't fit into the normal parent/child hierarchy
-- above.
Union (N_Has_Chars,
Children =>
(N_Attribute_Definition_Clause,
N_Empty,
N_Pragma_Argument_Association,
N_Error,
N_Entity,
N_Expanded_Name,
N_Identifier,
N_Operator_Symbol,
N_Character_Literal,
N_Op));
Union (N_Has_Condition,
Children =>
(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));
-- Nodes with condition fields (does not include N_Raise_xxx_Error)
Union (N_Has_Bounds,
Children =>
(N_Range,
N_Real_Range_Specification,
N_Signed_Integer_Type_Definition));
-- Nodes that have Low_Bound and High_Bound defined
Union (N_Is_Index,
Children =>
(N_Has_Bounds,
N_Has_Entity,
N_Subtype_Indication));
-- Nodes that can be an index of an array
Union (N_Entity_Name,
Children =>
(N_Expanded_Name,
N_Identifier,
N_Operator_Symbol));
-- Nodes that are definitely representing an entity.
-- Some N_Attribute_Reference nodes may also represent an entity. See
-- Is_Entity_Name.
Union (N_Is_Decl,
Children =>
(N_Aggregate,
N_Block_Statement,
N_Declaration,
N_Discriminant_Specification,
N_Entry_Index_Specification,
N_Enumeration_Type_Definition,
N_Exception_Handler,
N_Explicit_Dereference,
N_Expression_With_Actions,
N_Extension_Aggregate,
N_Identifier,
N_Iterated_Component_Association,
N_Later_Decl_Item,
N_Loop_Statement,
N_Null_Statement,
N_Number_Declaration,
N_Package_Specification,
N_Parameter_Specification,
N_Renaming_Declaration,
N_Quantified_Expression));
-- Nodes that can be returned by Declaration_Node; it can also return
-- Empty. Not all of these are true "declarations", but Declaration_Node
-- can return them in some cases.
Union (N_Is_Range,
Children =>
(N_Character_Literal,
N_Entity_Name,
N_Has_Bounds,
N_Integer_Literal,
N_Subtype_Indication));
-- Nodes that can be used to specify a range
Union (N_Is_Case_Choice,
Children =>
(N_Is_Range,
N_Others_Choice));
-- Nodes that can be in the choices of a case statement
Union (N_Is_Exception_Choice,
Children =>
(N_Entity_Name,
N_Others_Choice));
-- Nodes that can be in the choices of an exception handler
Union (N_Alternative,
Children =>
(N_Case_Statement_Alternative,
N_Variant));
-- Nodes that can be alternatives in case contructs
end Gen_IL.Gen.Gen_Nodes;