------------------------------------------------------------------------------
--                                                                          --
--                         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;
