------------------------------------------------------------------------------ -- -- -- 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-2022, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- -- ware Foundation; either version 3, or (at your option) any later ver- -- -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- -- for more details. You should have received a copy of the GNU General -- -- Public License distributed with GNAT; see file COPYING3. If not, go to -- -- http://www.gnu.org/licenses for a complete copy of the license. -- -- -- -- GNAT was originally developed by the GNAT team at New York University. -- -- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ 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 (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))); 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))); 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), Sm (No_Side_Effect_Removal, 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_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 (Alloc_For_BIP_Return, 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), Sy (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))); 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), 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), 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 (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 (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), 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))); 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), Sm (Activation_Chain_Entity, 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), Sm (First_Real_Statement, Node_Id))); 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, Valid_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;