File : atree.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                                A T R E E                                 --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2016, 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.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 with Alloc;
  33 with Sinfo;  use Sinfo;
  34 with Einfo;  use Einfo;
  35 with Namet;  use Namet;
  36 with Types;  use Types;
  37 with Snames; use Snames;
  38 with System; use System;
  39 with Table;
  40 with Uintp;  use Uintp;
  41 with Urealp; use Urealp;
  42 with Unchecked_Conversion;
  43 
  44 package Atree is
  45 
  46 --  This package defines the format of the tree used to represent the Ada
  47 --  program internally. Syntactic and semantic information is combined in
  48 --  this tree. There is no separate symbol table structure.
  49 
  50 --  WARNING: There is a C version of this package. Any changes to this source
  51 --  file must be properly reflected in the C header file atree.h
  52 
  53 --  Package Atree defines the basic structure of the tree and its nodes and
  54 --  provides the basic abstract interface for manipulating the tree. Two other
  55 --  packages use this interface to define the representation of Ada programs
  56 --  using this tree format. The package Sinfo defines the basic representation
  57 --  of the syntactic structure of the program, as output by the parser. The
  58 --  package Einfo defines the semantic information which is added to the tree
  59 --  nodes that represent declared entities (i.e. the information which might
  60 --  typically be described in a separate symbol table structure).
  61 
  62 --  The front end of the compiler first parses the program and generates a
  63 --  tree that is simply a syntactic representation of the program in abstract
  64 --  syntax tree format. Subsequent processing in the front end traverses the
  65 --  tree, transforming it in various ways and adding semantic information.
  66 
  67    ----------------------
  68    -- Size of Entities --
  69    ----------------------
  70 
  71    --  Currently entities are composed of 7 sequentially allocated 32-byte
  72    --  nodes, considered as a single record. The following definition gives
  73    --  the number of extension nodes.
  74 
  75    Num_Extension_Nodes : Node_Id := 6;
  76    --  This value is increased by one if debug flag -gnatd.N is set. This is
  77    --  for testing performance impact of adding a new extension node. We make
  78    --  this of type Node_Id for easy reference in loops using this value.
  79    --  Print_Statistics can be used to display statistics on entities & nodes.
  80    --  Measurements conducted for the 5->6 bump showed an increase from 1.81 to
  81    --  2.01 for the nodes/entities ratio and a 2% increase in compilation time
  82    --  on average for the GCC-based compiler at -O0 on a 32-bit x86 host.
  83 
  84    ----------------------------------------
  85    -- Definitions of Fields in Tree Node --
  86    ----------------------------------------
  87 
  88    --  The representation of the tree is completely hidden, using a functional
  89    --  interface for accessing and modifying the contents of nodes. Logically
  90    --  a node contains a number of fields, much as though the nodes were
  91    --  defined as a record type. The fields in a node are as follows:
  92 
  93    --   Nkind         Indicates the kind of the node. This field is present
  94    --                 in all nodes. The type is Node_Kind, which is declared
  95    --                 in the package Sinfo.
  96 
  97    --   Sloc          Location (Source_Ptr) of the corresponding token
  98    --                 in the Source buffer. The individual node definitions
  99    --                 show which token is referenced by this pointer.
 100 
 101    --   In_List       A flag used to indicate if the node is a member
 102    --                 of a node list.
 103 
 104    --   Rewrite_Ins   A flag set if a node is marked as a rewrite inserted
 105    --                 node as a result of a call to Mark_Rewrite_Insertion.
 106 
 107    --   Paren_Count   A 2-bit count used in sub-expression nodes to indicate
 108    --                 the level of parentheses. The settings are 0,1,2 and
 109    --                 3 for many. If the value is 3, then an auxiliary table
 110    --                 is used to indicate the real value. Set to zero for
 111    --                 non-subexpression nodes.
 112 
 113    --                 Note: the required parentheses surrounding conditional
 114    --                 and quantified expressions count as a level of parens
 115    --                 for this purpose, so e.g. in X := (if A then B else C);
 116    --                 Paren_Count for the right side will be 1.
 117 
 118    --   Comes_From_Source
 119    --                 This flag is present in all nodes. It is set if the
 120    --                 node is built by the scanner or parser, and clear if
 121    --                 the node is built by the analyzer or expander. It
 122    --                 indicates that the node corresponds to a construct
 123    --                 that appears in the original source program.
 124 
 125    --   Analyzed      This flag is present in all nodes. It is set when
 126    --                 a node is analyzed, and is used to avoid analyzing
 127    --                 the same node twice. Analysis includes expansion if
 128    --                 expansion is active, so in this case if the flag is
 129    --                 set it means the node has been analyzed and expanded.
 130 
 131    --   Error_Posted  This flag is present in all nodes. It is set when
 132    --                 an error message is posted which is associated with
 133    --                 the flagged node. This is used to avoid posting more
 134    --                 than one message on the same node.
 135 
 136    --   Field1
 137    --   Field2
 138    --   Field3
 139    --   Field4
 140    --   Field5        Five fields holding Union_Id values
 141 
 142    --   ElistN        Synonym for FieldN typed as Elist_Id (Empty = No_Elist)
 143    --   ListN         Synonym for FieldN typed as List_Id
 144    --   NameN         Synonym for FieldN typed as Name_Id
 145    --   NodeN         Synonym for FieldN typed as Node_Id
 146    --   StrN          Synonym for FieldN typed as String_Id
 147    --   UintN         Synonym for FieldN typed as Uint (Empty = Uint_0)
 148    --   UrealN        Synonym for FieldN typed as Ureal
 149 
 150    --   Note: in the case of ElistN and UintN fields, it is common that we
 151    --   end up with a value of Union_Id'(0) as the default value. This value
 152    --   is meaningless as a Uint or Elist_Id value. We have two choices here.
 153    --   We could require that all Uint and Elist fields be initialized to an
 154    --   appropriate value, but that's error prone, since it would be easy to
 155    --   miss an initialization. So instead we have the retrieval functions
 156    --   generate an appropriate default value (Uint_0 or No_Elist). Probably
 157    --   it would be cleaner to generate No_Uint in the Uint case but we got
 158    --   stuck with representing an "unset" size value as zero early on, and
 159    --   it will take a bit of fiddling to change that ???
 160 
 161    --   Note: the actual usage of FieldN (i.e. whether it contains a Elist_Id,
 162    --   List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal) depends on the
 163    --   value in Nkind. Generally the access to this field is always via the
 164    --   functional interface, so the field names ElistN, ListN, NameN, NodeN,
 165    --   StrN, UintN and UrealN are used only in the bodies of the access
 166    --   functions (i.e. in the bodies of Sinfo and Einfo). These access
 167    --   functions contain debugging code that checks that the use is
 168    --   consistent with Nkind and Ekind values.
 169 
 170    --   However, in specialized circumstances (examples are the circuit in
 171    --   generic instantiation to copy trees, and in the tree dump routine),
 172    --   it is useful to be able to do untyped traversals, and an internal
 173    --   package in Atree allows for direct untyped accesses in such cases.
 174 
 175    --   Flag0         Nineteen Boolean flags (use depends on Nkind and
 176    --   Flag1         Ekind, as described for FieldN). Again the access
 177    --   Flag2         is usually via subprograms in Sinfo and Einfo which
 178    --   Flag3         provide high-level synonyms for these flags, and
 179    --   Flag4         contain debugging code that checks that the values
 180    --   Flag5         in Nkind and Ekind are appropriate for the access.
 181    --   Flag6
 182    --   Flag7
 183    --   Flag8
 184    --   Flag9
 185    --   Flag10
 186    --   Flag11        Note that Flag0-3 are stored separately in the Flags
 187    --   Flag12        table, but that's a detail of the implementation which
 188    --   Flag13        is entirely hidden by the functional interface.
 189    --   Flag14
 190    --   Flag15
 191    --   Flag16
 192    --   Flag17
 193    --   Flag18
 194 
 195    --   Link          For a node, points to the Parent. For a list, points
 196    --                 to the list header. Note that in the latter case, a
 197    --                 client cannot modify the link field. This field is
 198    --                 private to the Atree package (but is also modified
 199    --                 by the Nlists package).
 200 
 201    --  The following additional fields are present in extended nodes used
 202    --  for entities (Nkind in N_Entity).
 203 
 204    --   Ekind         Entity type. This field indicates the type of the
 205    --                 entity, it is of type Entity_Kind which is defined
 206    --                 in package Einfo.
 207 
 208    --   Flag19        299 additional flags
 209    --   ...
 210    --   Flag317
 211 
 212    --   Convention    Entity convention (Convention_Id value)
 213 
 214    --   Field6        Additional Union_Id value stored in tree
 215 
 216    --   Node6         Synonym for Field6 typed as Node_Id
 217    --   Elist6        Synonym for Field6 typed as Elist_Id (Empty = No_Elist)
 218    --   Uint6         Synonym for Field6 typed as Uint (Empty = Uint_0)
 219 
 220    --   Similar definitions for Field7 to Field41 (and also Node7-Node41,
 221    --   Elist7-Elist41, Uint7-Uint41, Ureal7-Ureal41). Note that not all
 222    --   these functions are defined, only the ones that are actually used.
 223 
 224    function Last_Node_Id return Node_Id;
 225    pragma Inline (Last_Node_Id);
 226    --  Returns Id of last allocated node Id
 227 
 228    function Nodes_Address return System.Address;
 229    --  Return address of Nodes table (used in Back_End for Gigi call)
 230 
 231    function Flags_Address return System.Address;
 232    --  Return address of Flags table (used in Back_End for Gigi call)
 233 
 234    function Num_Nodes return Nat;
 235    --  Total number of nodes allocated, where an entity counts as a single
 236    --  node. This count is incremented every time a node or entity is
 237    --  allocated, and decremented every time a node or entity is deleted.
 238    --  This value is used by Xref and by Treepr to allocate hash tables of
 239    --  suitable size for hashing Node_Id values.
 240 
 241    -----------------------
 242    -- Use of Empty Node --
 243    -----------------------
 244 
 245    --  The special Node_Id Empty is used to mark missing fields. Whenever the
 246    --  syntax has an optional component, then the corresponding field will be
 247    --  set to Empty if the component is missing.
 248 
 249    --  Note: Empty is not used to describe an empty list. Instead in this
 250    --  case the node field contains a list which is empty, and these cases
 251    --  should be distinguished (essentially from a type point of view, Empty
 252    --  is a Node, and is thus not a list).
 253 
 254    --  Note: Empty does in fact correspond to an allocated node. Only the
 255    --  Nkind field of this node may be referenced. It contains N_Empty, which
 256    --  uniquely identifies the empty case. This allows the Nkind field to be
 257    --  dereferenced before the check for Empty which is sometimes useful.
 258 
 259    -----------------------
 260    -- Use of Error Node --
 261    -----------------------
 262 
 263    --  The Error node is used during syntactic and semantic analysis to
 264    --  indicate that the corresponding piece of syntactic structure or
 265    --  semantic meaning cannot properly be represented in the tree because
 266    --  of an illegality in the program.
 267 
 268    --  If an Error node is encountered, then you know that a previous
 269    --  illegality has been detected. The proper reaction should be to
 270    --  avoid posting related cascaded error messages, and to propagate
 271    --  the error node if necessary.
 272 
 273    ------------------------
 274    -- Current_Error_Node --
 275    ------------------------
 276 
 277    --  The current error node is a global location indicating the current
 278    --  node that is being processed for the purposes of placing a compiler
 279    --  abort message. This is not necessarily perfectly accurate, it is
 280    --  just a reasonably accurate best guess. It is used to output the
 281    --  source location in the abort message by Comperr, and also to
 282    --  implement the d3 debugging flag. This is also used by Rtsfind
 283    --  to generate error messages for high integrity mode.
 284 
 285    --  There are two ways this gets set. During parsing, when new source
 286    --  nodes are being constructed by calls to New_Node and New_Entity,
 287    --  either one of these calls sets Current_Error_Node to the newly
 288    --  created node. During semantic analysis, this mechanism is not
 289    --  used, and instead Current_Error_Node is set by the subprograms in
 290    --  Debug_A that mark the start and end of analysis/expansion of a
 291    --  node in the tree.
 292 
 293    Current_Error_Node : Node_Id;
 294    --  Node to place error messages
 295 
 296    ------------------
 297    -- Error Counts --
 298    ------------------
 299 
 300    --  The following variables denote the count of errors of various kinds
 301    --  detected in the tree. Note that these might be more logically located
 302    --  in Err_Vars, but we put it to deal with licensing issues (we need this
 303    --  to have the GPL exception licensing, since Check_Error_Detected can
 304    --  be called from units with this licensing).
 305 
 306    Serious_Errors_Detected : Nat := 0;
 307    --  This is a count of errors that are serious enough to stop expansion,
 308    --  and hence to prevent generation of an object file even if the
 309    --  switch -gnatQ is set. Initialized to zero at the start of compilation.
 310    --  Initialized for -gnatVa use, see comment above.
 311 
 312    Total_Errors_Detected : Nat := 0;
 313    --  Number of errors detected so far. Includes count of serious errors and
 314    --  non-serious errors, so this value is always greater than or equal to the
 315    --  Serious_Errors_Detected value. Initialized to zero at the start of
 316    --  compilation. Initialized for -gnatVa use, see comment above.
 317 
 318    Warnings_Detected : Nat := 0;
 319    --  Number of warnings detected. Initialized to zero at the start of
 320    --  compilation. Initialized for -gnatVa use, see comment above. This
 321    --  count includes the count of style and info messages.
 322 
 323    Info_Messages : Nat := 0;
 324    --  Number of info messages generated. Info messages are neved treated as
 325    --  errors (whether from use of the pragma, or the compiler switch -gnatwe).
 326 
 327    Check_Messages : Nat := 0;
 328    --  Number of check messages generated. Check messages are neither warnings
 329    --  nor errors.
 330 
 331    Warnings_Treated_As_Errors : Nat := 0;
 332    --  Number of warnings changed into errors as a result of matching a pattern
 333    --  given in a Warning_As_Error configuration pragma.
 334 
 335    Configurable_Run_Time_Violations : Nat := 0;
 336    --  Count of configurable run time violations so far. This is used to
 337    --  suppress certain cascaded error messages when we know that we may not
 338    --  have fully expanded some items, due to high integrity violations (e.g.
 339    --  the use of constructs not permitted by the library in use, or improper
 340    --  constructs in No_Run_Time mode).
 341 
 342    procedure Check_Error_Detected;
 343    --  When an anomaly is found in the tree, many semantic routines silently
 344    --  bail out, assuming that the anomaly was caused by a previously detected
 345    --  serious error (or configurable run time violation). This routine should
 346    --  be called in these cases, and will raise an exception if no such error
 347    --  has been detected. This ensure that the anomaly is never allowed to go
 348    --  unnoticed.
 349 
 350    -------------------------------
 351    -- Default Setting of Fields --
 352    -------------------------------
 353 
 354    --  Nkind is set to N_Unused_At_Start
 355 
 356    --  Ekind is set to E_Void
 357 
 358    --  Sloc is always set, there is no default value
 359 
 360    --  Field1-5 fields are set to Empty
 361 
 362    --  Field6-41 fields in extended nodes are set to Empty
 363 
 364    --  Parent is set to Empty
 365 
 366    --  All Boolean flag fields are set to False
 367 
 368    --  Note: the value Empty is used in Field1-Field41 to indicate a null node.
 369    --  The usage varies. The common uses are to indicate absence of an optional
 370    --  clause or a completely unused Field1-35 field.
 371 
 372    -------------------------------------
 373    -- Use of Synonyms for Node Fields --
 374    -------------------------------------
 375 
 376    --  A subpackage Atree.Unchecked_Access provides routines for reading and
 377    --  writing the fields defined above (Field1-35, Node1-35, Flag0-317 etc).
 378    --  These unchecked access routines can be used for untyped traversals.
 379    --  In addition they are used in the implementations of the Sinfo and
 380    --  Einfo packages. These packages both provide logical synonyms for
 381    --  the generic fields, together with an appropriate set of access routines.
 382    --  Normally access to information within tree nodes uses these synonyms,
 383    --  providing a high level typed interface to the tree information.
 384 
 385    --------------------------------------------------
 386    -- Node Allocation and Modification Subprograms --
 387    --------------------------------------------------
 388 
 389    --  Generally the parser builds the tree and then it is further decorated
 390    --  (e.g. by setting the entity fields), but not fundamentally modified.
 391    --  However, there are cases in which the tree must be restructured by
 392    --  adding and rearranging nodes, as a result of disambiguating cases
 393    --  which the parser could not parse correctly, and adding additional
 394    --  semantic information (e.g. making constraint checks explicit). The
 395    --  following subprograms are used for constructing the tree in the first
 396    --  place, and then for subsequent modifications as required.
 397 
 398    procedure Initialize;
 399    --  Called at the start of compilation to initialize the allocation of
 400    --  the node and list tables and make the standard entries for Empty,
 401    --  Error and Error_List. Note that Initialize must not be called if
 402    --  Tree_Read is used.
 403 
 404    procedure Lock;
 405    --  Called before the back end is invoked to lock the nodes table
 406    --  Also called after Unlock to relock???
 407 
 408    procedure Unlock;
 409    --  Unlocks nodes table, in cases where the back end needs to modify it
 410 
 411    procedure Tree_Read;
 412    --  Initializes internal tables from current tree file using the relevant
 413    --  Table.Tree_Read routines. Note that Initialize should not be called if
 414    --  Tree_Read is used. Tree_Read includes all necessary initialization.
 415 
 416    procedure Tree_Write;
 417    --  Writes out internal tables to current tree file using the relevant
 418    --  Table.Tree_Write routines.
 419 
 420    function New_Node
 421      (New_Node_Kind : Node_Kind;
 422       New_Sloc      : Source_Ptr) return Node_Id;
 423    --  Allocates a completely new node with the given node type and source
 424    --  location values. All other fields are set to their standard defaults:
 425    --
 426    --    Empty for all FieldN fields
 427    --    False for all FlagN fields
 428    --
 429    --  The usual approach is to build a new node using this function and
 430    --  then, using the value returned, use the Set_xxx functions to set
 431    --  fields of the node as required. New_Node can only be used for
 432    --  non-entity nodes, i.e. it never generates an extended node.
 433    --
 434    --  If we are currently parsing, as indicated by a previous call to
 435    --  Set_Comes_From_Source_Default (True), then this call also resets
 436    --  the value of Current_Error_Node.
 437 
 438    function New_Entity
 439      (New_Node_Kind : Node_Kind;
 440       New_Sloc      : Source_Ptr) return Entity_Id;
 441    --  Similar to New_Node, except that it is used only for entity nodes
 442    --  and returns an extended node.
 443 
 444    procedure Set_Comes_From_Source_Default (Default : Boolean);
 445    --  Sets value of Comes_From_Source flag to be used in all subsequent
 446    --  New_Node and New_Entity calls until another call to this procedure
 447    --  changes the default. This value is set True during parsing and
 448    --  False during semantic analysis. This is also used to determine
 449    --  if New_Node and New_Entity should set Current_Error_Node.
 450 
 451    function Get_Comes_From_Source_Default return Boolean;
 452    pragma Inline (Get_Comes_From_Source_Default);
 453    --  Gets the current value of the Comes_From_Source flag
 454 
 455    procedure Preserve_Comes_From_Source (NewN, OldN : Node_Id);
 456    pragma Inline (Preserve_Comes_From_Source);
 457    --  When a node is rewritten, it is sometimes appropriate to preserve the
 458    --  original comes from source indication. This is true when the rewrite
 459    --  essentially corresponds to a transformation corresponding exactly to
 460    --  semantics in the reference manual. This procedure copies the setting
 461    --  of Comes_From_Source from OldN to NewN.
 462 
 463    function Has_Extension (N : Node_Id) return Boolean;
 464    pragma Inline (Has_Extension);
 465    --  Returns True if the given node has an extension (i.e. was created by
 466    --  a call to New_Entity rather than New_Node, and Nkind is in N_Entity)
 467 
 468    procedure Change_Node (N : Node_Id; New_Node_Kind : Node_Kind);
 469    --  This procedure replaces the given node by setting its Nkind field to
 470    --  the indicated value and resetting all other fields to their default
 471    --  values except for Sloc, which is unchanged, and the Parent pointer
 472    --  and list links, which are also unchanged. All other information in
 473    --  the original node is lost. The new node has an extension if the
 474    --  original node had an extension.
 475 
 476    procedure Copy_Node (Source : Node_Id; Destination : Node_Id);
 477    --  Copy the entire contents of the source node to the destination node.
 478    --  The contents of the source node is not affected. If the source node
 479    --  has an extension, then the destination must have an extension also.
 480    --  The parent pointer of the destination and its list link, if any, are
 481    --  not affected by the copy. Note that parent pointers of descendants
 482    --  are not adjusted, so the descendants of the destination node after
 483    --  the Copy_Node is completed have dubious parent pointers. Note that
 484    --  this routine does NOT copy aspect specifications, the Has_Aspects
 485    --  flag in the returned node will always be False. The caller must deal
 486    --  with copying aspect specifications where this is required.
 487 
 488    function New_Copy (Source : Node_Id) return Node_Id;
 489    --  This function allocates a completely new node, and then initializes
 490    --  it by copying the contents of the source node into it. The contents of
 491    --  the source node is not affected. The target node is always marked as
 492    --  not being in a list (even if the source is a list member), and not
 493    --  overloaded. The new node will have an extension if the source has
 494    --  an extension. New_Copy (Empty) returns Empty, and New_Copy (Error)
 495    --  returns Error. Note that, unlike Copy_Separate_Tree, New_Copy does not
 496    --  recursively copy any descendants, so in general parent pointers are not
 497    --  set correctly for the descendants of the copied node. Both normal and
 498    --  extended nodes (entities) may be copied using New_Copy.
 499 
 500    function Relocate_Node (Source : Node_Id) return Node_Id;
 501    --  Source is a non-entity node that is to be relocated. A new node is
 502    --  allocated, and the contents of Source are copied to this node, using
 503    --  New_Copy. The parent pointers of descendants of the node are then
 504    --  adjusted to point to the relocated copy. The original node is not
 505    --  modified, but the parent pointers of its descendants are no longer
 506    --  valid. The new copy is always marked as not overloaded. This routine is
 507    --  used in conjunction with the tree rewrite routines (see descriptions of
 508    --  Replace/Rewrite).
 509    --
 510    --  Note that the resulting node has the same parent as the source node, and
 511    --  is thus still attached to the tree. It is valid for Source to be Empty,
 512    --  in which case Relocate_Node simply returns Empty as the result.
 513 
 514    function Copy_Separate_Tree (Source : Node_Id) return Node_Id;
 515    --  Given a node that is the root of a subtree, Copy_Separate_Tree copies
 516    --  the entire syntactic subtree, including recursively any descendants
 517    --  whose parent field references a copied node (descendants not linked to
 518    --  a copied node by the parent field are also copied.) The parent pointers
 519    --  in the copy are properly set. Copy_Separate_Tree (Empty/Error) returns
 520    --  Empty/Error. The new subtree does not share entities with the source,
 521    --  but has new entities with the same name.
 522    --
 523    --  Most of the time this routine is called on an unanalyzed tree, and no
 524    --  semantic information is copied. However, to ensure that no entities
 525    --  are shared between the two when the source is already analyzed, and
 526    --  that the result looks like an unanalyzed tree from the parser, Entity
 527    --  fields and Etype fields are set to Empty, and Analyzed flags set False.
 528    --
 529    --  In addition, Expanded_Name nodes are converted back into the original
 530    --  parser form (where they are Selected_Components), so that reanalysis
 531    --  does the right thing.
 532 
 533    function Copy_Separate_List (Source : List_Id) return List_Id;
 534    --  Applies Copy_Separate_Tree to each element of the Source list, returning
 535    --  a new list of the results of these copy operations.
 536 
 537    procedure Exchange_Entities (E1 : Entity_Id; E2 : Entity_Id);
 538    --  Exchange the contents of two entities. The parent pointers are switched
 539    --  as well as the Defining_Identifier fields in the parents, so that the
 540    --  entities point correctly to their original parents. The effect is thus
 541    --  to leave the tree completely unchanged in structure, except that the
 542    --  entity ID values of the two entities are interchanged. Neither of the
 543    --  two entities may be list members. Note that entities appear on two
 544    --  semantic chains: Homonym and Next_Entity: the corresponding links must
 545    --  be adjusted by the caller, according to context.
 546 
 547    function Extend_Node (Node : Node_Id) return Entity_Id;
 548    --  This function returns a copy of its input node with an extension added.
 549    --  The fields of the extension are set to Empty. Due to the way extensions
 550    --  are handled (as four consecutive array elements), it may be necessary
 551    --  to reallocate the node, so that the returned value is not the same as
 552    --  the input value, but where possible the returned value will be the same
 553    --  as the input value (i.e. the extension will occur in place). It is the
 554    --  caller's responsibility to ensure that any pointers to the original node
 555    --  are appropriately updated. This function is used only by Sinfo.CN to
 556    --  change nodes into their corresponding entities.
 557 
 558    type Report_Proc is access procedure (Target : Node_Id; Source : Node_Id);
 559 
 560    procedure Set_Reporting_Proc (P : Report_Proc);
 561    --  Register a procedure that is invoked when a node is allocated, replaced
 562    --  or rewritten.
 563 
 564    type Traverse_Result is (Abandon, OK, OK_Orig, Skip);
 565    --  This is the type of the result returned by the Process function passed
 566    --  to Traverse_Func and Traverse_Proc. See below for details.
 567 
 568    subtype Traverse_Final_Result is Traverse_Result range Abandon .. OK;
 569    --  This is the type of the final result returned Traverse_Func, based on
 570    --  the results of Process calls. See below for details.
 571 
 572    generic
 573       with function Process (N : Node_Id) return Traverse_Result is <>;
 574    function Traverse_Func (Node : Node_Id) return Traverse_Final_Result;
 575    --  This is a generic function that, given the parent node for a subtree,
 576    --  traverses all syntactic nodes of this tree, calling the given function
 577    --  Process on each one, in pre order (i.e. top-down). The order of
 578    --  traversing subtrees is arbitrary. The traversal is controlled as follows
 579    --  by the result returned by Process:
 580 
 581    --    OK       The traversal continues normally with the syntactic
 582    --             children of the node just processed.
 583 
 584    --    OK_Orig  The traversal continues normally with the syntactic
 585    --             children of the original node of the node just processed.
 586 
 587    --    Skip     The children of the node just processed are skipped and
 588    --             excluded from the traversal, but otherwise processing
 589    --             continues elsewhere in the tree.
 590 
 591    --    Abandon  The entire traversal is immediately abandoned, and the
 592    --             original call to Traverse returns Abandon.
 593 
 594    --  The result returned by Traverse is Abandon if processing was terminated
 595    --  by a call to Process returning Abandon, otherwise it is OK (meaning that
 596    --  all calls to process returned either OK, OK_Orig, or Skip).
 597 
 598    generic
 599       with function Process (N : Node_Id) return Traverse_Result is <>;
 600    procedure Traverse_Proc (Node : Node_Id);
 601    pragma Inline (Traverse_Proc);
 602    --  This is the same as Traverse_Func except that no result is returned,
 603    --  i.e. Traverse_Func is called and the result is simply discarded.
 604 
 605    ---------------------------
 606    -- Node Access Functions --
 607    ---------------------------
 608 
 609    --  The following functions return the contents of the indicated field of
 610    --  the node referenced by the argument, which is a Node_Id.
 611 
 612    function Analyzed                     (N : Node_Id) return Boolean;
 613    pragma Inline (Analyzed);
 614 
 615    function Check_Actuals                (N : Node_Id) return Boolean;
 616    pragma Inline (Check_Actuals);
 617 
 618    function Comes_From_Source            (N : Node_Id) return Boolean;
 619    pragma Inline (Comes_From_Source);
 620 
 621    function Error_Posted                 (N : Node_Id) return Boolean;
 622    pragma Inline (Error_Posted);
 623 
 624    function Has_Aspects                  (N : Node_Id) return Boolean;
 625    pragma Inline (Has_Aspects);
 626 
 627    function Is_Ignored_Ghost_Node        (N : Node_Id) return Boolean;
 628    pragma Inline (Is_Ignored_Ghost_Node);
 629 
 630    function Nkind                        (N : Node_Id) return Node_Kind;
 631    pragma Inline (Nkind);
 632 
 633    function No                           (N : Node_Id) return Boolean;
 634    pragma Inline (No);
 635    --  Tests given Id for equality with the Empty node. This allows notations
 636    --  like "if No (Variant_Part)" as opposed to "if Variant_Part = Empty".
 637 
 638    function Parent                       (N : Node_Id) return Node_Id;
 639    pragma Inline (Parent);
 640    --  Returns the parent of a node if the node is not a list member, or else
 641    --  the parent of the list containing the node if the node is a list member.
 642 
 643    function Paren_Count                  (N : Node_Id) return Nat;
 644    pragma Inline (Paren_Count);
 645 
 646    function Present                      (N : Node_Id) return Boolean;
 647    pragma Inline (Present);
 648    --  Tests given Id for inequality with the Empty node. This allows notations
 649    --  like "if Present (Statement)" as opposed to "if Statement /= Empty".
 650 
 651    function Sloc                         (N : Node_Id) return Source_Ptr;
 652    pragma Inline (Sloc);
 653 
 654    ---------------------
 655    -- Node_Kind Tests --
 656    ---------------------
 657 
 658    --  These are like the functions in Sinfo, but the first argument is a
 659    --  Node_Id, and the tested field is Nkind (N).
 660 
 661    function Nkind_In
 662      (N  : Node_Id;
 663       V1 : Node_Kind;
 664       V2 : Node_Kind) return Boolean;
 665 
 666    function Nkind_In
 667      (N  : Node_Id;
 668       V1 : Node_Kind;
 669       V2 : Node_Kind;
 670       V3 : Node_Kind) return Boolean;
 671 
 672    function Nkind_In
 673      (N  : Node_Id;
 674       V1 : Node_Kind;
 675       V2 : Node_Kind;
 676       V3 : Node_Kind;
 677       V4 : Node_Kind) return Boolean;
 678 
 679    function Nkind_In
 680      (N  : Node_Id;
 681       V1 : Node_Kind;
 682       V2 : Node_Kind;
 683       V3 : Node_Kind;
 684       V4 : Node_Kind;
 685       V5 : Node_Kind) return Boolean;
 686 
 687    function Nkind_In
 688      (N  : Node_Id;
 689       V1 : Node_Kind;
 690       V2 : Node_Kind;
 691       V3 : Node_Kind;
 692       V4 : Node_Kind;
 693       V5 : Node_Kind;
 694       V6 : Node_Kind) return Boolean;
 695 
 696    function Nkind_In
 697      (N  : Node_Id;
 698       V1 : Node_Kind;
 699       V2 : Node_Kind;
 700       V3 : Node_Kind;
 701       V4 : Node_Kind;
 702       V5 : Node_Kind;
 703       V6 : Node_Kind;
 704       V7 : Node_Kind) return Boolean;
 705 
 706    function Nkind_In
 707      (N  : Node_Id;
 708       V1 : Node_Kind;
 709       V2 : Node_Kind;
 710       V3 : Node_Kind;
 711       V4 : Node_Kind;
 712       V5 : Node_Kind;
 713       V6 : Node_Kind;
 714       V7 : Node_Kind;
 715       V8 : Node_Kind) return Boolean;
 716 
 717    function Nkind_In
 718      (N  : Node_Id;
 719       V1 : Node_Kind;
 720       V2 : Node_Kind;
 721       V3 : Node_Kind;
 722       V4 : Node_Kind;
 723       V5 : Node_Kind;
 724       V6 : Node_Kind;
 725       V7 : Node_Kind;
 726       V8 : Node_Kind;
 727       V9 : Node_Kind) return Boolean;
 728 
 729    pragma Inline (Nkind_In);
 730    --  Inline all above functions
 731 
 732    -----------------------
 733    -- Entity_Kind_Tests --
 734    -----------------------
 735 
 736    --  Utility functions to test whether an Entity_Kind value, either given
 737    --  directly as the first argument, or the Ekind field of an Entity given
 738    --  as the first argument, matches any of the given list of Entity_Kind
 739    --  values. Return True if any match, False if no match.
 740 
 741    function Ekind_In
 742      (E  : Entity_Id;
 743       V1 : Entity_Kind;
 744       V2 : Entity_Kind) return Boolean;
 745 
 746    function Ekind_In
 747      (E  : Entity_Id;
 748       V1 : Entity_Kind;
 749       V2 : Entity_Kind;
 750       V3 : Entity_Kind) return Boolean;
 751 
 752    function Ekind_In
 753      (E  : Entity_Id;
 754       V1 : Entity_Kind;
 755       V2 : Entity_Kind;
 756       V3 : Entity_Kind;
 757       V4 : Entity_Kind) return Boolean;
 758 
 759    function Ekind_In
 760      (E  : Entity_Id;
 761       V1 : Entity_Kind;
 762       V2 : Entity_Kind;
 763       V3 : Entity_Kind;
 764       V4 : Entity_Kind;
 765       V5 : Entity_Kind) return Boolean;
 766 
 767    function Ekind_In
 768      (E  : Entity_Id;
 769       V1 : Entity_Kind;
 770       V2 : Entity_Kind;
 771       V3 : Entity_Kind;
 772       V4 : Entity_Kind;
 773       V5 : Entity_Kind;
 774       V6 : Entity_Kind) return Boolean;
 775 
 776    function Ekind_In
 777      (E  : Entity_Id;
 778       V1 : Entity_Kind;
 779       V2 : Entity_Kind;
 780       V3 : Entity_Kind;
 781       V4 : Entity_Kind;
 782       V5 : Entity_Kind;
 783       V6 : Entity_Kind;
 784       V7 : Entity_Kind) return Boolean;
 785 
 786    function Ekind_In
 787      (E  : Entity_Id;
 788       V1 : Entity_Kind;
 789       V2 : Entity_Kind;
 790       V3 : Entity_Kind;
 791       V4 : Entity_Kind;
 792       V5 : Entity_Kind;
 793       V6 : Entity_Kind;
 794       V7 : Entity_Kind;
 795       V8 : Entity_Kind) return Boolean;
 796 
 797    function Ekind_In
 798      (E  : Entity_Id;
 799       V1 : Entity_Kind;
 800       V2 : Entity_Kind;
 801       V3 : Entity_Kind;
 802       V4 : Entity_Kind;
 803       V5 : Entity_Kind;
 804       V6 : Entity_Kind;
 805       V7 : Entity_Kind;
 806       V8 : Entity_Kind;
 807       V9 : Entity_Kind) return Boolean;
 808 
 809    function Ekind_In
 810      (E   : Entity_Id;
 811       V1  : Entity_Kind;
 812       V2  : Entity_Kind;
 813       V3  : Entity_Kind;
 814       V4  : Entity_Kind;
 815       V5  : Entity_Kind;
 816       V6  : Entity_Kind;
 817       V7  : Entity_Kind;
 818       V8  : Entity_Kind;
 819       V9  : Entity_Kind;
 820       V10 : Entity_Kind) return Boolean;
 821 
 822    function Ekind_In
 823      (E   : Entity_Id;
 824       V1  : Entity_Kind;
 825       V2  : Entity_Kind;
 826       V3  : Entity_Kind;
 827       V4  : Entity_Kind;
 828       V5  : Entity_Kind;
 829       V6  : Entity_Kind;
 830       V7  : Entity_Kind;
 831       V8  : Entity_Kind;
 832       V9  : Entity_Kind;
 833       V10 : Entity_Kind;
 834       V11 : Entity_Kind) return Boolean;
 835 
 836    function Ekind_In
 837      (T  : Entity_Kind;
 838       V1 : Entity_Kind;
 839       V2 : Entity_Kind) return Boolean;
 840 
 841    function Ekind_In
 842      (T  : Entity_Kind;
 843       V1 : Entity_Kind;
 844       V2 : Entity_Kind;
 845       V3 : Entity_Kind) return Boolean;
 846 
 847    function Ekind_In
 848      (T  : Entity_Kind;
 849       V1 : Entity_Kind;
 850       V2 : Entity_Kind;
 851       V3 : Entity_Kind;
 852       V4 : Entity_Kind) return Boolean;
 853 
 854    function Ekind_In
 855      (T  : Entity_Kind;
 856       V1 : Entity_Kind;
 857       V2 : Entity_Kind;
 858       V3 : Entity_Kind;
 859       V4 : Entity_Kind;
 860       V5 : Entity_Kind) return Boolean;
 861 
 862    function Ekind_In
 863      (T  : Entity_Kind;
 864       V1 : Entity_Kind;
 865       V2 : Entity_Kind;
 866       V3 : Entity_Kind;
 867       V4 : Entity_Kind;
 868       V5 : Entity_Kind;
 869       V6 : Entity_Kind) return Boolean;
 870 
 871    function Ekind_In
 872      (T  : Entity_Kind;
 873       V1 : Entity_Kind;
 874       V2 : Entity_Kind;
 875       V3 : Entity_Kind;
 876       V4 : Entity_Kind;
 877       V5 : Entity_Kind;
 878       V6 : Entity_Kind;
 879       V7 : Entity_Kind) return Boolean;
 880 
 881    function Ekind_In
 882      (T  : Entity_Kind;
 883       V1 : Entity_Kind;
 884       V2 : Entity_Kind;
 885       V3 : Entity_Kind;
 886       V4 : Entity_Kind;
 887       V5 : Entity_Kind;
 888       V6 : Entity_Kind;
 889       V7 : Entity_Kind;
 890       V8 : Entity_Kind) return Boolean;
 891 
 892    function Ekind_In
 893      (T  : Entity_Kind;
 894       V1 : Entity_Kind;
 895       V2 : Entity_Kind;
 896       V3 : Entity_Kind;
 897       V4 : Entity_Kind;
 898       V5 : Entity_Kind;
 899       V6 : Entity_Kind;
 900       V7 : Entity_Kind;
 901       V8 : Entity_Kind;
 902       V9 : Entity_Kind) return Boolean;
 903 
 904    function Ekind_In
 905      (T   : Entity_Kind;
 906       V1  : Entity_Kind;
 907       V2  : Entity_Kind;
 908       V3  : Entity_Kind;
 909       V4  : Entity_Kind;
 910       V5  : Entity_Kind;
 911       V6  : Entity_Kind;
 912       V7  : Entity_Kind;
 913       V8  : Entity_Kind;
 914       V9  : Entity_Kind;
 915       V10 : Entity_Kind) return Boolean;
 916 
 917    function Ekind_In
 918      (T   : Entity_Kind;
 919       V1  : Entity_Kind;
 920       V2  : Entity_Kind;
 921       V3  : Entity_Kind;
 922       V4  : Entity_Kind;
 923       V5  : Entity_Kind;
 924       V6  : Entity_Kind;
 925       V7  : Entity_Kind;
 926       V8  : Entity_Kind;
 927       V9  : Entity_Kind;
 928       V10 : Entity_Kind;
 929       V11 : Entity_Kind) return Boolean;
 930 
 931    pragma Inline (Ekind_In);
 932    --  Inline all above functions
 933 
 934    -----------------------------
 935    -- Entity Access Functions --
 936    -----------------------------
 937 
 938    --  The following functions apply only to Entity_Id values, i.e.
 939    --  to extended nodes.
 940 
 941    function Ekind (E : Entity_Id) return Entity_Kind;
 942    pragma Inline (Ekind);
 943 
 944    function Convention (E : Entity_Id) return Convention_Id;
 945    pragma Inline (Convention);
 946 
 947    ----------------------------
 948    -- Node Update Procedures --
 949    ----------------------------
 950 
 951    --  The following functions set a specified field in the node whose Id is
 952    --  passed as the first argument. The second parameter is the new value
 953    --  to be set in the specified field. Note that Set_Nkind is in the next
 954    --  section, since its use is restricted.
 955 
 956    procedure Set_Analyzed              (N : Node_Id; Val : Boolean := True);
 957    pragma Inline (Set_Analyzed);
 958 
 959    procedure Set_Check_Actuals         (N : Node_Id; Val : Boolean := True);
 960    pragma Inline (Set_Check_Actuals);
 961 
 962    procedure Set_Comes_From_Source     (N : Node_Id; Val : Boolean);
 963    pragma Inline (Set_Comes_From_Source);
 964    --  Note that this routine is very rarely used, since usually the default
 965    --  mechanism provided sets the right value, but in some unusual cases, the
 966    --  value needs to be reset (e.g. when a source node is copied, and the copy
 967    --  must not have Comes_From_Source set).
 968 
 969    procedure Set_Error_Posted          (N : Node_Id; Val : Boolean := True);
 970    pragma Inline (Set_Error_Posted);
 971 
 972    procedure Set_Has_Aspects           (N : Node_Id; Val : Boolean := True);
 973    pragma Inline (Set_Has_Aspects);
 974 
 975    procedure Set_Is_Ignored_Ghost_Node (N : Node_Id; Val : Boolean := True);
 976    pragma Inline (Set_Is_Ignored_Ghost_Node);
 977 
 978    procedure Set_Original_Node         (N : Node_Id; Val : Node_Id);
 979    pragma Inline (Set_Original_Node);
 980    --  Note that this routine is used only in very peculiar cases. In normal
 981    --  cases, the Original_Node link is set by calls to Rewrite. We currently
 982    --  use it in ASIS mode to manually set the link from pragma expressions to
 983    --  their aspect original source expressions, so that the original source
 984    --  expressions accessed by ASIS are also semantically analyzed.
 985 
 986    procedure Set_Parent                (N : Node_Id; Val : Node_Id);
 987    pragma Inline (Set_Parent);
 988 
 989    procedure Set_Paren_Count           (N : Node_Id; Val : Nat);
 990    pragma Inline (Set_Paren_Count);
 991 
 992    procedure Set_Sloc                  (N : Node_Id; Val : Source_Ptr);
 993    pragma Inline (Set_Sloc);
 994 
 995    ------------------------------
 996    -- Entity Update Procedures --
 997    ------------------------------
 998 
 999    --  The following procedures apply only to Entity_Id values, i.e.
