1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT COMPILER COMPONENTS                         --
4--                                                                          --
5--                  G E N _ I L . G E N . G E N _ N O D E S                 --
6--                                                                          --
7--                                 B o d y                                  --
8--                                                                          --
9--           Copyright (C) 2020-2021, Free Software Foundation, Inc.        --
10--                                                                          --
11-- GNAT is free software;  you can  redistribute it  and/or modify it under --
12-- terms of the  GNU General Public License as published  by the Free Soft- --
13-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17-- for  more details.  You should have  received  a copy of the GNU General --
18-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
19-- http://www.gnu.org/licenses for a complete copy of the license.          --
20--                                                                          --
21-- GNAT was originally developed  by the GNAT team at  New York University. --
22-- Extensive contributions were provided by Ada Core Technologies Inc.      --
23--                                                                          --
24------------------------------------------------------------------------------
25
26procedure Gen_IL.Gen.Gen_Nodes is
27
28   procedure Ab -- Short for "Abstract"
29     (T : Abstract_Node; Parent : Abstract_Type;
30      Fields : Field_Sequence := No_Fields)
31      renames Create_Abstract_Node_Type;
32   procedure Cc -- Short for "ConCrete"
33     (T : Concrete_Node; Parent : Abstract_Type;
34      Fields : Field_Sequence := No_Fields;
35      Nmake_Assert : String := "")
36      renames Create_Concrete_Node_Type;
37
38   function Sy -- Short for "Syntactic"
39     (Field : Node_Field; Field_Type : Type_Enum;
40      Default_Value : Field_Default_Value := No_Default;
41      Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
42      renames Create_Syntactic_Field;
43   function Sm -- Short for "Semantic"
44     (Field : Field_Enum; Field_Type : Type_Enum;
45      Type_Only  : Type_Only_Enum := No_Type_Only;
46      Pre, Pre_Get, Pre_Set : String := "") return Field_Desc
47      renames Create_Semantic_Field;
48
49   procedure Union (T : Abstract_Node; Children : Type_Array)
50     renames Create_Node_Union_Type;
51
52begin -- Gen_IL.Gen.Gen_Nodes
53   pragma Style_Checks ("M200");
54
55   Create_Root_Node_Type (Node_Kind,
56       (Sm (Nkind, Node_Kind_Type),
57        Sm (Sloc, Source_Ptr),
58        Sm (In_List, Flag),
59        Sm (Rewrite_Ins, Flag),
60        Sm (Comes_From_Source, Flag),
61        Sm (Analyzed, Flag),
62        Sm (Error_Posted, Flag),
63        Sm (Small_Paren_Count, Small_Paren_Count_Type),
64        Sm (Check_Actuals, Flag),
65        Sm (Has_Aspects, Flag),
66        Sm (Is_Ignored_Ghost_Node, Flag),
67        Sm (Link, Union_Id)));
68
69   Cc (N_Unused_At_Start, Node_Kind);
70
71   Ab (N_Representation_Clause, Node_Kind);
72
73   Cc (N_At_Clause, N_Representation_Clause,
74       (Sy (Identifier, Node_Id, Default_Empty),
75        Sy (Expression, Node_Id, Default_Empty)));
76
77   Cc (N_Component_Clause, N_Representation_Clause,
78       (Sy (Component_Name, Node_Id),
79        Sy (Position, Node_Id),
80        Sy (First_Bit, Node_Id),
81        Sy (Last_Bit, Node_Id)));
82
83   Cc (N_Enumeration_Representation_Clause, N_Representation_Clause,
84       (Sy (Identifier, Node_Id, Default_Empty),
85        Sy (Array_Aggregate, Node_Id),
86        Sm (Next_Rep_Item, Node_Id)));
87
88   Cc (N_Mod_Clause, N_Representation_Clause,
89       (Sy (Expression, Node_Id, Default_Empty),
90        Sy (Pragmas_Before, List_Id, Default_No_List)));
91
92   Cc (N_Record_Representation_Clause, N_Representation_Clause,
93       (Sy (Identifier, Node_Id, Default_Empty),
94        Sy (Mod_Clause, Node_Id, Default_Empty),
95        Sy (Component_Clauses, List_Id),
96        Sm (Next_Rep_Item, Node_Id)));
97
98   Cc (N_Attribute_Definition_Clause, N_Representation_Clause,
99       (Sy (Name, Node_Id, Default_Empty),
100        Sy (Chars, Name_Id, Default_No_Name),
101        Sy (Expression, Node_Id, Default_Empty),
102        Sm (Address_Warning_Posted, Flag),
103        Sm (Check_Address_Alignment, Flag),
104        Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
105        Sm (From_Aspect_Specification, Flag),
106        Sm (From_At_Mod, Flag),
107        Sm (Is_Delayed_Aspect, Flag),
108        Sm (Next_Rep_Item, Node_Id)));
109
110   Cc (N_Empty, Node_Kind,
111       (Sy (Chars, Name_Id, Default_No_Name)));
112   --  The following getters and setters are called on Empty,
113   --  and are currently inherited from Node_Kind:
114   --
115   --  Set_Comes_From_Source
116   --  Set_Sloc
117   --
118   --  Comes_From_Source
119   --  Error_Posted
120   --  In_List
121   --  Link
122   --  Rewrite_Ins
123   --  Sloc
124   --  Small_Paren_Count
125
126   Cc (N_Pragma_Argument_Association, Node_Kind,
127       (Sy (Chars, Name_Id, Default_No_Name),
128        Sy (Expression, Node_Id, Default_Empty),
129        Sm (Expression_Copy, Node_Id)));
130
131   Ab (N_Has_Etype, Node_Kind,
132       (Sm (Etype, Node_Id)));
133
134   Cc (N_Error, N_Has_Etype,
135       (Sy (Chars, Name_Id, Default_No_Name)));
136
137   Ab (N_Entity, N_Has_Etype,
138       (Sm (Next_Entity, Node_Id),
139        Sm (Scope, Node_Id)));
140
141   Cc (N_Defining_Character_Literal, N_Entity,
142       (Sy (Chars, Name_Id, Default_No_Name)));
143
144   Cc (N_Defining_Identifier, N_Entity,
145       (Sy (Chars, Name_Id, Default_No_Name)));
146
147   Cc (N_Defining_Operator_Symbol, N_Entity,
148       (Sy (Chars, Name_Id, Default_No_Name)));
149
150   Ab (N_Subexpr, N_Has_Etype,
151   --  Nodes with expression fields
152       (Sm (Assignment_OK, Flag),
153        Sm (Do_Range_Check, Flag),
154        Sm (Has_Dynamic_Length_Check, Flag),
155        Sm (Is_Controlling_Actual, Flag),
156        Sm (Is_Overloaded, Flag),
157        Sm (Is_Static_Expression, Flag),
158        Sm (Must_Not_Freeze, Flag),
159        Sm (Raises_Constraint_Error, Flag)));
160
161   Ab (N_Has_Entity, N_Subexpr,
162   --  Nodes that have Entity fields
163   --  Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity,
164   --  N_Aspect_Specification, or N_Attribute_Definition_Clause.
165       (Sm (Entity_Or_Associated_Node, Node_Id))); -- both
166
167   Cc (N_Expanded_Name, N_Has_Entity,
168       (Sy (Chars, Name_Id, Default_No_Name),
169        Sy (Prefix, Node_Id),
170        Sy (Selector_Name, Node_Id, Default_Empty),
171        Sm (Atomic_Sync_Required, Flag),
172        Sm (Has_Private_View, Flag),
173        Sm (Is_Elaboration_Checks_OK_Node, Flag),
174        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
175        Sm (Is_SPARK_Mode_On_Node, Flag),
176        Sm (Redundant_Use, Flag)));
177
178   Ab (N_Direct_Name, N_Has_Entity,
179       (Sm (Has_Private_View, Flag)));
180
181   Cc (N_Identifier, N_Direct_Name,
182       (Sy (Chars, Name_Id, Default_No_Name),
183        Sm (Atomic_Sync_Required, Flag),
184        Sm (Is_Elaboration_Checks_OK_Node, Flag),
185        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
186        Sm (Is_SPARK_Mode_On_Node, Flag),
187        Sm (Original_Discriminant, Node_Id),
188        Sm (Redundant_Use, Flag)));
189
190   Cc (N_Operator_Symbol, N_Direct_Name,
191       (Sy (Chars, Name_Id, Default_No_Name),
192        Sy (Strval, String_Id)));
193
194   Cc (N_Character_Literal, N_Direct_Name,
195       (Sy (Chars, Name_Id, Default_No_Name),
196        Sy (Char_Literal_Value, Unat)));
197
198   Ab (N_Op, N_Has_Entity,
199       (Sm (Do_Overflow_Check, Flag),
200        Sm (Has_Private_View, Flag)));
201
202   Ab (N_Binary_Op, N_Op);
203
204   Cc (N_Op_Add, N_Binary_Op,
205       (Sm (Chars, Name_Id),
206        Sy (Left_Opnd, Node_Id),
207        Sy (Right_Opnd, Node_Id)));
208
209   Cc (N_Op_Concat, N_Binary_Op,
210       (Sm (Chars, Name_Id),
211        Sy (Left_Opnd, Node_Id),
212        Sy (Right_Opnd, Node_Id),
213        Sm (Is_Component_Left_Opnd, Flag),
214        Sm (Is_Component_Right_Opnd, Flag)));
215
216   Cc (N_Op_Expon, N_Binary_Op,
217       (Sm (Chars, Name_Id),
218        Sy (Left_Opnd, Node_Id),
219        Sy (Right_Opnd, Node_Id),
220        Sm (Is_Power_Of_2_For_Shift, Flag)));
221
222   Cc (N_Op_Subtract, N_Binary_Op,
223       (Sm (Chars, Name_Id),
224        Sy (Left_Opnd, Node_Id),
225        Sy (Right_Opnd, Node_Id)));
226
227   Ab (N_Multiplying_Operator, N_Binary_Op);
228
229   Cc (N_Op_Divide, N_Multiplying_Operator,
230       (Sm (Chars, Name_Id),
231        Sy (Left_Opnd, Node_Id),
232        Sy (Right_Opnd, Node_Id),
233        Sm (Do_Division_Check, Flag),
234        Sm (Rounded_Result, Flag)));
235
236   Cc (N_Op_Mod, N_Multiplying_Operator,
237       (Sm (Chars, Name_Id),
238        Sy (Left_Opnd, Node_Id),
239        Sy (Right_Opnd, Node_Id),
240        Sm (Do_Division_Check, Flag)));
241
242   Cc (N_Op_Multiply, N_Multiplying_Operator,
243       (Sm (Chars, Name_Id),
244        Sy (Left_Opnd, Node_Id),
245        Sy (Right_Opnd, Node_Id),
246        Sm (Rounded_Result, Flag)));
247
248   Cc (N_Op_Rem, N_Multiplying_Operator,
249       (Sm (Chars, Name_Id),
250        Sy (Left_Opnd, Node_Id),
251        Sy (Right_Opnd, Node_Id),
252        Sm (Do_Division_Check, Flag)));
253
254   Ab (N_Op_Boolean, N_Binary_Op);
255   --  Binary operators that take operands of a boolean type, and yield a
256   --  result of a boolean type.
257
258   Cc (N_Op_And, N_Op_Boolean,
259       (Sm (Chars, Name_Id),
260        Sy (Left_Opnd, Node_Id),
261        Sy (Right_Opnd, Node_Id),
262        Sm (Do_Length_Check, Flag)));
263
264   Ab (N_Op_Compare, N_Op_Boolean);
265
266   Cc (N_Op_Eq, N_Op_Compare,
267       (Sm (Chars, Name_Id),
268        Sy (Left_Opnd, Node_Id),
269        Sy (Right_Opnd, Node_Id)));
270
271   Cc (N_Op_Ge, N_Op_Compare,
272       (Sm (Chars, Name_Id),
273        Sy (Left_Opnd, Node_Id),
274        Sy (Right_Opnd, Node_Id)));
275
276   Cc (N_Op_Gt, N_Op_Compare,
277       (Sm (Chars, Name_Id),
278        Sy (Left_Opnd, Node_Id),
279        Sy (Right_Opnd, Node_Id)));
280
281   Cc (N_Op_Le, N_Op_Compare,
282       (Sm (Chars, Name_Id),
283        Sy (Left_Opnd, Node_Id),
284        Sy (Right_Opnd, Node_Id)));
285
286   Cc (N_Op_Lt, N_Op_Compare,
287       (Sm (Chars, Name_Id),
288        Sy (Left_Opnd, Node_Id),
289        Sy (Right_Opnd, Node_Id)));
290
291   Cc (N_Op_Ne, N_Op_Compare,
292       (Sm (Chars, Name_Id),
293        Sy (Left_Opnd, Node_Id),
294        Sy (Right_Opnd, Node_Id)));
295
296   Cc (N_Op_Or, N_Op_Boolean,
297       (Sm (Chars, Name_Id),
298        Sy (Left_Opnd, Node_Id),
299        Sy (Right_Opnd, Node_Id),
300        Sm (Do_Length_Check, Flag)));
301
302   Cc (N_Op_Xor, N_Op_Boolean,
303       (Sm (Chars, Name_Id),
304        Sy (Left_Opnd, Node_Id),
305        Sy (Right_Opnd, Node_Id),
306        Sm (Do_Length_Check, Flag)));
307
308   Ab (N_Op_Shift, N_Binary_Op,
309       (Sm (Shift_Count_OK, Flag)));
310
311   Cc (N_Op_Rotate_Left, N_Op_Shift,
312       (Sm (Chars, Name_Id),
313        Sy (Left_Opnd, Node_Id),
314        Sy (Right_Opnd, Node_Id)));
315
316   Cc (N_Op_Rotate_Right, N_Op_Shift,
317       (Sm (Chars, Name_Id),
318        Sy (Left_Opnd, Node_Id),
319        Sy (Right_Opnd, Node_Id)));
320
321   Cc (N_Op_Shift_Left, N_Op_Shift,
322       (Sm (Chars, Name_Id),
323        Sy (Left_Opnd, Node_Id),
324        Sy (Right_Opnd, Node_Id)));
325
326   Cc (N_Op_Shift_Right, N_Op_Shift,
327       (Sm (Chars, Name_Id),
328        Sy (Left_Opnd, Node_Id),
329        Sy (Right_Opnd, Node_Id)));
330
331   Cc (N_Op_Shift_Right_Arithmetic, N_Op_Shift,
332       (Sm (Chars, Name_Id),
333        Sy (Left_Opnd, Node_Id),
334        Sy (Right_Opnd, Node_Id)));
335
336   Ab (N_Unary_Op, N_Op);
337
338   Cc (N_Op_Abs, N_Unary_Op,
339       (Sm (Chars, Name_Id),
340        Sy (Right_Opnd, Node_Id)));
341
342   Cc (N_Op_Minus, N_Unary_Op,
343       (Sm (Chars, Name_Id),
344        Sy (Right_Opnd, Node_Id)));
345
346   Cc (N_Op_Not, N_Unary_Op,
347       (Sm (Chars, Name_Id),
348        Sy (Right_Opnd, Node_Id)));
349
350   Cc (N_Op_Plus, N_Unary_Op,
351       (Sm (Chars, Name_Id),
352        Sy (Right_Opnd, Node_Id)));
353
354   Cc (N_Attribute_Reference, N_Has_Entity,
355       (Sy (Prefix, Node_Id),
356        Sy (Attribute_Name, Name_Id),
357        Sy (Expressions, List_Id, Default_No_List),
358        Sm (Do_Overflow_Check, Flag),
359        Sm (Header_Size_Added, Flag),
360        Sm (Is_Elaboration_Checks_OK_Node, Flag),
361        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
362        Sm (Is_SPARK_Mode_On_Node, Flag),
363        Sm (Must_Be_Byte_Aligned, Flag),
364        Sm (Redundant_Use, Flag)));
365
366   Ab (N_Membership_Test, N_Subexpr);
367
368   Cc (N_In, N_Membership_Test,
369       (Sy (Left_Opnd, Node_Id),
370        Sy (Right_Opnd, Node_Id),
371        Sy (Alternatives, List_Id, Default_No_List),
372        Sy (No_Minimize_Eliminate, Flag)));
373
374   Cc (N_Not_In, N_Membership_Test,
375       (Sy (Left_Opnd, Node_Id),
376        Sy (Right_Opnd, Node_Id),
377        Sy (Alternatives, List_Id, Default_No_List),
378        Sy (No_Minimize_Eliminate, Flag)));
379
380   Ab (N_Short_Circuit, N_Subexpr);
381
382   Cc (N_And_Then, N_Short_Circuit,
383       (Sy (Left_Opnd, Node_Id),
384        Sy (Right_Opnd, Node_Id),
385        Sm (Actions, List_Id)));
386
387   Cc (N_Or_Else, N_Short_Circuit,
388       (Sy (Left_Opnd, Node_Id),
389        Sy (Right_Opnd, Node_Id),
390        Sm (Actions, List_Id)));
391
392   Ab (N_Subprogram_Call, N_Subexpr,
393       (Sm (Controlling_Argument, Node_Id),
394        Sm (First_Named_Actual, Node_Id),
395        Sm (Is_Elaboration_Checks_OK_Node, Flag),
396        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
397        Sm (Is_Known_Guaranteed_ABE, Flag),
398        Sm (Is_SPARK_Mode_On_Node, Flag),
399        Sm (No_Elaboration_Check, Flag)));
400
401   Cc (N_Function_Call, N_Subprogram_Call,
402       (Sy (Name, Node_Id, Default_Empty),
403        Sy (Parameter_Associations, List_Id, Default_No_List),
404        Sm (Is_Expanded_Build_In_Place_Call, Flag),
405        Sm (No_Side_Effect_Removal, Flag)));
406
407   Cc (N_Procedure_Call_Statement, N_Subprogram_Call,
408       (Sy (Name, Node_Id, Default_Empty),
409        Sy (Parameter_Associations, List_Id, Default_No_List)));
410
411   Ab (N_Raise_xxx_Error, N_Subexpr);
412
413   Cc (N_Raise_Constraint_Error, N_Raise_xxx_Error,
414       (Sy (Condition, Node_Id, Default_Empty),
415        Sy (Reason, Unat)));
416
417   Cc (N_Raise_Program_Error, N_Raise_xxx_Error,
418       (Sy (Condition, Node_Id, Default_Empty),
419        Sy (Reason, Unat)));
420
421   Cc (N_Raise_Storage_Error, N_Raise_xxx_Error,
422       (Sy (Condition, Node_Id, Default_Empty),
423        Sy (Reason, Unat)));
424
425   Ab (N_Numeric_Or_String_Literal, N_Subexpr);
426
427   Cc (N_Integer_Literal, N_Numeric_Or_String_Literal,
428       (Sy (Intval, Valid_Uint),
429        Sm (Original_Entity, Node_Id),
430        Sm (Print_In_Hex, Flag)));
431
432   Cc (N_Real_Literal, N_Numeric_Or_String_Literal,
433       (Sy (Realval, Ureal),
434        Sm (Corresponding_Integer_Value, Valid_Uint),
435        Sm (Is_Machine_Number, Flag),
436        Sm (Original_Entity, Node_Id)));
437
438   Cc (N_String_Literal, N_Numeric_Or_String_Literal,
439       (Sy (Strval, String_Id),
440        Sy (Is_Folded_In_Parser, Flag),
441        Sm (Has_Wide_Character, Flag),
442        Sm (Has_Wide_Wide_Character, Flag)));
443
444   Cc (N_Explicit_Dereference, N_Subexpr,
445       (Sy (Prefix, Node_Id),
446        Sm (Actual_Designated_Subtype, Node_Id),
447        Sm (Atomic_Sync_Required, Flag),
448        Sm (Has_Dereference_Action, Flag)));
449
450   Cc (N_Expression_With_Actions, N_Subexpr,
451       (Sy (Actions, List_Id, Default_No_List),
452        Sy (Expression, Node_Id, Default_Empty)));
453
454   Cc (N_If_Expression, N_Subexpr,
455       (Sy (Expressions, List_Id, Default_No_List),
456        Sy (Is_Elsif, Flag),
457        Sm (Do_Overflow_Check, Flag),
458        Sm (Else_Actions, List_Id),
459        Sm (Then_Actions, List_Id)));
460
461   Cc (N_Indexed_Component, N_Subexpr,
462       (Sy (Prefix, Node_Id),
463        Sy (Expressions, List_Id, Default_No_List),
464        Sm (Atomic_Sync_Required, Flag),
465        Sm (Generalized_Indexing, Node_Id)));
466
467   Cc (N_Null, N_Subexpr);
468
469   Cc (N_Qualified_Expression, N_Subexpr,
470       (Sy (Subtype_Mark, Node_Id, Default_Empty),
471        Sy (Expression, Node_Id, Default_Empty),
472        Sm (Is_Qualified_Universal_Literal, Flag)));
473
474   Cc (N_Quantified_Expression, N_Subexpr,
475       (Sy (Iterator_Specification, Node_Id, Default_Empty),
476        Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
477        Sy (Condition, Node_Id, Default_Empty),
478        Sy (All_Present, Flag)));
479
480   Cc (N_Aggregate, N_Subexpr,
481       (Sy (Expressions, List_Id, Default_No_List),
482        Sy (Component_Associations, List_Id, Default_No_List),
483        Sy (Null_Record_Present, Flag),
484        Sy (Is_Parenthesis_Aggregate, Flag),
485        Sy (Is_Homogeneous_Aggregate, Flag),
486        Sy (Is_Enum_Array_Aggregate, Flag),
487        Sm (Aggregate_Bounds, Node_Id),
488        Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
489        Sm (Compile_Time_Known_Aggregate, Flag),
490        Sm (Expansion_Delayed, Flag),
491        Sm (Has_Self_Reference, Flag)));
492
493   Cc (N_Allocator, N_Subexpr,
494       (Sy (Expression, Node_Id, Default_Empty),
495        Sy (Subpool_Handle_Name, Node_Id, Default_Empty),
496        Sy (Null_Exclusion_Present, Flag, Default_False),
497        Sm (Alloc_For_BIP_Return, Flag),
498        Sm (Do_Storage_Check, Flag),
499        Sm (Is_Dynamic_Coextension, Flag),
500        Sm (Is_Static_Coextension, Flag),
501        Sm (No_Initialization, Flag),
502        Sm (Procedure_To_Call, Node_Id),
503        Sm (Storage_Pool, Node_Id)));
504
505   Cc (N_Case_Expression, N_Subexpr,
506       (Sy (Expression, Node_Id, Default_Empty),
507        Sy (Alternatives, List_Id, Default_No_List),
508        Sm (Do_Overflow_Check, Flag)));
509
510   Cc (N_Delta_Aggregate, N_Subexpr,
511       (Sy (Expression, Node_Id, Default_Empty),
512        Sy (Component_Associations, List_Id, Default_No_List)));
513
514   Cc (N_Extension_Aggregate, N_Subexpr,
515       (Sy (Ancestor_Part, Node_Id),
516        Sy (Expressions, List_Id, Default_No_List),
517        Sy (Component_Associations, List_Id, Default_No_List),
518        Sy (Null_Record_Present, Flag),
519        Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
520        Sm (Expansion_Delayed, Flag),
521        Sm (Has_Self_Reference, Flag)));
522
523   Cc (N_Raise_Expression, N_Subexpr,
524       (Sy (Name, Node_Id, Default_Empty),
525        Sy (Expression, Node_Id, Default_Empty),
526        Sm (Convert_To_Return_False, Flag)));
527
528   Cc (N_Range, N_Subexpr,
529       (Sy (Low_Bound, Node_Id),
530        Sy (High_Bound, Node_Id),
531        Sy (Includes_Infinities, Flag)));
532
533   Cc (N_Reference, N_Subexpr,
534       (Sy (Prefix, Node_Id)));
535
536   Cc (N_Selected_Component, N_Subexpr,
537       (Sy (Prefix, Node_Id),
538        Sy (Selector_Name, Node_Id, Default_Empty),
539        Sm (Atomic_Sync_Required, Flag),
540        Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
541        Sm (Do_Discriminant_Check, Flag),
542        Sm (Is_In_Discriminant_Check, Flag),
543        Sm (Is_Prefixed_Call, Flag)));
544
545   Cc (N_Slice, N_Subexpr,
546       (Sy (Prefix, Node_Id),
547        Sy (Discrete_Range, Node_Id)));
548
549   Cc (N_Target_Name, N_Subexpr);
550
551   Cc (N_Type_Conversion, N_Subexpr,
552       (Sy (Subtype_Mark, Node_Id, Default_Empty),
553        Sy (Expression, Node_Id, Default_Empty),
554        Sm (Conversion_OK, Flag),
555        Sm (Do_Discriminant_Check, Flag),
556        Sm (Do_Length_Check, Flag),
557        Sm (Do_Overflow_Check, Flag),
558        Sm (Float_Truncate, Flag),
559        Sm (Rounded_Result, Flag)));
560
561   Cc (N_Unchecked_Expression, N_Subexpr,
562       (Sy (Expression, Node_Id, Default_Empty)));
563
564   Cc (N_Unchecked_Type_Conversion, N_Subexpr,
565       (Sy (Subtype_Mark, Node_Id, Default_Empty),
566        Sy (Expression, Node_Id, Default_Empty),
567        Sm (Kill_Range_Check, Flag),
568        Sm (No_Truncation, Flag)),
569       Nmake_Assert => "True or else Nkind (Expression) /= N_Unchecked_Type_Conversion");
570--       Nmake_Assert => "Nkind (Expression) /= N_Unchecked_Type_Conversion");
571   --  Assert that we don't have unchecked conversions of unchecked
572   --  conversions; if Expression might be an unchecked conversion,
573   --  then Tbuild.Unchecked_Convert_To should be used.
574
575   Cc (N_Subtype_Indication, N_Has_Etype,
576       (Sy (Subtype_Mark, Node_Id, Default_Empty),
577        Sy (Constraint, Node_Id),
578        Sm (Must_Not_Freeze, Flag)));
579
580   Ab (N_Declaration, Node_Kind);
581   --  Note: this includes all constructs normally thought of as declarations
582   --  except those that are separately grouped in N_Later_Decl_Item. But
583   --  Declaration_Node may return yet more node types; see N_Is_Decl below.
584
585   Cc (N_Component_Declaration, N_Declaration,
586       (Sy (Defining_Identifier, Node_Id),
587        Sy (Component_Definition, Node_Id),
588        Sy (Expression, Node_Id, Default_Empty),
589        Sm (More_Ids, Flag),
590        Sm (Prev_Ids, Flag)));
591
592   Cc (N_Entry_Declaration, N_Declaration,
593       (Sy (Defining_Identifier, Node_Id),
594        Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty),
595        Sy (Parameter_Specifications, List_Id, Default_No_List),
596        Sy (Must_Override, Flag),
597        Sy (Must_Not_Override, Flag),
598        Sm (Corresponding_Body, Node_Id)));
599
600   Cc (N_Expression_Function, N_Declaration,
601       (Sy (Specification, Node_Id),
602        Sy (Expression, Node_Id, Default_Empty),
603        Sm (Corresponding_Spec, Node_Id)));
604
605   Cc (N_Formal_Object_Declaration, N_Declaration,
606       (Sy (Defining_Identifier, Node_Id),
607        Sy (In_Present, Flag),
608        Sy (Out_Present, Flag),
609        Sy (Null_Exclusion_Present, Flag, Default_False),
610        Sy (Subtype_Mark, Node_Id, Default_Empty),
611        Sy (Access_Definition, Node_Id, Default_Empty),
612        Sy (Default_Expression, Node_Id, Default_Empty),
613        Sm (More_Ids, Flag),
614        Sm (Prev_Ids, Flag)));
615
616   Cc (N_Formal_Type_Declaration, N_Declaration,
617       (Sy (Defining_Identifier, Node_Id),
618        Sy (Formal_Type_Definition, Node_Id),
619        Sy (Discriminant_Specifications, List_Id, Default_No_List),
620        Sy (Unknown_Discriminants_Present, Flag),
621        Sy (Default_Subtype_Mark, Node_Id)));
622
623   Cc (N_Full_Type_Declaration, N_Declaration,
624       (Sy (Defining_Identifier, Node_Id),
625        Sy (Discriminant_Specifications, List_Id, Default_No_List),
626        Sy (Type_Definition, Node_Id),
627        Sm (Discr_Check_Funcs_Built, Flag),
628        Sm (Incomplete_View, Node_Id)));
629
630   Cc (N_Incomplete_Type_Declaration, N_Declaration,
631       (Sy (Defining_Identifier, Node_Id),
632        Sy (Discriminant_Specifications, List_Id, Default_No_List),
633        Sy (Unknown_Discriminants_Present, Flag),
634        Sy (Tagged_Present, Flag),
635        Sm (Premature_Use, Node_Id)));
636
637   Cc (N_Iterator_Specification, N_Declaration,
638       (Sy (Defining_Identifier, Node_Id),
639        Sy (Name, Node_Id, Default_Empty),
640        Sy (Reverse_Present, Flag),
641        Sy (Of_Present, Flag),
642        Sy (Iterator_Filter, Node_Id, Default_Empty),
643        Sy (Subtype_Indication, Node_Id, Default_Empty)));
644
645   Cc (N_Loop_Parameter_Specification, N_Declaration,
646       (Sy (Defining_Identifier, Node_Id),
647        Sy (Reverse_Present, Flag),
648        Sy (Iterator_Filter, Node_Id, Default_Empty),
649        Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty)));
650
651   Cc (N_Object_Declaration, N_Declaration,
652       (Sy (Defining_Identifier, Node_Id),
653        Sy (Aliased_Present, Flag),
654        Sy (Constant_Present, Flag),
655        Sy (Null_Exclusion_Present, Flag, Default_False),
656        Sy (Object_Definition, Node_Id),
657        Sy (Expression, Node_Id, Default_Empty),
658        Sy (Has_Init_Expression, Flag),
659        Sm (Assignment_OK, Flag),
660        Sm (Corresponding_Generic_Association, Node_Id),
661        Sm (Exception_Junk, Flag),
662        Sm (Handler_List_Entry, Node_Id),
663        Sm (Is_Subprogram_Descriptor, Flag),
664        Sm (More_Ids, Flag),
665        Sm (No_Initialization, Flag),
666        Sm (Prev_Ids, Flag),
667        Sm (Suppress_Assignment_Checks, Flag)));
668
669   Cc (N_Protected_Type_Declaration, N_Declaration,
670       (Sy (Defining_Identifier, Node_Id),
671        Sy (Discriminant_Specifications, List_Id, Default_No_List),
672        Sy (Interface_List, List_Id, Default_No_List),
673        Sy (Protected_Definition, Node_Id),
674        Sm (Corresponding_Body, Node_Id)));
675
676   Cc (N_Private_Extension_Declaration, N_Declaration,
677       (Sy (Defining_Identifier, Node_Id),
678        Sy (Discriminant_Specifications, List_Id, Default_No_List),
679        Sy (Unknown_Discriminants_Present, Flag),
680        Sy (Abstract_Present, Flag),
681        Sy (Limited_Present, Flag),
682        Sy (Synchronized_Present, Flag),
683        Sy (Subtype_Indication, Node_Id, Default_Empty),
684        Sy (Interface_List, List_Id, Default_No_List),
685        Sm (Uninitialized_Variable, Node_Id)));
686
687   Cc (N_Private_Type_Declaration, N_Declaration,
688       (Sy (Defining_Identifier, Node_Id),
689        Sy (Discriminant_Specifications, List_Id, Default_No_List),
690        Sy (Unknown_Discriminants_Present, Flag),
691        Sy (Abstract_Present, Flag),
692        Sy (Tagged_Present, Flag),
693        Sy (Limited_Present, Flag)));
694
695   Cc (N_Subtype_Declaration, N_Declaration,
696       (Sy (Defining_Identifier, Node_Id),
697        Sy (Null_Exclusion_Present, Flag, Default_False),
698        Sy (Subtype_Indication, Node_Id, Default_Empty),
699        Sm (Exception_Junk, Flag),
700        Sm (Generic_Parent_Type, Node_Id)));
701
702   Ab (N_Subprogram_Specification, N_Declaration,
703       (Sm (Generic_Parent, Node_Id)));
704
705   Cc (N_Function_Specification, N_Subprogram_Specification,
706       (Sy (Defining_Unit_Name, Node_Id),
707        Sy (Parameter_Specifications, List_Id, Default_No_List),
708        Sy (Null_Exclusion_Present, Flag, Default_False),
709        Sy (Result_Definition, Node_Id),
710        Sy (Must_Override, Flag),
711        Sy (Must_Not_Override, Flag)));
712
713   Cc (N_Procedure_Specification, N_Subprogram_Specification,
714       (Sy (Defining_Unit_Name, Node_Id),
715        Sy (Parameter_Specifications, List_Id, Default_No_List),
716        Sy (Null_Present, Flag),
717        Sy (Must_Override, Flag),
718        Sy (Must_Not_Override, Flag),
719        Sm (Null_Statement, Node_Id)));
720
721   Ab (N_Access_To_Subprogram_Definition, Node_Kind);
722
723   Cc (N_Access_Function_Definition, N_Access_To_Subprogram_Definition,
724       (Sy (Null_Exclusion_Present, Flag, Default_False),
725        Sy (Null_Exclusion_In_Return_Present, Flag),
726        Sy (Protected_Present, Flag),
727        Sy (Parameter_Specifications, List_Id, Default_No_List),
728        Sy (Result_Definition, Node_Id)));
729
730   Cc (N_Access_Procedure_Definition, N_Access_To_Subprogram_Definition,
731       (Sy (Null_Exclusion_Present, Flag, Default_False),
732        Sy (Protected_Present, Flag),
733        Sy (Parameter_Specifications, List_Id, Default_No_List)));
734
735   Ab (N_Later_Decl_Item, Node_Kind);
736   --  Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes
737   --  only those items which can appear as later declarative items. This also
738   --  includes N_Implicit_Label_Declaration which is not specifically in the
739   --  grammar but may appear as a valid later declarative items. It does NOT
740   --  include N_Pragma which can also appear among later declarative items.
741   --  It does however include N_Protected_Body, which is a bit peculiar, but
742   --  harmless since this cannot appear in Ada 83 mode anyway.
743
744   Cc (N_Task_Type_Declaration, N_Later_Decl_Item,
745       (Sy (Defining_Identifier, Node_Id),
746        Sy (Discriminant_Specifications, List_Id, Default_No_List),
747        Sy (Interface_List, List_Id, Default_No_List),
748        Sy (Task_Definition, Node_Id, Default_Empty),
749        Sm (Corresponding_Body, Node_Id)));
750
751   Ab (N_Body_Stub, N_Later_Decl_Item,
752       (Sm (Corresponding_Body, Node_Id),
753        Sm (Corresponding_Spec_Of_Stub, Node_Id),
754        Sm (Library_Unit, Node_Id)));
755
756   Cc (N_Package_Body_Stub, N_Body_Stub,
757       (Sy (Defining_Identifier, Node_Id)));
758
759   Cc (N_Protected_Body_Stub, N_Body_Stub,
760       (Sy (Defining_Identifier, Node_Id)));
761
762   Cc (N_Subprogram_Body_Stub, N_Body_Stub,
763       (Sy (Specification, Node_Id)));
764
765   Cc (N_Task_Body_Stub, N_Body_Stub,
766       (Sy (Defining_Identifier, Node_Id)));
767
768   Ab (N_Generic_Instantiation, N_Later_Decl_Item,
769       (Sm (Instance_Spec, Node_Id),
770        Sm (Is_Declaration_Level_Node, Flag),
771        Sm (Is_Elaboration_Checks_OK_Node, Flag),
772        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
773        Sm (Is_Known_Guaranteed_ABE, Flag),
774        Sm (Is_SPARK_Mode_On_Node, Flag),
775        Sm (Parent_Spec, Node_Id)));
776
777   Ab (N_Subprogram_Instantiation, N_Generic_Instantiation);
778
779   Cc (N_Function_Instantiation, N_Subprogram_Instantiation,
780       (Sy (Defining_Unit_Name, Node_Id),
781        Sy (Name, Node_Id, Default_Empty),
782        Sy (Generic_Associations, List_Id, Default_No_List),
783        Sy (Must_Override, Flag),
784        Sy (Must_Not_Override, Flag)));
785
786   Cc (N_Procedure_Instantiation, N_Subprogram_Instantiation,
787       (Sy (Defining_Unit_Name, Node_Id),
788        Sy (Name, Node_Id, Default_Empty),
789        Sy (Generic_Associations, List_Id, Default_No_List),
790        Sy (Must_Override, Flag),
791        Sy (Must_Not_Override, Flag)));
792
793   Cc (N_Package_Instantiation, N_Generic_Instantiation,
794       (Sy (Defining_Unit_Name, Node_Id),
795        Sy (Name, Node_Id, Default_Empty),
796        Sy (Generic_Associations, List_Id, Default_No_List)));
797
798   Ab (N_Proper_Body, N_Later_Decl_Item,
799       (Sm (Corresponding_Spec, Node_Id),
800        Sm (Was_Originally_Stub, Flag)));
801
802   Ab (N_Unit_Body, N_Proper_Body);
803
804   Cc (N_Package_Body, N_Unit_Body,
805       (Sy (Defining_Unit_Name, Node_Id),
806        Sy (Declarations, List_Id, Default_No_List),
807        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty)));
808
809   Cc (N_Subprogram_Body, N_Unit_Body,
810       (Sy (Specification, Node_Id),
811        Sy (Declarations, List_Id, Default_No_List),
812        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
813        Sy (Bad_Is_Detected, Flag),
814        Sm (Activation_Chain_Entity, Node_Id),
815        Sm (Acts_As_Spec, Flag),
816        Sm (Corresponding_Entry_Body, Node_Id),
817        Sm (Do_Storage_Check, Flag),
818        Sm (Has_Relative_Deadline_Pragma, Flag),
819        Sm (Is_Entry_Barrier_Function, Flag),
820        Sm (Is_Protected_Subprogram_Body, Flag),
821        Sm (Is_Task_Body_Procedure, Flag),
822        Sm (Is_Task_Master, Flag),
823        Sm (Was_Attribute_Reference, Flag),
824        Sm (Was_Expression_Function, Flag)));
825
826   Cc (N_Protected_Body, N_Proper_Body,
827       (Sy (Defining_Identifier, Node_Id),
828        Sy (Declarations, List_Id, Default_No_List),
829        Sy (End_Label, Node_Id, Default_Empty)));
830
831   Cc (N_Task_Body, N_Proper_Body,
832       (Sy (Defining_Identifier, Node_Id),
833        Sy (Declarations, List_Id, Default_No_List),
834        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
835        Sm (Activation_Chain_Entity, Node_Id),
836        Sm (Is_Task_Master, Flag)));
837
838   Cc (N_Implicit_Label_Declaration, N_Later_Decl_Item,
839       (Sy (Defining_Identifier, Node_Id),
840        Sm (Label_Construct, Node_Id)));
841
842   Cc (N_Package_Declaration, N_Later_Decl_Item,
843       (Sy (Specification, Node_Id),
844        Sm (Activation_Chain_Entity, Node_Id),
845        Sm (Corresponding_Body, Node_Id),
846        Sm (Parent_Spec, Node_Id)));
847
848   Cc (N_Single_Task_Declaration, N_Later_Decl_Item,
849       (Sy (Defining_Identifier, Node_Id),
850        Sy (Interface_List, List_Id, Default_No_List),
851        Sy (Task_Definition, Node_Id, Default_Empty)));
852
853   Cc (N_Subprogram_Declaration, N_Later_Decl_Item,
854       (Sy (Specification, Node_Id),
855        Sm (Body_To_Inline, Node_Id),
856        Sm (Corresponding_Body, Node_Id),
857        Sm (Is_Entry_Barrier_Function, Flag),
858        Sm (Is_Task_Body_Procedure, Flag),
859        Sm (Parent_Spec, Node_Id)));
860
861   Cc (N_Use_Package_Clause, N_Later_Decl_Item,
862       (Sy (Name, Node_Id, Default_Empty),
863        Sy (Is_Effective_Use_Clause, Flag),
864        Sm (Entity_Or_Associated_Node, Node_Id), -- just Associated_Node
865        Sm (Hidden_By_Use_Clause, Elist_Id),
866        Sm (More_Ids, Flag),
867        Sm (Next_Use_Clause, Node_Id),
868        Sm (Prev_Ids, Flag),
869        Sm (Prev_Use_Clause, Node_Id)));
870
871   Ab (N_Generic_Declaration, N_Later_Decl_Item,
872       (Sm (Corresponding_Body, Node_Id),
873        Sm (Parent_Spec, Node_Id)));
874
875   Cc (N_Generic_Package_Declaration, N_Generic_Declaration,
876       (Sy (Specification, Node_Id),
877        Sy (Generic_Formal_Declarations, List_Id),
878        Sm (Activation_Chain_Entity, Node_Id)));
879
880   Cc (N_Generic_Subprogram_Declaration, N_Generic_Declaration,
881       (Sy (Specification, Node_Id),
882        Sy (Generic_Formal_Declarations, List_Id)));
883
884   Ab (N_Array_Type_Definition, Node_Kind);
885
886   Cc (N_Constrained_Array_Definition, N_Array_Type_Definition,
887       (Sy (Discrete_Subtype_Definitions, List_Id),
888        Sy (Component_Definition, Node_Id)));
889
890   Cc (N_Unconstrained_Array_Definition, N_Array_Type_Definition,
891       (Sy (Subtype_Marks, List_Id),
892        Sy (Component_Definition, Node_Id)));
893
894   Ab (N_Renaming_Declaration, Node_Kind);
895
896   Cc (N_Exception_Renaming_Declaration, N_Renaming_Declaration,
897       (Sy (Defining_Identifier, Node_Id),
898        Sy (Name, Node_Id, Default_Empty)));
899
900   Cc (N_Object_Renaming_Declaration, N_Renaming_Declaration,
901       (Sy (Defining_Identifier, Node_Id),
902        Sy (Null_Exclusion_Present, Flag, Default_False),
903        Sy (Subtype_Mark, Node_Id, Default_Empty),
904        Sy (Access_Definition, Node_Id, Default_Empty),
905        Sy (Name, Node_Id, Default_Empty),
906        Sm (Corresponding_Generic_Association, Node_Id)));
907
908   Cc (N_Package_Renaming_Declaration, N_Renaming_Declaration,
909       (Sy (Defining_Unit_Name, Node_Id),
910        Sy (Name, Node_Id, Default_Empty),
911        Sm (Parent_Spec, Node_Id)));
912
913   Cc (N_Subprogram_Renaming_Declaration, N_Renaming_Declaration,
914       (Sy (Specification, Node_Id),
915        Sy (Name, Node_Id, Default_Empty),
916        Sm (Corresponding_Formal_Spec, Node_Id),
917        Sm (Corresponding_Spec, Node_Id),
918        Sm (From_Default, Flag),
919        Sm (Parent_Spec, Node_Id)));
920
921   Ab (N_Generic_Renaming_Declaration, N_Renaming_Declaration,
922       (Sm (Parent_Spec, Node_Id)));
923
924   Cc (N_Generic_Function_Renaming_Declaration, N_Generic_Renaming_Declaration,
925       (Sy (Defining_Unit_Name, Node_Id),
926        Sy (Name, Node_Id, Default_Empty)));
927
928   Cc (N_Generic_Package_Renaming_Declaration, N_Generic_Renaming_Declaration,
929       (Sy (Defining_Unit_Name, Node_Id),
930        Sy (Name, Node_Id, Default_Empty)));
931
932   Cc (N_Generic_Procedure_Renaming_Declaration, N_Generic_Renaming_Declaration,
933       (Sy (Defining_Unit_Name, Node_Id),
934        Sy (Name, Node_Id, Default_Empty)));
935
936   Ab (N_Statement_Other_Than_Procedure_Call, Node_Kind);
937   --  Note that this includes all statement types except for the cases of the
938   --  N_Procedure_Call_Statement which is considered to be a subexpression
939   --  (since overloading is possible, so it needs to go through the normal
940   --  overloading resolution for expressions).
941
942   Cc (N_Abort_Statement, N_Statement_Other_Than_Procedure_Call,
943       (Sy (Names, List_Id)));
944
945   Cc (N_Accept_Statement, N_Statement_Other_Than_Procedure_Call,
946       (Sy (Entry_Direct_Name, Node_Id),
947        Sy (Entry_Index, Node_Id, Default_Empty),
948        Sy (Parameter_Specifications, List_Id, Default_No_List),
949        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
950        Sy (Declarations, List_Id, Default_No_List)));
951
952   Cc (N_Assignment_Statement, N_Statement_Other_Than_Procedure_Call,
953       (Sy (Name, Node_Id, Default_Empty),
954        Sy (Expression, Node_Id, Default_Empty),
955        Sm (Backwards_OK, Flag),
956        Sm (Componentwise_Assignment, Flag),
957        Sm (Do_Discriminant_Check, Flag),
958        Sm (Do_Length_Check, Flag),
959        Sm (Forwards_OK, Flag),
960        Sm (Has_Target_Names, Flag),
961        Sm (Is_Elaboration_Checks_OK_Node, Flag),
962        Sm (Is_Elaboration_Code, Flag),
963        Sm (Is_SPARK_Mode_On_Node, Flag),
964        Sm (No_Ctrl_Actions, Flag),
965        Sm (Suppress_Assignment_Checks, Flag)));
966
967   Cc (N_Asynchronous_Select, N_Statement_Other_Than_Procedure_Call,
968       (Sy (Triggering_Alternative, Node_Id),
969        Sy (Abortable_Part, Node_Id)));
970
971   Cc (N_Block_Statement, N_Statement_Other_Than_Procedure_Call,
972       (Sy (Identifier, Node_Id, Default_Empty),
973        Sy (Declarations, List_Id, Default_No_List),
974        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
975        Sy (Has_Created_Identifier, Flag),
976        Sy (Is_Asynchronous_Call_Block, Flag),
977        Sy (Is_Task_Allocation_Block, Flag),
978        Sm (Activation_Chain_Entity, Node_Id),
979        Sm (Cleanup_Actions, List_Id),
980        Sm (Exception_Junk, Flag),
981        Sm (Is_Abort_Block, Flag),
982        Sm (Is_Finalization_Wrapper, Flag),
983        Sm (Is_Initialization_Block, Flag),
984        Sm (Is_Task_Master, Flag)));
985
986   Cc (N_Case_Statement, N_Statement_Other_Than_Procedure_Call,
987       (Sy (Expression, Node_Id, Default_Empty),
988        Sy (Alternatives, List_Id, Default_No_List),
989        Sy (End_Span, Unat, Default_Uint_0),
990        Sm (From_Conditional_Expression, Flag)));
991
992   Cc (N_Code_Statement, N_Statement_Other_Than_Procedure_Call,
993       (Sy (Expression, Node_Id, Default_Empty)));
994
995   Cc (N_Compound_Statement, N_Statement_Other_Than_Procedure_Call,
996       (Sy (Actions, List_Id, Default_No_List)));
997
998   Cc (N_Conditional_Entry_Call, N_Statement_Other_Than_Procedure_Call,
999       (Sy (Entry_Call_Alternative, Node_Id),
1000        Sy (Else_Statements, List_Id, Default_No_List)));
1001
1002   Ab (N_Delay_Statement, N_Statement_Other_Than_Procedure_Call);
1003
1004   Cc (N_Delay_Relative_Statement, N_Delay_Statement,
1005       (Sy (Expression, Node_Id, Default_Empty)));
1006
1007   Cc (N_Delay_Until_Statement, N_Delay_Statement,
1008       (Sy (Expression, Node_Id, Default_Empty)));
1009
1010   Cc (N_Entry_Call_Statement, N_Statement_Other_Than_Procedure_Call,
1011       (Sy (Name, Node_Id, Default_Empty),
1012        Sy (Parameter_Associations, List_Id, Default_No_List),
1013        Sm (First_Named_Actual, Node_Id),
1014        Sm (Is_Elaboration_Checks_OK_Node, Flag),
1015        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
1016        Sm (Is_SPARK_Mode_On_Node, Flag)));
1017
1018   Cc (N_Free_Statement, N_Statement_Other_Than_Procedure_Call,
1019       (Sy (Expression, Node_Id, Default_Empty),
1020        Sm (Actual_Designated_Subtype, Node_Id),
1021        Sm (Procedure_To_Call, Node_Id),
1022        Sm (Storage_Pool, Node_Id)));
1023
1024   Cc (N_Goto_Statement, N_Statement_Other_Than_Procedure_Call,
1025       (Sy (Name, Node_Id, Default_Empty),
1026        Sm (Exception_Junk, Flag)));
1027
1028   Cc (N_Goto_When_Statement, N_Statement_Other_Than_Procedure_Call,
1029       (Sy (Name, Node_Id, Default_Empty),
1030        Sy (Condition, Node_Id, Default_Empty)));
1031
1032   Cc (N_Loop_Statement, N_Statement_Other_Than_Procedure_Call,
1033       (Sy (Identifier, Node_Id, Default_Empty),
1034        Sy (Iteration_Scheme, Node_Id, Default_Empty),
1035        Sy (Statements, List_Id, Default_Empty_List),
1036        Sy (End_Label, Node_Id, Default_Empty),
1037        Sy (Has_Created_Identifier, Flag),
1038        Sy (Is_Null_Loop, Flag),
1039        Sy (Suppress_Loop_Warnings, Flag)));
1040
1041   Cc (N_Null_Statement, N_Statement_Other_Than_Procedure_Call,
1042       (Sm (Next_Rep_Item, Node_Id)));
1043
1044   Cc (N_Raise_Statement, N_Statement_Other_Than_Procedure_Call,
1045       (Sy (Name, Node_Id, Default_Empty),
1046        Sy (Expression, Node_Id, Default_Empty),
1047        Sm (From_At_End, Flag)));
1048
1049   Cc (N_Raise_When_Statement, N_Statement_Other_Than_Procedure_Call,
1050       (Sy (Name, Node_Id, Default_Empty),
1051        Sy (Expression, Node_Id, Default_Empty),
1052        Sy (Condition, Node_Id, Default_Empty)));
1053
1054   Cc (N_Requeue_Statement, N_Statement_Other_Than_Procedure_Call,
1055       (Sy (Name, Node_Id, Default_Empty),
1056        Sy (Abort_Present, Flag),
1057        Sm (Is_Elaboration_Checks_OK_Node, Flag),
1058        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
1059        Sm (Is_SPARK_Mode_On_Node, Flag)));
1060
1061   Cc (N_Simple_Return_Statement, N_Statement_Other_Than_Procedure_Call,
1062       (Sy (Expression, Node_Id, Default_Empty),
1063        Sm (By_Ref, Flag),
1064        Sm (Comes_From_Extended_Return_Statement, Flag),
1065        Sm (Procedure_To_Call, Node_Id),
1066        Sm (Return_Statement_Entity, Node_Id),
1067        Sm (Storage_Pool, Node_Id)));
1068
1069   Cc (N_Extended_Return_Statement, N_Statement_Other_Than_Procedure_Call,
1070       (Sy (Return_Object_Declarations, List_Id),
1071        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
1072        Sm (By_Ref, Flag),
1073        Sm (Procedure_To_Call, Node_Id),
1074        Sm (Return_Statement_Entity, Node_Id),
1075        Sm (Storage_Pool, Node_Id)));
1076
1077   Cc (N_Return_When_Statement, N_Statement_Other_Than_Procedure_Call,
1078       (Sy (Expression, Node_Id, Default_Empty),
1079        Sy (Condition, Node_Id, Default_Empty)));
1080
1081   Cc (N_Selective_Accept, N_Statement_Other_Than_Procedure_Call,
1082       (Sy (Select_Alternatives, List_Id),
1083        Sy (Else_Statements, List_Id, Default_No_List)));
1084
1085   Cc (N_Timed_Entry_Call, N_Statement_Other_Than_Procedure_Call,
1086       (Sy (Entry_Call_Alternative, Node_Id),
1087        Sy (Delay_Alternative, Node_Id)));
1088
1089   Cc (N_Exit_Statement, N_Statement_Other_Than_Procedure_Call,
1090       (Sy (Name, Node_Id, Default_Empty),
1091        Sy (Condition, Node_Id, Default_Empty),
1092        Sm (Next_Exit_Statement, Node_Id)));
1093
1094   Cc (N_If_Statement, N_Statement_Other_Than_Procedure_Call,
1095       (Sy (Condition, Node_Id, Default_Empty),
1096        Sy (Then_Statements, List_Id),
1097        Sy (Elsif_Parts, List_Id, Default_No_List),
1098        Sy (Else_Statements, List_Id, Default_No_List),
1099        Sy (End_Span, Unat, Default_Uint_0),
1100        Sm (From_Conditional_Expression, Flag)));
1101
1102   Cc (N_Accept_Alternative, Node_Kind,
1103       (Sy (Accept_Statement, Node_Id),
1104        Sy (Condition, Node_Id, Default_Empty),
1105        Sy (Statements, List_Id, Default_Empty_List),
1106        Sy (Pragmas_Before, List_Id, Default_No_List),
1107        Sm (Accept_Handler_Records, List_Id)));
1108
1109   Cc (N_Delay_Alternative, Node_Kind,
1110       (Sy (Delay_Statement, Node_Id),
1111        Sy (Condition, Node_Id, Default_Empty),
1112        Sy (Statements, List_Id, Default_Empty_List),
1113        Sy (Pragmas_Before, List_Id, Default_No_List)));
1114
1115   Cc (N_Elsif_Part, Node_Kind,
1116       (Sy (Condition, Node_Id, Default_Empty),
1117        Sy (Then_Statements, List_Id),
1118        Sm (Condition_Actions, List_Id)));
1119
1120   Cc (N_Entry_Body_Formal_Part, Node_Kind,
1121       (Sy (Entry_Index_Specification, Node_Id, Default_Empty),
1122        Sy (Parameter_Specifications, List_Id, Default_No_List),
1123        Sy (Condition, Node_Id, Default_Empty)));
1124
1125   Cc (N_Iteration_Scheme, Node_Kind,
1126       (Sy (Condition, Node_Id, Default_Empty),
1127        Sy (Iterator_Specification, Node_Id, Default_Empty),
1128        Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
1129        Sm (Condition_Actions, List_Id)));
1130
1131   Cc (N_Terminate_Alternative, Node_Kind,
1132       (Sy (Condition, Node_Id, Default_Empty),
1133        Sy (Pragmas_Before, List_Id, Default_No_List),
1134        Sy (Pragmas_After, List_Id, Default_No_List)));
1135
1136   Ab (N_Formal_Subprogram_Declaration, Node_Kind);
1137
1138   Cc (N_Formal_Abstract_Subprogram_Declaration, N_Formal_Subprogram_Declaration,
1139       (Sy (Specification, Node_Id),
1140        Sy (Default_Name, Node_Id, Default_Empty),
1141        Sy (Expression, Node_Id, Default_Empty),
1142        Sy (Box_Present, Flag)));
1143
1144   Cc (N_Formal_Concrete_Subprogram_Declaration, N_Formal_Subprogram_Declaration,
1145       (Sy (Specification, Node_Id),
1146        Sy (Default_Name, Node_Id, Default_Empty),
1147        Sy (Expression, Node_Id, Default_Empty),
1148        Sy (Box_Present, Flag)));
1149
1150   Ab (N_Push_Pop_xxx_Label, Node_Kind);
1151
1152   Ab (N_Push_xxx_Label, N_Push_Pop_xxx_Label,
1153       (Sm (Exception_Label, Node_Id)));
1154
1155   Cc (N_Push_Constraint_Error_Label, N_Push_xxx_Label);
1156
1157   Cc (N_Push_Program_Error_Label, N_Push_xxx_Label);
1158
1159   Cc (N_Push_Storage_Error_Label, N_Push_xxx_Label);
1160
1161   Ab (N_Pop_xxx_Label, N_Push_Pop_xxx_Label);
1162
1163   Cc (N_Pop_Constraint_Error_Label, N_Pop_xxx_Label);
1164
1165   Cc (N_Pop_Program_Error_Label, N_Pop_xxx_Label);
1166
1167   Cc (N_Pop_Storage_Error_Label, N_Pop_xxx_Label);
1168
1169   Ab (N_SCIL_Node, Node_Kind,
1170       (Sm (SCIL_Entity, Node_Id)));
1171
1172   Cc (N_SCIL_Dispatch_Table_Tag_Init, N_SCIL_Node);
1173
1174   Cc (N_SCIL_Dispatching_Call, N_SCIL_Node,
1175       (Sm (SCIL_Controlling_Tag, Node_Id),
1176        Sm (SCIL_Target_Prim, Node_Id)));
1177
1178   Cc (N_SCIL_Membership_Test, N_SCIL_Node,
1179       (Sm (SCIL_Tag_Value, Node_Id)));
1180
1181   Cc (N_Abortable_Part, Node_Kind,
1182       (Sy (Statements, List_Id, Default_Empty_List)));
1183
1184   Cc (N_Abstract_Subprogram_Declaration, Node_Kind,
1185       (Sy (Specification, Node_Id)));
1186
1187   Cc (N_Access_Definition, Node_Kind,
1188       (Sy (Null_Exclusion_Present, Flag, Default_False),
1189        Sy (All_Present, Flag),
1190        Sy (Constant_Present, Flag),
1191        Sy (Subtype_Mark, Node_Id, Default_Empty),
1192        Sy (Access_To_Subprogram_Definition, Node_Id, Default_Empty)));
1193
1194   Cc (N_Access_To_Object_Definition, Node_Kind,
1195       (Sy (All_Present, Flag),
1196        Sy (Null_Exclusion_Present, Flag, Default_False),
1197        Sy (Null_Excluding_Subtype, Flag),
1198        Sy (Subtype_Indication, Node_Id, Default_Empty),
1199        Sy (Constant_Present, Flag)));
1200
1201   Cc (N_Aspect_Specification, Node_Kind,
1202       (Sy (Identifier, Node_Id, Default_Empty),
1203        Sy (Expression, Node_Id, Default_Empty),
1204        Sy (Class_Present, Flag),
1205        Sy (Split_PPC, Flag),
1206        Sm (Aspect_On_Partial_View, Flag),
1207        Sm (Aspect_Rep_Item, Node_Id),
1208        Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
1209        Sm (Is_Boolean_Aspect, Flag),
1210        Sm (Is_Checked, Flag),
1211        Sm (Is_Delayed_Aspect, Flag),
1212        Sm (Is_Disabled, Flag),
1213        Sm (Is_Ignored, Flag),
1214        Sm (Next_Rep_Item, Node_Id)));
1215
1216   Cc (N_Call_Marker, Node_Kind,
1217       (Sm (Is_Declaration_Level_Node, Flag),
1218        Sm (Is_Dispatching_Call, Flag),
1219        Sm (Is_Elaboration_Checks_OK_Node, Flag),
1220        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
1221        Sm (Is_Known_Guaranteed_ABE, Flag),
1222        Sm (Is_Preelaborable_Call, Flag),
1223        Sm (Is_Source_Call, Flag),
1224        Sm (Is_SPARK_Mode_On_Node, Flag),
1225        Sm (Target, Node_Id)));
1226
1227   Cc (N_Case_Expression_Alternative, Node_Kind,
1228       (Sm (Actions, List_Id),
1229        Sy (Discrete_Choices, List_Id),
1230        Sy (Expression, Node_Id, Default_Empty),
1231        Sm (Has_SP_Choice, Flag)));
1232
1233   Cc (N_Case_Statement_Alternative, Node_Kind,
1234       (Sy (Discrete_Choices, List_Id),
1235        Sy (Statements, List_Id, Default_Empty_List),
1236        Sm (Has_SP_Choice, Flag),
1237        Sm (Multidefined_Bindings, Flag)));
1238
1239   Cc (N_Compilation_Unit, Node_Kind,
1240       (Sy (Context_Items, List_Id),
1241        Sy (Private_Present, Flag),
1242        Sy (Unit, Node_Id),
1243        Sy (Aux_Decls_Node, Node_Id),
1244        Sm (Acts_As_Spec, Flag),
1245        Sm (Body_Required, Flag),
1246        Sm (Context_Pending, Flag),
1247        Sm (First_Inlined_Subprogram, Node_Id),
1248        Sm (Has_No_Elaboration_Code, Flag),
1249        Sm (Has_Pragma_Suppress_All, Flag),
1250        Sm (Library_Unit, Node_Id),
1251        Sm (Save_Invocation_Graph_Of_Body, Flag)));
1252
1253   Cc (N_Compilation_Unit_Aux, Node_Kind,
1254       (Sy (Declarations, List_Id, Default_No_List),
1255        Sy (Actions, List_Id, Default_No_List),
1256        Sy (Pragmas_After, List_Id, Default_No_List),
1257        Sy (Config_Pragmas, List_Id, Default_Empty_List),
1258        Sm (Default_Storage_Pool, Node_Id)));
1259
1260   Cc (N_Component_Association, Node_Kind,
1261       (Sy (Choices, List_Id),
1262        Sy (Expression, Node_Id, Default_Empty),
1263        Sy (Box_Present, Flag),
1264        Sy (Inherited_Discriminant, Flag),
1265        Sy (Binding_Chars, Name_Id, Default_No_Name),
1266        Sm (Loop_Actions, List_Id),
1267        Sm (Was_Default_Init_Box_Association, Flag)));
1268
1269   Cc (N_Component_Definition, Node_Kind,
1270       (Sy (Aliased_Present, Flag),
1271        Sy (Null_Exclusion_Present, Flag, Default_False),
1272        Sy (Subtype_Indication, Node_Id, Default_Empty),
1273        Sy (Access_Definition, Node_Id, Default_Empty)));
1274
1275   Cc (N_Component_List, Node_Kind,
1276       (Sy (Component_Items, List_Id),
1277        Sy (Variant_Part, Node_Id, Default_Empty),
1278        Sy (Null_Present, Flag)));
1279
1280   Cc (N_Contract, Node_Kind,
1281       (Sm (Classifications, Node_Id),
1282        Sm (Contract_Test_Cases, Node_Id),
1283        Sm (Is_Expanded_Contract, Flag),
1284        Sm (Pre_Post_Conditions, Node_Id)));
1285
1286   Cc (N_Derived_Type_Definition, Node_Kind,
1287       (Sy (Abstract_Present, Flag),
1288        Sy (Null_Exclusion_Present, Flag, Default_False),
1289        Sy (Subtype_Indication, Node_Id, Default_Empty),
1290        Sy (Record_Extension_Part, Node_Id, Default_Empty),
1291        Sy (Limited_Present, Flag),
1292        Sy (Task_Present, Flag),
1293        Sy (Protected_Present, Flag),
1294        Sy (Synchronized_Present, Flag),
1295        Sy (Interface_List, List_Id, Default_No_List),
1296        Sy (Interface_Present, Flag)));
1297
1298   Cc (N_Decimal_Fixed_Point_Definition, Node_Kind,
1299       (Sy (Delta_Expression, Node_Id),
1300        Sy (Digits_Expression, Node_Id),
1301        Sy (Real_Range_Specification, Node_Id, Default_Empty)));
1302
1303   Cc (N_Defining_Program_Unit_Name, Node_Kind,
1304       (Sy (Name, Node_Id, Default_Empty),
1305        Sy (Defining_Identifier, Node_Id)));
1306
1307   Cc (N_Delta_Constraint, Node_Kind,
1308       (Sy (Delta_Expression, Node_Id),
1309        Sy (Range_Constraint, Node_Id, Default_Empty)));
1310
1311   Cc (N_Designator, Node_Kind,
1312       (Sy (Name, Node_Id, Default_Empty),
1313        Sy (Identifier, Node_Id, Default_Empty)));
1314
1315   Cc (N_Digits_Constraint, Node_Kind,
1316       (Sy (Digits_Expression, Node_Id),
1317        Sy (Range_Constraint, Node_Id, Default_Empty)));
1318
1319   Cc (N_Discriminant_Association, Node_Kind,
1320       (Sy (Selector_Names, List_Id),
1321        Sy (Expression, Node_Id, Default_Empty)));
1322
1323   Cc (N_Discriminant_Specification, Node_Kind,
1324       (Sy (Defining_Identifier, Node_Id),
1325        Sy (Null_Exclusion_Present, Flag, Default_False),
1326        Sy (Discriminant_Type, Node_Id),
1327        Sy (Expression, Node_Id, Default_Empty),
1328        Sm (More_Ids, Flag),
1329        Sm (Prev_Ids, Flag)));
1330
1331   Cc (N_Enumeration_Type_Definition, Node_Kind,
1332       (Sy (Literals, List_Id),
1333        Sy (End_Label, Node_Id, Default_Empty)));
1334
1335   Cc (N_Entry_Body, Node_Kind,
1336       (Sy (Defining_Identifier, Node_Id),
1337        Sy (Entry_Body_Formal_Part, Node_Id),
1338        Sy (Declarations, List_Id, Default_No_List),
1339        Sy (Handled_Statement_Sequence, Node_Id, Default_Empty),
1340        Sm (Activation_Chain_Entity, Node_Id)));
1341
1342   Cc (N_Entry_Call_Alternative, Node_Kind,
1343       (Sy (Entry_Call_Statement, Node_Id),
1344        Sy (Statements, List_Id, Default_Empty_List),
1345        Sy (Pragmas_Before, List_Id, Default_No_List)));
1346
1347   Cc (N_Entry_Index_Specification, Node_Kind,
1348       (Sy (Defining_Identifier, Node_Id),
1349        Sy (Discrete_Subtype_Definition, Node_Id, Default_Empty)));
1350
1351   Cc (N_Exception_Declaration, N_Declaration,
1352       (Sy (Defining_Identifier, Node_Id),
1353        Sm (Expression, Node_Id),
1354        Sm (More_Ids, Flag),
1355        Sm (Prev_Ids, Flag),
1356        Sm (Renaming_Exception, Node_Id)));
1357
1358   Cc (N_Exception_Handler, Node_Kind,
1359       (Sy (Choice_Parameter, Node_Id, Default_Empty),
1360        Sy (Exception_Choices, List_Id),
1361        Sy (Statements, List_Id, Default_Empty_List),
1362        Sm (Exception_Label, Node_Id),
1363        Sm (Has_Local_Raise, Flag),
1364        Sm (Local_Raise_Not_OK, Flag),
1365        Sm (Local_Raise_Statements, Elist_Id)));
1366
1367   Cc (N_Floating_Point_Definition, Node_Kind,
1368       (Sy (Digits_Expression, Node_Id),
1369        Sy (Real_Range_Specification, Node_Id, Default_Empty)));
1370
1371   Cc (N_Formal_Decimal_Fixed_Point_Definition, Node_Kind);
1372
1373   Cc (N_Formal_Derived_Type_Definition, Node_Kind,
1374       (Sy (Subtype_Mark, Node_Id, Default_Empty),
1375        Sy (Private_Present, Flag),
1376        Sy (Abstract_Present, Flag),
1377        Sy (Limited_Present, Flag),
1378        Sy (Synchronized_Present, Flag),
1379        Sy (Interface_List, List_Id, Default_No_List)));
1380
1381   Cc (N_Formal_Discrete_Type_Definition, Node_Kind);
1382
1383   Cc (N_Formal_Floating_Point_Definition, Node_Kind);
1384
1385   Cc (N_Formal_Modular_Type_Definition, Node_Kind);
1386
1387   Cc (N_Formal_Ordinary_Fixed_Point_Definition, Node_Kind);
1388
1389   Cc (N_Formal_Package_Declaration, Node_Kind,
1390       (Sy (Defining_Identifier, Node_Id),
1391        Sy (Name, Node_Id, Default_Empty),
1392        Sy (Generic_Associations, List_Id, Default_No_List),
1393        Sy (Box_Present, Flag),
1394        Sm (Instance_Spec, Node_Id),
1395        Sm (Is_Known_Guaranteed_ABE, Flag)));
1396
1397   Cc (N_Formal_Private_Type_Definition, Node_Kind,
1398       (Sy (Abstract_Present, Flag),
1399        Sy (Tagged_Present, Flag),
1400        Sy (Limited_Present, Flag),
1401        Sm (Uninitialized_Variable, Node_Id)));
1402
1403   Cc (N_Formal_Incomplete_Type_Definition, Node_Kind,
1404       (Sy (Tagged_Present, Flag)));
1405
1406   Cc (N_Formal_Signed_Integer_Type_Definition, Node_Kind);
1407
1408   Cc (N_Freeze_Entity, Node_Kind,
1409       (Sy (Actions, List_Id, Default_No_List),
1410        Sm (Access_Types_To_Process, Elist_Id),
1411        Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
1412        Sm (First_Subtype_Link, Node_Id),
1413        Sm (TSS_Elist, Elist_Id)));
1414
1415   Cc (N_Freeze_Generic_Entity, Node_Kind,
1416        Sm (Entity_Or_Associated_Node, Node_Id)); -- just Entity
1417
1418   Cc (N_Generic_Association, Node_Kind,
1419       (Sy (Selector_Name, Node_Id, Default_Empty),
1420        Sy (Explicit_Generic_Actual_Parameter, Node_Id),
1421        Sy (Box_Present, Flag)));
1422
1423   Cc (N_Handled_Sequence_Of_Statements, Node_Kind,
1424       (Sy (Statements, List_Id, Default_Empty_List),
1425        Sy (End_Label, Node_Id, Default_Empty),
1426        Sy (Exception_Handlers, List_Id, Default_No_List),
1427        Sy (At_End_Proc, Node_Id, Default_Empty),
1428        Sm (First_Real_Statement, Node_Id)));
1429
1430   Cc (N_Index_Or_Discriminant_Constraint, Node_Kind,
1431       (Sy (Constraints, List_Id)));
1432
1433   Cc (N_Iterated_Component_Association, Node_Kind,
1434       (Sy (Defining_Identifier, Node_Id),
1435        Sy (Iterator_Specification, Node_Id, Default_Empty),
1436        Sy (Expression, Node_Id, Default_Empty),
1437        Sy (Discrete_Choices, List_Id),
1438        Sy (Box_Present, Flag),
1439        Sm (Loop_Actions, List_Id)));
1440
1441   Cc (N_Iterated_Element_Association, Node_Kind,
1442       (Sy (Key_Expression, Node_Id),
1443        Sy (Iterator_Specification, Node_Id, Default_Empty),
1444        Sy (Expression, Node_Id, Default_Empty),
1445        Sy (Loop_Parameter_Specification, Node_Id, Default_Empty),
1446        Sy (Box_Present, Flag),
1447        Sm (Loop_Actions, List_Id)));
1448
1449   Cc (N_Itype_Reference, Node_Kind,
1450       (Sm (Itype, Node_Id)));
1451
1452   Cc (N_Label, Node_Kind,
1453       (Sy (Identifier, Node_Id, Default_Empty),
1454        Sm (Exception_Junk, Flag)));
1455
1456   Cc (N_Modular_Type_Definition, Node_Kind,
1457       (Sy (Expression, Node_Id, Default_Empty)));
1458
1459   Cc (N_Number_Declaration, Node_Kind,
1460       (Sy (Defining_Identifier, Node_Id),
1461        Sy (Expression, Node_Id, Default_Empty),
1462        Sm (More_Ids, Flag),
1463        Sm (Prev_Ids, Flag)));
1464
1465   Cc (N_Ordinary_Fixed_Point_Definition, Node_Kind,
1466       (Sy (Delta_Expression, Node_Id),
1467        Sy (Real_Range_Specification, Node_Id, Default_Empty)));
1468
1469   Cc (N_Others_Choice, Node_Kind,
1470       (Sm (All_Others, Flag),
1471        Sm (Others_Discrete_Choices, List_Id)));
1472
1473   Cc (N_Package_Specification, Node_Kind,
1474       (Sy (Defining_Unit_Name, Node_Id),
1475        Sy (Visible_Declarations, List_Id),
1476        Sy (Private_Declarations, List_Id, Default_No_List),
1477        Sy (End_Label, Node_Id, Default_Empty),
1478        Sm (Generic_Parent, Node_Id),
1479        Sm (Limited_View_Installed, Flag)));
1480
1481   Cc (N_Parameter_Association, Node_Kind,
1482       (Sy (Selector_Name, Node_Id, Default_Empty),
1483        Sy (Explicit_Actual_Parameter, Node_Id),
1484        Sm (Is_Accessibility_Actual, Flag),
1485        Sm (Next_Named_Actual, Node_Id)));
1486
1487   Cc (N_Parameter_Specification, Node_Kind,
1488       (Sy (Defining_Identifier, Node_Id),
1489        Sy (Aliased_Present, Flag),
1490        Sy (In_Present, Flag),
1491        Sy (Out_Present, Flag),
1492        Sy (Null_Exclusion_Present, Flag, Default_False),
1493        Sy (Parameter_Type, Node_Id),
1494        Sy (Expression, Node_Id, Default_Empty),
1495        Sm (Default_Expression, Node_Id),
1496        Sm (More_Ids, Flag),
1497        Sm (Prev_Ids, Flag)));
1498
1499   Cc (N_Pragma, Node_Kind,
1500       (Sy (Pragma_Argument_Associations, List_Id, Default_No_List),
1501        Sy (Pragma_Identifier, Node_Id),
1502        Sy (Class_Present, Flag),
1503        Sy (Split_PPC, Flag),
1504        Sm (Corresponding_Aspect, Node_Id),
1505        Sm (From_Aspect_Specification, Flag),
1506        Sm (Import_Interface_Present, Flag),
1507        Sm (Is_Analyzed_Pragma, Flag),
1508        Sm (Is_Checked, Flag),
1509        Sm (Is_Checked_Ghost_Pragma, Flag),
1510        Sm (Is_Delayed_Aspect, Flag),
1511        Sm (Is_Disabled, Flag),
1512        Sm (Is_Generic_Contract_Pragma, Flag),
1513        Sm (Is_Ignored, Flag),
1514        Sm (Is_Ignored_Ghost_Pragma, Flag),
1515        Sm (Is_Inherited_Pragma, Flag),
1516        Sm (Next_Pragma, Node_Id),
1517        Sm (Next_Rep_Item, Node_Id),
1518        Sm (Uneval_Old_Accept, Flag),
1519        Sm (Uneval_Old_Warn, Flag)));
1520
1521   Cc (N_Protected_Definition, Node_Kind,
1522       (Sy (Visible_Declarations, List_Id),
1523        Sy (Private_Declarations, List_Id, Default_No_List),
1524        Sy (End_Label, Node_Id, Default_Empty)));
1525
1526   Cc (N_Range_Constraint, Node_Kind,
1527       (Sy (Range_Expression, Node_Id)));
1528
1529   Cc (N_Real_Range_Specification, Node_Kind,
1530       (Sy (Low_Bound, Node_Id),
1531        Sy (High_Bound, Node_Id)));
1532
1533   Cc (N_Record_Definition, Node_Kind,
1534       (Sy (End_Label, Node_Id, Default_Empty),
1535        Sy (Abstract_Present, Flag),
1536        Sy (Tagged_Present, Flag),
1537        Sy (Limited_Present, Flag),
1538        Sy (Component_List, Node_Id),
1539        Sy (Null_Present, Flag),
1540        Sy (Task_Present, Flag),
1541        Sy (Protected_Present, Flag),
1542        Sy (Synchronized_Present, Flag),
1543        Sy (Interface_Present, Flag),
1544        Sy (Interface_List, List_Id, Default_No_List)));
1545
1546   Cc (N_Signed_Integer_Type_Definition, Node_Kind,
1547       (Sy (Low_Bound, Node_Id),
1548        Sy (High_Bound, Node_Id)));
1549
1550   Cc (N_Single_Protected_Declaration, Node_Kind,
1551       (Sy (Defining_Identifier, Node_Id),
1552        Sy (Interface_List, List_Id, Default_No_List),
1553        Sy (Protected_Definition, Node_Id)));
1554
1555   Cc (N_Subunit, Node_Kind,
1556       (Sy (Name, Node_Id, Default_Empty),
1557        Sy (Proper_Body, Node_Id),
1558        Sm (Corresponding_Stub, Node_Id)));
1559
1560   Cc (N_Task_Definition, Node_Kind,
1561       (Sy (Visible_Declarations, List_Id),
1562        Sy (Private_Declarations, List_Id, Default_No_List),
1563        Sy (End_Label, Node_Id, Default_Empty),
1564        Sm (Has_Relative_Deadline_Pragma, Flag),
1565        Sm (Has_Storage_Size_Pragma, Flag)));
1566
1567   Cc (N_Triggering_Alternative, Node_Kind,
1568       (Sy (Triggering_Statement, Node_Id),
1569        Sy (Statements, List_Id, Default_Empty_List),
1570        Sy (Pragmas_Before, List_Id, Default_No_List)));
1571
1572   Cc (N_Use_Type_Clause, Node_Kind,
1573       (Sy (Subtype_Mark, Node_Id, Default_Empty),
1574        Sy (Is_Effective_Use_Clause, Flag),
1575        Sy (All_Present, Flag),
1576        Sm (Hidden_By_Use_Clause, Elist_Id),
1577        Sm (More_Ids, Flag),
1578        Sm (Next_Use_Clause, Node_Id),
1579        Sm (Prev_Ids, Flag),
1580        Sm (Prev_Use_Clause, Node_Id),
1581        Sm (Used_Operations, Elist_Id)));
1582
1583   Cc (N_Validate_Unchecked_Conversion, Node_Kind,
1584       (Sm (Source_Type, Node_Id),
1585        Sm (Target_Type, Node_Id)));
1586
1587   Cc (N_Variable_Reference_Marker, Node_Kind,
1588       (Sm (Is_Elaboration_Checks_OK_Node, Flag),
1589        Sm (Is_Elaboration_Warnings_OK_Node, Flag),
1590        Sm (Is_Read, Flag),
1591        Sm (Is_SPARK_Mode_On_Node, Flag),
1592        Sm (Is_Write, Flag),
1593        Sm (Target, Node_Id)));
1594
1595   Cc (N_Variant, Node_Kind,
1596       (Sy (Discrete_Choices, List_Id),
1597        Sy (Component_List, Node_Id),
1598        Sm (Dcheck_Function, Node_Id),
1599        Sm (Enclosing_Variant, Node_Id),
1600        Sm (Has_SP_Choice, Flag),
1601        Sm (Present_Expr, Valid_Uint)));
1602
1603   Cc (N_Variant_Part, Node_Kind,
1604       (Sy (Name, Node_Id, Default_Empty),
1605        Sy (Variants, List_Id)));
1606
1607   Cc (N_With_Clause, Node_Kind,
1608       (Sy (Name, Node_Id, Default_Empty),
1609        Sy (Private_Present, Flag),
1610        Sy (Limited_Present, Flag),
1611        Sy (First_Name, Flag, Default_True),
1612        Sy (Last_Name, Flag, Default_True),
1613        Sm (Context_Installed, Flag),
1614        Sm (Corresponding_Spec, Node_Id),
1615        Sm (Elaborate_All_Desirable, Flag),
1616        Sm (Elaborate_All_Present, Flag),
1617        Sm (Elaborate_Desirable, Flag),
1618        Sm (Elaborate_Present, Flag),
1619        Sm (Implicit_With, Flag),
1620        Sm (Library_Unit, Node_Id),
1621        Sm (Limited_View_Installed, Flag),
1622        Sm (Next_Implicit_With, Node_Id),
1623        Sm (No_Entities_Ref_In_Spec, Flag),
1624        Sm (Parent_With, Flag),
1625        Sm (Unreferenced_In_Spec, Flag)));
1626
1627   Cc (N_Unused_At_End, Node_Kind);
1628
1629   --  Union types. These don't fit into the normal parent/child hierarchy
1630   --  above.
1631
1632   Union (N_Has_Chars,
1633          Children =>
1634            (N_Attribute_Definition_Clause,
1635             N_Empty,
1636             N_Pragma_Argument_Association,
1637             N_Error,
1638             N_Entity,
1639             N_Expanded_Name,
1640             N_Identifier,
1641             N_Operator_Symbol,
1642             N_Character_Literal,
1643             N_Op));
1644
1645   Union (N_Has_Condition,
1646          Children =>
1647            (N_Exit_Statement,
1648             N_If_Statement,
1649             N_Accept_Alternative,
1650             N_Delay_Alternative,
1651             N_Elsif_Part,
1652             N_Entry_Body_Formal_Part,
1653             N_Iteration_Scheme,
1654             N_Terminate_Alternative));
1655   --  Nodes with condition fields (does not include N_Raise_xxx_Error)
1656
1657   Union (N_Has_Bounds,
1658          Children =>
1659            (N_Range,
1660             N_Real_Range_Specification,
1661             N_Signed_Integer_Type_Definition));
1662   --  Nodes that have Low_Bound and High_Bound defined
1663
1664   Union (N_Is_Index,
1665          Children =>
1666            (N_Has_Bounds,
1667             N_Has_Entity,
1668             N_Subtype_Indication));
1669   --  Nodes that can be an index of an array
1670
1671   Union (N_Entity_Name,
1672          Children =>
1673            (N_Expanded_Name,
1674             N_Identifier,
1675             N_Operator_Symbol));
1676   --  Nodes that are definitely representing an entity.
1677   --  Some N_Attribute_Reference nodes may also represent an entity. See
1678   --  Is_Entity_Name.
1679
1680   Union (N_Is_Decl,
1681          Children =>
1682            (N_Aggregate,
1683             N_Block_Statement,
1684             N_Declaration,
1685             N_Discriminant_Specification,
1686             N_Entry_Index_Specification,
1687             N_Enumeration_Type_Definition,
1688             N_Exception_Handler,
1689             N_Explicit_Dereference,
1690             N_Expression_With_Actions,
1691             N_Extension_Aggregate,
1692             N_Identifier,
1693             N_Iterated_Component_Association,
1694             N_Later_Decl_Item,
1695             N_Loop_Statement,
1696             N_Null_Statement,
1697             N_Number_Declaration,
1698             N_Package_Specification,
1699             N_Parameter_Specification,
1700             N_Renaming_Declaration,
1701             N_Quantified_Expression));
1702   --  Nodes that can be returned by Declaration_Node; it can also return
1703   --  Empty. Not all of these are true "declarations", but Declaration_Node
1704   --  can return them in some cases.
1705
1706   Union (N_Is_Range,
1707          Children =>
1708            (N_Character_Literal,
1709             N_Entity_Name,
1710             N_Has_Bounds,
1711             N_Integer_Literal,
1712             N_Subtype_Indication));
1713   --  Nodes that can be used to specify a range
1714
1715   Union (N_Is_Case_Choice,
1716          Children =>
1717            (N_Is_Range,
1718             N_Others_Choice));
1719   --  Nodes that can be in the choices of a case statement
1720
1721   Union (N_Is_Exception_Choice,
1722          Children =>
1723            (N_Entity_Name,
1724             N_Others_Choice));
1725   --  Nodes that can be in the choices of an exception handler
1726
1727   Union (N_Alternative,
1728          Children =>
1729            (N_Case_Statement_Alternative,
1730             N_Variant));
1731   --  Nodes that can be alternatives in case contructs
1732
1733end Gen_IL.Gen.Gen_Nodes;
1734