1000    --  to extended nodes.
1001 
1002    procedure Basic_Set_Convention (E : Entity_Id; Val : Convention_Id);
1003    pragma Inline (Basic_Set_Convention);
1004    --  Clients should use Sem_Util.Set_Convention rather than calling this
1005    --  routine directly, as Set_Convention also deals with the special
1006    --  processing required for access types.
1007 
1008    procedure Set_Ekind (E : Entity_Id; Val : Entity_Kind);
1009    pragma Inline (Set_Ekind);
1010 
1011    ---------------------------
1012    -- Tree Rewrite Routines --
1013    ---------------------------
1014 
1015    --  During the compilation process it is necessary in a number of situations
1016    --  to rewrite the tree. In some cases, such rewrites do not affect the
1017    --  structure of the tree, for example, when an indexed component node is
1018    --  replaced by the corresponding call node (the parser cannot distinguish
1019    --  between these two cases).
1020 
1021    --  In other situations, the rewrite does affect the structure of the
1022    --  tree. Examples are the replacement of a generic instantiation by the
1023    --  instantiated spec and body, and the static evaluation of expressions.
1024 
1025    --  If such structural modifications are done by the expander, there are
1026    --  no difficulties, since the form of the tree after the expander has no
1027    --  special significance, except as input to the backend of the compiler.
1028    --  However, if these modifications are done by the semantic phase, then
1029    --  it is important that they be done in a manner which allows the original
1030    --  tree to be preserved. This is because tools like pretty printers need
1031    --  to have this original tree structure available.
1032 
1033    --  The subprograms in this section allow rewriting of the tree by either
1034    --  insertion of new nodes in an existing list, or complete replacement of
1035    --  a subtree. The resulting tree for most purposes looks as though it has
1036    --  been really changed, and there is no trace of the original. However,
1037    --  special subprograms, also defined in this section, allow the original
1038    --  tree to be reconstructed if necessary.
1039 
1040    --  For tree modifications done in the expander, it is permissible to
1041    --  destroy the original tree, although it is also allowable to use the
1042    --  tree rewrite routines where it is convenient to do so.
1043 
1044    procedure Mark_Rewrite_Insertion (New_Node : Node_Id);
1045    pragma Inline (Mark_Rewrite_Insertion);
1046    --  This procedure marks the given node as an insertion made during a tree
1047    --  rewriting operation. Only the root needs to be marked. The call does
1048    --  not do the actual insertion, which must be done using one of the normal
1049    --  list insertion routines. The node is treated normally in all respects
1050    --  except for its response to Is_Rewrite_Insertion. The function of these
1051    --  calls is to be able to get an accurate original tree. This helps the
1052    --  accuracy of Sprint.Sprint_Node, and in particular, when stubs are being
1053    --  generated, it is essential that the original tree be accurate.
1054 
1055    function Is_Rewrite_Insertion (Node : Node_Id) return Boolean;
1056    pragma Inline (Is_Rewrite_Insertion);
1057    --  Tests whether the given node was marked using Mark_Rewrite_Insertion.
1058    --  This is used in reconstructing the original tree (where such nodes are
1059    --  to be eliminated).
1060 
1061    procedure Rewrite (Old_Node, New_Node : Node_Id);
1062    --  This is used when a complete subtree is to be replaced. Old_Node is the
1063    --  root of the old subtree to be replaced, and New_Node is the root of the
1064    --  newly constructed replacement subtree. The actual mechanism is to swap
1065    --  the contents of these two nodes fixing up the parent pointers of the
1066    --  replaced node (we do not attempt to preserve parent pointers for the
1067    --  original node). Neither Old_Node nor New_Node can be extended nodes.
1068    --
1069    --  Note: New_Node may not contain references to Old_Node, for example as
1070    --  descendants, since the rewrite would make such references invalid. If
1071    --  New_Node does need to reference Old_Node, then these references should
1072    --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
1073    --
1074    --  Note: The Original_Node function applied to Old_Node (which has now
1075    --  been replaced by the contents of New_Node), can be used to obtain the
1076    --  original node, i.e. the old contents of Old_Node.
1077 
1078    procedure Replace (Old_Node, New_Node : Node_Id);
1079    --  This is similar to Rewrite, except that the old value of Old_Node is
1080    --  not saved, and the New_Node is deleted after the replace, since it
1081    --  is assumed that it can no longer be legitimately needed. The flag
1082    --  Is_Rewrite_Substitution will be False for the resulting node, unless
1083    --  it was already true on entry, and Original_Node will not return the
1084    --  original contents of the Old_Node, but rather the New_Node value (unless
1085    --  Old_Node had already been rewritten using Rewrite). Replace also
1086    --  preserves the setting of Comes_From_Source.
1087    --
1088    --  Note, New_Node may not contain references to Old_Node, for example as
1089    --  descendants, since the rewrite would make such references invalid. If
1090    --  New_Node does need to reference Old_Node, then these references should
1091    --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
1092    --
1093    --  Replace is used in certain circumstances where it is desirable to
1094    --  suppress any history of the rewriting operation. Notably, it is used
1095    --  when the parser has mis-classified a node (e.g. a task entry call
1096    --  that the parser has parsed as a procedure call).
1097 
1098    function Is_Rewrite_Substitution (Node : Node_Id) return Boolean;
1099    pragma Inline (Is_Rewrite_Substitution);
1100    --  Return True iff Node has been rewritten (i.e. if Node is the root
1101    --  of a subtree which was installed using Rewrite).
1102 
1103    function Original_Node (Node : Node_Id) return Node_Id;
1104    pragma Inline (Original_Node);
1105    --  If Node has not been rewritten, then returns its input argument
1106    --  unchanged, else returns the Node for the original subtree. Note that
1107    --  this is used extensively by ASIS on the trees constructed in ASIS mode
1108    --  to reconstruct the original semantic tree. See section in sinfo.ads
1109    --  for requirements on original nodes returned by this function.
1110    --
1111    --  Note: Parents are not preserved in original tree nodes that are
1112    --  retrieved in this way (i.e. their children may have children whose
1113    --  pointers which reference some other node). This needs more details???
1114    --
1115    --  Note: there is no direct mechanism for deleting an original node (in
1116    --  a manner that can be reversed later). One possible approach is to use
1117    --  Rewrite to substitute a null statement for the node to be deleted.
1118 
1119    -----------------------------------
1120    -- Generic Field Access Routines --
1121    -----------------------------------
1122 
1123    --  This subpackage provides the functions for accessing and procedures for
1124    --  setting fields that are normally referenced by wrapper subprograms (e.g.
1125    --  logical synonyms defined in packages Sinfo and Einfo, or specialized
1126    --  routines such as Rewrite (for Original_Node), or the node creation
1127    --  routines (for Set_Nkind). The implementations of these wrapper
1128    --  subprograms use the package Atree.Unchecked_Access as do various
1129    --  special case accesses where no wrapper applies. Documentation is always
1130    --  required for such a special case access explaining why it is needed.
1131 
1132    package Unchecked_Access is
1133 
1134       --  Functions to allow interpretation of Union_Id values as Uint and
1135       --  Ureal values.
1136 
1137       function To_Union is new Unchecked_Conversion (Uint,  Union_Id);
1138       function To_Union is new Unchecked_Conversion (Ureal, Union_Id);
1139 
1140       function From_Union is new Unchecked_Conversion (Union_Id, Uint);
1141       function From_Union is new Unchecked_Conversion (Union_Id, Ureal);
1142 
1143       --  Functions to fetch contents of indicated field. It is an error to
1144       --  attempt to read the value of a field which is not present.
1145 
1146       function Field1 (N : Node_Id) return Union_Id;
1147       pragma Inline (Field1);
1148 
1149       function Field2 (N : Node_Id) return Union_Id;
1150       pragma Inline (Field2);
1151 
1152       function Field3 (N : Node_Id) return Union_Id;
1153       pragma Inline (Field3);
1154 
1155       function Field4 (N : Node_Id) return Union_Id;
1156       pragma Inline (Field4);
1157 
1158       function Field5 (N : Node_Id) return Union_Id;
1159       pragma Inline (Field5);
1160 
1161       function Field6 (N : Node_Id) return Union_Id;
1162       pragma Inline (Field6);
1163 
1164       function Field7 (N : Node_Id) return Union_Id;
1165       pragma Inline (Field7);
1166 
1167       function Field8 (N : Node_Id) return Union_Id;
1168       pragma Inline (Field8);
1169 
1170       function Field9 (N : Node_Id) return Union_Id;
1171       pragma Inline (Field9);
1172 
1173       function Field10 (N : Node_Id) return Union_Id;
1174       pragma Inline (Field10);
1175 
1176       function Field11 (N : Node_Id) return Union_Id;
1177       pragma Inline (Field11);
1178 
1179       function Field12 (N : Node_Id) return Union_Id;
1180       pragma Inline (Field12);
1181 
1182       function Field13 (N : Node_Id) return Union_Id;
1183       pragma Inline (Field13);
1184 
1185       function Field14 (N : Node_Id) return Union_Id;
1186       pragma Inline (Field14);
1187 
1188       function Field15 (N : Node_Id) return Union_Id;
1189       pragma Inline (Field15);
1190 
1191       function Field16 (N : Node_Id) return Union_Id;
1192       pragma Inline (Field16);
1193 
1194       function Field17 (N : Node_Id) return Union_Id;
1195       pragma Inline (Field17);
1196 
1197       function Field18 (N : Node_Id) return Union_Id;
1198       pragma Inline (Field18);
1199 
1200       function Field19 (N : Node_Id) return Union_Id;
1201       pragma Inline (Field19);
1202 
1203       function Field20 (N : Node_Id) return Union_Id;
1204       pragma Inline (Field20);
1205 
1206       function Field21 (N : Node_Id) return Union_Id;
1207       pragma Inline (Field21);
1208 
1209       function Field22 (N : Node_Id) return Union_Id;
1210       pragma Inline (Field22);
1211 
1212       function Field23 (N : Node_Id) return Union_Id;
1213       pragma Inline (Field23);
1214 
1215       function Field24 (N : Node_Id) return Union_Id;
1216       pragma Inline (Field24);
1217 
1218       function Field25 (N : Node_Id) return Union_Id;
1219       pragma Inline (Field25);
1220 
1221       function Field26 (N : Node_Id) return Union_Id;
1222       pragma Inline (Field26);
1223 
1224       function Field27 (N : Node_Id) return Union_Id;
1225       pragma Inline (Field27);
1226 
1227       function Field28 (N : Node_Id) return Union_Id;
1228       pragma Inline (Field28);
1229 
1230       function Field29 (N : Node_Id) return Union_Id;
1231       pragma Inline (Field29);
1232 
1233       function Field30 (N : Node_Id) return Union_Id;
1234       pragma Inline (Field30);
1235 
1236       function Field31 (N : Node_Id) return Union_Id;
1237       pragma Inline (Field31);
1238 
1239       function Field32 (N : Node_Id) return Union_Id;
1240       pragma Inline (Field32);
1241 
1242       function Field33 (N : Node_Id) return Union_Id;
1243       pragma Inline (Field33);
1244 
1245       function Field34 (N : Node_Id) return Union_Id;
1246       pragma Inline (Field34);
1247 
1248       function Field35 (N : Node_Id) return Union_Id;
1249       pragma Inline (Field35);
1250 
1251       function Field36 (N : Node_Id) return Union_Id;
1252       pragma Inline (Field36);
1253 
1254       function Field37 (N : Node_Id) return Union_Id;
1255       pragma Inline (Field37);
1256 
1257       function Field38 (N : Node_Id) return Union_Id;
1258       pragma Inline (Field38);
1259 
1260       function Field39 (N : Node_Id) return Union_Id;
1261       pragma Inline (Field39);
1262 
1263       function Field40 (N : Node_Id) return Union_Id;
1264       pragma Inline (Field40);
1265 
1266       function Field41 (N : Node_Id) return Union_Id;
1267       pragma Inline (Field41);
1268 
1269       function Node1 (N : Node_Id) return Node_Id;
1270       pragma Inline (Node1);
1271 
1272       function Node2 (N : Node_Id) return Node_Id;
1273       pragma Inline (Node2);
1274 
1275       function Node3 (N : Node_Id) return Node_Id;
1276       pragma Inline (Node3);
1277 
1278       function Node4 (N : Node_Id) return Node_Id;
1279       pragma Inline (Node4);
1280 
1281       function Node5 (N : Node_Id) return Node_Id;
1282       pragma Inline (Node5);
1283 
1284       function Node6 (N : Node_Id) return Node_Id;
1285       pragma Inline (Node6);
1286 
1287       function Node7 (N : Node_Id) return Node_Id;
1288       pragma Inline (Node7);
1289 
1290       function Node8 (N : Node_Id) return Node_Id;
1291       pragma Inline (Node8);
1292 
1293       function Node9 (N : Node_Id) return Node_Id;
1294       pragma Inline (Node9);
1295 
1296       function Node10 (N : Node_Id) return Node_Id;
1297       pragma Inline (Node10);
1298 
1299       function Node11 (N : Node_Id) return Node_Id;
1300       pragma Inline (Node11);
1301 
1302       function Node12 (N : Node_Id) return Node_Id;
1303       pragma Inline (Node12);
1304 
1305       function Node13 (N : Node_Id) return Node_Id;
1306       pragma Inline (Node13);
1307 
1308       function Node14 (N : Node_Id) return Node_Id;
1309       pragma Inline (Node14);
1310 
1311       function Node15 (N : Node_Id) return Node_Id;
1312       pragma Inline (Node15);
1313 
1314       function Node16 (N : Node_Id) return Node_Id;
1315       pragma Inline (Node16);
1316 
1317       function Node17 (N : Node_Id) return Node_Id;
1318       pragma Inline (Node17);
1319 
1320       function Node18 (N : Node_Id) return Node_Id;
1321       pragma Inline (Node18);
1322 
1323       function Node19 (N : Node_Id) return Node_Id;
1324       pragma Inline (Node19);
1325 
1326       function Node20 (N : Node_Id) return Node_Id;
1327       pragma Inline (Node20);
1328 
1329       function Node21 (N : Node_Id) return Node_Id;
1330       pragma Inline (Node21);
1331 
1332       function Node22 (N : Node_Id) return Node_Id;
1333       pragma Inline (Node22);
1334 
1335       function Node23 (N : Node_Id) return Node_Id;
1336       pragma Inline (Node23);
1337 
1338       function Node24 (N : Node_Id) return Node_Id;
1339       pragma Inline (Node24);
1340 
1341       function Node25 (N : Node_Id) return Node_Id;
1342       pragma Inline (Node25);
1343 
1344       function Node26 (N : Node_Id) return Node_Id;
1345       pragma Inline (Node26);
1346 
1347       function Node27 (N : Node_Id) return Node_Id;
1348       pragma Inline (Node27);
1349 
1350       function Node28 (N : Node_Id) return Node_Id;
1351       pragma Inline (Node28);
1352 
1353       function Node29 (N : Node_Id) return Node_Id;
1354       pragma Inline (Node29);
1355 
1356       function Node30 (N : Node_Id) return Node_Id;
1357       pragma Inline (Node30);
1358 
1359       function Node31 (N : Node_Id) return Node_Id;
1360       pragma Inline (Node31);
1361 
1362       function Node32 (N : Node_Id) return Node_Id;
1363       pragma Inline (Node32);
1364 
1365       function Node33 (N : Node_Id) return Node_Id;
1366       pragma Inline (Node33);
1367 
1368       function Node34 (N : Node_Id) return Node_Id;
1369       pragma Inline (Node34);
1370 
1371       function Node35 (N : Node_Id) return Node_Id;
1372       pragma Inline (Node35);
1373 
1374       function Node36 (N : Node_Id) return Node_Id;
1375       pragma Inline (Node36);
1376 
1377       function Node37 (N : Node_Id) return Node_Id;
1378       pragma Inline (Node37);
1379 
1380       function Node38 (N : Node_Id) return Node_Id;
1381       pragma Inline (Node38);
1382 
1383       function Node39 (N : Node_Id) return Node_Id;
1384       pragma Inline (Node39);
1385 
1386       function Node40 (N : Node_Id) return Node_Id;
1387       pragma Inline (Node40);
1388 
1389       function Node41 (N : Node_Id) return Node_Id;
1390       pragma Inline (Node41);
1391 
1392       function List1 (N : Node_Id) return List_Id;
1393       pragma Inline (List1);
1394 
1395       function List2 (N : Node_Id) return List_Id;
1396       pragma Inline (List2);
1397 
1398       function List3 (N : Node_Id) return List_Id;
1399       pragma Inline (List3);
1400 
1401       function List4 (N : Node_Id) return List_Id;
1402       pragma Inline (List4);
1403 
1404       function List5 (N : Node_Id) return List_Id;
1405       pragma Inline (List5);
1406 
1407       function List10 (N : Node_Id) return List_Id;
1408       pragma Inline (List10);
1409 
1410       function List14 (N : Node_Id) return List_Id;
1411       pragma Inline (List14);
1412 
1413       function List25 (N : Node_Id) return List_Id;
1414       pragma Inline (List25);
1415 
1416       function List38 (N : Node_Id) return List_Id;
1417       pragma Inline (List38);
1418 
1419       function List39 (N : Node_Id) return List_Id;
1420       pragma Inline (List39);
1421 
1422       function Elist1 (N : Node_Id) return Elist_Id;
1423       pragma Inline (Elist1);
1424 
1425       function Elist2 (N : Node_Id) return Elist_Id;
1426       pragma Inline (Elist2);
1427 
1428       function Elist3 (N : Node_Id) return Elist_Id;
1429       pragma Inline (Elist3);
1430 
1431       function Elist4 (N : Node_Id) return Elist_Id;
1432       pragma Inline (Elist4);
1433 
1434       function Elist5 (N : Node_Id) return Elist_Id;
1435       pragma Inline (Elist5);
1436 
1437       function Elist8 (N : Node_Id) return Elist_Id;
1438       pragma Inline (Elist8);
1439 
1440       function Elist9 (N : Node_Id) return Elist_Id;
1441       pragma Inline (Elist9);
1442 
1443       function Elist10 (N : Node_Id) return Elist_Id;
1444       pragma Inline (Elist10);
1445 
1446       function Elist11 (N : Node_Id) return Elist_Id;
1447       pragma Inline (Elist11);
1448 
1449       function Elist13 (N : Node_Id) return Elist_Id;
1450       pragma Inline (Elist13);
1451 
1452       function Elist15 (N : Node_Id) return Elist_Id;
1453       pragma Inline (Elist15);
1454 
1455       function Elist16 (N : Node_Id) return Elist_Id;
1456       pragma Inline (Elist16);
1457 
1458       function Elist18 (N : Node_Id) return Elist_Id;
1459       pragma Inline (Elist18);
1460 
1461       function Elist21 (N : Node_Id) return Elist_Id;
1462       pragma Inline (Elist21);
1463 
1464       function Elist23 (N : Node_Id) return Elist_Id;
1465       pragma Inline (Elist23);
1466 
1467       function Elist24 (N : Node_Id) return Elist_Id;
1468       pragma Inline (Elist24);
1469 
1470       function Elist25 (N : Node_Id) return Elist_Id;
1471       pragma Inline (Elist25);
1472 
1473       function Elist26 (N : Node_Id) return Elist_Id;
1474       pragma Inline (Elist26);
1475 
1476       function Elist29 (N : Node_Id) return Elist_Id;
1477       pragma Inline (Elist29);
1478 
1479       function Elist36 (N : Node_Id) return Elist_Id;
1480       pragma Inline (Elist36);
1481 
1482       function Name1 (N : Node_Id) return Name_Id;
1483       pragma Inline (Name1);
1484 
1485       function Name2 (N : Node_Id) return Name_Id;
1486       pragma Inline (Name2);
1487 
1488       function Str3 (N : Node_Id) return String_Id;
1489       pragma Inline (Str3);
1490 
1491       --  Note: the following Uintnn functions have a special test for the
1492       --  Field value being Empty. If an Empty value is found then Uint_0 is
1493       --  returned. This avoids the rather tricky requirement of initializing
1494       --  all Uint fields in nodes and entities.
1495 
1496       function Uint2 (N : Node_Id) return Uint;
1497       pragma Inline (Uint2);
1498 
1499       function Uint3 (N : Node_Id) return Uint;
1500       pragma Inline (Uint3);
1501 
1502       function Uint4 (N : Node_Id) return Uint;
1503       pragma Inline (Uint4);
1504 
1505       function Uint5 (N : Node_Id) return Uint;
1506       pragma Inline (Uint5);
1507 
1508       function Uint8 (N : Node_Id) return Uint;
1509       pragma Inline (Uint8);
1510 
1511       function Uint9 (N : Node_Id) return Uint;
1512       pragma Inline (Uint9);
1513 
1514       function Uint10 (N : Node_Id) return Uint;
1515       pragma Inline (Uint10);
1516 
1517       function Uint11 (N : Node_Id) return Uint;
1518       pragma Inline (Uint11);
1519 
1520       function Uint12 (N : Node_Id) return Uint;
1521       pragma Inline (Uint12);
1522 
1523       function Uint13 (N : Node_Id) return Uint;
1524       pragma Inline (Uint13);
1525 
1526       function Uint14 (N : Node_Id) return Uint;
1527       pragma Inline (Uint14);
1528 
1529       function Uint15 (N : Node_Id) return Uint;
1530       pragma Inline (Uint15);
1531 
1532       function Uint16 (N : Node_Id) return Uint;
1533       pragma Inline (Uint16);
1534 
1535       function Uint17 (N : Node_Id) return Uint;
1536       pragma Inline (Uint17);
1537 
1538       function Uint22 (N : Node_Id) return Uint;
1539       pragma Inline (Uint22);
1540 
1541       function Uint24 (N : Node_Id) return Uint;
1542       pragma Inline (Uint24);
1543 
1544       function Ureal3 (N : Node_Id) return Ureal;
1545       pragma Inline (Ureal3);
1546 
1547       function Ureal18 (N : Node_Id) return Ureal;
1548       pragma Inline (Ureal18);
1549 
1550       function Ureal21 (N : Node_Id) return Ureal;
1551       pragma Inline (Ureal21);
1552 
1553       function Flag0 (N : Node_Id) return Boolean;
1554       pragma Inline (Flag0);
1555 
1556       function Flag1 (N : Node_Id) return Boolean;
1557       pragma Inline (Flag1);
1558 
1559       function Flag2 (N : Node_Id) return Boolean;
1560       pragma Inline (Flag2);
1561 
1562       function Flag3 (N : Node_Id) return Boolean;
1563       pragma Inline (Flag3);
1564 
1565       function Flag4 (N : Node_Id) return Boolean;
1566       pragma Inline (Flag4);
1567 
1568       function Flag5 (N : Node_Id) return Boolean;
1569       pragma Inline (Flag5);
1570 
1571       function Flag6 (N : Node_Id) return Boolean;
1572       pragma Inline (Flag6);
1573 
1574       function Flag7 (N : Node_Id) return Boolean;
1575       pragma Inline (Flag7);
1576 
1577       function Flag8 (N : Node_Id) return Boolean;
1578       pragma Inline (Flag8);
1579 
1580       function Flag9 (N : Node_Id) return Boolean;
1581       pragma Inline (Flag9);
1582 
1583       function Flag10 (N : Node_Id) return Boolean;
1584       pragma Inline (Flag10);
1585 
1586       function Flag11 (N : Node_Id) return Boolean;
1587       pragma Inline (Flag11);
1588 
1589       function Flag12 (N : Node_Id) return Boolean;
1590       pragma Inline (Flag12);
1591 
1592       function Flag13 (N : Node_Id) return Boolean;
1593       pragma Inline (Flag13);
1594 
1595       function Flag14 (N : Node_Id) return Boolean;
1596       pragma Inline (Flag14);
1597 
1598       function Flag15 (N : Node_Id) return Boolean;
1599       pragma Inline (Flag15);
1600 
1601       function Flag16 (N : Node_Id) return Boolean;
1602       pragma Inline (Flag16);
1603 
1604       function Flag17 (N : Node_Id) return Boolean;
1605       pragma Inline (Flag17);
1606 
1607       function Flag18 (N : Node_Id) return Boolean;
1608       pragma Inline (Flag18);
1609 
1610       function Flag19 (N : Node_Id) return Boolean;
1611       pragma Inline (Flag19);
1612 
1613       function Flag20 (N : Node_Id) return Boolean;
1614       pragma Inline (Flag20);
1615 
1616       function Flag21 (N : Node_Id) return Boolean;
1617       pragma Inline (Flag21);
1618 
1619       function Flag22 (N : Node_Id) return Boolean;
1620       pragma Inline (Flag22);
1621 
1622       function Flag23 (N : Node_Id) return Boolean;
1623       pragma Inline (Flag23);
1624 
1625       function Flag24 (N : Node_Id) return Boolean;
1626       pragma Inline (Flag24);
1627 
1628       function Flag25 (N : Node_Id) return Boolean;
1629       pragma Inline (Flag25);
1630 
1631       function Flag26 (N : Node_Id) return Boolean;
1632       pragma Inline (Flag26);
1633 
1634       function Flag27 (N : Node_Id) return Boolean;
1635       pragma Inline (Flag27);
1636 
1637       function Flag28 (N : Node_Id) return Boolean;
1638       pragma Inline (Flag28);
1639 
1640       function Flag29 (N : Node_Id) return Boolean;
1641       pragma Inline (Flag29);
1642 
1643       function Flag30 (N : Node_Id) return Boolean;
1644       pragma Inline (Flag30);
1645 
1646       function Flag31 (N : Node_Id) return Boolean;
1647       pragma Inline (Flag31);
1648 
1649       function Flag32 (N : Node_Id) return Boolean;
1650       pragma Inline (Flag32);
1651 
1652       function Flag33 (N : Node_Id) return Boolean;
1653       pragma Inline (Flag33);
1654 
1655       function Flag34 (N : Node_Id) return Boolean;
1656       pragma Inline (Flag34);
1657 
1658       function Flag35 (N : Node_Id) return Boolean;
1659       pragma Inline (Flag35);
1660 
1661       function Flag36 (N : Node_Id) return Boolean;
1662       pragma Inline (Flag36);
1663 
1664       function Flag37 (N : Node_Id) return Boolean;
1665       pragma Inline (Flag37);
1666 
1667       function Flag38 (N : Node_Id) return Boolean;
1668       pragma Inline (Flag38);
1669 
1670       function Flag39 (N : Node_Id) return Boolean;
1671       pragma Inline (Flag39);
1672 
1673       function Flag40 (N : Node_Id) return Boolean;
1674       pragma Inline (Flag40);
1675 
1676       function Flag41 (N : Node_Id) return Boolean;
1677       pragma Inline (Flag41);
1678 
1679       function Flag42 (N : Node_Id) return Boolean;
1680       pragma Inline (Flag42);
1681 
1682       function Flag43 (N : Node_Id) return Boolean;
1683       pragma Inline (Flag43);
1684 
1685       function Flag44 (N : Node_Id) return Boolean;
1686       pragma Inline (Flag44);
1687 
1688       function Flag45 (N : Node_Id) return Boolean;
1689       pragma Inline (Flag45);
1690 
1691       function Flag46 (N : Node_Id) return Boolean;
1692       pragma Inline (Flag46);
1693 
1694       function Flag47 (N : Node_Id) return Boolean;
1695       pragma Inline (Flag47);
1696 
1697       function Flag48 (N : Node_Id) return Boolean;
1698       pragma Inline (Flag48);
1699 
1700       function Flag49 (N : Node_Id) return Boolean;
1701       pragma Inline (Flag49);
1702 
1703       function Flag50 (N : Node_Id) return Boolean;
1704       pragma Inline (Flag50);
1705 
1706       function Flag51 (N : Node_Id) return Boolean;
1707       pragma Inline (Flag51);
1708 
1709       function Flag52 (N : Node_Id) return Boolean;
1710       pragma Inline (Flag52);
1711 
1712       function Flag53 (N : Node_Id) return Boolean;
1713       pragma Inline (Flag53);
1714 
1715       function Flag54 (N : Node_Id) return Boolean;
1716       pragma Inline (Flag54);
1717 
1718       function Flag55 (N : Node_Id) return Boolean;
1719       pragma Inline (Flag55);
1720 
1721       function Flag56 (N : Node_Id) return Boolean;
1722       pragma Inline (Flag56);
1723 
1724       function Flag57 (N : Node_Id) return Boolean;
1725       pragma Inline (Flag57);
1726 
1727       function Flag58 (N : Node_Id) return Boolean;
1728       pragma Inline (Flag58);
1729 
1730       function Flag59 (N : Node_Id) return Boolean;
1731       pragma Inline (Flag59);
1732 
1733       function Flag60 (N : Node_Id) return Boolean;
1734       pragma Inline (Flag60);
1735 
1736       function Flag61 (N : Node_Id) return Boolean;
1737       pragma Inline (Flag61);
1738 
1739       function Flag62 (N : Node_Id) return Boolean;
1740       pragma Inline (Flag62);
1741 
1742       function Flag63 (N : Node_Id) return Boolean;
1743       pragma Inline (Flag63);
1744 
1745       function Flag64 (N : Node_Id) return Boolean;
1746       pragma Inline (Flag64);
1747 
1748       function Flag65 (N : Node_Id) return Boolean;
1749       pragma Inline (Flag65);
1750 
1751       function Flag66 (N : Node_Id) return Boolean;
1752       pragma Inline (Flag66);
1753 
1754       function Flag67 (N : Node_Id) return Boolean;
1755       pragma Inline (Flag67);
1756 
1757       function Flag68 (N : Node_Id) return Boolean;
1758       pragma Inline (Flag68);
1759 
1760       function Flag69 (N : Node_Id) return Boolean;
1761       pragma Inline (Flag69);
1762 
1763       function Flag70 (N : Node_Id) return Boolean;
1764       pragma Inline (Flag70);
1765 
1766       function Flag71 (N : Node_Id) return Boolean;
1767       pragma Inline (Flag71);
1768 
1769       function Flag72 (N : Node_Id) return Boolean;
1770       pragma Inline (Flag72);
1771 
1772       function Flag73 (N : Node_Id) return Boolean;
1773       pragma Inline (Flag73);
1774 
1775       function Flag74 (N : Node_Id) return Boolean;
1776       pragma Inline (Flag74);
1777 
1778       function Flag75 (N : Node_Id) return Boolean;
1779       pragma Inline (Flag75);
1780 
1781       function Flag76 (N : Node_Id) return Boolean;
1782       pragma Inline (Flag76);
1783 
1784       function Flag77 (N : Node_Id) return Boolean;
1785       pragma Inline (Flag77);
1786 
1787       function Flag78 (N : Node_Id) return Boolean;
1788       pragma Inline (Flag78);
1789 
1790       function Flag79 (N : Node_Id) return Boolean;
1791       pragma Inline (Flag79);
1792 
1793       function Flag80 (N : Node_Id) return Boolean;
1794       pragma Inline (Flag80);
1795 
1796       function Flag81 (N : Node_Id) return Boolean;
1797       pragma Inline (Flag81);
1798 
1799       function Flag82 (N : Node_Id) return Boolean;
1800       pragma Inline (Flag82);
1801 
1802       function Flag83 (N : Node_Id) return Boolean;
1803       pragma Inline (Flag83);
1804 
1805       function Flag84 (N : Node_Id) return Boolean;
1806       pragma Inline (Flag84);
1807 
1808       function Flag85 (N : Node_Id) return Boolean;
1809       pragma Inline (Flag85);
1810 
1811       function Flag86 (N : Node_Id) return Boolean;
1812       pragma Inline (Flag86);
1813 
1814       function Flag87 (N : Node_Id) return Boolean;
1815       pragma Inline (Flag87);
1816 
1817       function Flag88 (N : Node_Id) return Boolean;
1818       pragma Inline (Flag88);
1819 
1820       function Flag89 (N : Node_Id) return Boolean;
1821       pragma Inline (Flag89);
1822 
1823       function Flag90 (N : Node_Id) return Boolean;
1824       pragma Inline (Flag90);
1825 
1826       function Flag91 (N : Node_Id) return Boolean;
1827       pragma Inline (Flag91);
1828 
1829       function Flag92 (N : Node_Id) return Boolean;
1830       pragma Inline (Flag92);
1831 
1832       function Flag93 (N : Node_Id) return Boolean;
1833       pragma Inline (Flag93);
1834 
1835       function Flag94 (N : Node_Id) return Boolean;
1836       pragma Inline (Flag94);
1837 
1838       function Flag95 (N : Node_Id) return Boolean;
1839       pragma Inline (Flag95);
1840 
1841       function Flag96 (N : Node_Id) return Boolean;
1842       pragma Inline (Flag96);
1843 
1844       function Flag97 (N : Node_Id) return Boolean;
1845       pragma Inline (Flag97);
1846 
1847       function Flag98 (N : Node_Id) return Boolean;
1848       pragma Inline (Flag98);
1849 
1850       function Flag99 (N : Node_Id) return Boolean;
1851       pragma Inline (Flag99);
1852 
1853       function Flag100 (N : Node_Id) return Boolean;
1854       pragma Inline (Flag100);
1855 
1856       function Flag101 (N : Node_Id) return Boolean;
1857       pragma Inline (Flag101);
1858 
1859       function Flag102 (N : Node_Id) return Boolean;
1860       pragma Inline (Flag102);
1861 
1862       function Flag103 (N : Node_Id) return Boolean;
1863       pragma Inline (Flag103);
1864 
1865       function Flag104 (N : Node_Id) return Boolean;
1866       pragma Inline (Flag104);
1867 
1868       function Flag105 (N : Node_Id) return Boolean;
1869       pragma Inline (Flag105);
1870 
1871       function Flag106 (N : Node_Id) return Boolean;
1872       pragma Inline (Flag106);
1873 
1874       function Flag107 (N : Node_Id) return Boolean;
1875       pragma Inline (Flag107);
1876 
1877       function Flag108 (N : Node_Id) return Boolean;
1878       pragma Inline (Flag108);
1879 
1880       function Flag109 (N : Node_Id) return Boolean;
1881       pragma Inline (Flag109);
1882 
1883       function Flag110 (N : Node_Id) return Boolean;
1884       pragma Inline (Flag110);
1885 
1886       function Flag111 (N : Node_Id) return Boolean;
1887       pragma Inline (Flag111);
1888 
1889       function Flag112 (N : Node_Id) return Boolean;
1890       pragma Inline (Flag112);
1891 
1892       function Flag113 (N : Node_Id) return Boolean;
1893       pragma Inline (Flag113);
1894 
1895       function Flag114 (N : Node_Id) return Boolean;
1896       pragma Inline (Flag114);
1897 
1898       function Flag115 (N : Node_Id) return Boolean;
1899       pragma Inline (Flag115);
1900 
1901       function Flag116 (N : Node_Id) return Boolean;
1902       pragma Inline (Flag116);
1903 
1904       function Flag117 (N : Node_Id) return Boolean;
1905       pragma Inline (Flag117);
1906 
1907       function Flag118 (N : Node_Id) return Boolean;
1908       pragma Inline (Flag118);
1909 
1910       function Flag119 (N : Node_Id) return Boolean;
1911       pragma Inline (Flag119);
1912 
1913       function Flag120 (N : Node_Id) return Boolean;
1914       pragma Inline (Flag120);
1915 
1916       function Flag121 (N : Node_Id) return Boolean;
1917       pragma Inline (Flag121);
1918 
1919       function Flag122 (N : Node_Id) return Boolean;
1920       pragma Inline (Flag122);
1921 
1922       function Flag123 (N : Node_Id) return Boolean;
1923       pragma Inline (Flag123);
1924 
1925       function Flag124 (N : Node_Id) return Boolean;
1926       pragma Inline (Flag124);
1927 
1928       function Flag125 (N : Node_Id) return Boolean;
1929       pragma Inline (Flag125);
1930 
1931       function Flag126 (N : Node_Id) return Boolean;
1932       pragma Inline (Flag126);
1933 
1934       function Flag127 (N : Node_Id) return Boolean;
1935       pragma Inline (Flag127);
1936 
1937       function Flag128 (N : Node_Id) return Boolean;
1938       pragma Inline (Flag128);
1939 
1940       function Flag129 (N : Node_Id) return Boolean;
1941       pragma Inline (Flag129);
1942 
1943       function Flag130 (N : Node_Id) return Boolean;
1944       pragma Inline (Flag130);
1945 
1946       function Flag131 (N : Node_Id) return Boolean;
1947       pragma Inline (Flag131);
1948 
1949       function Flag132 (N : Node_Id) return Boolean;
1950       pragma Inline (Flag132);
1951 
1952       function Flag133 (N : Node_Id) return Boolean;
1953       pragma Inline (Flag133);
1954 
1955       function Flag134 (N : Node_Id) return Boolean;
1956       pragma Inline (Flag134);
1957 
1958       function Flag135 (N : Node_Id) return Boolean;
1959       pragma Inline (Flag135);
1960 
1961       function Flag136 (N : Node_Id) return Boolean;
1962       pragma Inline (Flag136);
1963 
1964       function Flag137 (N : Node_Id) return Boolean;
1965       pragma Inline (Flag137);
1966 
1967       function Flag138 (N : Node_Id) return Boolean;
1968       pragma Inline (Flag138);
1969 
1970       function Flag139 (N : Node_Id) return Boolean;
1971       pragma Inline (Flag139);
1972 
1973       function Flag140 (N : Node_Id) return Boolean;
1974       pragma Inline (Flag140);
1975 
1976       function Flag141 (N : Node_Id) return Boolean;
1977       pragma Inline (Flag141);
1978 
1979       function Flag142 (N : Node_Id) return Boolean;
1980       pragma Inline (Flag142);
1981 
1982       function Flag143 (N : Node_Id) return Boolean;
1983       pragma Inline (Flag143);
1984 
1985       function Flag144 (N : Node_Id) return Boolean;
1986       pragma Inline (Flag144);
1987 
1988       function Flag145 (N : Node_Id) return Boolean;
1989       pragma Inline (Flag145);
1990 
1991       function Flag146 (N : Node_Id) return Boolean;
1992       pragma Inline (Flag146);
1993 
1994       function Flag147 (N : Node_Id) return Boolean;
1995       pragma Inline (Flag147);
1996 
1997       function Flag148 (N : Node_Id) return Boolean;
1998       pragma Inline (Flag148);
1999 
2000       function Flag149 (N : Node_Id) return Boolean;
2001       pragma Inline (Flag149);
2002 
2003       function Flag150 (N : Node_Id) return Boolean;
2004       pragma Inline (Flag150);
2005 
2006       function Flag151 (N : Node_Id) return Boolean;
2007       pragma Inline (Flag151);
2008 
2009       function Flag152 (N : Node_Id) return Boolean;
2010       pragma Inline (Flag152);
2011 
2012       function Flag153 (N : Node_Id) return Boolean;
2013       pragma Inline (Flag153);
2014 
2015       function Flag154 (N : Node_Id) return Boolean;
2016       pragma Inline (Flag154);
2017 
2018       function Flag155 (N : Node_Id) return Boolean;
2019       pragma Inline (Flag155);
2020 
2021       function Flag156 (N : Node_Id) return Boolean;
2022       pragma Inline (Flag156);
2023 
2024       function Flag157 (N : Node_Id) return Boolean;
2025       pragma Inline (Flag157);
2026 
2027       function Flag158 (N : Node_Id) return Boolean;
2028       pragma Inline (Flag158);
2029 
2030       function Flag159 (N : Node_Id) return Boolean;
2031       pragma Inline (Flag159);
2032 
2033       function Flag160 (N : Node_Id) return Boolean;
2034       pragma Inline (Flag160);
2035 
2036       function Flag161 (N : Node_Id) return Boolean;
2037       pragma Inline (Flag161);
2038 
2039       function Flag162 (N : Node_Id) return Boolean;
2040       pragma Inline (Flag162);
2041 
2042       function Flag163 (N : Node_Id) return Boolean;
2043       pragma Inline (Flag163);
2044 
2045       function Flag164 (N : Node_Id) return Boolean;
2046       pragma Inline (Flag164);
2047 
2048       function Flag165 (N : Node_Id) return Boolean;
2049       pragma Inline (Flag165);
2050 
2051       function Flag166 (N : Node_Id) return Boolean;
2052       pragma Inline (Flag166);
2053 
2054       function Flag167 (N : Node_Id) return Boolean;
2055       pragma Inline (Flag167);
2056 
2057       function Flag168 (N : Node_Id) return Boolean;
2058       pragma Inline (Flag168);
2059 
2060       function Flag169 (N : Node_Id) return Boolean;
2061       pragma Inline (Flag169);
2062 
2063       function Flag170 (N : Node_Id) return Boolean;
2064       pragma Inline (Flag170);
2065 
2066       function Flag171 (N : Node_Id) return Boolean;
2067       pragma Inline (Flag171);
2068 
2069       function Flag172 (N : Node_Id) return Boolean;
2070       pragma Inline (Flag172);
2071 
2072       function Flag173 (N : Node_Id) return Boolean;
2073       pragma Inline (Flag173);
2074 
2075       function Flag174 (N : Node_Id) return Boolean;
2076       pragma Inline (Flag174);
2077 
2078       function Flag175 (N : Node_Id) return Boolean;
2079       pragma Inline (Flag175);
2080 
2081       function Flag176 (N : Node_Id) return Boolean;
2082       pragma Inline (Flag176);
2083 
2084       function Flag177 (N : Node_Id) return Boolean;
2085       pragma Inline (Flag177);
2086 
2087       function Flag178 (N : Node_Id) return Boolean;
2088       pragma Inline (Flag178);
2089 
2090       function Flag179 (N : Node_Id) return Boolean;
2091       pragma Inline (Flag179);
2092 
2093       function Flag180 (N : Node_Id) return Boolean;
2094       pragma Inline (Flag180);
2095 
2096       function Flag181 (N : Node_Id) return Boolean;
2097       pragma Inline (Flag181);
2098 
2099       function Flag182 (N : Node_Id) return Boolean;
2100       pragma Inline (Flag182);
2101 
2102       function Flag183 (N : Node_Id) return Boolean;
2103       pragma Inline (Flag183);
2104 
2105       function Flag184 (N : Node_Id) return Boolean;
2106       pragma Inline (Flag184);
2107 
2108       function Flag185 (N : Node_Id) return Boolean;
2109       pragma Inline (Flag185);
2110 
2111       function Flag186 (N : Node_Id) return Boolean;
2112       pragma Inline (Flag186);
2113 
2114       function Flag187 (N : Node_Id) return Boolean;
2115       pragma Inline (Flag187);
2116 
2117       function Flag188 (N : Node_Id) return Boolean;
2118       pragma Inline (Flag188);
2119 
2120       function Flag189 (N : Node_Id) return Boolean;
2121       pragma Inline (Flag189);
2122 
2123       function Flag190 (N : Node_Id) return Boolean;
2124       pragma Inline (Flag190);
2125 
2126       function Flag191 (N : Node_Id) return Boolean;
2127       pragma Inline (Flag191);
2128 
2129       function Flag192 (N : Node_Id) return Boolean;
2130       pragma Inline (Flag192);
2131 
2132       function Flag193 (N : Node_Id) return Boolean;
2133       pragma Inline (Flag193);
2134 
2135       function Flag194 (N : Node_Id) return Boolean;
2136       pragma Inline (Flag194);
2137 
2138       function Flag195 (N : Node_Id) return Boolean;
2139       pragma Inline (Flag195);
2140 
2141       function Flag196 (N : Node_Id) return Boolean;
2142       pragma Inline (Flag196);
2143 
2144       function Flag197 (N : Node_Id) return Boolean;
2145       pragma Inline (Flag197);
2146 
2147       function Flag198 (N : Node_Id) return Boolean;
2148       pragma Inline (Flag198);
2149 
2150       function Flag199 (N : Node_Id) return Boolean;
2151       pragma Inline (Flag199);
2152 
2153       function Flag200 (N : Node_Id) return Boolean;
2154       pragma Inline (Flag200);
2155 
2156       function Flag201 (N : Node_Id) return Boolean;
2157       pragma Inline (Flag201);
2158 
2159       function Flag202 (N : Node_Id) return Boolean;
2160       pragma Inline (Flag202);
2161 
2162       function Flag203 (N : Node_Id) return Boolean;
2163       pragma Inline (Flag203);
2164 
2165       function Flag204 (N : Node_Id) return Boolean;
2166       pragma Inline (Flag204);
2167 
2168       function Flag205 (N : Node_Id) return Boolean;
2169       pragma Inline (Flag205);
2170 
2171       function Flag206 (N : Node_Id) return Boolean;
2172       pragma Inline (Flag206);
2173 
2174       function Flag207 (N : Node_Id) return Boolean;
2175       pragma Inline (Flag207);
2176 
2177       function Flag208 (N : Node_Id) return Boolean;
2178       pragma Inline (Flag208);
2179 
2180       function Flag209 (N : Node_Id) return Boolean;
2181       pragma Inline (Flag209);
2182 
2183       function Flag210 (N : Node_Id) return Boolean;
2184       pragma Inline (Flag210);
2185 
2186       function Flag211 (N : Node_Id) return Boolean;
2187       pragma Inline (Flag211);
2188 
2189       function Flag212 (N : Node_Id) return Boolean;
2190       pragma Inline (Flag212);
2191 
2192       function Flag213 (N : Node_Id) return Boolean;
2193       pragma Inline (Flag213);
2194 
2195       function Flag214 (N : Node_Id) return Boolean;
2196       pragma Inline (Flag214);
2197 
2198       function Flag215 (N : Node_Id) return Boolean;
2199       pragma Inline (Flag215);
2200 
2201       function Flag216 (N : Node_Id) return Boolean;
2202       pragma Inline (Flag216);
2203 
2204       function Flag217 (N : Node_Id) return Boolean;
2205       pragma Inline (Flag217);
2206 
2207       function Flag218 (N : Node_Id) return Boolean;
2208       pragma Inline (Flag218);
2209 
2210       function Flag219 (N : Node_Id) return Boolean;
2211       pragma Inline (Flag219);
2212 
2213       function Flag220 (N : Node_Id) return Boolean;
2214       pragma Inline (Flag220);
2215 
2216       function Flag221 (N : Node_Id) return Boolean;
2217       pragma Inline (Flag221);
2218 
2219       function Flag222 (N : Node_Id) return Boolean;
2220       pragma Inline (Flag222);
2221 
2222       function Flag223 (N : Node_Id) return Boolean;
2223       pragma Inline (Flag223);
2224 
2225       function Flag224 (N : Node_Id) return Boolean;
2226       pragma Inline (Flag224);
2227 
2228       function Flag225 (N : Node_Id) return Boolean;
2229       pragma Inline (Flag225);
2230 
2231       function Flag226 (N : Node_Id) return Boolean;
2232       pragma Inline (Flag226);
2233 
2234       function Flag227 (N : Node_Id) return Boolean;
2235       pragma Inline (Flag227);
2236 
2237       function Flag228 (N : Node_Id) return Boolean;
2238       pragma Inline (Flag228);
2239 
2240       function Flag229 (N : Node_Id) return Boolean;
2241       pragma Inline (Flag229);
2242 
2243       function Flag230 (N : Node_Id) return Boolean;
2244       pragma Inline (Flag230);
2245 
2246       function Flag231 (N : Node_Id) return Boolean;
2247       pragma Inline (Flag231);
2248 
2249       function Flag232 (N : Node_Id) return Boolean;
2250       pragma Inline (Flag232);
2251 
2252       function Flag233 (N : Node_Id) return Boolean;
2253       pragma Inline (Flag233);
2254 
2255       function Flag234 (N : Node_Id) return Boolean;
2256       pragma Inline (Flag234);
2257 
2258       function Flag235 (N : Node_Id) return Boolean;
2259       pragma Inline (Flag235);
2260 
2261       function Flag236 (N : Node_Id) return Boolean;
2262       pragma Inline (Flag236);
2263 
2264       function Flag237 (N : Node_Id) return Boolean;
2265       pragma Inline (Flag237);
2266 
2267       function Flag238 (N : Node_Id) return Boolean;
2268       pragma Inline (Flag238);
2269 
2270       function Flag239 (N : Node_Id) return Boolean;
2271       pragma Inline (Flag239);
2272 
2273       function Flag240 (N : Node_Id) return Boolean;
2274       pragma Inline (Flag240);
2275 
2276       function Flag241 (N : Node_Id) return Boolean;
2277       pragma Inline (Flag241);
2278 
2279       function Flag242 (N : Node_Id) return Boolean;
2280       pragma Inline (Flag242);
2281 
2282       function Flag243 (N : Node_Id) return Boolean;
2283       pragma Inline (Flag243);
2284 
2285       function Flag244 (N : Node_Id) return Boolean;
2286       pragma Inline (Flag244);
2287 
2288       function Flag245 (N : Node_Id) return Boolean;
2289       pragma Inline (Flag245);
2290 
2291       function Flag246 (N : Node_Id) return Boolean;
2292       pragma Inline (Flag246);
2293 
2294       function Flag247 (N : Node_Id) return Boolean;
2295       pragma Inline (Flag247);
2296 
2297       function Flag248 (N : Node_Id) return Boolean;
2298       pragma Inline (Flag248);
2299 
2300       function Flag249 (N : Node_Id) return Boolean;
2301       pragma Inline (Flag249);
2302 
2303       function Flag250 (N : Node_Id) return Boolean;
2304       pragma Inline (Flag250);
2305 
2306       function Flag251 (N : Node_Id) return Boolean;
2307       pragma Inline (Flag251);
2308 
2309       function Flag252 (N : Node_Id) return Boolean;
2310       pragma Inline (Flag252);
2311 
2312       function Flag253 (N : Node_Id) return Boolean;
2313       pragma Inline (Flag253);
2314 
2315       function Flag254 (N : Node_Id) return Boolean;
2316       pragma Inline (Flag254);
2317 
2318       function Flag255 (N : Node_Id) return Boolean;
2319       pragma Inline (Flag255);
2320 
2321       function Flag256 (N : Node_Id) return Boolean;
2322       pragma Inline (Flag256);
2323 
2324       function Flag257 (N : Node_Id) return Boolean;
2325       pragma Inline (Flag257);
2326 
2327       function Flag258 (N : Node_Id) return Boolean;
2328       pragma Inline (Flag258);
2329 
2330       function Flag259 (N : Node_Id) return Boolean;
2331       pragma Inline (Flag259);
2332 
2333       function Flag260 (N : Node_Id) return Boolean;
2334       pragma Inline (Flag260);
2335 
2336       function Flag261 (N : Node_Id) return Boolean;
2337       pragma Inline (Flag261);
2338 
2339       function Flag262 (N : Node_Id) return Boolean;
2340       pragma Inline (Flag262);
2341 
2342       function Flag263 (N : Node_Id) return Boolean;
2343       pragma Inline (Flag263);
2344 
2345       function Flag264 (N : Node_Id) return Boolean;
2346       pragma Inline (Flag264);
2347 
2348       function Flag265 (N : Node_Id) return Boolean;
2349       pragma Inline (Flag265);
2350 
2351       function Flag266 (N : Node_Id) return Boolean;
2352       pragma Inline (Flag266);
2353 
2354       function Flag267 (N : Node_Id) return Boolean;
2355       pragma Inline (Flag267);
2356 
2357       function Flag268 (N : Node_Id) return Boolean;
2358       pragma Inline (Flag268);
2359 
2360       function Flag269 (N : Node_Id) return Boolean;
2361       pragma Inline (Flag269);
2362 
2363       function Flag270 (N : Node_Id) return Boolean;
2364       pragma Inline (Flag270);
2365 
2366       function Flag271 (N : Node_Id) return Boolean;
2367       pragma Inline (Flag271);
2368 
2369       function Flag272 (N : Node_Id) return Boolean;
2370       pragma Inline (Flag272);
2371 
2372       function Flag273 (N : Node_Id) return Boolean;
2373       pragma Inline (Flag273);
2374 
2375       function Flag274 (N : Node_Id) return Boolean;
2376       pragma Inline (Flag274);
2377 
2378       function Flag275 (N : Node_Id) return Boolean;
2379       pragma Inline (Flag275);
2380 
2381       function Flag276 (N : Node_Id) return Boolean;
2382       pragma Inline (Flag276);
2383 
2384       function Flag277 (N : Node_Id) return Boolean;
2385       pragma Inline (Flag277);
2386 
2387       function Flag278 (N : Node_Id) return Boolean;
2388       pragma Inline (Flag278);
2389 
2390       function Flag279 (N : Node_Id) return Boolean;
2391       pragma Inline (Flag279);
2392 
2393       function Flag280 (N : Node_Id) return Boolean;
2394       pragma Inline (Flag280);
2395 
2396       function Flag281 (N : Node_Id) return Boolean;
2397       pragma Inline (Flag281);
2398 
2399       function Flag282 (N : Node_Id) return Boolean;
2400       pragma Inline (Flag282);
2401 
2402       function Flag283 (N : Node_Id) return Boolean;
2403       pragma Inline (Flag283);
2404 
2405       function Flag284 (N : Node_Id) return Boolean;
2406       pragma Inline (Flag284);
2407 
2408       function Flag285 (N : Node_Id) return Boolean;
2409       pragma Inline (Flag285);
2410 
2411       function Flag286 (N : Node_Id) return Boolean;
2412       pragma Inline (Flag286);
2413 
2414       function Flag287 (N : Node_Id) return Boolean;
2415       pragma Inline (Flag287);
2416 
2417       function Flag288 (N : Node_Id) return Boolean;
2418       pragma Inline (Flag288);
2419 
2420       function Flag289 (N : Node_Id) return Boolean;
2421       pragma Inline (Flag289);
2422 
2423       function Flag290 (N : Node_Id) return Boolean;
2424       pragma Inline (Flag290);
2425 
2426       function Flag291 (N : Node_Id) return Boolean;
2427       pragma Inline (Flag291);
2428 
2429       function Flag292 (N : Node_Id) return Boolean;
2430       pragma Inline (Flag292);
2431 
2432       function Flag293 (N : Node_Id) return Boolean;
2433       pragma Inline (Flag293);
2434 
2435       function Flag294 (N : Node_Id) return Boolean;
2436       pragma Inline (Flag294);
2437 
2438       function Flag295 (N : Node_Id) return Boolean;
2439       pragma Inline (Flag295);
2440 
2441       function Flag296 (N : Node_Id) return Boolean;
2442       pragma Inline (Flag296);
2443 
2444       function Flag297 (N : Node_Id) return Boolean;
2445       pragma Inline (Flag297);
2446 
2447       function Flag298 (N : Node_Id) return Boolean;
2448       pragma Inline (Flag298);
2449 
2450       function Flag299 (N : Node_Id) return Boolean;
2451       pragma Inline (Flag299);
2452 
2453       function Flag300 (N : Node_Id) return Boolean;
2454       pragma Inline (Flag300);
2455 
2456       function Flag301 (N : Node_Id) return Boolean;
2457       pragma Inline (Flag301);
2458 
2459       function Flag302 (N : Node_Id) return Boolean;
2460       pragma Inline (Flag302);
2461 
2462       function Flag303 (N : Node_Id) return Boolean;
2463       pragma Inline (Flag303);
2464 
2465       function Flag304 (N : Node_Id) return Boolean;
2466       pragma Inline (Flag304);
2467 
2468       function Flag305 (N : Node_Id) return Boolean;
2469       pragma Inline (Flag305);
2470 
2471       function Flag306 (N : Node_Id) return Boolean;
2472       pragma Inline (Flag306);
2473 
2474       function Flag307 (N : Node_Id) return Boolean;
2475       pragma Inline (Flag307);
2476 
2477       function Flag308 (N : Node_Id) return Boolean;
2478       pragma Inline (Flag308);
2479 
2480       function Flag309 (N : Node_Id) return Boolean;
2481       pragma Inline (Flag309);
2482 
2483       function Flag310 (N : Node_Id) return Boolean;
2484       pragma Inline (Flag310);
2485 
2486       function Flag311 (N : Node_Id) return Boolean;
2487       pragma Inline (Flag311);
2488 
2489       function Flag312 (N : Node_Id) return Boolean;
2490       pragma Inline (Flag312);
2491 
2492       function Flag313 (N : Node_Id) return Boolean;
2493       pragma Inline (Flag313);
2494 
2495       function Flag314 (N : Node_Id) return Boolean;
2496       pragma Inline (Flag314);
2497 
2498       function Flag315 (N : Node_Id) return Boolean;
2499       pragma Inline (Flag315);
2500 
2501       function Flag316 (N : Node_Id) return Boolean;
2502       pragma Inline (Flag316);
2503 
2504       function Flag317 (N : Node_Id) return Boolean;
2505       pragma Inline (Flag317);
2506 
2507       --  Procedures to set value of indicated field
2508 
2509       procedure Set_Nkind (N : Node_Id; Val : Node_Kind);
2510       pragma Inline (Set_Nkind);
2511 
2512       procedure Set_Field1 (N : Node_Id; Val : Union_Id);
2513       pragma Inline (Set_Field1);
2514 
2515       procedure Set_Field2 (N : Node_Id; Val : Union_Id);
2516       pragma Inline (Set_Field2);
2517 
2518       procedure Set_Field3 (N : Node_Id; Val : Union_Id);
2519       pragma Inline (Set_Field3);
2520 
2521       procedure Set_Field4 (N : Node_Id; Val : Union_Id);
2522       pragma Inline (Set_Field4);
2523 
2524       procedure Set_Field5 (N : Node_Id; Val : Union_Id);
2525       pragma Inline (Set_Field5);
2526 
2527       procedure Set_Field6 (N : Node_Id; Val : Union_Id);
2528       pragma Inline (Set_Field6);
2529 
2530       procedure Set_Field7 (N : Node_Id; Val : Union_Id);
2531       pragma Inline (Set_Field7);
2532 
2533       procedure Set_Field8 (N : Node_Id; Val : Union_Id);
2534       pragma Inline (Set_Field8);
2535 
2536       procedure Set_Field9 (N : Node_Id; Val : Union_Id);
2537       pragma Inline (Set_Field9);
2538 
2539       procedure Set_Field10 (N : Node_Id; Val : Union_Id);
2540       pragma Inline (Set_Field10);
2541 
2542       procedure Set_Field11 (N : Node_Id; Val : Union_Id);
2543       pragma Inline (Set_Field11);
2544 
2545       procedure Set_Field12 (N : Node_Id; Val : Union_Id);
2546       pragma Inline (Set_Field12);
2547 
2548       procedure Set_Field13 (N : Node_Id; Val : Union_Id);
2549       pragma Inline (Set_Field13);
2550 
2551       procedure Set_Field14 (N : Node_Id; Val : Union_Id);
2552       pragma Inline (Set_Field14);
2553 
2554       procedure Set_Field15 (N : Node_Id; Val : Union_Id);
2555       pragma Inline (Set_Field15);
2556 
2557       procedure Set_Field16 (N : Node_Id; Val : Union_Id);
2558       pragma Inline (Set_Field16);
2559 
2560       procedure Set_Field17 (N : Node_Id; Val : Union_Id);
2561       pragma Inline (Set_Field17);
2562 
2563       procedure Set_Field18 (N : Node_Id; Val : Union_Id);
2564       pragma Inline (Set_Field18);
2565 
2566       procedure Set_Field19 (N : Node_Id; Val : Union_Id);
2567       pragma Inline (Set_Field19);
2568 
2569       procedure Set_Field20 (N : Node_Id; Val : Union_Id);
2570       pragma Inline (Set_Field20);
2571 
2572       procedure Set_Field21 (N : Node_Id; Val : Union_Id);
2573       pragma Inline (Set_Field21);
2574 
2575       procedure Set_Field22 (N : Node_Id; Val : Union_Id);
2576       pragma Inline (Set_Field22);
2577 
2578       procedure Set_Field23 (N : Node_Id; Val : Union_Id);
2579       pragma Inline (Set_Field23);
2580 
2581       procedure Set_Field24 (N : Node_Id; Val : Union_Id);
2582       pragma Inline (Set_Field24);
2583 
2584       procedure Set_Field25 (N : Node_Id; Val : Union_Id);
2585       pragma Inline (Set_Field25);
2586 
2587       procedure Set_Field26 (N : Node_Id; Val : Union_Id);
2588       pragma Inline (Set_Field26);
2589 
2590       procedure Set_Field27 (N : Node_Id; Val : Union_Id);
2591       pragma Inline (Set_Field27);
2592 
2593       procedure Set_Field28 (N : Node_Id; Val : Union_Id);
2594       pragma Inline (Set_Field28);
2595 
2596       procedure Set_Field29 (N : Node_Id; Val : Union_Id);
2597       pragma Inline (Set_Field29);
2598 
2599       procedure Set_Field30 (N : Node_Id; Val : Union_Id);
2600       pragma Inline (Set_Field30);
2601 
2602       procedure Set_Field31 (N : Node_Id; Val : Union_Id);
2603       pragma Inline (Set_Field31);
2604 
2605       procedure Set_Field32 (N : Node_Id; Val : Union_Id);
2606       pragma Inline (Set_Field32);
2607 
2608       procedure Set_Field33 (N : Node_Id; Val : Union_Id);
2609       pragma Inline (Set_Field33);
2610 
2611       procedure Set_Field34 (N : Node_Id; Val : Union_Id);
2612       pragma Inline (Set_Field34);
2613 
2614       procedure Set_Field35 (N : Node_Id; Val : Union_Id);
2615       pragma Inline (Set_Field35);
2616 
2617       procedure Set_Field36 (N : Node_Id; Val : Union_Id);
2618       pragma Inline (Set_Field36);
2619 
2620       procedure Set_Field37 (N : Node_Id; Val : Union_Id);
2621       pragma Inline (Set_Field37);
2622 
2623       procedure Set_Field38 (N : Node_Id; Val : Union_Id);
2624       pragma Inline (Set_Field38);
2625 
2626       procedure Set_Field39 (N : Node_Id; Val : Union_Id);
2627       pragma Inline (Set_Field39);
2628 
2629       procedure Set_Field40 (N : Node_Id; Val : Union_Id);
2630       pragma Inline (Set_Field40);
2631 
2632       procedure Set_Field41 (N : Node_Id; Val : Union_Id);
2633       pragma Inline (Set_Field41);
2634 
2635       procedure Set_Node1 (N : Node_Id; Val : Node_Id);
2636       pragma Inline (Set_Node1);
2637 
2638       procedure Set_Node2 (N : Node_Id; Val : Node_Id);
2639       pragma Inline (Set_Node2);
2640 
2641       procedure Set_Node3 (N : Node_Id; Val : Node_Id);
2642       pragma Inline (Set_Node3);
2643 
2644       procedure Set_Node4 (N : Node_Id; Val : Node_Id);
2645       pragma Inline (Set_Node4);
2646 
2647       procedure Set_Node5 (N : Node_Id; Val : Node_Id);
2648       pragma Inline (Set_Node5);
2649 
2650       procedure Set_Node6 (N : Node_Id; Val : Node_Id);
2651       pragma Inline (Set_Node6);
2652 
2653       procedure Set_Node7 (N : Node_Id; Val : Node_Id);
2654       pragma Inline (Set_Node7);
2655 
2656       procedure Set_Node8 (N : Node_Id; Val : Node_Id);
2657       pragma Inline (Set_Node8);
2658 
2659       procedure Set_Node9 (N : Node_Id; Val : Node_Id);
2660       pragma Inline (Set_Node9);
2661 
2662       procedure Set_Node10 (N : Node_Id; Val : Node_Id);
2663       pragma Inline (Set_Node10);
2664 
2665       procedure Set_Node11 (N : Node_Id; Val : Node_Id);
2666       pragma Inline (Set_Node11);
2667 
2668       procedure Set_Node12 (N : Node_Id; Val : Node_Id);
2669       pragma Inline (Set_Node12);
2670 
2671       procedure Set_Node13 (N : Node_Id; Val : Node_Id);
2672       pragma Inline (Set_Node13);
2673 
2674       procedure Set_Node14 (N : Node_Id; Val : Node_Id);
2675       pragma Inline (Set_Node14);
2676 
2677       procedure Set_Node15 (N : Node_Id; Val : Node_Id);
2678       pragma Inline (Set_Node15);
2679 
2680       procedure Set_Node16 (N : Node_Id; Val : Node_Id);
2681       pragma Inline (Set_Node16);
2682 
2683       procedure Set_Node17 (N : Node_Id; Val : Node_Id);
2684       pragma Inline (Set_Node17);
2685 
2686       procedure Set_Node18 (N : Node_Id; Val : Node_Id);
2687       pragma Inline (Set_Node18);
2688 
2689       procedure Set_Node19 (N : Node_Id; Val : Node_Id);
2690       pragma Inline (Set_Node19);
2691 
2692       procedure Set_Node20 (N : Node_Id; Val : Node_Id);
2693       pragma Inline (Set_Node20);
2694 
2695       procedure Set_Node21 (N : Node_Id; Val : Node_Id);
2696       pragma Inline (Set_Node21);
2697 
2698       procedure Set_Node22 (N : Node_Id; Val : Node_Id);
2699       pragma Inline (Set_Node22);
2700 
2701       procedure Set_Node23 (N : Node_Id; Val : Node_Id);
2702       pragma Inline (Set_Node23);
2703 
2704       procedure Set_Node24 (N : Node_Id; Val : Node_Id);
2705       pragma Inline (Set_Node24);
2706 
2707       procedure Set_Node25 (N : Node_Id; Val : Node_Id);
2708       pragma Inline (Set_Node25);
2709 
2710       procedure Set_Node26 (N : Node_Id; Val : Node_Id);
2711       pragma Inline (Set_Node26);
2712 
2713       procedure Set_Node27 (N : Node_Id; Val : Node_Id);
2714       pragma Inline (Set_Node27);
2715 
2716       procedure Set_Node28 (N : Node_Id; Val : Node_Id);
2717       pragma Inline (Set_Node28);
2718 
2719       procedure Set_Node29 (N : Node_Id; Val : Node_Id);
2720       pragma Inline (Set_Node29);
2721 
2722       procedure Set_Node30 (N : Node_Id; Val : Node_Id);
2723       pragma Inline (Set_Node30);
2724 
2725       procedure Set_Node31 (N : Node_Id; Val : Node_Id);
2726       pragma Inline (Set_Node31);
2727 
2728       procedure Set_Node32 (N : Node_Id; Val : Node_Id);
2729       pragma Inline (Set_Node32);
2730 
2731       procedure Set_Node33 (N : Node_Id; Val : Node_Id);
2732       pragma Inline (Set_Node33);
2733 
2734       procedure Set_Node34 (N : Node_Id; Val : Node_Id);
2735       pragma Inline (Set_Node34);
2736 
2737       procedure Set_Node35 (N : Node_Id; Val : Node_Id);
2738       pragma Inline (Set_Node35);
2739 
2740       procedure Set_Node36 (N : Node_Id; Val : Node_Id);
2741       pragma Inline (Set_Node36);
2742 
2743       procedure Set_Node37 (N : Node_Id; Val : Node_Id);
2744       pragma Inline (Set_Node37);
2745 
2746       procedure Set_Node38 (N : Node_Id; Val : Node_Id);
2747       pragma Inline (Set_Node38);
2748 
2749       procedure Set_Node39 (N : Node_Id; Val : Node_Id);
2750       pragma Inline (Set_Node39);
2751 
2752       procedure Set_Node40 (N : Node_Id; Val : Node_Id);
2753       pragma Inline (Set_Node40);
2754 
2755       procedure Set_Node41 (N : Node_Id; Val : Node_Id);
2756       pragma Inline (Set_Node41);
2757 
2758       procedure Set_List1 (N : Node_Id; Val : List_Id);
2759       pragma Inline (Set_List1);
2760 
2761       procedure Set_List2 (N : Node_Id; Val : List_Id);
2762       pragma Inline (Set_List2);
2763 
2764       procedure Set_List3 (N : Node_Id; Val : List_Id);
2765       pragma Inline (Set_List3);
2766 
2767       procedure Set_List4 (N : Node_Id; Val : List_Id);
2768       pragma Inline (Set_List4);
2769 
2770       procedure Set_List5 (N : Node_Id; Val : List_Id);
2771       pragma Inline (Set_List5);
2772 
2773       procedure Set_List10 (N : Node_Id; Val : List_Id);
2774       pragma Inline (Set_List10);
2775 
2776       procedure Set_List14 (N : Node_Id; Val : List_Id);
2777       pragma Inline (Set_List14);
2778 
2779       procedure Set_List25 (N : Node_Id; Val : List_Id);
2780       pragma Inline (Set_List25);
2781 
2782       procedure Set_List38 (N : Node_Id; Val : List_Id);
2783       pragma Inline (Set_List38);
2784 
2785       procedure Set_List39 (N : Node_Id; Val : List_Id);
2786       pragma Inline (Set_List39);
2787 
2788       procedure Set_Elist1 (N : Node_Id; Val : Elist_Id);
2789       pragma Inline (Set_Elist1);
2790 
2791       procedure Set_Elist2 (N : Node_Id; Val : Elist_Id);
2792       pragma Inline (Set_Elist2);
2793 
2794       procedure Set_Elist3 (N : Node_Id; Val : Elist_Id);
2795       pragma Inline (Set_Elist3);
2796 
2797       procedure Set_Elist4 (N : Node_Id; Val : Elist_Id);
2798       pragma Inline (Set_Elist4);
2799 
2800       procedure Set_Elist5 (N : Node_Id; Val : Elist_Id);
2801       pragma Inline (Set_Elist5);
2802 
2803       procedure Set_Elist8 (N : Node_Id; Val : Elist_Id);
2804       pragma Inline (Set_Elist8);
2805 
2806       procedure Set_Elist9 (N : Node_Id; Val : Elist_Id);
2807       pragma Inline (Set_Elist9);
2808 
2809       procedure Set_Elist10 (N : Node_Id; Val : Elist_Id);
2810       pragma Inline (Set_Elist10);
2811 
2812       procedure Set_Elist11 (N : Node_Id; Val : Elist_Id);
2813       pragma Inline (Set_Elist11);
2814 
2815       procedure Set_Elist13 (N : Node_Id; Val : Elist_Id);
2816       pragma Inline (Set_Elist13);
2817 
2818       procedure Set_Elist15 (N : Node_Id; Val : Elist_Id);
2819       pragma Inline (Set_Elist15);
2820 
2821       procedure Set_Elist16 (N : Node_Id; Val : Elist_Id);
2822       pragma Inline (Set_Elist16);
2823 
2824       procedure Set_Elist18 (N : Node_Id; Val : Elist_Id);
2825       pragma Inline (Set_Elist18);
2826 
2827       procedure Set_Elist21 (N : Node_Id; Val : Elist_Id);
2828       pragma Inline (Set_Elist21);
2829 
2830       procedure Set_Elist23 (N : Node_Id; Val : Elist_Id);
2831       pragma Inline (Set_Elist23);
2832 
2833       procedure Set_Elist24 (N : Node_Id; Val : Elist_Id);
2834       pragma Inline (Set_Elist24);
2835 
2836       procedure Set_Elist25 (N : Node_Id; Val : Elist_Id);
2837       pragma Inline (Set_Elist25);
2838 
2839       procedure Set_Elist26 (N : Node_Id; Val : Elist_Id);
2840       pragma Inline (Set_Elist26);
2841 
2842       procedure Set_Elist29 (N : Node_Id; Val : Elist_Id);
2843       pragma Inline (Set_Elist29);
2844 
2845       procedure Set_Elist36 (N : Node_Id; Val : Elist_Id);
2846       pragma Inline (Set_Elist36);
2847 
2848       procedure Set_Name1 (N : Node_Id; Val : Name_Id);
2849       pragma Inline (Set_Name1);
2850 
2851       procedure Set_Name2 (N : Node_Id; Val : Name_Id);
2852       pragma Inline (Set_Name2);
2853 
2854       procedure Set_Str3 (N : Node_Id; Val : String_Id);
2855       pragma Inline (Set_Str3);
2856 
2857       procedure Set_Uint2 (N : Node_Id; Val : Uint);
2858       pragma Inline (Set_Uint2);
2859 
2860       procedure Set_Uint3 (N : Node_Id; Val : Uint);
2861       pragma Inline (Set_Uint3);
2862 
2863       procedure Set_Uint4 (N : Node_Id; Val : Uint);
2864       pragma Inline (Set_Uint4);
2865 
2866       procedure Set_Uint5 (N : Node_Id; Val : Uint);
2867       pragma Inline (Set_Uint5);
2868 
2869       procedure Set_Uint8 (N : Node_Id; Val : Uint);
2870       pragma Inline (Set_Uint8);
2871 
2872       procedure Set_Uint9 (N : Node_Id; Val : Uint);
2873       pragma Inline (Set_Uint9);
2874 
2875       procedure Set_Uint10 (N : Node_Id; Val : Uint);
2876       pragma Inline (Set_Uint10);
2877 
2878       procedure Set_Uint11 (N : Node_Id; Val : Uint);
2879       pragma Inline (Set_Uint11);
2880 
2881       procedure Set_Uint12 (N : Node_Id; Val : Uint);
2882       pragma Inline (Set_Uint12);
2883 
2884       procedure Set_Uint13 (N : Node_Id; Val : Uint);
2885       pragma Inline (Set_Uint13);
2886 
2887       procedure Set_Uint14 (N : Node_Id; Val : Uint);
2888       pragma Inline (Set_Uint14);
2889 
2890       procedure Set_Uint15 (N : Node_Id; Val : Uint);
2891       pragma Inline (Set_Uint15);
2892 
2893       procedure Set_Uint16 (N : Node_Id; Val : Uint);
2894       pragma Inline (Set_Uint16);
2895 
2896       procedure Set_Uint17 (N : Node_Id; Val : Uint);
2897       pragma Inline (Set_Uint17);
2898 
2899       procedure Set_Uint22 (N : Node_Id; Val : Uint);
2900       pragma Inline (Set_Uint22);
2901 
2902       procedure Set_Uint24 (N : Node_Id; Val : Uint);
2903       pragma Inline (Set_Uint24);
2904 
2905       procedure Set_Ureal3 (N : Node_Id; Val : Ureal);
2906       pragma Inline (Set_Ureal3);
2907 
2908       procedure Set_Ureal18 (N : Node_Id; Val : Ureal);
2909       pragma Inline (Set_Ureal18);
2910 
2911       procedure Set_Ureal21 (N : Node_Id; Val : Ureal);
2912       pragma Inline (Set_Ureal21);
2913 
2914       procedure Set_Flag0 (N : Node_Id; Val : Boolean);
2915       pragma Inline (Set_Flag0);
2916 
2917       procedure Set_Flag1 (N : Node_Id; Val : Boolean);
2918       pragma Inline (Set_Flag1);
2919 
2920       procedure Set_Flag2 (N : Node_Id; Val : Boolean);
2921       pragma Inline (Set_Flag2);
2922 
2923       procedure Set_Flag3 (N : Node_Id; Val : Boolean);
2924       pragma Inline (Set_Flag3);
2925 
2926       procedure Set_Flag4 (N : Node_Id; Val : Boolean);
2927       pragma Inline (Set_Flag4);
2928 
2929       procedure Set_Flag5 (N : Node_Id; Val : Boolean);
2930       pragma Inline (Set_Flag5);
2931 
2932       procedure Set_Flag6 (N : Node_Id; Val : Boolean);
2933       pragma Inline (Set_Flag6);
2934 
2935       procedure Set_Flag7 (N : Node_Id; Val : Boolean);
2936       pragma Inline (Set_Flag7);
2937 
2938       procedure Set_Flag8 (N : Node_Id; Val : Boolean);
2939       pragma Inline (Set_Flag8);
2940 
2941       procedure Set_Flag9 (N : Node_Id; Val : Boolean);
2942       pragma Inline (Set_Flag9);
2943 
2944       procedure Set_Flag10 (N : Node_Id; Val : Boolean);
2945       pragma Inline (Set_Flag10);
2946 
2947       procedure Set_Flag11 (N : Node_Id; Val : Boolean);
2948       pragma Inline (Set_Flag11);
2949 
2950       procedure Set_Flag12 (N : Node_Id; Val : Boolean);
2951       pragma Inline (Set_Flag12);
2952 
2953       procedure Set_Flag13 (N : Node_Id; Val : Boolean);
2954       pragma Inline (Set_Flag13);
2955 
2956       procedure Set_Flag14 (N : Node_Id; Val : Boolean);
2957       pragma Inline (Set_Flag14);
2958 
2959       procedure Set_Flag15 (N : Node_Id; Val : Boolean);
2960       pragma Inline (Set_Flag15);
2961 
2962       procedure Set_Flag16 (N : Node_Id; Val : Boolean);
2963       pragma Inline (Set_Flag16);
2964 
2965       procedure Set_Flag17 (N : Node_Id; Val : Boolean);
2966       pragma Inline (Set_Flag17);
2967 
2968       procedure Set_Flag18 (N : Node_Id; Val : Boolean);
2969       pragma Inline (Set_Flag18);
2970 
2971       procedure Set_Flag19 (N : Node_Id; Val : Boolean);
2972       pragma Inline (Set_Flag19);
2973 
2974       procedure Set_Flag20 (N : Node_Id; Val : Boolean);
2975       pragma Inline (Set_Flag20);
2976 
2977       procedure Set_Flag21 (N : Node_Id; Val : Boolean);
2978       pragma Inline (Set_Flag21);
2979 
2980       procedure Set_Flag22 (N : Node_Id; Val : Boolean);
2981       pragma Inline (Set_Flag22);
2982 
2983       procedure Set_Flag23 (N : Node_Id; Val : Boolean);
2984       pragma Inline (Set_Flag23);
2985 
2986       procedure Set_Flag24 (N : Node_Id; Val : Boolean);
2987       pragma Inline (Set_Flag24);
2988 
2989       procedure Set_Flag25 (N : Node_Id; Val : Boolean);
2990       pragma Inline (Set_Flag25);
2991 
2992       procedure Set_Flag26 (N : Node_Id; Val : Boolean);
2993       pragma Inline (Set_Flag26);
2994 
2995       procedure Set_Flag27 (N : Node_Id; Val : Boolean);
2996       pragma Inline (Set_Flag27);
2997 
2998       procedure Set_Flag28 (N : Node_Id; Val : Boolean);
2999       pragma Inline (Set_Flag28);
3000 
3001       procedure Set_Flag29 (N : Node_Id; Val : Boolean);
3002       pragma Inline (Set_Flag29);
3003 
3004       procedure Set_Flag30 (N : Node_Id; Val : Boolean);
3005       pragma Inline (Set_Flag30);
3006 
3007       procedure Set_Flag31 (N : Node_Id; Val : Boolean);
3008       pragma Inline (Set_Flag31);
3009 
3010       procedure Set_Flag32 (N : Node_Id; Val : Boolean);
3011       pragma Inline (Set_Flag32);
3012 
3013       procedure Set_Flag33 (N : Node_Id; Val : Boolean);
3014       pragma Inline (Set_Flag33);
3015 
3016       procedure Set_Flag34 (N : Node_Id; Val : Boolean);
3017       pragma Inline (Set_Flag34);
3018 
3019       procedure Set_Flag35 (N : Node_Id; Val : Boolean);
3020       pragma Inline (Set_Flag35);
3021 
3022       procedure Set_Flag36 (N : Node_Id; Val : Boolean);
3023       pragma Inline (Set_Flag36);
3024 
3025       procedure Set_Flag37 (N : Node_Id; Val : Boolean);
3026       pragma Inline (Set_Flag37);
3027 
3028       procedure Set_Flag38 (N : Node_Id; Val : Boolean);
3029       pragma Inline (Set_Flag38);
3030 
3031       procedure Set_Flag39 (N : Node_Id; Val : Boolean);
3032       pragma Inline (Set_Flag39);
3033 
3034       procedure Set_Flag40 (N : Node_Id; Val : Boolean);
3035       pragma Inline (Set_Flag40);
3036 
3037       procedure Set_Flag41 (N : Node_Id; Val : Boolean);
3038       pragma Inline (Set_Flag41);
3039 
3040       procedure Set_Flag42 (N : Node_Id; Val : Boolean);
3041       pragma Inline (Set_Flag42);
3042 
3043       procedure Set_Flag43 (N : Node_Id; Val : Boolean);
3044       pragma Inline (Set_Flag43);
3045 
3046       procedure Set_Flag44 (N : Node_Id; Val : Boolean);
3047       pragma Inline (Set_Flag44);
3048 
3049       procedure Set_Flag45 (N : Node_Id; Val : Boolean);
3050       pragma Inline (Set_Flag45);
3051 
3052       procedure Set_Flag46 (N : Node_Id; Val : Boolean);
3053       pragma Inline (Set_Flag46);
3054 
3055       procedure Set_Flag47 (N : Node_Id; Val : Boolean);
3056       pragma Inline (Set_Flag47);
3057 
3058       procedure Set_Flag48 (N : Node_Id; Val : Boolean);
3059       pragma Inline (Set_Flag48);
3060 
3061       procedure Set_Flag49 (N : Node_Id; Val : Boolean);
3062       pragma Inline (Set_Flag49);
3063 
3064       procedure Set_Flag50 (N : Node_Id; Val : Boolean);
3065       pragma Inline (Set_Flag50);
3066 
3067       procedure Set_Flag51 (N : Node_Id; Val : Boolean);
3068       pragma Inline (Set_Flag51);
3069 
3070       procedure Set_Flag52 (N : Node_Id; Val : Boolean);
3071       pragma Inline (Set_Flag52);
3072 
3073       procedure Set_Flag53 (N : Node_Id; Val : Boolean);
3074       pragma Inline (Set_Flag53);
3075 
3076       procedure Set_Flag54 (N : Node_Id; Val : Boolean);
3077       pragma Inline (Set_Flag54);
3078 
3079       procedure Set_Flag55 (N : Node_Id; Val : Boolean);
3080       pragma Inline (Set_Flag55);
3081 
3082       procedure Set_Flag56 (N : Node_Id; Val : Boolean);
3083       pragma Inline (Set_Flag56);
3084 
3085       procedure Set_Flag57 (N : Node_Id; Val : Boolean);
3086       pragma Inline (Set_Flag57);
3087 
3088       procedure Set_Flag58 (N : Node_Id; Val : Boolean);
3089       pragma Inline (Set_Flag58);
3090 
3091       procedure Set_Flag59 (N : Node_Id; Val : Boolean);
3092       pragma Inline (Set_Flag59);
3093 
3094       procedure Set_Flag60 (N : Node_Id; Val : Boolean);
3095       pragma Inline (Set_Flag60);
3096 
3097       procedure Set_Flag61 (N : Node_Id; Val : Boolean);
3098       pragma Inline (Set_Flag61);
3099 
3100       procedure Set_Flag62 (N : Node_Id; Val : Boolean);
3101       pragma Inline (Set_Flag62);
3102 
3103       procedure Set_Flag63 (N : Node_Id; Val : Boolean);
3104       pragma Inline (Set_Flag63);
3105 
3106       procedure Set_Flag64 (N : Node_Id; Val : Boolean);
3107       pragma Inline (Set_Flag64);
3108 
3109       procedure Set_Flag65 (N : Node_Id; Val : Boolean);
3110       pragma Inline (Set_Flag65);
3111 
3112       procedure Set_Flag66 (N : Node_Id; Val : Boolean);
3113       pragma Inline (Set_Flag66);
3114 
3115       procedure Set_Flag67 (N : Node_Id; Val : Boolean);
3116       pragma Inline (Set_Flag67);
3117 
3118       procedure Set_Flag68 (N : Node_Id; Val : Boolean);
3119       pragma Inline (Set_Flag68);
3120 
3121       procedure Set_Flag69 (N : Node_Id; Val : Boolean);
3122       pragma Inline (Set_Flag69);
3123 
3124       procedure Set_Flag70 (N : Node_Id; Val : Boolean);
3125       pragma Inline (Set_Flag70);
3126 
3127       procedure Set_Flag71 (N : Node_Id; Val : Boolean);
3128       pragma Inline (Set_Flag71);
3129 
3130       procedure Set_Flag72 (N : Node_Id; Val : Boolean);
3131       pragma Inline (Set_Flag72);
3132 
3133       procedure Set_Flag73 (N : Node_Id; Val : Boolean);
3134       pragma Inline (Set_Flag73);
3135 
3136       procedure Set_Flag74 (N : Node_Id; Val : Boolean);
3137       pragma Inline (Set_Flag74);
3138 
3139       procedure Set_Flag75 (N : Node_Id; Val : Boolean);
3140       pragma Inline (Set_Flag75);
3141 
3142       procedure Set_Flag76 (N : Node_Id; Val : Boolean);
3143       pragma Inline (Set_Flag76);
3144 
3145       procedure Set_Flag77 (N : Node_Id; Val : Boolean);
3146       pragma Inline (Set_Flag77);
3147 
3148       procedure Set_Flag78 (N : Node_Id; Val : Boolean);
3149       pragma Inline (Set_Flag78);
3150 
3151       procedure Set_Flag79 (N : Node_Id; Val : Boolean);
3152       pragma Inline (Set_Flag79);
3153 
3154       procedure Set_Flag80 (N : Node_Id; Val : Boolean);
3155       pragma Inline (Set_Flag80);
3156 
3157       procedure Set_Flag81 (N : Node_Id; Val : Boolean);
3158       pragma Inline (Set_Flag81);
3159 
3160       procedure Set_Flag82 (N : Node_Id; Val : Boolean);
3161       pragma Inline (Set_Flag82);
3162 
3163       procedure Set_Flag83 (N : Node_Id; Val : Boolean);
3164       pragma Inline (Set_Flag83);
3165 
3166       procedure Set_Flag84 (N : Node_Id; Val : Boolean);
3167       pragma Inline (Set_Flag84);
3168 
3169       procedure Set_Flag85 (N : Node_Id; Val : Boolean);
3170       pragma Inline (Set_Flag85);
3171 
3172       procedure Set_Flag86 (N : Node_Id; Val : Boolean);
3173       pragma Inline (Set_Flag86);
3174 
3175       procedure Set_Flag87 (N : Node_Id; Val : Boolean);
3176       pragma Inline (Set_Flag87);
3177 
3178       procedure Set_Flag88 (N : Node_Id; Val : Boolean);
3179       pragma Inline (Set_Flag88);
3180 
3181       procedure Set_Flag89 (N : Node_Id; Val : Boolean);
3182       pragma Inline (Set_Flag89);
3183 
3184       procedure Set_Flag90 (N : Node_Id; Val : Boolean);
3185       pragma Inline (Set_Flag90);
3186 
3187       procedure Set_Flag91 (N : Node_Id; Val : Boolean);
3188       pragma Inline (Set_Flag91);
3189 
3190       procedure Set_Flag92 (N : Node_Id; Val : Boolean);
3191       pragma Inline (Set_Flag92);
3192 
3193       procedure Set_Flag93 (N : Node_Id; Val : Boolean);
3194       pragma Inline (Set_Flag93);
3195 
3196       procedure Set_Flag94 (N : Node_Id; Val : Boolean);
3197       pragma Inline (Set_Flag94);
3198 
3199       procedure Set_Flag95 (N : Node_Id; Val : Boolean);
3200       pragma Inline (Set_Flag95);
3201 
3202       procedure Set_Flag96 (N : Node_Id; Val : Boolean);
3203       pragma Inline (Set_Flag96);
3204 
3205       procedure Set_Flag97 (N : Node_Id; Val : Boolean);
3206       pragma Inline (Set_Flag97);
3207 
3208       procedure Set_Flag98 (N : Node_Id; Val : Boolean);
3209       pragma Inline (Set_Flag98);
3210 
3211       procedure Set_Flag99 (N : Node_Id; Val : Boolean);
3212       pragma Inline (Set_Flag99);
3213 
3214       procedure Set_Flag100 (N : Node_Id; Val : Boolean);
3215       pragma Inline (Set_Flag100);
3216 
3217       procedure Set_Flag101 (N : Node_Id; Val : Boolean);
3218       pragma Inline (Set_Flag101);
3219 
3220       procedure Set_Flag102 (N : Node_Id; Val : Boolean);
3221       pragma Inline (Set_Flag102);
3222 
3223       procedure Set_Flag103 (N : Node_Id; Val : Boolean);
3224       pragma Inline (Set_Flag103);
3225 
3226       procedure Set_Flag104 (N : Node_Id; Val : Boolean);
3227       pragma Inline (Set_Flag104);
3228 
3229       procedure Set_Flag105 (N : Node_Id; Val : Boolean);
3230       pragma Inline (Set_Flag105);
3231 
3232       procedure Set_Flag106 (N : Node_Id; Val : Boolean);
3233       pragma Inline (Set_Flag106);
3234 
3235       procedure Set_Flag107 (N : Node_Id; Val : Boolean);
3236       pragma Inline (Set_Flag107);
3237 
3238       procedure Set_Flag108 (N : Node_Id; Val : Boolean);
3239       pragma Inline (Set_Flag108);
3240 
3241       procedure Set_Flag109 (N : Node_Id; Val : Boolean);
3242       pragma Inline (Set_Flag109);
3243 
3244       procedure Set_Flag110 (N : Node_Id; Val : Boolean);
3245       pragma Inline (Set_Flag110);
3246 
3247       procedure Set_Flag111 (N : Node_Id; Val : Boolean);
3248       pragma Inline (Set_Flag111);
3249 
3250       procedure Set_Flag112 (N : Node_Id; Val : Boolean);
3251       pragma Inline (Set_Flag112);
3252 
3253       procedure Set_Flag113 (N : Node_Id; Val : Boolean);
3254       pragma Inline (Set_Flag113);
3255 
3256       procedure Set_Flag114 (N : Node_Id; Val : Boolean);
3257       pragma Inline (Set_Flag114);
3258 
3259       procedure Set_Flag115 (N : Node_Id; Val : Boolean);
3260       pragma Inline (Set_Flag115);
3261 
3262       procedure Set_Flag116 (N : Node_Id; Val : Boolean);
3263       pragma Inline (Set_Flag116);
3264 
3265       procedure Set_Flag117 (N : Node_Id; Val : Boolean);
3266       pragma Inline (Set_Flag117);
3267 
3268       procedure Set_Flag118 (N : Node_Id; Val : Boolean);
3269       pragma Inline (Set_Flag118);
3270 
3271       procedure Set_Flag119 (N : Node_Id; Val : Boolean);
3272       pragma Inline (Set_Flag119);
3273 
3274       procedure Set_Flag120 (N : Node_Id; Val : Boolean);
3275       pragma Inline (Set_Flag120);
3276 
3277       procedure Set_Flag121 (N : Node_Id; Val : Boolean);
3278       pragma Inline (Set_Flag121);
3279 
3280       procedure Set_Flag122 (N : Node_Id; Val : Boolean);
3281       pragma Inline (Set_Flag122);
3282 
3283       procedure Set_Flag123 (N : Node_Id; Val : Boolean);
3284       pragma Inline (Set_Flag123);
3285 
3286       procedure Set_Flag124 (N : Node_Id; Val : Boolean);
3287       pragma Inline (Set_Flag124);
3288 
3289       procedure Set_Flag125 (N : Node_Id; Val : Boolean);
3290       pragma Inline (Set_Flag125);
3291 
3292       procedure Set_Flag126 (N : Node_Id; Val : Boolean);
3293       pragma Inline (Set_Flag126);
3294 
3295       procedure Set_Flag127 (N : Node_Id; Val : Boolean);
3296       pragma Inline (Set_Flag127);
3297 
3298       procedure Set_Flag128 (N : Node_Id; Val : Boolean);
3299       pragma Inline (Set_Flag128);
3300 
3301       procedure Set_Flag129 (N : Node_Id; Val : Boolean);
3302       pragma Inline (Set_Flag129);
3303 
3304       procedure Set_Flag130 (N : Node_Id; Val : Boolean);
3305       pragma Inline (Set_Flag130);
3306 
3307       procedure Set_Flag131 (N : Node_Id; Val : Boolean);
3308       pragma Inline (Set_Flag131);
3309 
3310       procedure Set_Flag132 (N : Node_Id; Val : Boolean);
3311       pragma Inline (Set_Flag132);
3312 
3313       procedure Set_Flag133 (N : Node_Id; Val : Boolean);
3314       pragma Inline (Set_Flag133);
3315 
3316       procedure Set_Flag134 (N : Node_Id; Val : Boolean);
3317       pragma Inline (Set_Flag134);
3318 
3319       procedure Set_Flag135 (N : Node_Id; Val : Boolean);
3320       pragma Inline (Set_Flag135);
3321 
3322       procedure Set_Flag136 (N : Node_Id; Val : Boolean);
3323       pragma Inline (Set_Flag136);
3324 
3325       procedure Set_Flag137 (N : Node_Id; Val : Boolean);
3326       pragma Inline (Set_Flag137);
3327 
3328       procedure Set_Flag138 (N : Node_Id; Val : Boolean);
3329       pragma Inline (Set_Flag138);
3330 
3331       procedure Set_Flag139 (N : Node_Id; Val : Boolean);
3332       pragma Inline (Set_Flag139);
3333 
3334       procedure Set_Flag140 (N : Node_Id; Val : Boolean);
3335       pragma Inline (Set_Flag140);
3336 
3337       procedure Set_Flag141 (N : Node_Id; Val : Boolean);
3338       pragma Inline (Set_Flag141);
3339 
3340       procedure Set_Flag142 (N : Node_Id; Val : Boolean);
3341       pragma Inline (Set_Flag142);
3342 
3343       procedure Set_Flag143 (N : Node_Id; Val : Boolean);
3344       pragma Inline (Set_Flag143);
3345 
3346       procedure Set_Flag144 (N : Node_Id; Val : Boolean);
3347       pragma Inline (Set_Flag144);
3348 
3349       procedure Set_Flag145 (N : Node_Id; Val : Boolean);
3350       pragma Inline (Set_Flag145);
3351 
3352       procedure Set_Flag146 (N : Node_Id; Val : Boolean);
3353       pragma Inline (Set_Flag146);
3354 
3355       procedure Set_Flag147 (N : Node_Id; Val : Boolean);
3356       pragma Inline (Set_Flag147);
3357 
3358       procedure Set_Flag148 (N : Node_Id; Val : Boolean);
3359       pragma Inline (Set_Flag148);
3360 
3361       procedure Set_Flag149 (N : Node_Id; Val : Boolean);
3362       pragma Inline (Set_Flag149);
3363 
3364       procedure Set_Flag150 (N : Node_Id; Val : Boolean);
3365       pragma Inline (Set_Flag150);
3366 
3367       procedure Set_Flag151 (N : Node_Id; Val : Boolean);
3368       pragma Inline (Set_Flag151);
3369 
3370       procedure Set_Flag152 (N : Node_Id; Val : Boolean);
3371       pragma Inline (Set_Flag152);
3372 
3373       procedure Set_Flag153 (N : Node_Id; Val : Boolean);
3374       pragma Inline (Set_Flag153);
3375 
3376       procedure Set_Flag154 (N : Node_Id; Val : Boolean);
3377       pragma Inline (Set_Flag154);
3378 
3379       procedure Set_Flag155 (N : Node_Id; Val : Boolean);
3380       pragma Inline (Set_Flag155);
3381 
3382       procedure Set_Flag156 (N : Node_Id; Val : Boolean);
3383       pragma Inline (Set_Flag156);
3384 
3385       procedure Set_Flag157 (N : Node_Id; Val : Boolean);
3386       pragma Inline (Set_Flag157);
3387 
3388       procedure Set_Flag158 (N : Node_Id; Val : Boolean);
3389       pragma Inline (Set_Flag158);
3390 
3391       procedure Set_Flag159 (N : Node_Id; Val : Boolean);
3392       pragma Inline (Set_Flag159);
3393 
3394       procedure Set_Flag160 (N : Node_Id; Val : Boolean);
3395       pragma Inline (Set_Flag160);
3396 
3397       procedure Set_Flag161 (N : Node_Id; Val : Boolean);
3398       pragma Inline (Set_Flag161);
3399 
3400       procedure Set_Flag162 (N : Node_Id; Val : Boolean);
3401       pragma Inline (Set_Flag162);
3402 
3403       procedure Set_Flag163 (N : Node_Id; Val : Boolean);
3404       pragma Inline (Set_Flag163);
3405 
3406       procedure Set_Flag164 (N : Node_Id; Val : Boolean);
3407       pragma Inline (Set_Flag164);
3408 
3409       procedure Set_Flag165 (N : Node_Id; Val : Boolean);
3410       pragma Inline (Set_Flag165);
3411 
3412       procedure Set_Flag166 (N : Node_Id; Val : Boolean);
3413       pragma Inline (Set_Flag166);
3414 
3415       procedure Set_Flag167 (N : Node_Id; Val : Boolean);
3416       pragma Inline (Set_Flag167);
3417 
3418       procedure Set_Flag168 (N : Node_Id; Val : Boolean);
3419       pragma Inline (Set_Flag168);
3420 
3421       procedure Set_Flag169 (N : Node_Id; Val : Boolean);
3422       pragma Inline (Set_Flag169);
3423 
3424       procedure Set_Flag170 (N : Node_Id; Val : Boolean);
3425       pragma Inline (Set_Flag170);
3426 
3427       procedure Set_Flag171 (N : Node_Id; Val : Boolean);
3428       pragma Inline (Set_Flag171);
3429 
3430       procedure Set_Flag172 (N : Node_Id; Val : Boolean);
3431       pragma Inline (Set_Flag172);
3432 
3433       procedure Set_Flag173 (N : Node_Id; Val : Boolean);
3434       pragma Inline (Set_Flag173);
3435 
3436       procedure Set_Flag174 (N : Node_Id; Val : Boolean);
3437       pragma Inline (Set_Flag174);
3438 
3439       procedure Set_Flag175 (N : Node_Id; Val : Boolean);
3440       pragma Inline (Set_Flag175);
3441 
3442       procedure Set_Flag176 (N : Node_Id; Val : Boolean);
3443       pragma Inline (Set_Flag176);
3444 
3445       procedure Set_Flag177 (N : Node_Id; Val : Boolean);
3446       pragma Inline (Set_Flag177);
3447 
3448       procedure Set_Flag178 (N : Node_Id; Val : Boolean);
3449       pragma Inline (Set_Flag178);
3450 
3451       procedure Set_Flag179 (N : Node_Id; Val : Boolean);
3452       pragma Inline (Set_Flag179);
3453 
3454       procedure Set_Flag180 (N : Node_Id; Val : Boolean);
3455       pragma Inline (Set_Flag180);
3456 
3457       procedure Set_Flag181 (N : Node_Id; Val : Boolean);
3458       pragma Inline (Set_Flag181);
3459 
3460       procedure Set_Flag182 (N : Node_Id; Val : Boolean);
3461       pragma Inline (Set_Flag182);
3462 
3463       procedure Set_Flag183 (N : Node_Id; Val : Boolean);
3464       pragma Inline (Set_Flag183);
3465 
3466       procedure Set_Flag184 (N : Node_Id; Val : Boolean);
3467       pragma Inline (Set_Flag184);
3468 
3469       procedure Set_Flag185 (N : Node_Id; Val : Boolean);
3470       pragma Inline (Set_Flag185);
3471 
3472       procedure Set_Flag186 (N : Node_Id; Val : Boolean);
3473       pragma Inline (Set_Flag186);
3474 
3475       procedure Set_Flag187 (N : Node_Id; Val : Boolean);
3476       pragma Inline (Set_Flag187);
3477 
3478       procedure Set_Flag188 (N : Node_Id; Val : Boolean);
3479       pragma Inline (Set_Flag188);
3480 
3481       procedure Set_Flag189 (N : Node_Id; Val : Boolean);
3482       pragma Inline (Set_Flag189);
3483 
3484       procedure Set_Flag190 (N : Node_Id; Val : Boolean);
3485       pragma Inline (Set_Flag190);
3486 
3487       procedure Set_Flag191 (N : Node_Id; Val : Boolean);
3488       pragma Inline (Set_Flag191);
3489 
3490       procedure Set_Flag192 (N : Node_Id; Val : Boolean);
3491       pragma Inline (Set_Flag192);
3492 
3493       procedure Set_Flag193 (N : Node_Id; Val : Boolean);
3494       pragma Inline (Set_Flag193);
3495 
3496       procedure Set_Flag194 (N : Node_Id; Val : Boolean);
3497       pragma Inline (Set_Flag194);
3498 
3499       procedure Set_Flag195 (N : Node_Id; Val : Boolean);
3500       pragma Inline (Set_Flag195);
3501 
3502       procedure Set_Flag196 (N : Node_Id; Val : Boolean);
3503       pragma Inline (Set_Flag196);
3504 
3505       procedure Set_Flag197 (N : Node_Id; Val : Boolean);
3506       pragma Inline (Set_Flag197);
3507 
3508       procedure Set_Flag198 (N : Node_Id; Val : Boolean);
3509       pragma Inline (Set_Flag198);
3510 
3511       procedure Set_Flag199 (N : Node_Id; Val : Boolean);
3512       pragma Inline (Set_Flag199);
3513 
3514       procedure Set_Flag200 (N : Node_Id; Val : Boolean);
3515       pragma Inline (Set_Flag200);
3516 
3517       procedure Set_Flag201 (N : Node_Id; Val : Boolean);
3518       pragma Inline (Set_Flag201);
3519 
3520       procedure Set_Flag202 (N : Node_Id; Val : Boolean);
3521       pragma Inline (Set_Flag202);
3522 
3523       procedure Set_Flag203 (N : Node_Id; Val : Boolean);
3524       pragma Inline (Set_Flag203);
3525 
3526       procedure Set_Flag204 (N : Node_Id; Val : Boolean);
3527       pragma Inline (Set_Flag204);
3528 
3529       procedure Set_Flag205 (N : Node_Id; Val : Boolean);
3530       pragma Inline (Set_Flag205);
3531 
3532       procedure Set_Flag206 (N : Node_Id; Val : Boolean);
3533       pragma Inline (Set_Flag206);
3534 
3535       procedure Set_Flag207 (N : Node_Id; Val : Boolean);
3536       pragma Inline (Set_Flag207);
3537 
3538       procedure Set_Flag208 (N : Node_Id; Val : Boolean);
3539       pragma Inline (Set_Flag208);
3540 
3541       procedure Set_Flag209 (N : Node_Id; Val : Boolean);
3542       pragma Inline (Set_Flag209);
3543 
3544       procedure Set_Flag210 (N : Node_Id; Val : Boolean);
3545       pragma Inline (Set_Flag210);
3546 
3547       procedure Set_Flag211 (N : Node_Id; Val : Boolean);
3548       pragma Inline (Set_Flag211);
3549 
3550       procedure Set_Flag212 (N : Node_Id; Val : Boolean);
3551       pragma Inline (Set_Flag212);
3552 
3553       procedure Set_Flag213 (N : Node_Id; Val : Boolean);
3554       pragma Inline (Set_Flag213);
3555 
3556       procedure Set_Flag214 (N : Node_Id; Val : Boolean);
3557       pragma Inline (Set_Flag214);
3558 
3559       procedure Set_Flag215 (N : Node_Id; Val : Boolean);
3560       pragma Inline (Set_Flag215);
3561 
3562       procedure Set_Flag216 (N : Node_Id; Val : Boolean);
3563       pragma Inline (Set_Flag216);
3564 
3565       procedure Set_Flag217 (N : Node_Id; Val : Boolean);
3566       pragma Inline (Set_Flag217);
3567 
3568       procedure Set_Flag218 (N : Node_Id; Val : Boolean);
3569       pragma Inline (Set_Flag218);
3570 
3571       procedure Set_Flag219 (N : Node_Id; Val : Boolean);
3572       pragma Inline (Set_Flag219);
3573 
3574       procedure Set_Flag220 (N : Node_Id; Val : Boolean);
3575       pragma Inline (Set_Flag220);
3576 
3577       procedure Set_Flag221 (N : Node_Id; Val : Boolean);
3578       pragma Inline (Set_Flag221);
3579 
3580       procedure Set_Flag222 (N : Node_Id; Val : Boolean);
3581       pragma Inline (Set_Flag222);
3582 
3583       procedure Set_Flag223 (N : Node_Id; Val : Boolean);
3584       pragma Inline (Set_Flag223);
3585 
3586       procedure Set_Flag224 (N : Node_Id; Val : Boolean);
3587       pragma Inline (Set_Flag224);
3588 
3589       procedure Set_Flag225 (N : Node_Id; Val : Boolean);
3590       pragma Inline (Set_Flag225);
3591 
3592       procedure Set_Flag226 (N : Node_Id; Val : Boolean);
3593       pragma Inline (Set_Flag226);
3594 
3595       procedure Set_Flag227 (N : Node_Id; Val : Boolean);
3596       pragma Inline (Set_Flag227);
3597 
3598       procedure Set_Flag228 (N : Node_Id; Val : Boolean);
3599       pragma Inline (Set_Flag228);
3600 
3601       procedure Set_Flag229 (N : Node_Id; Val : Boolean);
3602       pragma Inline (Set_Flag229);
3603 
3604       procedure Set_Flag230 (N : Node_Id; Val : Boolean);
3605       pragma Inline (Set_Flag230);
3606 
3607       procedure Set_Flag231 (N : Node_Id; Val : Boolean);
3608       pragma Inline (Set_Flag231);
3609 
3610       procedure Set_Flag232 (N : Node_Id; Val : Boolean);
3611       pragma Inline (Set_Flag232);
3612 
3613       procedure Set_Flag233 (N : Node_Id; Val : Boolean);
3614       pragma Inline (Set_Flag233);
3615 
3616       procedure Set_Flag234 (N : Node_Id; Val : Boolean);
3617       pragma Inline (Set_Flag234);
3618 
3619       procedure Set_Flag235 (N : Node_Id; Val : Boolean);
3620       pragma Inline (Set_Flag235);
3621 
3622       procedure Set_Flag236 (N : Node_Id; Val : Boolean);
3623       pragma Inline (Set_Flag236);
3624 
3625       procedure Set_Flag237 (N : Node_Id; Val : Boolean);
3626       pragma Inline (Set_Flag237);
3627 
3628       procedure Set_Flag238 (N : Node_Id; Val : Boolean);
3629       pragma Inline (Set_Flag238);
3630 
3631       procedure Set_Flag239 (N : Node_Id; Val : Boolean);
3632       pragma Inline (Set_Flag239);
3633 
3634       procedure Set_Flag240 (N : Node_Id; Val : Boolean);
3635       pragma Inline (Set_Flag240);
3636 
3637       procedure Set_Flag241 (N : Node_Id; Val : Boolean);
3638       pragma Inline (Set_Flag241);
3639 
3640       procedure Set_Flag242 (N : Node_Id; Val : Boolean);
3641       pragma Inline (Set_Flag242);
3642 
3643       procedure Set_Flag243 (N : Node_Id; Val : Boolean);
3644       pragma Inline (Set_Flag243);
3645 
3646       procedure Set_Flag244 (N : Node_Id; Val : Boolean);
3647       pragma Inline (Set_Flag244);
3648 
3649       procedure Set_Flag245 (N : Node_Id; Val : Boolean);
3650       pragma Inline (Set_Flag245);
3651 
3652       procedure Set_Flag246 (N : Node_Id; Val : Boolean);
3653       pragma Inline (Set_Flag246);
3654 
3655       procedure Set_Flag247 (N : Node_Id; Val : Boolean);
3656       pragma Inline (Set_Flag247);
3657 
3658       procedure Set_Flag248 (N : Node_Id; Val : Boolean);
3659       pragma Inline (Set_Flag248);
3660 
3661       procedure Set_Flag249 (N : Node_Id; Val : Boolean);
3662       pragma Inline (Set_Flag249);
3663 
3664       procedure Set_Flag250 (N : Node_Id; Val : Boolean);
3665       pragma Inline (Set_Flag250);
3666 
3667       procedure Set_Flag251 (N : Node_Id; Val : Boolean);
3668       pragma Inline (Set_Flag251);
3669 
3670       procedure Set_Flag252 (N : Node_Id; Val : Boolean);
3671       pragma Inline (Set_Flag252);
3672 
3673       procedure Set_Flag253 (N : Node_Id; Val : Boolean);
3674       pragma Inline (Set_Flag253);
3675 
3676       procedure Set_Flag254 (N : Node_Id; Val : Boolean);
3677       pragma Inline (Set_Flag254);
3678 
3679       procedure Set_Flag255 (N : Node_Id; Val : Boolean);
3680       pragma Inline (Set_Flag255);
3681 
3682       procedure Set_Flag256 (N : Node_Id; Val : Boolean);
3683       pragma Inline (Set_Flag256);
3684 
3685       procedure Set_Flag257 (N : Node_Id; Val : Boolean);
3686       pragma Inline (Set_Flag257);
3687 
3688       procedure Set_Flag258 (N : Node_Id; Val : Boolean);
3689       pragma Inline (Set_Flag258);
3690 
3691       procedure Set_Flag259 (N : Node_Id; Val : Boolean);
3692       pragma Inline (Set_Flag259);
3693 
3694       procedure Set_Flag260 (N : Node_Id; Val : Boolean);
3695       pragma Inline (Set_Flag260);
3696 
3697       procedure Set_Flag261 (N : Node_Id; Val : Boolean);
3698       pragma Inline (Set_Flag261);
3699 
3700       procedure Set_Flag262 (N : Node_Id; Val : Boolean);
3701       pragma Inline (Set_Flag262);
3702 
3703       procedure Set_Flag263 (N : Node_Id; Val : Boolean);
3704       pragma Inline (Set_Flag263);
3705 
3706       procedure Set_Flag264 (N : Node_Id; Val : Boolean);
3707       pragma Inline (Set_Flag264);
3708 
3709       procedure Set_Flag265 (N : Node_Id; Val : Boolean);
3710       pragma Inline (Set_Flag265);
3711 
3712       procedure Set_Flag266 (N : Node_Id; Val : Boolean);
3713       pragma Inline (Set_Flag266);
3714 
3715       procedure Set_Flag267 (N : Node_Id; Val : Boolean);
3716       pragma Inline (Set_Flag267);
3717 
3718       procedure Set_Flag268 (N : Node_Id; Val : Boolean);
3719       pragma Inline (Set_Flag268);
3720 
3721       procedure Set_Flag269 (N : Node_Id; Val : Boolean);
3722       pragma Inline (Set_Flag269);
3723 
3724       procedure Set_Flag270 (N : Node_Id; Val : Boolean);
3725       pragma Inline (Set_Flag270);
3726 
3727       procedure Set_Flag271 (N : Node_Id; Val : Boolean);
3728       pragma Inline (Set_Flag271);
3729 
3730       procedure Set_Flag272 (N : Node_Id; Val : Boolean);
3731       pragma Inline (Set_Flag272);
3732 
3733       procedure Set_Flag273 (N : Node_Id; Val : Boolean);
3734       pragma Inline (Set_Flag273);
3735 
3736       procedure Set_Flag274 (N : Node_Id; Val : Boolean);
3737       pragma Inline (Set_Flag274);
3738 
3739       procedure Set_Flag275 (N : Node_Id; Val : Boolean);
3740       pragma Inline (Set_Flag275);
3741 
3742       procedure Set_Flag276 (N : Node_Id; Val : Boolean);
3743       pragma Inline (Set_Flag276);
3744 
3745       procedure Set_Flag277 (N : Node_Id; Val : Boolean);
3746       pragma Inline (Set_Flag277);
3747 
3748       procedure Set_Flag278 (N : Node_Id; Val : Boolean);
3749       pragma Inline (Set_Flag278);
3750 
3751       procedure Set_Flag279 (N : Node_Id; Val : Boolean);
3752       pragma Inline (Set_Flag279);
3753 
3754       procedure Set_Flag280 (N : Node_Id; Val : Boolean);
3755       pragma Inline (Set_Flag280);
3756 
3757       procedure Set_Flag281 (N : Node_Id; Val : Boolean);
3758       pragma Inline (Set_Flag281);
3759 
3760       procedure Set_Flag282 (N : Node_Id; Val : Boolean);
3761       pragma Inline (Set_Flag282);
3762 
3763       procedure Set_Flag283 (N : Node_Id; Val : Boolean);
3764       pragma Inline (Set_Flag283);
3765 
3766       procedure Set_Flag284 (N : Node_Id; Val : Boolean);
3767       pragma Inline (Set_Flag284);
3768 
3769       procedure Set_Flag285 (N : Node_Id; Val : Boolean);
3770       pragma Inline (Set_Flag285);
3771 
3772       procedure Set_Flag286 (N : Node_Id; Val : Boolean);
3773       pragma Inline (Set_Flag286);
3774 
3775       procedure Set_Flag287 (N : Node_Id; Val : Boolean);
3776       pragma Inline (Set_Flag287);
3777 
3778       procedure Set_Flag288 (N : Node_Id; Val : Boolean);
3779       pragma Inline (Set_Flag288);
3780 
3781       procedure Set_Flag289 (N : Node_Id; Val : Boolean);
3782       pragma Inline (Set_Flag289);
3783 
3784       procedure Set_Flag290 (N : Node_Id; Val : Boolean);
3785       pragma Inline (Set_Flag290);
3786 
3787       procedure Set_Flag291 (N : Node_Id; Val : Boolean);
3788       pragma Inline (Set_Flag291);
3789 
3790       procedure Set_Flag292 (N : Node_Id; Val : Boolean);
3791       pragma Inline (Set_Flag292);
3792 
3793       procedure Set_Flag293 (N : Node_Id; Val : Boolean);
3794       pragma Inline (Set_Flag293);
3795 
3796       procedure Set_Flag294 (N : Node_Id; Val : Boolean);
3797       pragma Inline (Set_Flag294);
3798 
3799       procedure Set_Flag295 (N : Node_Id; Val : Boolean);
3800       pragma Inline (Set_Flag295);
3801 
3802       procedure Set_Flag296 (N : Node_Id; Val : Boolean);
3803       pragma Inline (Set_Flag296);
3804 
3805       procedure Set_Flag297 (N : Node_Id; Val : Boolean);
3806       pragma Inline (Set_Flag297);
3807 
3808       procedure Set_Flag298 (N : Node_Id; Val : Boolean);
3809       pragma Inline (Set_Flag298);
3810 
3811       procedure Set_Flag299 (N : Node_Id; Val : Boolean);
3812       pragma Inline (Set_Flag299);
3813 
3814       procedure Set_Flag300 (N : Node_Id; Val : Boolean);
3815       pragma Inline (Set_Flag300);
3816 
3817       procedure Set_Flag301 (N : Node_Id; Val : Boolean);
3818       pragma Inline (Set_Flag301);
3819 
3820       procedure Set_Flag302 (N : Node_Id; Val : Boolean);
3821       pragma Inline (Set_Flag302);
3822 
3823       procedure Set_Flag303 (N : Node_Id; Val : Boolean);
3824       pragma Inline (Set_Flag303);
3825 
3826       procedure Set_Flag304 (N : Node_Id; Val : Boolean);
3827       pragma Inline (Set_Flag304);
3828 
3829       procedure Set_Flag305 (N : Node_Id; Val : Boolean);
3830       pragma Inline (Set_Flag305);
3831 
3832       procedure Set_Flag306 (N : Node_Id; Val : Boolean);
3833       pragma Inline (Set_Flag306);
3834 
3835       procedure Set_Flag307 (N : Node_Id; Val : Boolean);
3836       pragma Inline (Set_Flag307);
3837 
3838       procedure Set_Flag308 (N : Node_Id; Val : Boolean);
3839       pragma Inline (Set_Flag308);
3840 
3841       procedure Set_Flag309 (N : Node_Id; Val : Boolean);
3842       pragma Inline (Set_Flag309);
3843 
3844       procedure Set_Flag310 (N : Node_Id; Val : Boolean);
3845       pragma Inline (Set_Flag310);
3846 
3847       procedure Set_Flag311 (N : Node_Id; Val : Boolean);
3848       pragma Inline (Set_Flag311);
3849 
3850       procedure Set_Flag312 (N : Node_Id; Val : Boolean);
3851       pragma Inline (Set_Flag312);
3852 
3853       procedure Set_Flag313 (N : Node_Id; Val : Boolean);
3854       pragma Inline (Set_Flag313);
3855 
3856       procedure Set_Flag314 (N : Node_Id; Val : Boolean);
3857       pragma Inline (Set_Flag314);
3858 
3859       procedure Set_Flag315 (N : Node_Id; Val : Boolean);
3860       pragma Inline (Set_Flag315);
3861 
3862       procedure Set_Flag316 (N : Node_Id; Val : Boolean);
3863       pragma Inline (Set_Flag316);
3864 
3865       procedure Set_Flag317 (N : Node_Id; Val : Boolean);
3866       pragma Inline (Set_Flag317);
3867 
3868       --  The following versions of Set_Noden also set the parent pointer of
3869       --  the referenced node if it is not Empty.
3870 
3871       procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id);
3872       pragma Inline (Set_Node1_With_Parent);
3873 
3874       procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id);
3875       pragma Inline (Set_Node2_With_Parent);
3876 
3877       procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id);
3878       pragma Inline (Set_Node3_With_Parent);
3879 
3880       procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id);
3881       pragma Inline (Set_Node4_With_Parent);
3882 
3883       procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id);
3884       pragma Inline (Set_Node5_With_Parent);
3885 
3886       --  The following versions of Set_Listn also set the parent pointer of
3887       --  the referenced node if it is not Empty.
3888 
3889       procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id);
3890       pragma Inline (Set_List1_With_Parent);
3891 
3892       procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id);
3893       pragma Inline (Set_List2_With_Parent);
3894 
3895       procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id);
3896       pragma Inline (Set_List3_With_Parent);
3897 
3898       procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id);
3899       pragma Inline (Set_List4_With_Parent);
3900 
3901       procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id);
3902       pragma Inline (Set_List5_With_Parent);
3903 
3904    end Unchecked_Access;
3905 
3906    -----------------------------
3907    -- Private Part Subpackage --
3908    -----------------------------
3909 
3910    --  The following package contains the definition of the data structure
3911    --  used by the implementation of the Atree package. Logically it really
3912    --  corresponds to the private part, hence the name. The reason that it
3913    --  is defined as a sub-package is to allow special access from clients
3914    --  that need to see the internals of the data structures.
3915 
3916    package Atree_Private_Part is
3917 
3918       -------------------------
3919       -- Tree Representation --
3920       -------------------------
3921 
3922       --  The nodes of the tree are stored in a table (i.e. an array). In the
3923       --  case of extended nodes six consecutive components in the array are
3924       --  used. There are thus two formats for array components. One is used
3925       --  for non-extended nodes, and for the first component of extended
3926       --  nodes. The other is used for the extension parts (second, third,
3927       --  fourth, fifth, and sixth components) of an extended node. A variant
3928       --  record structure is used to distinguish the two formats.
3929 
3930       type Node_Record (Is_Extension : Boolean := False) is record
3931 
3932          --  Logically, the only field in the common part is the above
3933          --  Is_Extension discriminant (a single bit). However, Gigi cannot
3934          --  yet handle such a structure, so we fill out the common part of
3935          --  the record with fields that are used in different ways for
3936          --  normal nodes and node extensions.
3937 
3938          Pflag1, Pflag2 : Boolean;
3939          --  The Paren_Count field is represented using two boolean flags,
3940          --  where Pflag1 is worth 1, and Pflag2 is worth 2. This is done
3941          --  because we need to be easily able to reuse this field for
3942          --  extra flags in the extended node case.
3943 
3944          In_List : Boolean;
3945          --  Flag used to indicate if node is a member of a list.
3946          --  This field is considered private to the Atree package.
3947 
3948          Has_Aspects : Boolean;
3949          --  Flag used to indicate that a node has aspect specifications that
3950          --  are associated with the node. See Aspects package for details.
3951 
3952          Rewrite_Ins : Boolean;
3953          --  Flag set by Mark_Rewrite_Insertion procedure.
3954          --  This field is considered private to the Atree package.
3955 
3956          Analyzed : Boolean;
3957          --  Flag to indicate the node has been analyzed (and expanded)
3958 
3959          Comes_From_Source : Boolean;
3960          --  Flag to indicate that node comes from the source program (i.e.
3961          --  was built by the parser or scanner, not the analyzer or expander).
3962 
3963          Error_Posted : Boolean;
3964          --  Flag to indicate that an error message has been posted on the
3965          --  node (to avoid duplicate flags on the same node)
3966 
3967          Flag4  : Boolean;
3968          Flag5  : Boolean;
3969          Flag6  : Boolean;
3970          Flag7  : Boolean;
3971          Flag8  : Boolean;
3972          Flag9  : Boolean;
3973          Flag10 : Boolean;
3974          Flag11 : Boolean;
3975          Flag12 : Boolean;
3976          Flag13 : Boolean;
3977          Flag14 : Boolean;
3978          Flag15 : Boolean;
3979          Flag16 : Boolean;
3980          Flag17 : Boolean;
3981          Flag18 : Boolean;
3982          --  Flags 4-18 for a normal node. Note that Flags 0-3 are stored
3983          --  separately in the Flags array.
3984 
3985          --  The above fields are used as follows in components 2-6 of an
3986          --  extended node entry. Currently they are not used in component 7,
3987          --  since for now we have all the flags we need, but of course they
3988          --  can be used for additional flags when needed in component 7.
3989 
3990          --    In_List           used as Flag19,Flag40,Flag129,Flag216,Flag287
3991          --    Has_Aspects       used as Flag20,Flag41,Flag130,Flag217,Flag288
3992          --    Rewrite_Ins       used as Flag21,Flag42,Flag131,Flag218,Flag289
3993          --    Analyzed          used as Flag22,Flag43,Flag132,Flag219,Flag290
3994          --    Comes_From_Source used as Flag23,Flag44,Flag133,Flag220,Flag291
3995          --    Error_Posted      used as Flag24,Flag45,Flag134,Flag221,Flag292
3996          --    Flag4             used as Flag25,Flag46,Flag135,Flag222,Flag293
3997          --    Flag5             used as Flag26,Flag47,Flag136,Flag223,Flag294
3998          --    Flag6             used as Flag27,Flag48,Flag137,Flag224,Flag295
3999          --    Flag7             used as Flag28,Flag49,Flag138,Flag225,Flag296
4000          --    Flag8             used as Flag29,Flag50,Flag139,Flag226,Flag297
4001          --    Flag9             used as Flag30,Flag51,Flag140,Flag227,Flag298
4002          --    Flag10            used as Flag31,Flag52,Flag141,Flag228,Flag299
4003          --    Flag11            used as Flag32,Flag53,Flag142,Flag229,Flag300
4004          --    Flag12            used as Flag33,Flag54,Flag143,Flag230,Flag301
4005          --    Flag13            used as Flag34,Flag55,Flag144,Flag231,Flag302
4006          --    Flag14            used as Flag35,Flag56,Flag145,Flag232,Flag303
4007          --    Flag15            used as Flag36,Flag57,Flag146,Flag233,Flag304
4008          --    Flag16            used as Flag37,Flag58,Flag147,Flag234,Flag305
4009          --    Flag17            used as Flag38,Flag59,Flag148,Flag235,Flag306
4010          --    Flag18            used as Flag39,Flag60,Flag149,Flag236,Flag307
4011          --    Pflag1            used as Flag61,Flag62,Flag150,Flag237,Flag308
4012          --    Pflag2            used as Flag63,Flag64,Flag151,Flag238,Flag309
4013 
4014          Nkind : Node_Kind;
4015          --  For a non-extended node, or the initial section of an extended
4016          --  node, this field holds the Node_Kind value. For an extended node,
4017          --  The Nkind field is used as follows:
4018          --
4019          --     Second entry:  holds the Ekind field of the entity
4020          --     Third entry:   holds 8 additional flags (Flag65-Flag72)
4021          --     Fourth entry:  holds 8 additional flags (Flag239-246)
4022          --     Fifth entry:   holds 8 additional flags (Flag247-254)
4023          --     Sixth entry:   holds 8 additional flags (Flag310-317)
4024          --     Seventh entry: currently unused
4025 
4026          --  Now finally (on an 32-bit boundary) comes the variant part
4027 
4028          case Is_Extension is
4029 
4030             --  Non-extended node, or first component of extended node
4031 
4032             when False =>
4033 
4034                Sloc : Source_Ptr;
4035                --  Source location for this node
4036 
4037                Link : Union_Id;
4038                --  This field is used either as the Parent pointer (if In_List
4039                --  is False), or to point to the list header (if In_List is
4040                --  True). This field is considered private and can be modified
4041                --  only by Atree or by Nlists.
4042 
4043                Field1 : Union_Id;
4044                Field2 : Union_Id;
4045                Field3 : Union_Id;
4046                Field4 : Union_Id;
4047                Field5 : Union_Id;
4048                --  Five general use fields, which can contain Node_Id, List_Id,
4049                --  Elist_Id, String_Id, or Name_Id values depending on the
4050                --  values in Nkind and (for extended nodes), in Ekind. See
4051                --  packages Sinfo and Einfo for details of their use.
4052 
4053             --  Extension (second component) of extended node
4054 
4055             when True =>
4056 
4057                Field6  : Union_Id;
4058                Field7  : Union_Id;
4059                Field8  : Union_Id;
4060                Field9  : Union_Id;
4061                Field10 : Union_Id;
4062                Field11 : Union_Id;
4063                Field12 : Union_Id;
4064                --  Seven additional general fields available only for entities
4065                --  See package Einfo for details of their use (which depends
4066                --  on the value in the Ekind field).
4067 
4068             --  In the third component, the extension format as described
4069             --  above is used to hold additional general fields and flags
4070             --  as follows:
4071 
4072             --    Field6-11      Holds Field13-Field18
4073             --    Field12        Holds Flag73-Flag96 and Convention
4074 
4075             --  In the fourth component, the extension format as described
4076             --  above is used to hold additional general fields and flags
4077             --  as follows:
4078 
4079             --    Field6-10      Holds Field19-Field23
4080             --    Field11        Holds Flag152-Flag183
4081             --    Field12        Holds Flag97-Flag128
4082 
4083             --  In the fifth component, the extension format as described
4084             --  above is used to hold additional general fields and flags
4085             --  as follows:
4086 
4087             --    Field6-11      Holds Field24-Field29
4088             --    Field12        Holds Flag184-Flag215
4089 
4090             --  In the sixth component, the extension format as described
4091             --  above is used to hold additional general fields and flags
4092             --  as follows:
4093 
4094             --    Field6-11      Holds Field30-Field35
4095             --    Field12        Holds Flag255-Flag286
4096 
4097             --  In the seventh component, the extension format as described
4098             --  above is used to hold additional general fields as follows.
4099             --  Flags are also available potentially, but not used now, as
4100             --  we are not short of entity flags.
4101 
4102             --    Field6-11     Holds Field36-Field41
4103 
4104          end case;
4105       end record;
4106 
4107       pragma Pack (Node_Record);
4108       for Node_Record'Size use 8 * 32;
4109       for Node_Record'Alignment use 4;
4110 
4111       function E_To_N is new Unchecked_Conversion (Entity_Kind, Node_Kind);
4112       function N_To_E is new Unchecked_Conversion (Node_Kind, Entity_Kind);
4113 
4114       --  Default value used to initialize default nodes. Note that some of the
4115       --  fields get overwritten, and in particular, Nkind always gets reset.
4116 
4117       Default_Node : Node_Record := (
4118          Is_Extension      => False,
4119          Pflag1            => False,
4120          Pflag2            => False,
4121          In_List           => False,
4122          Has_Aspects       => False,
4123          Rewrite_Ins       => False,
4124          Analyzed          => False,
4125          Comes_From_Source => False,
4126          --  modified by Set_Comes_From_Source_Default
4127          Error_Posted      => False,
4128          Flag4             => False,
4129 
4130          Flag5             => False,
4131          Flag6             => False,
4132          Flag7             => False,
4133          Flag8             => False,
4134          Flag9             => False,
4135          Flag10            => False,
4136          Flag11            => False,
4137          Flag12            => False,
4138 
4139          Flag13            => False,
4140          Flag14            => False,
4141          Flag15            => False,
4142          Flag16            => False,
4143          Flag17            => False,
4144          Flag18            => False,
4145 
4146          Nkind             => N_Unused_At_Start,
4147 
4148          Sloc              => No_Location,
4149          Link              => Empty_List_Or_Node,
4150          Field1            => Empty_List_Or_Node,
4151          Field2            => Empty_List_Or_Node,
4152          Field3            => Empty_List_Or_Node,
4153          Field4            => Empty_List_Or_Node,
4154          Field5            => Empty_List_Or_Node);
4155 
4156       --  Default value used to initialize node extensions (i.e. the second
4157       --  through seventh components of an extended node). Note we are cheating
4158       --  a bit here when it comes to Node12, which often holds flags and (for
4159       --  the third component), the convention. But it works because Empty,
4160       --  False, Convention_Ada, all happen to be all zero bits.
4161 
4162       Default_Node_Extension : constant Node_Record := (
4163          Is_Extension      => True,
4164          Pflag1            => False,
4165          Pflag2            => False,
4166          In_List           => False,
4167          Has_Aspects       => False,
4168          Rewrite_Ins       => False,
4169          Analyzed          => False,
4170          Comes_From_Source => False,
4171          Error_Posted      => False,
4172          Flag4             => False,
4173 
4174          Flag5             => False,
4175          Flag6             => False,
4176          Flag7             => False,
4177          Flag8             => False,
4178          Flag9             => False,
4179          Flag10            => False,
4180          Flag11            => False,
4181          Flag12            => False,
4182 
4183          Flag13            => False,
4184          Flag14            => False,
4185          Flag15            => False,
4186          Flag16            => False,
4187          Flag17            => False,
4188          Flag18            => False,
4189 
4190          Nkind             => E_To_N (E_Void),
4191 
4192          Field6            => Empty_List_Or_Node,
4193          Field7            => Empty_List_Or_Node,
4194          Field8            => Empty_List_Or_Node,
4195          Field9            => Empty_List_Or_Node,
4196          Field10           => Empty_List_Or_Node,
4197          Field11           => Empty_List_Or_Node,
4198          Field12           => Empty_List_Or_Node);
4199 
4200       --  The following defines the extendable array used for the nodes table
4201       --  Nodes with extensions use six consecutive entries in the array
4202 
4203       package Nodes is new Table.Table (
4204         Table_Component_Type => Node_Record,
4205         Table_Index_Type     => Node_Id'Base,
4206         Table_Low_Bound      => First_Node_Id,
4207         Table_Initial        => Alloc.Nodes_Initial,
4208         Table_Increment      => Alloc.Nodes_Increment,
4209         Table_Name           => "Nodes");
4210 
4211       --  The following is a parallel table to Nodes, which provides 8 more
4212       --  bits of space that logically belong to the corresponding node. This
4213       --  is currently used to implement Flags 0,1,2,3 for normal nodes, or
4214       --  the first component of an extended node (four bits unused). Entries
4215       --  for extending components are completely unused.
4216 
4217       type Flags_Byte is record
4218          Flag0  : Boolean;
4219          --  Note: we don't use Flag0 at the moment. To put Flag0 into use
4220          --  requires some awkward work in Treeprs (treeprs.adt), so for the
4221          --  moment we don't use it.
4222 
4223          Flag1  : Boolean;
4224          Flag2  : Boolean;
4225          Flag3  : Boolean;
4226          --  These flags are used in the usual manner in Sinfo and Einfo
4227 
4228          Is_Ignored_Ghost_Node : Boolean;
4229          --  Flag denoting whether the node is subject to pragma Ghost with
4230          --  policy Ignore. The name of the flag should be Flag4, however this
4231          --  requires changing the names of all remaining 300+ flags.
4232 
4233          Check_Actuals : Boolean;
4234          --  Flag set to indicate that the marked node is subject to the check
4235          --  for writable actuals. See xxx for more details. Again it would be
4236          --  more uniform to use some Flagx here, but that would be disruptive.
4237 
4238          Spare2 : Boolean;
4239          Spare3 : Boolean;
4240       end record;
4241 
4242       for Flags_Byte'Size use 8;
4243       pragma Pack (Flags_Byte);
4244 
4245       Default_Flags : constant Flags_Byte := (others => False);
4246       --  Default value used to initialize new entries
4247 
4248       package Flags is new Table.Table (
4249         Table_Component_Type => Flags_Byte,
4250         Table_Index_Type     => Node_Id'Base,
4251         Table_Low_Bound      => First_Node_Id,
4252         Table_Initial        => Alloc.Nodes_Initial,
4253         Table_Increment      => Alloc.Nodes_Increment,
4254         Table_Name           => "Flags");
4255 
4256    end Atree_Private_Part;
4257 
4258 end Atree;