OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [ada/] [atree.ads] - Blame information for rev 16

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 jlechner
------------------------------------------------------------------------------
2
--                                                                          --
3
--                         GNAT COMPILER COMPONENTS                         --
4
--                                                                          --
5
--                                A T R E E                                 --
6
--                                                                          --
7
--                                 S p e c                                  --
8
--                                                                          --
9
--          Copyright (C) 1992-2005, 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 2,  or (at your option) any later ver- --
14
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17
-- for  more details.  You should have  received  a copy of the GNU General --
18
-- Public License  distributed with GNAT;  see file COPYING.  If not, write --
19
-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
20
-- Boston, MA 02110-1301, USA.                                              --
21
--                                                                          --
22
-- As a special exception,  if other files  instantiate  generics from this --
23
-- unit, or you link  this unit with other files  to produce an executable, --
24
-- this  unit  does not  by itself cause  the resulting  executable  to  be --
25
-- covered  by the  GNU  General  Public  License.  This exception does not --
26
-- however invalidate  any other reasons why  the executable file  might be --
27
-- covered by the  GNU Public License.                                      --
28
--                                                                          --
29
-- GNAT was originally developed  by the GNAT team at  New York University. --
30
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
31
--                                                                          --
32
------------------------------------------------------------------------------
33
 
34
with Alloc;
35
with Sinfo;  use Sinfo;
36
with Einfo;  use Einfo;
37
with Types;  use Types;
38
with Snames; use Snames;
39
with System; use System;
40
with Table;
41
with Uintp;  use Uintp;
42
with Urealp; use Urealp;
43
with Unchecked_Conversion;
44
 
45
package Atree is
46
 
47
--  This package defines the format of the tree used to represent the Ada
48
--  program internally. Syntactic and semantic information is combined in
49
--  this tree. There is no separate symbol table structure.
50
 
51
--  WARNING: There is a C version of this package. Any changes to this
52
--  source file must be properly reflected in the C header file tree.h
53
 
54
--  Package Atree defines the basic structure of the tree and its nodes and
55
--  provides the basic abstract interface for manipulating the tree. Two
56
--  other packages use this interface to define the representation of Ada
57
--  programs using this tree format. The package Sinfo defines the basic
58
--  representation of the syntactic structure of the program, as output
59
--  by the parser. The package Entity_Info defines the semantic information
60
--  which is added to the tree nodes that represent declared entities (i.e.
61
--  the information which might typically be described in a separate symbol
62
--  table structure.
63
 
64
--  The front end of the compiler first parses the program and generates a
65
--  tree that is simply a syntactic representation of the program in abstract
66
--  syntax tree format. Subsequent processing in the front end traverses the
67
--  tree, transforming it in various ways and adding semantic information.
68
 
69
   ----------------------------------------
70
   -- Definitions of Fields in Tree Node --
71
   ----------------------------------------
72
 
73
   --  The representation of the tree is completely hidden, using a functional
74
   --  interface for accessing and modifying the contents of nodes. Logically
75
   --  a node contains a number of fields, much as though the nodes were
76
   --  defined as a record type. The fields in a node are as follows:
77
 
78
   --   Nkind         Indicates the kind of the node. This field is present
79
   --                 in all nodes. The type is Node_Kind, which is declared
80
   --                 in the package Sinfo.
81
 
82
   --   Sloc          Location (Source_Ptr) of the corresponding token
83
   --                 in the Source buffer. The individual node definitions
84
   --                 show which token is referenced by this pointer.
85
 
86
   --   In_List       A flag used to indicate if the node is a member
87
   --                    of a node list.
88
 
89
   --   Rewrite_Sub   A flag set if the node has been rewritten using
90
   --                 the Rewrite procedure. The original value of the
91
   --                 node is retrievable with Original_Node.
92
 
93
   --   Rewrite_Ins   A flag set if a node is marked as a rewrite inserted
94
   --                 node as a result of a call to Mark_Rewrite_Insertion.
95
 
96
   --   Paren_Count   A 2-bit count used on expression nodes to indicate
97
   --                 the level of parentheses. Up to 3 levels can be
98
   --                 accomodated. Anything more than 3 levels is treated
99
   --                 as 3 levels (conformance tests that complain about
100
   --                 this are hereby deemed pathological!) Set to zero
101
   --                 for non-subexpression nodes.
102
 
103
   --   Comes_From_Source
104
   --                 This flag is present in all nodes. It is set if the
105
   --                 node is built by the scanner or parser, and clear if
106
   --                 the node is built by the analyzer or expander. It
107
   --                 indicates that the node corresponds to a construct
108
   --                 that appears in the original source program.
109
 
110
   --   Analyzed      This flag is present in all nodes. It is set when
111
   --                 a node is analyzed, and is used to avoid analyzing
112
   --                 the same node twice. Analysis includes expansion if
113
   --                 expansion is active, so in this case if the flag is
114
   --                 set it means the node has been analyzed and expanded.
115
 
116
   --   Error_Posted  This flag is present in all nodes. It is set when
117
   --                 an error message is posted which is associated with
118
   --                 the flagged node. This is used to avoid posting more
119
   --                 than one message on the same node.
120
 
121
   --   Field1
122
   --   Field2
123
   --   Field3
124
   --   Field4
125
   --   Field5        Five fields holding Union_Id values
126
 
127
   --   ElistN        Synonym for FieldN typed as Elist_Id (Empty = No_Elist)
128
   --   ListN         Synonym for FieldN typed as List_Id
129
   --   NameN         Synonym for FieldN typed as Name_Id
130
   --   NodeN         Synonym for FieldN typed as Node_Id
131
   --   StrN          Synonym for FieldN typed as String_Id
132
   --   UintN         Synonym for FieldN typed as Uint (Empty = Uint_0)
133
   --   UrealN        Synonym for FieldN typed as Ureal
134
 
135
   --   Note: in the case of ElistN and UintN fields, it is common that we
136
   --   end up with a value of Union_Id'(0) as the default value. This value
137
   --   is meaningless as a Uint or Elist_Id value. We have two choices here.
138
   --   We could require that all Uint and Elist fields be initialized to an
139
   --   appropriate value, but that's error prone, since it would be easy to
140
   --   miss an initialization. So instead we have the retrieval functions
141
   --   generate an appropriate default value (Uint_0 or No_Elist). Probably
142
   --   it would be cleaner to generate No_Uint in the Uint case but we got
143
   --   stuck with representing an "unset" size value as zero early on, and
144
   --   it will take a bit of fiddling to change that ???
145
 
146
   --   Note: the actual usage of FieldN (i.e. whether it contains a Elist_Id,
147
   --   List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal), depends on the
148
   --   value in Nkind. Generally the access to this field is always via the
149
   --   functional interface, so the field names ElistN, ListN, NameN, NodeN,
150
   --   StrN, UintN and UrealN are used only in the bodies of the access
151
   --   functions (i.e. in the bodies of Sinfo and Einfo). These access
152
   --   functions contain debugging code that checks that the use is
153
   --   consistent with Nkind and Ekind values.
154
 
155
   --   However, in specialized circumstances (examples are the circuit in
156
   --   generic instantiation to copy trees, and in the tree dump routine),
157
   --   it is useful to be able to do untyped traversals, and an internal
158
   --   package in Atree allows for direct untyped accesses in such cases.
159
 
160
   --   Flag4         Fifteen Boolean flags (use depends on Nkind and
161
   --   Flag5         Ekind, as described for FieldN). Again the access
162
   --   Flag6         is usually via subprograms in Sinfo and Einfo which
163
   --   Flag7         provide high-level synonyms for these flags, and
164
   --   Flag8         contain debugging code that checks that the values
165
   --   Flag9         in Nkind and Ekind are appropriate for the access.
166
   --   Flag10
167
   --   Flag11        Note that Flag1-3 are missing from this list. The
168
   --   Flag12        first three flag positions are reserved for the
169
   --   Flag13        standard flags (Comes_From_Source, Error_Posted,
170
   --   Flag14        and Analyzed)
171
   --   Flag15
172
   --   Flag16
173
   --   Flag17
174
   --   Flag18
175
 
176
   --   Link          For a node, points to the Parent. For a list, points
177
   --                 to the list header. Note that in the latter case, a
178
   --                 client cannot modify the link field. This field is
179
   --                 private to the Atree package (but is also modified
180
   --                 by the Nlists package).
181
 
182
   --  The following additional fields are present in extended nodes used
183
   --  for entities (Nkind in N_Entity).
184
 
185
   --   Ekind         Entity type. This field indicates the type of the
186
   --                 entity, it is of type Entity_Kind which is defined
187
   --                 in package Einfo.
188
 
189
   --   Flag19        197 additional flags
190
   --   ...
191
   --   Flag215
192
 
193
   --   Convention    Entity convention (Convention_Id value)
194
 
195
   --   Field6        Additional Union_Id value stored in tree
196
 
197
   --   Node6         Synonym for Field6 typed as Node_Id
198
   --   Elist6        Synonym for Field6 typed as Elist_Id (Empty = No_Elist)
199
   --   Uint6         Synonym for Field6 typed as Uint (Empty = Uint_0)
200
 
201
   --   Similar definitions for Field7 to Field27 (and Node7-Node27,
202
   --   Elist7-Elist27, Uint7-Uint27, Ureal7-Ureal27). Note that not all
203
   --   these functions are defined, only the ones that are actually used.
204
 
205
   type Paren_Count_Type is mod 4;
206
   for Paren_Count_Type'Size use 2;
207
   --  Type used for Paren_Count field
208
 
209
   function Last_Node_Id return Node_Id;
210
   pragma Inline (Last_Node_Id);
211
   --  Returns Id of last allocated node Id
212
 
213
   function Nodes_Address return System.Address;
214
   --  Return address of Nodes table (used in Back_End for Gigi call)
215
 
216
   function Num_Nodes return Nat;
217
   --  Total number of nodes allocated, where an entity counts as a single
218
   --  node. This count is incremented every time a node or entity is
219
   --  allocated, and decremented every time a node or entity is deleted.
220
   --  This value is used by Xref and by Treepr to allocate hash tables of
221
   --  suitable size for hashing Node_Id values.
222
 
223
   -----------------------
224
   -- Use of Empty Node --
225
   -----------------------
226
 
227
   --  The special Node_Id Empty is used to mark missing fields. Whenever the
228
   --  syntax has an optional component, then the corresponding field will be
229
   --  set to Empty if the component is missing.
230
 
231
   --  Note: Empty is not used to describe an empty list. Instead in this
232
   --  case the node field contains a list which is empty, and these cases
233
   --  should be distinguished (essentially from a type point of view, Empty
234
   --  is a Node, and is thus not a list).
235
 
236
   --  Note: Empty does in fact correspond to an allocated node. Only the
237
   --  Nkind field of this node may be referenced. It contains N_Empty, which
238
   --  uniquely identifies the empty case. This allows the Nkind field to be
239
   --  dereferenced before the check for Empty which is sometimes useful.
240
 
241
   -----------------------
242
   -- Use of Error Node --
243
   -----------------------
244
 
245
   --  The Error node is used during syntactic and semantic analysis to
246
   --  indicate that the corresponding piece of syntactic structure or
247
   --  semantic meaning cannot properly be represented in the tree because
248
   --  of an illegality in the program.
249
 
250
   --  If an Error node is encountered, then you know that a previous
251
   --  illegality has been detected. The proper reaction should be to
252
   --  avoid posting related cascaded error messages, and to propagate
253
   --  the error node if necessary.
254
 
255
   ------------------------
256
   -- Current_Error_Node --
257
   ------------------------
258
 
259
   --  The current error node is a global location indicating the current
260
   --  node that is being processed for the purposes of placing a compiler
261
   --  abort message. This is not necessarily perfectly accurate, it is
262
   --  just a reasonably accurate best guess. It is used to output the
263
   --  source location in the abort message by Comperr, and also to
264
   --  implement the d3 debugging flag. This is also used by Rtsfind
265
   --  to generate error messages for high integrity mode.
266
 
267
   --  There are two ways this gets set. During parsing, when new source
268
   --  nodes are being constructed by calls to New_Node and New_Entity,
269
   --  either one of these calls sets Current_Error_Node to the newly
270
   --  created node. During semantic analysis, this mechanism is not
271
   --  used, and instead Current_Error_Node is set by the subprograms in
272
   --  Debug_A that mark the start and end of analysis/expansion of a
273
   --  node in the tree.
274
 
275
   Current_Error_Node : Node_Id;
276
   --  Node to place error messages
277
 
278
   -------------------------------
279
   -- Default Setting of Fields --
280
   -------------------------------
281
 
282
   --  Nkind is set to N_Unused_At_Start
283
 
284
   --  Ekind is set to E_Void
285
 
286
   --  Sloc is always set, there is no default value
287
 
288
   --  Field1-5 fields are set to Empty
289
 
290
   --  Field6-22 fields in extended nodes are set to Empty
291
 
292
   --  Parent is set to Empty
293
 
294
   --  All Boolean flag fields are set to False
295
 
296
   --  Note: the value Empty is used in Field1-Field17 to indicate a null node.
297
   --  The usage varies. The common uses are to indicate absence of an
298
   --  optional clause or a completely unused Field1-17 field.
299
 
300
   -------------------------------------
301
   -- Use of Synonyms for Node Fields --
302
   -------------------------------------
303
 
304
   --  A subpackage Atree.Unchecked_Access provides routines for reading and
305
   --  writing the fields defined above (Field1-27, Node1-27, Flag1-215 etc).
306
   --  These unchecked access routines can be used for untyped traversals.
307
   --  In addition they are used in the implementations of the Sinfo and
308
   --  Einfo packages. These packages both provide logical synonyms for
309
   --  the generic fields, together with an appropriate set of access routines.
310
   --  Normally access to information within tree nodes uses these synonyms,
311
   --  providing a high level typed interface to the tree information.
312
 
313
   --------------------------------------------------
314
   -- Node Allocation and Modification Subprograms --
315
   --------------------------------------------------
316
 
317
   --  Generally the parser builds the tree and then it is further decorated
318
   --  (e.g. by setting the entity fields), but not fundamentally modified.
319
   --  However, there are cases in which the tree must be restructured by
320
   --  adding and rearranging nodes, as a result of disambiguating cases
321
   --  which the parser could not parse correctly, and adding additional
322
   --  semantic information (e.g. making constraint checks explicit). The
323
   --  following subprograms are used for constructing the tree in the first
324
   --  place, and then for subsequent modifications as required
325
 
326
   procedure Initialize;
327
   --  Called at the start of compilation to initialize the allocation of
328
   --  the node and list tables and make the standard entries for Empty,
329
   --  Error and Error_List. Note that Initialize must not be called if
330
   --  Tree_Read is used.
331
 
332
   procedure Lock;
333
   --  Called before the backend is invoked to lock the nodes table
334
 
335
   procedure Tree_Read;
336
   --  Initializes internal tables from current tree file using the relevant
337
   --  Table.Tree_Read routines. Note that Initialize should not be called if
338
   --  Tree_Read is used. Tree_Read includes all necessary initialization.
339
 
340
   procedure Tree_Write;
341
   --  Writes out internal tables to current tree file using the relevant
342
   --  Table.Tree_Write routines.
343
 
344
   function New_Node
345
     (New_Node_Kind : Node_Kind;
346
      New_Sloc      : Source_Ptr) return Node_Id;
347
   --  Allocates a completely new node with the given node type and source
348
   --  location values. All other fields are set to their standard defaults:
349
   --
350
   --    Empty for all FieldN fields
351
   --    False for all FlagN fields
352
   --
353
   --  The usual approach is to build a new node using this function and
354
   --  then, using the value returned, use the Set_xxx functions to set
355
   --  fields of the node as required. New_Node can only be used for
356
   --  non-entity nodes, i.e. it never generates an extended node.
357
   --
358
   --  If we are currently parsing, as indicated by a previous call to
359
   --  Set_Comes_From_Source_Default (True), then this call also resets
360
   --  the value of Current_Error_Node.
361
 
362
   function New_Entity
363
     (New_Node_Kind : Node_Kind;
364
      New_Sloc      : Source_Ptr) return Entity_Id;
365
   --  Similar to New_Node, except that it is used only for entity nodes
366
   --  and returns an extended node.
367
 
368
   procedure Set_Comes_From_Source_Default (Default : Boolean);
369
   --  Sets value of Comes_From_Source flag to be used in all subsequent
370
   --  New_Node and New_Entity calls until another call to this procedure
371
   --  changes the default. This value is set True during parsing and
372
   --  False during semantic analysis. This is also used to determine
373
   --  if New_Node and New_Entity should set Current_Error_Node.
374
 
375
   function Get_Comes_From_Source_Default return Boolean;
376
   pragma Inline (Get_Comes_From_Source_Default);
377
   --  Gets the current value of the Comes_From_Source flag
378
 
379
   procedure Preserve_Comes_From_Source (NewN, OldN : Node_Id);
380
   pragma Inline (Preserve_Comes_From_Source);
381
   --  When a node is rewritten, it is sometimes appropriate to preserve the
382
   --  original comes from source indication. This is true when the rewrite
383
   --  essentially corresponds to a transformation corresponding exactly to
384
   --  semantics in the reference manual. This procedure copies the setting
385
   --  of Comes_From_Source from OldN to NewN.
386
 
387
   function Has_Extension (N : Node_Id) return Boolean;
388
   pragma Inline (Has_Extension);
389
   --  Returns True if the given node has an extension (i.e. was created by
390
   --  a call to New_Entity rather than New_Node, and Nkind is in N_Entity)
391
 
392
   procedure Change_Node (N : Node_Id; New_Node_Kind : Node_Kind);
393
   --  This procedure replaces the given node by setting its Nkind field to
394
   --  the indicated value and resetting all other fields to their default
395
   --  values except for Sloc, which is unchanged, and the Parent pointer
396
   --  and list links, which are also unchanged. All other information in
397
   --  the original node is lost. The new node has an extension if the
398
   --  original node had an extension.
399
 
400
   procedure Copy_Node (Source : Node_Id; Destination : Node_Id);
401
   --  Copy the entire contents of the source node to the destination node.
402
   --  The contents of the source node is not affected. If the source node
403
   --  has an extension, then the destination must have an extension also.
404
   --  The parent pointer of the destination and its list link, if any, are
405
   --  not affected by the copy. Note that parent pointers of descendents
406
   --  are not adjusted, so the descendents of the destination node after
407
   --  the Copy_Node is completed have dubious parent pointers.
408
 
409
   function New_Copy (Source : Node_Id) return Node_Id;
410
   --  This function allocates a completely new node, and then initializes
411
   --  it by copying the contents of the source node into it. The contents
412
   --  of the source node is not affected. The target node is always marked
413
   --  as not being in a list (even if the source is a list member). The
414
   --  new node will have an extension if the source has an extension.
415
   --  New_Copy (Empty) returns Empty and New_Copy (Error) returns Error.
416
   --  Note that, unlike New_Copy_Tree, New_Copy does not recursively copy any
417
   --  descendents, so in general parent pointers are not set correctly for
418
   --  the descendents of the copied node. Both normal and extended nodes
419
   --  (entities) may be copied using New_Copy.
420
 
421
   function Relocate_Node (Source : Node_Id) return Node_Id;
422
   --  Source is a non-entity node that is to be relocated. A new node is
423
   --  allocated and the contents of Source are copied to this node using
424
   --  Copy_Node. The parent pointers of descendents of the node are then
425
   --  adjusted to point to the relocated copy. The original node is not
426
   --  modified, but the parent pointers of its descendents are no longer
427
   --  valid. This routine is used in conjunction with the tree rewrite
428
   --  routines (see descriptions of Replace/Rewrite).
429
   --
430
   --  Note that the resulting node has the same parent as the source
431
   --  node, and is thus still attached to the tree. It is valid for
432
   --  Source to be Empty, in which case Relocate_Node simply returns
433
   --  Empty as the result.
434
 
435
   function New_Copy_Tree
436
     (Source    : Node_Id;
437
      Map       : Elist_Id := No_Elist;
438
      New_Sloc  : Source_Ptr := No_Location;
439
      New_Scope : Entity_Id := Empty) return Node_Id;
440
   --  Given a node that is the root of a subtree, Copy_Tree copies the entire
441
   --  syntactic subtree, including recursively any descendents whose parent
442
   --  field references a copied node (descendents not linked to a copied node
443
   --  by the parent field are not copied, instead the copied tree references
444
   --  the same descendent as the original in this case, which is appropriate
445
   --  for non-syntactic fields such as Etype). The parent pointers in the
446
   --  copy are properly set. Copy_Tree (Empty/Error) returns Empty/Error.
447
   --  The one exception to the rule of not copying semantic fields is that
448
   --  any implicit types attached to the subtree are duplicated, so that
449
   --  the copy contains a distinct set of implicit type entities. The Map
450
   --  argument, if set to a non-empty Elist, specifies a set of mappings
451
   --  to be applied to entities in the tree. The map has the form:
452
   --
453
   --     old entity 1
454
   --     new entity to replace references to entity 1
455
   --     old entity 2
456
   --     new entity to replace references to entity 2
457
   --     ...
458
   --
459
   --  The call destroys the contents of Map in this case
460
   --
461
   --  The parameter New_Sloc, if set to a value other than No_Location, is
462
   --  used as the Sloc value for all nodes in the new copy. If New_Sloc is
463
   --  set to its default value No_Location, then the Sloc values of the
464
   --  nodes in the copy are simply copied from the corresponding original.
465
   --
466
   --  The Comes_From_Source indication is unchanged if New_Sloc is set to
467
   --  the default No_Location value, but is reset if New_Sloc is given, since
468
   --  in this case the result clearly is neither a source node or an exact
469
   --  copy of a source node.
470
   --
471
   --  The parameter New_Scope, if set to a value other than Empty, is the
472
   --  value to use as the Scope for any Itypes that are copied. The most
473
   --  typical value for this parameter, if given, is Current_Scope.
474
 
475
   function Copy_Separate_Tree (Source : Node_Id) return Node_Id;
476
   --  Given a node that is the root of a subtree, Copy_Separate_Tree copies
477
   --  the entire syntactic subtree, including recursively any descendants
478
   --  whose parent field references a copied node (descendants not linked to
479
   --  a copied node by the parent field are also copied.) The parent pointers
480
   --  in the copy are properly set. Copy_Separate_Tree (Empty/Error) returns
481
   --  Empty/Error. The semantic fields are not copied and the new subtree
482
   --  does not share any entity with source subtree.
483
   --  But the code *does* copy semantic fields, and the description above
484
   --  is in any case unclear on this point ??? (RBKD)
485
 
486
   procedure Exchange_Entities (E1 : Entity_Id; E2 : Entity_Id);
487
   --  Exchange the contents of two entities. The parent pointers are switched
488
   --  as well as the Defining_Identifier fields in the parents, so that the
489
   --  entities point correctly to their original parents. The effect is thus
490
   --  to leave the tree completely unchanged in structure, except that the
491
   --  entity ID values of the two entities are interchanged. Neither of the
492
   --  two entities may be list members.
493
 
494
   procedure Delete_Node (Node : Node_Id);
495
   --  The node, which must not be a list member, is deleted from the tree and
496
   --  its type is set to N_Unused_At_End. It is an error (not necessarily
497
   --  detected) to reference this node after it has been deleted. The
498
   --  implementation of the body of Atree is free to reuse the node to
499
   --  satisfy future node allocation requests, but is not required to do so.
500
 
501
   procedure Delete_Tree (Node : Node_Id);
502
   --  The entire syntactic subtree referenced by Node (i.e. the given node
503
   --  and all its syntactic descendents) are deleted as described above for
504
   --  Delete_Node.
505
 
506
   function Extend_Node (Node : Node_Id) return Entity_Id;
507
   --  This function returns a copy of its input node with an extension
508
   --  added. The fields of the extension are set to Empty. Due to the way
509
   --  extensions are handled (as four consecutive array elements), it may
510
   --  be necessary to reallocate the node, so that the returned value is
511
   --  not the same as the input value, but where possible the returned
512
   --  value will be the same as the input value (i.e. the extension will
513
   --  occur in place). It is the caller's responsibility to ensure that
514
   --  any pointers to the original node are appropriately updated. This
515
   --  function is used only by Sinfo.CN to change nodes into their
516
   --  corresponding entities.
517
 
518
   type Traverse_Result is (OK, OK_Orig, Skip, Abandon);
519
   --  This is the type of the result returned by the Process function passed
520
   --  to Traverse_Func and Traverse_Proc and also the type of the result of
521
   --  Traverse_Func itself. See descriptions below for details.
522
 
523
   generic
524
     with function Process (N : Node_Id) return Traverse_Result is <>;
525
   function Traverse_Func (Node : Node_Id) return Traverse_Result;
526
   --  This is a generic function that, given the parent node for a subtree,
527
   --  traverses all syntactic nodes of this tree, calling the given function
528
   --  Process on each one. The traversal is controlled as follows by the
529
   --  result returned by Process:
530
 
531
   --    OK       The traversal continues normally with the syntactic
532
   --             children of the node just processed.
533
 
534
   --    OK_Orig  The traversal continues normally with the syntactic
535
   --             children of the original node of the node just processed.
536
 
537
   --    Skip     The children of the node just processed are skipped and
538
   --             excluded from the traversal, but otherwise processing
539
   --             continues elsewhere in the tree.
540
 
541
   --    Abandon  The entire traversal is immediately abandoned, and the
542
   --             original call to Traverse returns Abandon.
543
 
544
   --  The result returned by Traverse is Abandon if processing was terminated
545
   --  by a call to Process returning Abandon, otherwise it is OK (meaning that
546
   --  all calls to process returned either OK or Skip).
547
 
548
   generic
549
     with function Process (N : Node_Id) return Traverse_Result is <>;
550
   procedure Traverse_Proc (Node : Node_Id);
551
   pragma Inline (Traverse_Proc);
552
   --  This is similar to Traverse_Func except that no result is returned,
553
   --  i.e. Traverse_Func is called and the result is simply discarded.
554
 
555
   ---------------------------
556
   -- Node Access Functions --
557
   ---------------------------
558
 
559
   --  The following functions return the contents of the indicated field of
560
   --  the node referenced by the argument, which is a Node_Id.
561
 
562
   function Nkind             (N : Node_Id) return Node_Kind;
563
   pragma Inline (Nkind);
564
 
565
   function Analyzed          (N : Node_Id) return Boolean;
566
   pragma Inline (Analyzed);
567
 
568
   function Comes_From_Source (N : Node_Id) return Boolean;
569
   pragma Inline (Comes_From_Source);
570
 
571
   function Error_Posted      (N : Node_Id) return Boolean;
572
   pragma Inline (Error_Posted);
573
 
574
   function Sloc              (N : Node_Id) return Source_Ptr;
575
   pragma Inline (Sloc);
576
 
577
   function Paren_Count       (N : Node_Id) return Paren_Count_Type;
578
   pragma Inline (Paren_Count);
579
 
580
   function Parent            (N : Node_Id) return Node_Id;
581
   pragma Inline (Parent);
582
   --  Returns the parent of a node if the node is not a list member, or
583
   --  else the parent of the list containing the node if the node is a
584
   --  list member.
585
 
586
   function No                (N : Node_Id) return Boolean;
587
   pragma Inline (No);
588
   --  Tests given Id for equality with the Empty node. This allows notations
589
   --  like "if No (Variant_Part)" as opposed to "if Variant_Part = Empty".
590
 
591
   function Present           (N : Node_Id) return Boolean;
592
   pragma Inline (Present);
593
   --  Tests given Id for inequality with the Empty node. This allows notations
594
   --  like "if Present (Statement)" as opposed to "if Statement /= Empty".
595
 
596
   -----------------------------
597
   -- Entity Access Functions --
598
   -----------------------------
599
 
600
   --  The following functions apply only to Entity_Id values, i.e.
601
   --  to extended nodes.
602
 
603
   function Ekind (E : Entity_Id) return Entity_Kind;
604
   pragma Inline (Ekind);
605
 
606
   function Convention (E : Entity_Id) return Convention_Id;
607
   pragma Inline (Convention);
608
 
609
   ----------------------------
610
   -- Node Update Procedures --
611
   ----------------------------
612
 
613
   --  The following functions set a specified field in the node whose Id is
614
   --  passed as the first argument. The second parameter is the new value
615
   --  to be set in the specified field. Note that Set_Nkind is in the next
616
   --  section, since its use is restricted.
617
 
618
   procedure Set_Sloc         (N : Node_Id; Val : Source_Ptr);
619
   pragma Inline (Set_Sloc);
620
 
621
   procedure Set_Paren_Count  (N : Node_Id; Val : Paren_Count_Type);
622
   pragma Inline (Set_Paren_Count);
623
 
624
   procedure Set_Parent       (N : Node_Id; Val : Node_Id);
625
   pragma Inline (Set_Parent);
626
 
627
   procedure Set_Analyzed     (N : Node_Id; Val : Boolean := True);
628
   pragma Inline (Set_Analyzed);
629
 
630
   procedure Set_Error_Posted (N : Node_Id; Val : Boolean := True);
631
   pragma Inline (Set_Error_Posted);
632
 
633
   procedure Set_Comes_From_Source (N : Node_Id; Val : Boolean);
634
   pragma Inline (Set_Comes_From_Source);
635
   --  Note that this routine is very rarely used, since usually the
636
   --  default mechanism provided sets the right value, but in some
637
   --  unusual cases, the value needs to be reset (e.g. when a source
638
   --  node is copied, and the copy must not have Comes_From_Source set.
639
 
640
   ------------------------------
641
   -- Entity Update Procedures --
642
   ------------------------------
643
 
644
   --  The following procedures apply only to Entity_Id values, i.e.
645
   --  to extended nodes.
646
 
647
   procedure Set_Ekind (E : Entity_Id; Val : Entity_Kind);
648
   pragma Inline (Set_Ekind);
649
 
650
   procedure Set_Convention (E : Entity_Id; Val : Convention_Id);
651
   pragma Inline (Set_Convention);
652
 
653
   ---------------------------
654
   -- Tree Rewrite Routines --
655
   ---------------------------
656
 
657
   --  During the compilation process it is necessary in a number of situations
658
   --  to rewrite the tree. In some cases, such rewrites do not affect the
659
   --  structure of the tree, for example, when an indexed component node is
660
   --  replaced by the corresponding call node (the parser cannot distinguish
661
   --  between these two cases).
662
 
663
   --  In other situations, the rewrite does affect the structure of the
664
   --  tree. Examples are the replacement of a generic instantiation by the
665
   --  instantiated spec and body, and the static evaluation of expressions.
666
 
667
   --  If such structural modifications are done by the expander, there are
668
   --  no difficulties, since the form of the tree after the expander has no
669
   --  special significance, except as input to the backend of the compiler.
670
   --  However, if these modifications are done by the semantic phase, then
671
   --  it is important that they be done in a manner which allows the original
672
   --  tree to be preserved. This is because tools like pretty printers need
673
   --  to have this original tree structure available.
674
 
675
   --  The subprograms in this section allow rewriting of the tree by either
676
   --  insertion of new nodes in an existing list, or complete replacement of
677
   --  a subtree. The resulting tree for most purposes looks as though it has
678
   --  been really changed, and there is no trace of the original. However,
679
   --  special subprograms, also defined in this section, allow the original
680
   --  tree to be reconstructed if necessary.
681
 
682
   --  For tree modifications done in the expander, it is permissible to
683
   --  destroy the original tree, although it is also allowable to use the
684
   --  tree rewrite routines where it is convenient to do so.
685
 
686
   procedure Mark_Rewrite_Insertion (New_Node : Node_Id);
687
   pragma Inline (Mark_Rewrite_Insertion);
688
   --  This procedure marks the given node as an insertion made during a tree
689
   --  rewriting operation. Only the root needs to be marked. The call does
690
   --  not do the actual insertion, which must be done using one of the normal
691
   --  list insertion routines. The node is treated normally in all respects
692
   --  except for its response to Is_Rewrite_Insertion. The function of these
693
   --  calls is to be able to get an accurate original tree. This helps the
694
   --  accuracy of Sprint.Sprint_Node, and in particular, when stubs are being
695
   --  generated, it is essential that the original tree be accurate.
696
 
697
   function Is_Rewrite_Insertion (Node : Node_Id) return Boolean;
698
   pragma Inline (Is_Rewrite_Insertion);
699
   --  Tests whether the given node was marked using Set_Rewrite_Insert. This
700
   --  is used in reconstructing the original tree (where such nodes are to
701
   --  be eliminated from the reconstructed tree).
702
 
703
   procedure Rewrite (Old_Node, New_Node : Node_Id);
704
   --  This is used when a complete subtree is to be replaced. Old_Node is the
705
   --  root of the old subtree to be replaced, and New_Node is the root of the
706
   --  newly constructed replacement subtree. The actual mechanism is to swap
707
   --  the contents of these two nodes fixing up the parent pointers of the
708
   --  replaced node (we do not attempt to preserve parent pointers for the
709
   --  original node). Neither Old_Node nor New_Node can be extended nodes.
710
   --
711
   --  Note: New_Node may not contain references to Old_Node, for example as
712
   --  descendents, since the rewrite would make such references invalid. If
713
   --  New_Node does need to reference Old_Node, then these references should
714
   --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
715
   --
716
   --  Note: The Original_Node function applied to Old_Node (which has now
717
   --  been replaced by the contents of New_Node), can be used to obtain the
718
   --  original node, i.e. the old contents of Old_Node.
719
 
720
   procedure Replace (Old_Node, New_Node : Node_Id);
721
   --  This is similar to Rewrite, except that the old value of Old_Node is
722
   --  not saved, and the New_Node is deleted after the replace, since it
723
   --  is assumed that it can no longer be legitimately needed. The flag
724
   --  Is_Rewrite_Susbtitute will be False for the resulting node, unless
725
   --  it was already true on entry, and Original_Node will not return the
726
   --  original contents of the Old_Node, but rather the New_Node value (unless
727
   --  Old_Node had already been rewritten using Rewrite). Replace also
728
   --  preserves the setting of Comes_From_Source.
729
   --
730
   --  Note, New_Node may not contain references to Old_Node, for example as
731
   --  descendents, since the rewrite would make such references invalid. If
732
   --  New_Node does need to reference Old_Node, then these references should
733
   --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
734
   --
735
   --  Replace is used in certain circumstances where it is desirable to
736
   --  suppress any history of the rewriting operation. Notably, it is used
737
   --  when the parser has mis-classified a node (e.g. a task entry call
738
   --  that the parser has parsed as a procedure call).
739
 
740
   function Is_Rewrite_Substitution (Node : Node_Id) return Boolean;
741
   pragma Inline (Is_Rewrite_Substitution);
742
   --  Return True iff Node has been rewritten (i.e. if Node is the root
743
   --  of a subtree which was installed using Rewrite).
744
 
745
   function Original_Node (Node : Node_Id) return Node_Id;
746
   pragma Inline (Original_Node);
747
   --  If Node has not been rewritten, then returns its input argument
748
   --  unchanged, else returns the Node for the original subtree.
749
   --
750
   --  Note: Parents are not preserved in original tree nodes that are
751
   --  retrieved in this way (i.e. their children may have children whose
752
   --  pointers which reference some other node).
753
 
754
   --  Note: there is no direct mechanism for deleting an original node (in
755
   --  a manner that can be reversed later). One possible approach is to use
756
   --  Rewrite to substitute a null statement for the node to be deleted.
757
 
758
   -----------------------------------
759
   -- Generic Field Access Routines --
760
   -----------------------------------
761
 
762
   --  This subpackage provides the functions for accessing and procedures
763
   --  for setting fields that are normally referenced by their logical
764
   --  synonyms defined in packages Sinfo and Einfo. As previously
765
   --  described the implementations of these packages use the package
766
   --  Atree.Unchecked_Access.
767
 
768
   package Unchecked_Access is
769
 
770
      --  Functions to allow interpretation of Union_Id values as Uint
771
      --  and Ureal values
772
 
773
      function To_Union is new Unchecked_Conversion (Uint,  Union_Id);
774
      function To_Union is new Unchecked_Conversion (Ureal, Union_Id);
775
 
776
      function From_Union is new Unchecked_Conversion (Union_Id, Uint);
777
      function From_Union is new Unchecked_Conversion (Union_Id, Ureal);
778
 
779
      --  Functions to fetch contents of indicated field. It is an error
780
      --  to attempt to read the value of a field which is not present.
781
 
782
      function Field1 (N : Node_Id) return Union_Id;
783
      pragma Inline (Field1);
784
 
785
      function Field2 (N : Node_Id) return Union_Id;
786
      pragma Inline (Field2);
787
 
788
      function Field3 (N : Node_Id) return Union_Id;
789
      pragma Inline (Field3);
790
 
791
      function Field4 (N : Node_Id) return Union_Id;
792
      pragma Inline (Field4);
793
 
794
      function Field5 (N : Node_Id) return Union_Id;
795
      pragma Inline (Field5);
796
 
797
      function Field6 (N : Node_Id) return Union_Id;
798
      pragma Inline (Field6);
799
 
800
      function Field7 (N : Node_Id) return Union_Id;
801
      pragma Inline (Field7);
802
 
803
      function Field8 (N : Node_Id) return Union_Id;
804
      pragma Inline (Field8);
805
 
806
      function Field9 (N : Node_Id) return Union_Id;
807
      pragma Inline (Field9);
808
 
809
      function Field10 (N : Node_Id) return Union_Id;
810
      pragma Inline (Field10);
811
 
812
      function Field11 (N : Node_Id) return Union_Id;
813
      pragma Inline (Field11);
814
 
815
      function Field12 (N : Node_Id) return Union_Id;
816
      pragma Inline (Field12);
817
 
818
      function Field13 (N : Node_Id) return Union_Id;
819
      pragma Inline (Field13);
820
 
821
      function Field14 (N : Node_Id) return Union_Id;
822
      pragma Inline (Field14);
823
 
824
      function Field15 (N : Node_Id) return Union_Id;
825
      pragma Inline (Field15);
826
 
827
      function Field16 (N : Node_Id) return Union_Id;
828
      pragma Inline (Field16);
829
 
830
      function Field17 (N : Node_Id) return Union_Id;
831
      pragma Inline (Field17);
832
 
833
      function Field18 (N : Node_Id) return Union_Id;
834
      pragma Inline (Field18);
835
 
836
      function Field19 (N : Node_Id) return Union_Id;
837
      pragma Inline (Field19);
838
 
839
      function Field20 (N : Node_Id) return Union_Id;
840
      pragma Inline (Field20);
841
 
842
      function Field21 (N : Node_Id) return Union_Id;
843
      pragma Inline (Field21);
844
 
845
      function Field22 (N : Node_Id) return Union_Id;
846
      pragma Inline (Field22);
847
 
848
      function Field23 (N : Node_Id) return Union_Id;
849
      pragma Inline (Field23);
850
 
851
      function Field24 (N : Node_Id) return Union_Id;
852
      pragma Inline (Field24);
853
 
854
      function Field25 (N : Node_Id) return Union_Id;
855
      pragma Inline (Field25);
856
 
857
      function Field26 (N : Node_Id) return Union_Id;
858
      pragma Inline (Field26);
859
 
860
      function Field27 (N : Node_Id) return Union_Id;
861
      pragma Inline (Field27);
862
 
863
      function Node1 (N : Node_Id) return Node_Id;
864
      pragma Inline (Node1);
865
 
866
      function Node2 (N : Node_Id) return Node_Id;
867
      pragma Inline (Node2);
868
 
869
      function Node3 (N : Node_Id) return Node_Id;
870
      pragma Inline (Node3);
871
 
872
      function Node4 (N : Node_Id) return Node_Id;
873
      pragma Inline (Node4);
874
 
875
      function Node5 (N : Node_Id) return Node_Id;
876
      pragma Inline (Node5);
877
 
878
      function Node6 (N : Node_Id) return Node_Id;
879
      pragma Inline (Node6);
880
 
881
      function Node7 (N : Node_Id) return Node_Id;
882
      pragma Inline (Node7);
883
 
884
      function Node8 (N : Node_Id) return Node_Id;
885
      pragma Inline (Node8);
886
 
887
      function Node9 (N : Node_Id) return Node_Id;
888
      pragma Inline (Node9);
889
 
890
      function Node10 (N : Node_Id) return Node_Id;
891
      pragma Inline (Node10);
892
 
893
      function Node11 (N : Node_Id) return Node_Id;
894
      pragma Inline (Node11);
895
 
896
      function Node12 (N : Node_Id) return Node_Id;
897
      pragma Inline (Node12);
898
 
899
      function Node13 (N : Node_Id) return Node_Id;
900
      pragma Inline (Node13);
901
 
902
      function Node14 (N : Node_Id) return Node_Id;
903
      pragma Inline (Node14);
904
 
905
      function Node15 (N : Node_Id) return Node_Id;
906
      pragma Inline (Node15);
907
 
908
      function Node16 (N : Node_Id) return Node_Id;
909
      pragma Inline (Node16);
910
 
911
      function Node17 (N : Node_Id) return Node_Id;
912
      pragma Inline (Node17);
913
 
914
      function Node18 (N : Node_Id) return Node_Id;
915
      pragma Inline (Node18);
916
 
917
      function Node19 (N : Node_Id) return Node_Id;
918
      pragma Inline (Node19);
919
 
920
      function Node20 (N : Node_Id) return Node_Id;
921
      pragma Inline (Node20);
922
 
923
      function Node21 (N : Node_Id) return Node_Id;
924
      pragma Inline (Node21);
925
 
926
      function Node22 (N : Node_Id) return Node_Id;
927
      pragma Inline (Node22);
928
 
929
      function Node23 (N : Node_Id) return Node_Id;
930
      pragma Inline (Node23);
931
 
932
      function Node24 (N : Node_Id) return Node_Id;
933
      pragma Inline (Node24);
934
 
935
      function Node25 (N : Node_Id) return Node_Id;
936
      pragma Inline (Node25);
937
 
938
      function Node26 (N : Node_Id) return Node_Id;
939
      pragma Inline (Node26);
940
 
941
      function Node27 (N : Node_Id) return Node_Id;
942
      pragma Inline (Node27);
943
 
944
      function List1 (N : Node_Id) return List_Id;
945
      pragma Inline (List1);
946
 
947
      function List2 (N : Node_Id) return List_Id;
948
      pragma Inline (List2);
949
 
950
      function List3 (N : Node_Id) return List_Id;
951
      pragma Inline (List3);
952
 
953
      function List4 (N : Node_Id) return List_Id;
954
      pragma Inline (List4);
955
 
956
      function List5 (N : Node_Id) return List_Id;
957
      pragma Inline (List5);
958
 
959
      function List10 (N : Node_Id) return List_Id;
960
      pragma Inline (List10);
961
 
962
      function List14 (N : Node_Id) return List_Id;
963
      pragma Inline (List14);
964
 
965
      function Elist2 (N : Node_Id) return Elist_Id;
966
      pragma Inline (Elist2);
967
 
968
      function Elist3 (N : Node_Id) return Elist_Id;
969
      pragma Inline (Elist3);
970
 
971
      function Elist4 (N : Node_Id) return Elist_Id;
972
      pragma Inline (Elist4);
973
 
974
      function Elist8 (N : Node_Id) return Elist_Id;
975
      pragma Inline (Elist8);
976
 
977
      function Elist13 (N : Node_Id) return Elist_Id;
978
      pragma Inline (Elist13);
979
 
980
      function Elist15 (N : Node_Id) return Elist_Id;
981
      pragma Inline (Elist15);
982
 
983
      function Elist16 (N : Node_Id) return Elist_Id;
984
      pragma Inline (Elist16);
985
 
986
      function Elist18 (N : Node_Id) return Elist_Id;
987
      pragma Inline (Elist18);
988
 
989
      function Elist21 (N : Node_Id) return Elist_Id;
990
      pragma Inline (Elist21);
991
 
992
      function Elist23 (N : Node_Id) return Elist_Id;
993
      pragma Inline (Elist23);
994
 
995
      function Elist24 (N : Node_Id) return Elist_Id;
996
      pragma Inline (Elist24);
997
 
998
      function Name1 (N : Node_Id) return Name_Id;
999
      pragma Inline (Name1);
1000
 
1001
      function Name2 (N : Node_Id) return Name_Id;
1002
      pragma Inline (Name2);
1003
 
1004
      function Str3 (N : Node_Id) return String_Id;
1005
      pragma Inline (Str3);
1006
 
1007
      --  Note: the following Uintnn functions have a special test for
1008
      --  the Field value being Empty. If an Empty value is found then
1009
      --  Uint_0 is returned. This avoids the rather tricky requirement
1010
      --  of initializing all Uint fields in nodes and entities.
1011
 
1012
      function Uint2 (N : Node_Id) return Uint;
1013
      pragma Inline (Uint2);
1014
 
1015
      function Uint3 (N : Node_Id) return Uint;
1016
      pragma Inline (Uint3);
1017
 
1018
      function Uint4 (N : Node_Id) return Uint;
1019
      pragma Inline (Uint4);
1020
 
1021
      function Uint5 (N : Node_Id) return Uint;
1022
      pragma Inline (Uint5);
1023
 
1024
      function Uint8 (N : Node_Id) return Uint;
1025
      pragma Inline (Uint8);
1026
 
1027
      function Uint9 (N : Node_Id) return Uint;
1028
      pragma Inline (Uint9);
1029
 
1030
      function Uint10 (N : Node_Id) return Uint;
1031
      pragma Inline (Uint10);
1032
 
1033
      function Uint11 (N : Node_Id) return Uint;
1034
      pragma Inline (Uint11);
1035
 
1036
      function Uint12 (N : Node_Id) return Uint;
1037
      pragma Inline (Uint12);
1038
 
1039
      function Uint13 (N : Node_Id) return Uint;
1040
      pragma Inline (Uint13);
1041
 
1042
      function Uint14 (N : Node_Id) return Uint;
1043
      pragma Inline (Uint14);
1044
 
1045
      function Uint15 (N : Node_Id) return Uint;
1046
      pragma Inline (Uint15);
1047
 
1048
      function Uint16 (N : Node_Id) return Uint;
1049
      pragma Inline (Uint16);
1050
 
1051
      function Uint17 (N : Node_Id) return Uint;
1052
      pragma Inline (Uint17);
1053
 
1054
      function Uint22 (N : Node_Id) return Uint;
1055
      pragma Inline (Uint22);
1056
 
1057
      function Ureal3 (N : Node_Id) return Ureal;
1058
      pragma Inline (Ureal3);
1059
 
1060
      function Ureal18 (N : Node_Id) return Ureal;
1061
      pragma Inline (Ureal18);
1062
 
1063
      function Ureal21 (N : Node_Id) return Ureal;
1064
      pragma Inline (Ureal21);
1065
 
1066
      function Flag4 (N : Node_Id) return Boolean;
1067
      pragma Inline (Flag4);
1068
 
1069
      function Flag5 (N : Node_Id) return Boolean;
1070
      pragma Inline (Flag5);
1071
 
1072
      function Flag6 (N : Node_Id) return Boolean;
1073
      pragma Inline (Flag6);
1074
 
1075
      function Flag7 (N : Node_Id) return Boolean;
1076
      pragma Inline (Flag7);
1077
 
1078
      function Flag8 (N : Node_Id) return Boolean;
1079
      pragma Inline (Flag8);
1080
 
1081
      function Flag9 (N : Node_Id) return Boolean;
1082
      pragma Inline (Flag9);
1083
 
1084
      function Flag10 (N : Node_Id) return Boolean;
1085
      pragma Inline (Flag10);
1086
 
1087
      function Flag11 (N : Node_Id) return Boolean;
1088
      pragma Inline (Flag11);
1089
 
1090
      function Flag12 (N : Node_Id) return Boolean;
1091
      pragma Inline (Flag12);
1092
 
1093
      function Flag13 (N : Node_Id) return Boolean;
1094
      pragma Inline (Flag13);
1095
 
1096
      function Flag14 (N : Node_Id) return Boolean;
1097
      pragma Inline (Flag14);
1098
 
1099
      function Flag15 (N : Node_Id) return Boolean;
1100
      pragma Inline (Flag15);
1101
 
1102
      function Flag16 (N : Node_Id) return Boolean;
1103
      pragma Inline (Flag16);
1104
 
1105
      function Flag17 (N : Node_Id) return Boolean;
1106
      pragma Inline (Flag17);
1107
 
1108
      function Flag18 (N : Node_Id) return Boolean;
1109
      pragma Inline (Flag18);
1110
 
1111
      function Flag19 (N : Node_Id) return Boolean;
1112
      pragma Inline (Flag19);
1113
 
1114
      function Flag20 (N : Node_Id) return Boolean;
1115
      pragma Inline (Flag20);
1116
 
1117
      function Flag21 (N : Node_Id) return Boolean;
1118
      pragma Inline (Flag21);
1119
 
1120
      function Flag22 (N : Node_Id) return Boolean;
1121
      pragma Inline (Flag22);
1122
 
1123
      function Flag23 (N : Node_Id) return Boolean;
1124
      pragma Inline (Flag23);
1125
 
1126
      function Flag24 (N : Node_Id) return Boolean;
1127
      pragma Inline (Flag24);
1128
 
1129
      function Flag25 (N : Node_Id) return Boolean;
1130
      pragma Inline (Flag25);
1131
 
1132
      function Flag26 (N : Node_Id) return Boolean;
1133
      pragma Inline (Flag26);
1134
 
1135
      function Flag27 (N : Node_Id) return Boolean;
1136
      pragma Inline (Flag27);
1137
 
1138
      function Flag28 (N : Node_Id) return Boolean;
1139
      pragma Inline (Flag28);
1140
 
1141
      function Flag29 (N : Node_Id) return Boolean;
1142
      pragma Inline (Flag29);
1143
 
1144
      function Flag30 (N : Node_Id) return Boolean;
1145
      pragma Inline (Flag30);
1146
 
1147
      function Flag31 (N : Node_Id) return Boolean;
1148
      pragma Inline (Flag31);
1149
 
1150
      function Flag32 (N : Node_Id) return Boolean;
1151
      pragma Inline (Flag32);
1152
 
1153
      function Flag33 (N : Node_Id) return Boolean;
1154
      pragma Inline (Flag33);
1155
 
1156
      function Flag34 (N : Node_Id) return Boolean;
1157
      pragma Inline (Flag34);
1158
 
1159
      function Flag35 (N : Node_Id) return Boolean;
1160
      pragma Inline (Flag35);
1161
 
1162
      function Flag36 (N : Node_Id) return Boolean;
1163
      pragma Inline (Flag36);
1164
 
1165
      function Flag37 (N : Node_Id) return Boolean;
1166
      pragma Inline (Flag37);
1167
 
1168
      function Flag38 (N : Node_Id) return Boolean;
1169
      pragma Inline (Flag38);
1170
 
1171
      function Flag39 (N : Node_Id) return Boolean;
1172
      pragma Inline (Flag39);
1173
 
1174
      function Flag40 (N : Node_Id) return Boolean;
1175
      pragma Inline (Flag40);
1176
 
1177
      function Flag41 (N : Node_Id) return Boolean;
1178
      pragma Inline (Flag41);
1179
 
1180
      function Flag42 (N : Node_Id) return Boolean;
1181
      pragma Inline (Flag42);
1182
 
1183
      function Flag43 (N : Node_Id) return Boolean;
1184
      pragma Inline (Flag43);
1185
 
1186
      function Flag44 (N : Node_Id) return Boolean;
1187
      pragma Inline (Flag44);
1188
 
1189
      function Flag45 (N : Node_Id) return Boolean;
1190
      pragma Inline (Flag45);
1191
 
1192
      function Flag46 (N : Node_Id) return Boolean;
1193
      pragma Inline (Flag46);
1194
 
1195
      function Flag47 (N : Node_Id) return Boolean;
1196
      pragma Inline (Flag47);
1197
 
1198
      function Flag48 (N : Node_Id) return Boolean;
1199
      pragma Inline (Flag48);
1200
 
1201
      function Flag49 (N : Node_Id) return Boolean;
1202
      pragma Inline (Flag49);
1203
 
1204
      function Flag50 (N : Node_Id) return Boolean;
1205
      pragma Inline (Flag50);
1206
 
1207
      function Flag51 (N : Node_Id) return Boolean;
1208
      pragma Inline (Flag51);
1209
 
1210
      function Flag52 (N : Node_Id) return Boolean;
1211
      pragma Inline (Flag52);
1212
 
1213
      function Flag53 (N : Node_Id) return Boolean;
1214
      pragma Inline (Flag53);
1215
 
1216
      function Flag54 (N : Node_Id) return Boolean;
1217
      pragma Inline (Flag54);
1218
 
1219
      function Flag55 (N : Node_Id) return Boolean;
1220
      pragma Inline (Flag55);
1221
 
1222
      function Flag56 (N : Node_Id) return Boolean;
1223
      pragma Inline (Flag56);
1224
 
1225
      function Flag57 (N : Node_Id) return Boolean;
1226
      pragma Inline (Flag57);
1227
 
1228
      function Flag58 (N : Node_Id) return Boolean;
1229
      pragma Inline (Flag58);
1230
 
1231
      function Flag59 (N : Node_Id) return Boolean;
1232
      pragma Inline (Flag59);
1233
 
1234
      function Flag60 (N : Node_Id) return Boolean;
1235
      pragma Inline (Flag60);
1236
 
1237
      function Flag61 (N : Node_Id) return Boolean;
1238
      pragma Inline (Flag61);
1239
 
1240
      function Flag62 (N : Node_Id) return Boolean;
1241
      pragma Inline (Flag62);
1242
 
1243
      function Flag63 (N : Node_Id) return Boolean;
1244
      pragma Inline (Flag63);
1245
 
1246
      function Flag64 (N : Node_Id) return Boolean;
1247
      pragma Inline (Flag64);
1248
 
1249
      function Flag65 (N : Node_Id) return Boolean;
1250
      pragma Inline (Flag65);
1251
 
1252
      function Flag66 (N : Node_Id) return Boolean;
1253
      pragma Inline (Flag66);
1254
 
1255
      function Flag67 (N : Node_Id) return Boolean;
1256
      pragma Inline (Flag67);
1257
 
1258
      function Flag68 (N : Node_Id) return Boolean;
1259
      pragma Inline (Flag68);
1260
 
1261
      function Flag69 (N : Node_Id) return Boolean;
1262
      pragma Inline (Flag69);
1263
 
1264
      function Flag70 (N : Node_Id) return Boolean;
1265
      pragma Inline (Flag70);
1266
 
1267
      function Flag71 (N : Node_Id) return Boolean;
1268
      pragma Inline (Flag71);
1269
 
1270
      function Flag72 (N : Node_Id) return Boolean;
1271
      pragma Inline (Flag72);
1272
 
1273
      function Flag73 (N : Node_Id) return Boolean;
1274
      pragma Inline (Flag73);
1275
 
1276
      function Flag74 (N : Node_Id) return Boolean;
1277
      pragma Inline (Flag74);
1278
 
1279
      function Flag75 (N : Node_Id) return Boolean;
1280
      pragma Inline (Flag75);
1281
 
1282
      function Flag76 (N : Node_Id) return Boolean;
1283
      pragma Inline (Flag76);
1284
 
1285
      function Flag77 (N : Node_Id) return Boolean;
1286
      pragma Inline (Flag77);
1287
 
1288
      function Flag78 (N : Node_Id) return Boolean;
1289
      pragma Inline (Flag78);
1290
 
1291
      function Flag79 (N : Node_Id) return Boolean;
1292
      pragma Inline (Flag79);
1293
 
1294
      function Flag80 (N : Node_Id) return Boolean;
1295
      pragma Inline (Flag80);
1296
 
1297
      function Flag81 (N : Node_Id) return Boolean;
1298
      pragma Inline (Flag81);
1299
 
1300
      function Flag82 (N : Node_Id) return Boolean;
1301
      pragma Inline (Flag82);
1302
 
1303
      function Flag83 (N : Node_Id) return Boolean;
1304
      pragma Inline (Flag83);
1305
 
1306
      function Flag84 (N : Node_Id) return Boolean;
1307
      pragma Inline (Flag84);
1308
 
1309
      function Flag85 (N : Node_Id) return Boolean;
1310
      pragma Inline (Flag85);
1311
 
1312
      function Flag86 (N : Node_Id) return Boolean;
1313
      pragma Inline (Flag86);
1314
 
1315
      function Flag87 (N : Node_Id) return Boolean;
1316
      pragma Inline (Flag87);
1317
 
1318
      function Flag88 (N : Node_Id) return Boolean;
1319
      pragma Inline (Flag88);
1320
 
1321
      function Flag89 (N : Node_Id) return Boolean;
1322
      pragma Inline (Flag89);
1323
 
1324
      function Flag90 (N : Node_Id) return Boolean;
1325
      pragma Inline (Flag90);
1326
 
1327
      function Flag91 (N : Node_Id) return Boolean;
1328
      pragma Inline (Flag91);
1329
 
1330
      function Flag92 (N : Node_Id) return Boolean;
1331
      pragma Inline (Flag92);
1332
 
1333
      function Flag93 (N : Node_Id) return Boolean;
1334
      pragma Inline (Flag93);
1335
 
1336
      function Flag94 (N : Node_Id) return Boolean;
1337
      pragma Inline (Flag94);
1338
 
1339
      function Flag95 (N : Node_Id) return Boolean;
1340
      pragma Inline (Flag95);
1341
 
1342
      function Flag96 (N : Node_Id) return Boolean;
1343
      pragma Inline (Flag96);
1344
 
1345
      function Flag97 (N : Node_Id) return Boolean;
1346
      pragma Inline (Flag97);
1347
 
1348
      function Flag98 (N : Node_Id) return Boolean;
1349
      pragma Inline (Flag98);
1350
 
1351
      function Flag99 (N : Node_Id) return Boolean;
1352
      pragma Inline (Flag99);
1353
 
1354
      function Flag100 (N : Node_Id) return Boolean;
1355
      pragma Inline (Flag100);
1356
 
1357
      function Flag101 (N : Node_Id) return Boolean;
1358
      pragma Inline (Flag101);
1359
 
1360
      function Flag102 (N : Node_Id) return Boolean;
1361
      pragma Inline (Flag102);
1362
 
1363
      function Flag103 (N : Node_Id) return Boolean;
1364
      pragma Inline (Flag103);
1365
 
1366
      function Flag104 (N : Node_Id) return Boolean;
1367
      pragma Inline (Flag104);
1368
 
1369
      function Flag105 (N : Node_Id) return Boolean;
1370
      pragma Inline (Flag105);
1371
 
1372
      function Flag106 (N : Node_Id) return Boolean;
1373
      pragma Inline (Flag106);
1374
 
1375
      function Flag107 (N : Node_Id) return Boolean;
1376
      pragma Inline (Flag107);
1377
 
1378
      function Flag108 (N : Node_Id) return Boolean;
1379
      pragma Inline (Flag108);
1380
 
1381
      function Flag109 (N : Node_Id) return Boolean;
1382
      pragma Inline (Flag109);
1383
 
1384
      function Flag110 (N : Node_Id) return Boolean;
1385
      pragma Inline (Flag110);
1386
 
1387
      function Flag111 (N : Node_Id) return Boolean;
1388
      pragma Inline (Flag111);
1389
 
1390
      function Flag112 (N : Node_Id) return Boolean;
1391
      pragma Inline (Flag112);
1392
 
1393
      function Flag113 (N : Node_Id) return Boolean;
1394
      pragma Inline (Flag113);
1395
 
1396
      function Flag114 (N : Node_Id) return Boolean;
1397
      pragma Inline (Flag114);
1398
 
1399
      function Flag115 (N : Node_Id) return Boolean;
1400
      pragma Inline (Flag115);
1401
 
1402
      function Flag116 (N : Node_Id) return Boolean;
1403
      pragma Inline (Flag116);
1404
 
1405
      function Flag117 (N : Node_Id) return Boolean;
1406
      pragma Inline (Flag117);
1407
 
1408
      function Flag118 (N : Node_Id) return Boolean;
1409
      pragma Inline (Flag118);
1410
 
1411
      function Flag119 (N : Node_Id) return Boolean;
1412
      pragma Inline (Flag119);
1413
 
1414
      function Flag120 (N : Node_Id) return Boolean;
1415
      pragma Inline (Flag120);
1416
 
1417
      function Flag121 (N : Node_Id) return Boolean;
1418
      pragma Inline (Flag121);
1419
 
1420
      function Flag122 (N : Node_Id) return Boolean;
1421
      pragma Inline (Flag122);
1422
 
1423
      function Flag123 (N : Node_Id) return Boolean;
1424
      pragma Inline (Flag123);
1425
 
1426
      function Flag124 (N : Node_Id) return Boolean;
1427
      pragma Inline (Flag124);
1428
 
1429
      function Flag125 (N : Node_Id) return Boolean;
1430
      pragma Inline (Flag125);
1431
 
1432
      function Flag126 (N : Node_Id) return Boolean;
1433
      pragma Inline (Flag126);
1434
 
1435
      function Flag127 (N : Node_Id) return Boolean;
1436
      pragma Inline (Flag127);
1437
 
1438
      function Flag128 (N : Node_Id) return Boolean;
1439
      pragma Inline (Flag128);
1440
 
1441
      function Flag129 (N : Node_Id) return Boolean;
1442
      pragma Inline (Flag129);
1443
 
1444
      function Flag130 (N : Node_Id) return Boolean;
1445
      pragma Inline (Flag130);
1446
 
1447
      function Flag131 (N : Node_Id) return Boolean;
1448
      pragma Inline (Flag131);
1449
 
1450
      function Flag132 (N : Node_Id) return Boolean;
1451
      pragma Inline (Flag132);
1452
 
1453
      function Flag133 (N : Node_Id) return Boolean;
1454
      pragma Inline (Flag133);
1455
 
1456
      function Flag134 (N : Node_Id) return Boolean;
1457
      pragma Inline (Flag134);
1458
 
1459
      function Flag135 (N : Node_Id) return Boolean;
1460
      pragma Inline (Flag135);
1461
 
1462
      function Flag136 (N : Node_Id) return Boolean;
1463
      pragma Inline (Flag136);
1464
 
1465
      function Flag137 (N : Node_Id) return Boolean;
1466
      pragma Inline (Flag137);
1467
 
1468
      function Flag138 (N : Node_Id) return Boolean;
1469
      pragma Inline (Flag138);
1470
 
1471
      function Flag139 (N : Node_Id) return Boolean;
1472
      pragma Inline (Flag139);
1473
 
1474
      function Flag140 (N : Node_Id) return Boolean;
1475
      pragma Inline (Flag140);
1476
 
1477
      function Flag141 (N : Node_Id) return Boolean;
1478
      pragma Inline (Flag141);
1479
 
1480
      function Flag142 (N : Node_Id) return Boolean;
1481
      pragma Inline (Flag142);
1482
 
1483
      function Flag143 (N : Node_Id) return Boolean;
1484
      pragma Inline (Flag143);
1485
 
1486
      function Flag144 (N : Node_Id) return Boolean;
1487
      pragma Inline (Flag144);
1488
 
1489
      function Flag145 (N : Node_Id) return Boolean;
1490
      pragma Inline (Flag145);
1491
 
1492
      function Flag146 (N : Node_Id) return Boolean;
1493
      pragma Inline (Flag146);
1494
 
1495
      function Flag147 (N : Node_Id) return Boolean;
1496
      pragma Inline (Flag147);
1497
 
1498
      function Flag148 (N : Node_Id) return Boolean;
1499
      pragma Inline (Flag148);
1500
 
1501
      function Flag149 (N : Node_Id) return Boolean;
1502
      pragma Inline (Flag149);
1503
 
1504
      function Flag150 (N : Node_Id) return Boolean;
1505
      pragma Inline (Flag150);
1506
 
1507
      function Flag151 (N : Node_Id) return Boolean;
1508
      pragma Inline (Flag151);
1509
 
1510
      function Flag152 (N : Node_Id) return Boolean;
1511
      pragma Inline (Flag152);
1512
 
1513
      function Flag153 (N : Node_Id) return Boolean;
1514
      pragma Inline (Flag153);
1515
 
1516
      function Flag154 (N : Node_Id) return Boolean;
1517
      pragma Inline (Flag154);
1518
 
1519
      function Flag155 (N : Node_Id) return Boolean;
1520
      pragma Inline (Flag155);
1521
 
1522
      function Flag156 (N : Node_Id) return Boolean;
1523
      pragma Inline (Flag156);
1524
 
1525
      function Flag157 (N : Node_Id) return Boolean;
1526
      pragma Inline (Flag157);
1527
 
1528
      function Flag158 (N : Node_Id) return Boolean;
1529
      pragma Inline (Flag158);
1530
 
1531
      function Flag159 (N : Node_Id) return Boolean;
1532
      pragma Inline (Flag159);
1533
 
1534
      function Flag160 (N : Node_Id) return Boolean;
1535
      pragma Inline (Flag160);
1536
 
1537
      function Flag161 (N : Node_Id) return Boolean;
1538
      pragma Inline (Flag161);
1539
 
1540
      function Flag162 (N : Node_Id) return Boolean;
1541
      pragma Inline (Flag162);
1542
 
1543
      function Flag163 (N : Node_Id) return Boolean;
1544
      pragma Inline (Flag163);
1545
 
1546
      function Flag164 (N : Node_Id) return Boolean;
1547
      pragma Inline (Flag164);
1548
 
1549
      function Flag165 (N : Node_Id) return Boolean;
1550
      pragma Inline (Flag165);
1551
 
1552
      function Flag166 (N : Node_Id) return Boolean;
1553
      pragma Inline (Flag166);
1554
 
1555
      function Flag167 (N : Node_Id) return Boolean;
1556
      pragma Inline (Flag167);
1557
 
1558
      function Flag168 (N : Node_Id) return Boolean;
1559
      pragma Inline (Flag168);
1560
 
1561
      function Flag169 (N : Node_Id) return Boolean;
1562
      pragma Inline (Flag169);
1563
 
1564
      function Flag170 (N : Node_Id) return Boolean;
1565
      pragma Inline (Flag170);
1566
 
1567
      function Flag171 (N : Node_Id) return Boolean;
1568
      pragma Inline (Flag171);
1569
 
1570
      function Flag172 (N : Node_Id) return Boolean;
1571
      pragma Inline (Flag172);
1572
 
1573
      function Flag173 (N : Node_Id) return Boolean;
1574
      pragma Inline (Flag173);
1575
 
1576
      function Flag174 (N : Node_Id) return Boolean;
1577
      pragma Inline (Flag174);
1578
 
1579
      function Flag175 (N : Node_Id) return Boolean;
1580
      pragma Inline (Flag175);
1581
 
1582
      function Flag176 (N : Node_Id) return Boolean;
1583
      pragma Inline (Flag176);
1584
 
1585
      function Flag177 (N : Node_Id) return Boolean;
1586
      pragma Inline (Flag177);
1587
 
1588
      function Flag178 (N : Node_Id) return Boolean;
1589
      pragma Inline (Flag178);
1590
 
1591
      function Flag179 (N : Node_Id) return Boolean;
1592
      pragma Inline (Flag179);
1593
 
1594
      function Flag180 (N : Node_Id) return Boolean;
1595
      pragma Inline (Flag180);
1596
 
1597
      function Flag181 (N : Node_Id) return Boolean;
1598
      pragma Inline (Flag181);
1599
 
1600
      function Flag182 (N : Node_Id) return Boolean;
1601
      pragma Inline (Flag182);
1602
 
1603
      function Flag183 (N : Node_Id) return Boolean;
1604
      pragma Inline (Flag183);
1605
 
1606
      function Flag184 (N : Node_Id) return Boolean;
1607
      pragma Inline (Flag184);
1608
 
1609
      function Flag185 (N : Node_Id) return Boolean;
1610
      pragma Inline (Flag185);
1611
 
1612
      function Flag186 (N : Node_Id) return Boolean;
1613
      pragma Inline (Flag186);
1614
 
1615
      function Flag187 (N : Node_Id) return Boolean;
1616
      pragma Inline (Flag187);
1617
 
1618
      function Flag188 (N : Node_Id) return Boolean;
1619
      pragma Inline (Flag188);
1620
 
1621
      function Flag189 (N : Node_Id) return Boolean;
1622
      pragma Inline (Flag189);
1623
 
1624
      function Flag190 (N : Node_Id) return Boolean;
1625
      pragma Inline (Flag190);
1626
 
1627
      function Flag191 (N : Node_Id) return Boolean;
1628
      pragma Inline (Flag191);
1629
 
1630
      function Flag192 (N : Node_Id) return Boolean;
1631
      pragma Inline (Flag192);
1632
 
1633
      function Flag193 (N : Node_Id) return Boolean;
1634
      pragma Inline (Flag193);
1635
 
1636
      function Flag194 (N : Node_Id) return Boolean;
1637
      pragma Inline (Flag194);
1638
 
1639
      function Flag195 (N : Node_Id) return Boolean;
1640
      pragma Inline (Flag195);
1641
 
1642
      function Flag196 (N : Node_Id) return Boolean;
1643
      pragma Inline (Flag196);
1644
 
1645
      function Flag197 (N : Node_Id) return Boolean;
1646
      pragma Inline (Flag197);
1647
 
1648
      function Flag198 (N : Node_Id) return Boolean;
1649
      pragma Inline (Flag198);
1650
 
1651
      function Flag199 (N : Node_Id) return Boolean;
1652
      pragma Inline (Flag199);
1653
 
1654
      function Flag200 (N : Node_Id) return Boolean;
1655
      pragma Inline (Flag200);
1656
 
1657
      function Flag201 (N : Node_Id) return Boolean;
1658
      pragma Inline (Flag201);
1659
 
1660
      function Flag202 (N : Node_Id) return Boolean;
1661
      pragma Inline (Flag202);
1662
 
1663
      function Flag203 (N : Node_Id) return Boolean;
1664
      pragma Inline (Flag203);
1665
 
1666
      function Flag204 (N : Node_Id) return Boolean;
1667
      pragma Inline (Flag204);
1668
 
1669
      function Flag205 (N : Node_Id) return Boolean;
1670
      pragma Inline (Flag205);
1671
 
1672
      function Flag206 (N : Node_Id) return Boolean;
1673
      pragma Inline (Flag206);
1674
 
1675
      function Flag207 (N : Node_Id) return Boolean;
1676
      pragma Inline (Flag207);
1677
 
1678
      function Flag208 (N : Node_Id) return Boolean;
1679
      pragma Inline (Flag208);
1680
 
1681
      function Flag209 (N : Node_Id) return Boolean;
1682
      pragma Inline (Flag209);
1683
 
1684
      function Flag210 (N : Node_Id) return Boolean;
1685
      pragma Inline (Flag210);
1686
 
1687
      function Flag211 (N : Node_Id) return Boolean;
1688
      pragma Inline (Flag211);
1689
 
1690
      function Flag212 (N : Node_Id) return Boolean;
1691
      pragma Inline (Flag212);
1692
 
1693
      function Flag213 (N : Node_Id) return Boolean;
1694
      pragma Inline (Flag213);
1695
 
1696
      function Flag214 (N : Node_Id) return Boolean;
1697
      pragma Inline (Flag214);
1698
 
1699
      function Flag215 (N : Node_Id) return Boolean;
1700
      pragma Inline (Flag215);
1701
 
1702
      --  Procedures to set value of indicated field
1703
 
1704
      procedure Set_Nkind (N : Node_Id; Val : Node_Kind);
1705
      pragma Inline (Set_Nkind);
1706
 
1707
      procedure Set_Field1 (N : Node_Id; Val : Union_Id);
1708
      pragma Inline (Set_Field1);
1709
 
1710
      procedure Set_Field2 (N : Node_Id; Val : Union_Id);
1711
      pragma Inline (Set_Field2);
1712
 
1713
      procedure Set_Field3 (N : Node_Id; Val : Union_Id);
1714
      pragma Inline (Set_Field3);
1715
 
1716
      procedure Set_Field4 (N : Node_Id; Val : Union_Id);
1717
      pragma Inline (Set_Field4);
1718
 
1719
      procedure Set_Field5 (N : Node_Id; Val : Union_Id);
1720
      pragma Inline (Set_Field5);
1721
 
1722
      procedure Set_Field6 (N : Node_Id; Val : Union_Id);
1723
      pragma Inline (Set_Field6);
1724
 
1725
      procedure Set_Field7 (N : Node_Id; Val : Union_Id);
1726
      pragma Inline (Set_Field7);
1727
 
1728
      procedure Set_Field8 (N : Node_Id; Val : Union_Id);
1729
      pragma Inline (Set_Field8);
1730
 
1731
      procedure Set_Field9 (N : Node_Id; Val : Union_Id);
1732
      pragma Inline (Set_Field9);
1733
 
1734
      procedure Set_Field10 (N : Node_Id; Val : Union_Id);
1735
      pragma Inline (Set_Field10);
1736
 
1737
      procedure Set_Field11 (N : Node_Id; Val : Union_Id);
1738
      pragma Inline (Set_Field11);
1739
 
1740
      procedure Set_Field12 (N : Node_Id; Val : Union_Id);
1741
      pragma Inline (Set_Field12);
1742
 
1743
      procedure Set_Field13 (N : Node_Id; Val : Union_Id);
1744
      pragma Inline (Set_Field13);
1745
 
1746
      procedure Set_Field14 (N : Node_Id; Val : Union_Id);
1747
      pragma Inline (Set_Field14);
1748
 
1749
      procedure Set_Field15 (N : Node_Id; Val : Union_Id);
1750
      pragma Inline (Set_Field15);
1751
 
1752
      procedure Set_Field16 (N : Node_Id; Val : Union_Id);
1753
      pragma Inline (Set_Field16);
1754
 
1755
      procedure Set_Field17 (N : Node_Id; Val : Union_Id);
1756
      pragma Inline (Set_Field17);
1757
 
1758
      procedure Set_Field18 (N : Node_Id; Val : Union_Id);
1759
      pragma Inline (Set_Field18);
1760
 
1761
      procedure Set_Field19 (N : Node_Id; Val : Union_Id);
1762
      pragma Inline (Set_Field19);
1763
 
1764
      procedure Set_Field20 (N : Node_Id; Val : Union_Id);
1765
      pragma Inline (Set_Field20);
1766
 
1767
      procedure Set_Field21 (N : Node_Id; Val : Union_Id);
1768
      pragma Inline (Set_Field21);
1769
 
1770
      procedure Set_Field22 (N : Node_Id; Val : Union_Id);
1771
      pragma Inline (Set_Field22);
1772
 
1773
      procedure Set_Field23 (N : Node_Id; Val : Union_Id);
1774
      pragma Inline (Set_Field23);
1775
 
1776
      procedure Set_Field24 (N : Node_Id; Val : Union_Id);
1777
      pragma Inline (Set_Field24);
1778
 
1779
      procedure Set_Field25 (N : Node_Id; Val : Union_Id);
1780
      pragma Inline (Set_Field25);
1781
 
1782
      procedure Set_Field26 (N : Node_Id; Val : Union_Id);
1783
      pragma Inline (Set_Field26);
1784
 
1785
      procedure Set_Field27 (N : Node_Id; Val : Union_Id);
1786
      pragma Inline (Set_Field27);
1787
 
1788
      procedure Set_Node1 (N : Node_Id; Val : Node_Id);
1789
      pragma Inline (Set_Node1);
1790
 
1791
      procedure Set_Node2 (N : Node_Id; Val : Node_Id);
1792
      pragma Inline (Set_Node2);
1793
 
1794
      procedure Set_Node3 (N : Node_Id; Val : Node_Id);
1795
      pragma Inline (Set_Node3);
1796
 
1797
      procedure Set_Node4 (N : Node_Id; Val : Node_Id);
1798
      pragma Inline (Set_Node4);
1799
 
1800
      procedure Set_Node5 (N : Node_Id; Val : Node_Id);
1801
      pragma Inline (Set_Node5);
1802
 
1803
      procedure Set_Node6 (N : Node_Id; Val : Node_Id);
1804
      pragma Inline (Set_Node6);
1805
 
1806
      procedure Set_Node7 (N : Node_Id; Val : Node_Id);
1807
      pragma Inline (Set_Node7);
1808
 
1809
      procedure Set_Node8 (N : Node_Id; Val : Node_Id);
1810
      pragma Inline (Set_Node8);
1811
 
1812
      procedure Set_Node9 (N : Node_Id; Val : Node_Id);
1813
      pragma Inline (Set_Node9);
1814
 
1815
      procedure Set_Node10 (N : Node_Id; Val : Node_Id);
1816
      pragma Inline (Set_Node10);
1817
 
1818
      procedure Set_Node11 (N : Node_Id; Val : Node_Id);
1819
      pragma Inline (Set_Node11);
1820
 
1821
      procedure Set_Node12 (N : Node_Id; Val : Node_Id);
1822
      pragma Inline (Set_Node12);
1823
 
1824
      procedure Set_Node13 (N : Node_Id; Val : Node_Id);
1825
      pragma Inline (Set_Node13);
1826
 
1827
      procedure Set_Node14 (N : Node_Id; Val : Node_Id);
1828
      pragma Inline (Set_Node14);
1829
 
1830
      procedure Set_Node15 (N : Node_Id; Val : Node_Id);
1831
      pragma Inline (Set_Node15);
1832
 
1833
      procedure Set_Node16 (N : Node_Id; Val : Node_Id);
1834
      pragma Inline (Set_Node16);
1835
 
1836
      procedure Set_Node17 (N : Node_Id; Val : Node_Id);
1837
      pragma Inline (Set_Node17);
1838
 
1839
      procedure Set_Node18 (N : Node_Id; Val : Node_Id);
1840
      pragma Inline (Set_Node18);
1841
 
1842
      procedure Set_Node19 (N : Node_Id; Val : Node_Id);
1843
      pragma Inline (Set_Node19);
1844
 
1845
      procedure Set_Node20 (N : Node_Id; Val : Node_Id);
1846
      pragma Inline (Set_Node20);
1847
 
1848
      procedure Set_Node21 (N : Node_Id; Val : Node_Id);
1849
      pragma Inline (Set_Node21);
1850
 
1851
      procedure Set_Node22 (N : Node_Id; Val : Node_Id);
1852
      pragma Inline (Set_Node22);
1853
 
1854
      procedure Set_Node23 (N : Node_Id; Val : Node_Id);
1855
      pragma Inline (Set_Node23);
1856
 
1857
      procedure Set_Node24 (N : Node_Id; Val : Node_Id);
1858
      pragma Inline (Set_Node24);
1859
 
1860
      procedure Set_Node25 (N : Node_Id; Val : Node_Id);
1861
      pragma Inline (Set_Node25);
1862
 
1863
      procedure Set_Node26 (N : Node_Id; Val : Node_Id);
1864
      pragma Inline (Set_Node26);
1865
 
1866
      procedure Set_Node27 (N : Node_Id; Val : Node_Id);
1867
      pragma Inline (Set_Node27);
1868
 
1869
      procedure Set_List1 (N : Node_Id; Val : List_Id);
1870
      pragma Inline (Set_List1);
1871
 
1872
      procedure Set_List2 (N : Node_Id; Val : List_Id);
1873
      pragma Inline (Set_List2);
1874
 
1875
      procedure Set_List3 (N : Node_Id; Val : List_Id);
1876
      pragma Inline (Set_List3);
1877
 
1878
      procedure Set_List4 (N : Node_Id; Val : List_Id);
1879
      pragma Inline (Set_List4);
1880
 
1881
      procedure Set_List5 (N : Node_Id; Val : List_Id);
1882
      pragma Inline (Set_List5);
1883
 
1884
      procedure Set_List10 (N : Node_Id; Val : List_Id);
1885
      pragma Inline (Set_List10);
1886
 
1887
      procedure Set_List14 (N : Node_Id; Val : List_Id);
1888
      pragma Inline (Set_List14);
1889
 
1890
      procedure Set_Elist2 (N : Node_Id; Val : Elist_Id);
1891
      pragma Inline (Set_Elist2);
1892
 
1893
      procedure Set_Elist3 (N : Node_Id; Val : Elist_Id);
1894
      pragma Inline (Set_Elist3);
1895
 
1896
      procedure Set_Elist4 (N : Node_Id; Val : Elist_Id);
1897
      pragma Inline (Set_Elist4);
1898
 
1899
      procedure Set_Elist8 (N : Node_Id; Val : Elist_Id);
1900
      pragma Inline (Set_Elist8);
1901
 
1902
      procedure Set_Elist13 (N : Node_Id; Val : Elist_Id);
1903
      pragma Inline (Set_Elist13);
1904
 
1905
      procedure Set_Elist15 (N : Node_Id; Val : Elist_Id);
1906
      pragma Inline (Set_Elist15);
1907
 
1908
      procedure Set_Elist16 (N : Node_Id; Val : Elist_Id);
1909
      pragma Inline (Set_Elist16);
1910
 
1911
      procedure Set_Elist18 (N : Node_Id; Val : Elist_Id);
1912
      pragma Inline (Set_Elist18);
1913
 
1914
      procedure Set_Elist21 (N : Node_Id; Val : Elist_Id);
1915
      pragma Inline (Set_Elist21);
1916
 
1917
      procedure Set_Elist23 (N : Node_Id; Val : Elist_Id);
1918
      pragma Inline (Set_Elist23);
1919
 
1920
      procedure Set_Elist24 (N : Node_Id; Val : Elist_Id);
1921
      pragma Inline (Set_Elist24);
1922
 
1923
      procedure Set_Name1 (N : Node_Id; Val : Name_Id);
1924
      pragma Inline (Set_Name1);
1925
 
1926
      procedure Set_Name2 (N : Node_Id; Val : Name_Id);
1927
      pragma Inline (Set_Name2);
1928
 
1929
      procedure Set_Str3 (N : Node_Id; Val : String_Id);
1930
      pragma Inline (Set_Str3);
1931
 
1932
      procedure Set_Uint2 (N : Node_Id; Val : Uint);
1933
      pragma Inline (Set_Uint2);
1934
 
1935
      procedure Set_Uint3 (N : Node_Id; Val : Uint);
1936
      pragma Inline (Set_Uint3);
1937
 
1938
      procedure Set_Uint4 (N : Node_Id; Val : Uint);
1939
      pragma Inline (Set_Uint4);
1940
 
1941
      procedure Set_Uint5 (N : Node_Id; Val : Uint);
1942
      pragma Inline (Set_Uint5);
1943
 
1944
      procedure Set_Uint8 (N : Node_Id; Val : Uint);
1945
      pragma Inline (Set_Uint8);
1946
 
1947
      procedure Set_Uint9 (N : Node_Id; Val : Uint);
1948
      pragma Inline (Set_Uint9);
1949
 
1950
      procedure Set_Uint10 (N : Node_Id; Val : Uint);
1951
      pragma Inline (Set_Uint10);
1952
 
1953
      procedure Set_Uint11 (N : Node_Id; Val : Uint);
1954
      pragma Inline (Set_Uint11);
1955
 
1956
      procedure Set_Uint12 (N : Node_Id; Val : Uint);
1957
      pragma Inline (Set_Uint12);
1958
 
1959
      procedure Set_Uint13 (N : Node_Id; Val : Uint);
1960
      pragma Inline (Set_Uint13);
1961
 
1962
      procedure Set_Uint14 (N : Node_Id; Val : Uint);
1963
      pragma Inline (Set_Uint14);
1964
 
1965
      procedure Set_Uint15 (N : Node_Id; Val : Uint);
1966
      pragma Inline (Set_Uint15);
1967
 
1968
      procedure Set_Uint16 (N : Node_Id; Val : Uint);
1969
      pragma Inline (Set_Uint16);
1970
 
1971
      procedure Set_Uint17 (N : Node_Id; Val : Uint);
1972
      pragma Inline (Set_Uint17);
1973
 
1974
      procedure Set_Uint22 (N : Node_Id; Val : Uint);
1975
      pragma Inline (Set_Uint22);
1976
 
1977
      procedure Set_Ureal3 (N : Node_Id; Val : Ureal);
1978
      pragma Inline (Set_Ureal3);
1979
 
1980
      procedure Set_Ureal18 (N : Node_Id; Val : Ureal);
1981
      pragma Inline (Set_Ureal18);
1982
 
1983
      procedure Set_Ureal21 (N : Node_Id; Val : Ureal);
1984
      pragma Inline (Set_Ureal21);
1985
 
1986
      procedure Set_Flag4 (N : Node_Id; Val : Boolean);
1987
      pragma Inline (Set_Flag4);
1988
 
1989
      procedure Set_Flag5 (N : Node_Id; Val : Boolean);
1990
      pragma Inline (Set_Flag5);
1991
 
1992
      procedure Set_Flag6 (N : Node_Id; Val : Boolean);
1993
      pragma Inline (Set_Flag6);
1994
 
1995
      procedure Set_Flag7 (N : Node_Id; Val : Boolean);
1996
      pragma Inline (Set_Flag7);
1997
 
1998
      procedure Set_Flag8 (N : Node_Id; Val : Boolean);
1999
      pragma Inline (Set_Flag8);
2000
 
2001
      procedure Set_Flag9 (N : Node_Id; Val : Boolean);
2002
      pragma Inline (Set_Flag9);
2003
 
2004
      procedure Set_Flag10 (N : Node_Id; Val : Boolean);
2005
      pragma Inline (Set_Flag10);
2006
 
2007
      procedure Set_Flag11 (N : Node_Id; Val : Boolean);
2008
      pragma Inline (Set_Flag11);
2009
 
2010
      procedure Set_Flag12 (N : Node_Id; Val : Boolean);
2011
      pragma Inline (Set_Flag12);
2012
 
2013
      procedure Set_Flag13 (N : Node_Id; Val : Boolean);
2014
      pragma Inline (Set_Flag13);
2015
 
2016
      procedure Set_Flag14 (N : Node_Id; Val : Boolean);
2017
      pragma Inline (Set_Flag14);
2018
 
2019
      procedure Set_Flag15 (N : Node_Id; Val : Boolean);
2020
      pragma Inline (Set_Flag15);
2021
 
2022
      procedure Set_Flag16 (N : Node_Id; Val : Boolean);
2023
      pragma Inline (Set_Flag16);
2024
 
2025
      procedure Set_Flag17 (N : Node_Id; Val : Boolean);
2026
      pragma Inline (Set_Flag17);
2027
 
2028
      procedure Set_Flag18 (N : Node_Id; Val : Boolean);
2029
      pragma Inline (Set_Flag18);
2030
 
2031
      procedure Set_Flag19 (N : Node_Id; Val : Boolean);
2032
      pragma Inline (Set_Flag19);
2033
 
2034
      procedure Set_Flag20 (N : Node_Id; Val : Boolean);
2035
      pragma Inline (Set_Flag20);
2036
 
2037
      procedure Set_Flag21 (N : Node_Id; Val : Boolean);
2038
      pragma Inline (Set_Flag21);
2039
 
2040
      procedure Set_Flag22 (N : Node_Id; Val : Boolean);
2041
      pragma Inline (Set_Flag22);
2042
 
2043
      procedure Set_Flag23 (N : Node_Id; Val : Boolean);
2044
      pragma Inline (Set_Flag23);
2045
 
2046
      procedure Set_Flag24 (N : Node_Id; Val : Boolean);
2047
      pragma Inline (Set_Flag24);
2048
 
2049
      procedure Set_Flag25 (N : Node_Id; Val : Boolean);
2050
      pragma Inline (Set_Flag25);
2051
 
2052
      procedure Set_Flag26 (N : Node_Id; Val : Boolean);
2053
      pragma Inline (Set_Flag26);
2054
 
2055
      procedure Set_Flag27 (N : Node_Id; Val : Boolean);
2056
      pragma Inline (Set_Flag27);
2057
 
2058
      procedure Set_Flag28 (N : Node_Id; Val : Boolean);
2059
      pragma Inline (Set_Flag28);
2060
 
2061
      procedure Set_Flag29 (N : Node_Id; Val : Boolean);
2062
      pragma Inline (Set_Flag29);
2063
 
2064
      procedure Set_Flag30 (N : Node_Id; Val : Boolean);
2065
      pragma Inline (Set_Flag30);
2066
 
2067
      procedure Set_Flag31 (N : Node_Id; Val : Boolean);
2068
      pragma Inline (Set_Flag31);
2069
 
2070
      procedure Set_Flag32 (N : Node_Id; Val : Boolean);
2071
      pragma Inline (Set_Flag32);
2072
 
2073
      procedure Set_Flag33 (N : Node_Id; Val : Boolean);
2074
      pragma Inline (Set_Flag33);
2075
 
2076
      procedure Set_Flag34 (N : Node_Id; Val : Boolean);
2077
      pragma Inline (Set_Flag34);
2078
 
2079
      procedure Set_Flag35 (N : Node_Id; Val : Boolean);
2080
      pragma Inline (Set_Flag35);
2081
 
2082
      procedure Set_Flag36 (N : Node_Id; Val : Boolean);
2083
      pragma Inline (Set_Flag36);
2084
 
2085
      procedure Set_Flag37 (N : Node_Id; Val : Boolean);
2086
      pragma Inline (Set_Flag37);
2087
 
2088
      procedure Set_Flag38 (N : Node_Id; Val : Boolean);
2089
      pragma Inline (Set_Flag38);
2090
 
2091
      procedure Set_Flag39 (N : Node_Id; Val : Boolean);
2092
      pragma Inline (Set_Flag39);
2093
 
2094
      procedure Set_Flag40 (N : Node_Id; Val : Boolean);
2095
      pragma Inline (Set_Flag40);
2096
 
2097
      procedure Set_Flag41 (N : Node_Id; Val : Boolean);
2098
      pragma Inline (Set_Flag41);
2099
 
2100
      procedure Set_Flag42 (N : Node_Id; Val : Boolean);
2101
      pragma Inline (Set_Flag42);
2102
 
2103
      procedure Set_Flag43 (N : Node_Id; Val : Boolean);
2104
      pragma Inline (Set_Flag43);
2105
 
2106
      procedure Set_Flag44 (N : Node_Id; Val : Boolean);
2107
      pragma Inline (Set_Flag44);
2108
 
2109
      procedure Set_Flag45 (N : Node_Id; Val : Boolean);
2110
      pragma Inline (Set_Flag45);
2111
 
2112
      procedure Set_Flag46 (N : Node_Id; Val : Boolean);
2113
      pragma Inline (Set_Flag46);
2114
 
2115
      procedure Set_Flag47 (N : Node_Id; Val : Boolean);
2116
      pragma Inline (Set_Flag47);
2117
 
2118
      procedure Set_Flag48 (N : Node_Id; Val : Boolean);
2119
      pragma Inline (Set_Flag48);
2120
 
2121
      procedure Set_Flag49 (N : Node_Id; Val : Boolean);
2122
      pragma Inline (Set_Flag49);
2123
 
2124
      procedure Set_Flag50 (N : Node_Id; Val : Boolean);
2125
      pragma Inline (Set_Flag50);
2126
 
2127
      procedure Set_Flag51 (N : Node_Id; Val : Boolean);
2128
      pragma Inline (Set_Flag51);
2129
 
2130
      procedure Set_Flag52 (N : Node_Id; Val : Boolean);
2131
      pragma Inline (Set_Flag52);
2132
 
2133
      procedure Set_Flag53 (N : Node_Id; Val : Boolean);
2134
      pragma Inline (Set_Flag53);
2135
 
2136
      procedure Set_Flag54 (N : Node_Id; Val : Boolean);
2137
      pragma Inline (Set_Flag54);
2138
 
2139
      procedure Set_Flag55 (N : Node_Id; Val : Boolean);
2140
      pragma Inline (Set_Flag55);
2141
 
2142
      procedure Set_Flag56 (N : Node_Id; Val : Boolean);
2143
      pragma Inline (Set_Flag56);
2144
 
2145
      procedure Set_Flag57 (N : Node_Id; Val : Boolean);
2146
      pragma Inline (Set_Flag57);
2147
 
2148
      procedure Set_Flag58 (N : Node_Id; Val : Boolean);
2149
      pragma Inline (Set_Flag58);
2150
 
2151
      procedure Set_Flag59 (N : Node_Id; Val : Boolean);
2152
      pragma Inline (Set_Flag59);
2153
 
2154
      procedure Set_Flag60 (N : Node_Id; Val : Boolean);
2155
      pragma Inline (Set_Flag60);
2156
 
2157
      procedure Set_Flag61 (N : Node_Id; Val : Boolean);
2158
      pragma Inline (Set_Flag61);
2159
 
2160
      procedure Set_Flag62 (N : Node_Id; Val : Boolean);
2161
      pragma Inline (Set_Flag62);
2162
 
2163
      procedure Set_Flag63 (N : Node_Id; Val : Boolean);
2164
      pragma Inline (Set_Flag63);
2165
 
2166
      procedure Set_Flag64 (N : Node_Id; Val : Boolean);
2167
      pragma Inline (Set_Flag64);
2168
 
2169
      procedure Set_Flag65 (N : Node_Id; Val : Boolean);
2170
      pragma Inline (Set_Flag65);
2171
 
2172
      procedure Set_Flag66 (N : Node_Id; Val : Boolean);
2173
      pragma Inline (Set_Flag66);
2174
 
2175
      procedure Set_Flag67 (N : Node_Id; Val : Boolean);
2176
      pragma Inline (Set_Flag67);
2177
 
2178
      procedure Set_Flag68 (N : Node_Id; Val : Boolean);
2179
      pragma Inline (Set_Flag68);
2180
 
2181
      procedure Set_Flag69 (N : Node_Id; Val : Boolean);
2182
      pragma Inline (Set_Flag69);
2183
 
2184
      procedure Set_Flag70 (N : Node_Id; Val : Boolean);
2185
      pragma Inline (Set_Flag70);
2186
 
2187
      procedure Set_Flag71 (N : Node_Id; Val : Boolean);
2188
      pragma Inline (Set_Flag71);
2189
 
2190
      procedure Set_Flag72 (N : Node_Id; Val : Boolean);
2191
      pragma Inline (Set_Flag72);
2192
 
2193
      procedure Set_Flag73 (N : Node_Id; Val : Boolean);
2194
      pragma Inline (Set_Flag73);
2195
 
2196
      procedure Set_Flag74 (N : Node_Id; Val : Boolean);
2197
      pragma Inline (Set_Flag74);
2198
 
2199
      procedure Set_Flag75 (N : Node_Id; Val : Boolean);
2200
      pragma Inline (Set_Flag75);
2201
 
2202
      procedure Set_Flag76 (N : Node_Id; Val : Boolean);
2203
      pragma Inline (Set_Flag76);
2204
 
2205
      procedure Set_Flag77 (N : Node_Id; Val : Boolean);
2206
      pragma Inline (Set_Flag77);
2207
 
2208
      procedure Set_Flag78 (N : Node_Id; Val : Boolean);
2209
      pragma Inline (Set_Flag78);
2210
 
2211
      procedure Set_Flag79 (N : Node_Id; Val : Boolean);
2212
      pragma Inline (Set_Flag79);
2213
 
2214
      procedure Set_Flag80 (N : Node_Id; Val : Boolean);
2215
      pragma Inline (Set_Flag80);
2216
 
2217
      procedure Set_Flag81 (N : Node_Id; Val : Boolean);
2218
      pragma Inline (Set_Flag81);
2219
 
2220
      procedure Set_Flag82 (N : Node_Id; Val : Boolean);
2221
      pragma Inline (Set_Flag82);
2222
 
2223
      procedure Set_Flag83 (N : Node_Id; Val : Boolean);
2224
      pragma Inline (Set_Flag83);
2225
 
2226
      procedure Set_Flag84 (N : Node_Id; Val : Boolean);
2227
      pragma Inline (Set_Flag84);
2228
 
2229
      procedure Set_Flag85 (N : Node_Id; Val : Boolean);
2230
      pragma Inline (Set_Flag85);
2231
 
2232
      procedure Set_Flag86 (N : Node_Id; Val : Boolean);
2233
      pragma Inline (Set_Flag86);
2234
 
2235
      procedure Set_Flag87 (N : Node_Id; Val : Boolean);
2236
      pragma Inline (Set_Flag87);
2237
 
2238
      procedure Set_Flag88 (N : Node_Id; Val : Boolean);
2239
      pragma Inline (Set_Flag88);
2240
 
2241
      procedure Set_Flag89 (N : Node_Id; Val : Boolean);
2242
      pragma Inline (Set_Flag89);
2243
 
2244
      procedure Set_Flag90 (N : Node_Id; Val : Boolean);
2245
      pragma Inline (Set_Flag90);
2246
 
2247
      procedure Set_Flag91 (N : Node_Id; Val : Boolean);
2248
      pragma Inline (Set_Flag91);
2249
 
2250
      procedure Set_Flag92 (N : Node_Id; Val : Boolean);
2251
      pragma Inline (Set_Flag92);
2252
 
2253
      procedure Set_Flag93 (N : Node_Id; Val : Boolean);
2254
      pragma Inline (Set_Flag93);
2255
 
2256
      procedure Set_Flag94 (N : Node_Id; Val : Boolean);
2257
      pragma Inline (Set_Flag94);
2258
 
2259
      procedure Set_Flag95 (N : Node_Id; Val : Boolean);
2260
      pragma Inline (Set_Flag95);
2261
 
2262
      procedure Set_Flag96 (N : Node_Id; Val : Boolean);
2263
      pragma Inline (Set_Flag96);
2264
 
2265
      procedure Set_Flag97 (N : Node_Id; Val : Boolean);
2266
      pragma Inline (Set_Flag97);
2267
 
2268
      procedure Set_Flag98 (N : Node_Id; Val : Boolean);
2269
      pragma Inline (Set_Flag98);
2270
 
2271
      procedure Set_Flag99 (N : Node_Id; Val : Boolean);
2272
      pragma Inline (Set_Flag99);
2273
 
2274
      procedure Set_Flag100 (N : Node_Id; Val : Boolean);
2275
      pragma Inline (Set_Flag100);
2276
 
2277
      procedure Set_Flag101 (N : Node_Id; Val : Boolean);
2278
      pragma Inline (Set_Flag101);
2279
 
2280
      procedure Set_Flag102 (N : Node_Id; Val : Boolean);
2281
      pragma Inline (Set_Flag102);
2282
 
2283
      procedure Set_Flag103 (N : Node_Id; Val : Boolean);
2284
      pragma Inline (Set_Flag103);
2285
 
2286
      procedure Set_Flag104 (N : Node_Id; Val : Boolean);
2287
      pragma Inline (Set_Flag104);
2288
 
2289
      procedure Set_Flag105 (N : Node_Id; Val : Boolean);
2290
      pragma Inline (Set_Flag105);
2291
 
2292
      procedure Set_Flag106 (N : Node_Id; Val : Boolean);
2293
      pragma Inline (Set_Flag106);
2294
 
2295
      procedure Set_Flag107 (N : Node_Id; Val : Boolean);
2296
      pragma Inline (Set_Flag107);
2297
 
2298
      procedure Set_Flag108 (N : Node_Id; Val : Boolean);
2299
      pragma Inline (Set_Flag108);
2300
 
2301
      procedure Set_Flag109 (N : Node_Id; Val : Boolean);
2302
      pragma Inline (Set_Flag109);
2303
 
2304
      procedure Set_Flag110 (N : Node_Id; Val : Boolean);
2305
      pragma Inline (Set_Flag110);
2306
 
2307
      procedure Set_Flag111 (N : Node_Id; Val : Boolean);
2308
      pragma Inline (Set_Flag111);
2309
 
2310
      procedure Set_Flag112 (N : Node_Id; Val : Boolean);
2311
      pragma Inline (Set_Flag112);
2312
 
2313
      procedure Set_Flag113 (N : Node_Id; Val : Boolean);
2314
      pragma Inline (Set_Flag113);
2315
 
2316
      procedure Set_Flag114 (N : Node_Id; Val : Boolean);
2317
      pragma Inline (Set_Flag114);
2318
 
2319
      procedure Set_Flag115 (N : Node_Id; Val : Boolean);
2320
      pragma Inline (Set_Flag115);
2321
 
2322
      procedure Set_Flag116 (N : Node_Id; Val : Boolean);
2323
      pragma Inline (Set_Flag116);
2324
 
2325
      procedure Set_Flag117 (N : Node_Id; Val : Boolean);
2326
      pragma Inline (Set_Flag117);
2327
 
2328
      procedure Set_Flag118 (N : Node_Id; Val : Boolean);
2329
      pragma Inline (Set_Flag118);
2330
 
2331
      procedure Set_Flag119 (N : Node_Id; Val : Boolean);
2332
      pragma Inline (Set_Flag119);
2333
 
2334
      procedure Set_Flag120 (N : Node_Id; Val : Boolean);
2335
      pragma Inline (Set_Flag120);
2336
 
2337
      procedure Set_Flag121 (N : Node_Id; Val : Boolean);
2338
      pragma Inline (Set_Flag121);
2339
 
2340
      procedure Set_Flag122 (N : Node_Id; Val : Boolean);
2341
      pragma Inline (Set_Flag122);
2342
 
2343
      procedure Set_Flag123 (N : Node_Id; Val : Boolean);
2344
      pragma Inline (Set_Flag123);
2345
 
2346
      procedure Set_Flag124 (N : Node_Id; Val : Boolean);
2347
      pragma Inline (Set_Flag124);
2348
 
2349
      procedure Set_Flag125 (N : Node_Id; Val : Boolean);
2350
      pragma Inline (Set_Flag125);
2351
 
2352
      procedure Set_Flag126 (N : Node_Id; Val : Boolean);
2353
      pragma Inline (Set_Flag126);
2354
 
2355
      procedure Set_Flag127 (N : Node_Id; Val : Boolean);
2356
      pragma Inline (Set_Flag127);
2357
 
2358
      procedure Set_Flag128 (N : Node_Id; Val : Boolean);
2359
      pragma Inline (Set_Flag128);
2360
 
2361
      procedure Set_Flag129 (N : Node_Id; Val : Boolean);
2362
      pragma Inline (Set_Flag129);
2363
 
2364
      procedure Set_Flag130 (N : Node_Id; Val : Boolean);
2365
      pragma Inline (Set_Flag130);
2366
 
2367
      procedure Set_Flag131 (N : Node_Id; Val : Boolean);
2368
      pragma Inline (Set_Flag131);
2369
 
2370
      procedure Set_Flag132 (N : Node_Id; Val : Boolean);
2371
      pragma Inline (Set_Flag132);
2372
 
2373
      procedure Set_Flag133 (N : Node_Id; Val : Boolean);
2374
      pragma Inline (Set_Flag133);
2375
 
2376
      procedure Set_Flag134 (N : Node_Id; Val : Boolean);
2377
      pragma Inline (Set_Flag134);
2378
 
2379
      procedure Set_Flag135 (N : Node_Id; Val : Boolean);
2380
      pragma Inline (Set_Flag135);
2381
 
2382
      procedure Set_Flag136 (N : Node_Id; Val : Boolean);
2383
      pragma Inline (Set_Flag136);
2384
 
2385
      procedure Set_Flag137 (N : Node_Id; Val : Boolean);
2386
      pragma Inline (Set_Flag137);
2387
 
2388
      procedure Set_Flag138 (N : Node_Id; Val : Boolean);
2389
      pragma Inline (Set_Flag138);
2390
 
2391
      procedure Set_Flag139 (N : Node_Id; Val : Boolean);
2392
      pragma Inline (Set_Flag139);
2393
 
2394
      procedure Set_Flag140 (N : Node_Id; Val : Boolean);
2395
      pragma Inline (Set_Flag140);
2396
 
2397
      procedure Set_Flag141 (N : Node_Id; Val : Boolean);
2398
      pragma Inline (Set_Flag141);
2399
 
2400
      procedure Set_Flag142 (N : Node_Id; Val : Boolean);
2401
      pragma Inline (Set_Flag142);
2402
 
2403
      procedure Set_Flag143 (N : Node_Id; Val : Boolean);
2404
      pragma Inline (Set_Flag143);
2405
 
2406
      procedure Set_Flag144 (N : Node_Id; Val : Boolean);
2407
      pragma Inline (Set_Flag144);
2408
 
2409
      procedure Set_Flag145 (N : Node_Id; Val : Boolean);
2410
      pragma Inline (Set_Flag145);
2411
 
2412
      procedure Set_Flag146 (N : Node_Id; Val : Boolean);
2413
      pragma Inline (Set_Flag146);
2414
 
2415
      procedure Set_Flag147 (N : Node_Id; Val : Boolean);
2416
      pragma Inline (Set_Flag147);
2417
 
2418
      procedure Set_Flag148 (N : Node_Id; Val : Boolean);
2419
      pragma Inline (Set_Flag148);
2420
 
2421
      procedure Set_Flag149 (N : Node_Id; Val : Boolean);
2422
      pragma Inline (Set_Flag149);
2423
 
2424
      procedure Set_Flag150 (N : Node_Id; Val : Boolean);
2425
      pragma Inline (Set_Flag150);
2426
 
2427
      procedure Set_Flag151 (N : Node_Id; Val : Boolean);
2428
      pragma Inline (Set_Flag151);
2429
 
2430
      procedure Set_Flag152 (N : Node_Id; Val : Boolean);
2431
      pragma Inline (Set_Flag152);
2432
 
2433
      procedure Set_Flag153 (N : Node_Id; Val : Boolean);
2434
      pragma Inline (Set_Flag153);
2435
 
2436
      procedure Set_Flag154 (N : Node_Id; Val : Boolean);
2437
      pragma Inline (Set_Flag154);
2438
 
2439
      procedure Set_Flag155 (N : Node_Id; Val : Boolean);
2440
      pragma Inline (Set_Flag155);
2441
 
2442
      procedure Set_Flag156 (N : Node_Id; Val : Boolean);
2443
      pragma Inline (Set_Flag156);
2444
 
2445
      procedure Set_Flag157 (N : Node_Id; Val : Boolean);
2446
      pragma Inline (Set_Flag157);
2447
 
2448
      procedure Set_Flag158 (N : Node_Id; Val : Boolean);
2449
      pragma Inline (Set_Flag158);
2450
 
2451
      procedure Set_Flag159 (N : Node_Id; Val : Boolean);
2452
      pragma Inline (Set_Flag159);
2453
 
2454
      procedure Set_Flag160 (N : Node_Id; Val : Boolean);
2455
      pragma Inline (Set_Flag160);
2456
 
2457
      procedure Set_Flag161 (N : Node_Id; Val : Boolean);
2458
      pragma Inline (Set_Flag161);
2459
 
2460
      procedure Set_Flag162 (N : Node_Id; Val : Boolean);
2461
      pragma Inline (Set_Flag162);
2462
 
2463
      procedure Set_Flag163 (N : Node_Id; Val : Boolean);
2464
      pragma Inline (Set_Flag163);
2465
 
2466
      procedure Set_Flag164 (N : Node_Id; Val : Boolean);
2467
      pragma Inline (Set_Flag164);
2468
 
2469
      procedure Set_Flag165 (N : Node_Id; Val : Boolean);
2470
      pragma Inline (Set_Flag165);
2471
 
2472
      procedure Set_Flag166 (N : Node_Id; Val : Boolean);
2473
      pragma Inline (Set_Flag166);
2474
 
2475
      procedure Set_Flag167 (N : Node_Id; Val : Boolean);
2476
      pragma Inline (Set_Flag167);
2477
 
2478
      procedure Set_Flag168 (N : Node_Id; Val : Boolean);
2479
      pragma Inline (Set_Flag168);
2480
 
2481
      procedure Set_Flag169 (N : Node_Id; Val : Boolean);
2482
      pragma Inline (Set_Flag169);
2483
 
2484
      procedure Set_Flag170 (N : Node_Id; Val : Boolean);
2485
      pragma Inline (Set_Flag170);
2486
 
2487
      procedure Set_Flag171 (N : Node_Id; Val : Boolean);
2488
      pragma Inline (Set_Flag171);
2489
 
2490
      procedure Set_Flag172 (N : Node_Id; Val : Boolean);
2491
      pragma Inline (Set_Flag172);
2492
 
2493
      procedure Set_Flag173 (N : Node_Id; Val : Boolean);
2494
      pragma Inline (Set_Flag173);
2495
 
2496
      procedure Set_Flag174 (N : Node_Id; Val : Boolean);
2497
      pragma Inline (Set_Flag174);
2498
 
2499
      procedure Set_Flag175 (N : Node_Id; Val : Boolean);
2500
      pragma Inline (Set_Flag175);
2501
 
2502
      procedure Set_Flag176 (N : Node_Id; Val : Boolean);
2503
      pragma Inline (Set_Flag176);
2504
 
2505
      procedure Set_Flag177 (N : Node_Id; Val : Boolean);
2506
      pragma Inline (Set_Flag177);
2507
 
2508
      procedure Set_Flag178 (N : Node_Id; Val : Boolean);
2509
      pragma Inline (Set_Flag178);
2510
 
2511
      procedure Set_Flag179 (N : Node_Id; Val : Boolean);
2512
      pragma Inline (Set_Flag179);
2513
 
2514
      procedure Set_Flag180 (N : Node_Id; Val : Boolean);
2515
      pragma Inline (Set_Flag180);
2516
 
2517
      procedure Set_Flag181 (N : Node_Id; Val : Boolean);
2518
      pragma Inline (Set_Flag181);
2519
 
2520
      procedure Set_Flag182 (N : Node_Id; Val : Boolean);
2521
      pragma Inline (Set_Flag182);
2522
 
2523
      procedure Set_Flag183 (N : Node_Id; Val : Boolean);
2524
      pragma Inline (Set_Flag183);
2525
 
2526
      procedure Set_Flag184 (N : Node_Id; Val : Boolean);
2527
      pragma Inline (Set_Flag184);
2528
 
2529
      procedure Set_Flag185 (N : Node_Id; Val : Boolean);
2530
      pragma Inline (Set_Flag185);
2531
 
2532
      procedure Set_Flag186 (N : Node_Id; Val : Boolean);
2533
      pragma Inline (Set_Flag186);
2534
 
2535
      procedure Set_Flag187 (N : Node_Id; Val : Boolean);
2536
      pragma Inline (Set_Flag187);
2537
 
2538
      procedure Set_Flag188 (N : Node_Id; Val : Boolean);
2539
      pragma Inline (Set_Flag188);
2540
 
2541
      procedure Set_Flag189 (N : Node_Id; Val : Boolean);
2542
      pragma Inline (Set_Flag189);
2543
 
2544
      procedure Set_Flag190 (N : Node_Id; Val : Boolean);
2545
      pragma Inline (Set_Flag190);
2546
 
2547
      procedure Set_Flag191 (N : Node_Id; Val : Boolean);
2548
      pragma Inline (Set_Flag191);
2549
 
2550
      procedure Set_Flag192 (N : Node_Id; Val : Boolean);
2551
      pragma Inline (Set_Flag192);
2552
 
2553
      procedure Set_Flag193 (N : Node_Id; Val : Boolean);
2554
      pragma Inline (Set_Flag193);
2555
 
2556
      procedure Set_Flag194 (N : Node_Id; Val : Boolean);
2557
      pragma Inline (Set_Flag194);
2558
 
2559
      procedure Set_Flag195 (N : Node_Id; Val : Boolean);
2560
      pragma Inline (Set_Flag195);
2561
 
2562
      procedure Set_Flag196 (N : Node_Id; Val : Boolean);
2563
      pragma Inline (Set_Flag196);
2564
 
2565
      procedure Set_Flag197 (N : Node_Id; Val : Boolean);
2566
      pragma Inline (Set_Flag197);
2567
 
2568
      procedure Set_Flag198 (N : Node_Id; Val : Boolean);
2569
      pragma Inline (Set_Flag198);
2570
 
2571
      procedure Set_Flag199 (N : Node_Id; Val : Boolean);
2572
      pragma Inline (Set_Flag199);
2573
 
2574
      procedure Set_Flag200 (N : Node_Id; Val : Boolean);
2575
      pragma Inline (Set_Flag200);
2576
 
2577
      procedure Set_Flag201 (N : Node_Id; Val : Boolean);
2578
      pragma Inline (Set_Flag201);
2579
 
2580
      procedure Set_Flag202 (N : Node_Id; Val : Boolean);
2581
      pragma Inline (Set_Flag202);
2582
 
2583
      procedure Set_Flag203 (N : Node_Id; Val : Boolean);
2584
      pragma Inline (Set_Flag203);
2585
 
2586
      procedure Set_Flag204 (N : Node_Id; Val : Boolean);
2587
      pragma Inline (Set_Flag204);
2588
 
2589
      procedure Set_Flag205 (N : Node_Id; Val : Boolean);
2590
      pragma Inline (Set_Flag205);
2591
 
2592
      procedure Set_Flag206 (N : Node_Id; Val : Boolean);
2593
      pragma Inline (Set_Flag206);
2594
 
2595
      procedure Set_Flag207 (N : Node_Id; Val : Boolean);
2596
      pragma Inline (Set_Flag207);
2597
 
2598
      procedure Set_Flag208 (N : Node_Id; Val : Boolean);
2599
      pragma Inline (Set_Flag208);
2600
 
2601
      procedure Set_Flag209 (N : Node_Id; Val : Boolean);
2602
      pragma Inline (Set_Flag209);
2603
 
2604
      procedure Set_Flag210 (N : Node_Id; Val : Boolean);
2605
      pragma Inline (Set_Flag210);
2606
 
2607
      procedure Set_Flag211 (N : Node_Id; Val : Boolean);
2608
      pragma Inline (Set_Flag211);
2609
 
2610
      procedure Set_Flag212 (N : Node_Id; Val : Boolean);
2611
      pragma Inline (Set_Flag212);
2612
 
2613
      procedure Set_Flag213 (N : Node_Id; Val : Boolean);
2614
      pragma Inline (Set_Flag213);
2615
 
2616
      procedure Set_Flag214 (N : Node_Id; Val : Boolean);
2617
      pragma Inline (Set_Flag214);
2618
 
2619
      procedure Set_Flag215 (N : Node_Id; Val : Boolean);
2620
      pragma Inline (Set_Flag215);
2621
 
2622
      --  The following versions of Set_Noden also set the parent
2623
      --  pointer of the referenced node if it is non_Empty
2624
 
2625
      procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id);
2626
      pragma Inline (Set_Node1_With_Parent);
2627
 
2628
      procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id);
2629
      pragma Inline (Set_Node2_With_Parent);
2630
 
2631
      procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id);
2632
      pragma Inline (Set_Node3_With_Parent);
2633
 
2634
      procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id);
2635
      pragma Inline (Set_Node4_With_Parent);
2636
 
2637
      procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id);
2638
      pragma Inline (Set_Node5_With_Parent);
2639
 
2640
      --  The following versions of Set_Listn also set the parent pointer of
2641
      --  the referenced node if it is non_Empty. The procedures for List6
2642
      --  to List12 can only be applied to nodes which have an extension.
2643
 
2644
      procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id);
2645
      pragma Inline (Set_List1_With_Parent);
2646
 
2647
      procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id);
2648
      pragma Inline (Set_List2_With_Parent);
2649
 
2650
      procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id);
2651
      pragma Inline (Set_List3_With_Parent);
2652
 
2653
      procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id);
2654
      pragma Inline (Set_List4_With_Parent);
2655
 
2656
      procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id);
2657
      pragma Inline (Set_List5_With_Parent);
2658
 
2659
   end Unchecked_Access;
2660
 
2661
   -----------------------------
2662
   -- Private Part Subpackage --
2663
   -----------------------------
2664
 
2665
   --  The following package contains the definition of the data structure
2666
   --  used by the implementation of the Atree package. Logically it really
2667
   --  corresponds to the private part, hence the name. The reason that it
2668
   --  is defined as a sub-package is to allow special access from clients
2669
   --  that need to see the internals of the data structures.
2670
 
2671
   package Atree_Private_Part is
2672
 
2673
      -------------------------
2674
      -- Tree Representation --
2675
      -------------------------
2676
 
2677
      --  The nodes of the tree are stored in a table (i.e. an array). In the
2678
      --  case of extended nodes four consecutive components in the array are
2679
      --  used. There are thus two formats for array components. One is used
2680
      --  for non-extended nodes, and for the first component of extended
2681
      --  nodes. The other is used for the extension parts (second, third and
2682
      --  fourth components) of an extended node. A variant record structure
2683
      --  is used to distinguish the two formats.
2684
 
2685
      type Node_Record (Is_Extension : Boolean := False) is record
2686
 
2687
         --  Logically, the only field in the common part is the above
2688
         --  Is_Extension discriminant (a single bit). However, Gigi cannot
2689
         --  yet handle such a structure, so we fill out the common part of
2690
         --  the record with fields that are used in different ways for
2691
         --  normal nodes and node extensions.
2692
 
2693
         Pflag1, Pflag2 : Boolean;
2694
         --  The Paren_Count field is represented using two boolean flags,
2695
         --  where Pflag1 is worth 1, and Pflag2 is worth 2. This is done
2696
         --  because we need to be easily able to reuse this field for
2697
         --  extra flags in the extended node case.
2698
 
2699
         In_List : Boolean;
2700
         --  Flag used to indicate if node is a member of a list.
2701
         --  This field is considered private to the Atree package.
2702
 
2703
         Unused_1 : Boolean;
2704
         --  Currently unused flag
2705
 
2706
         Rewrite_Ins : Boolean;
2707
         --  Flag set by Mark_Rewrite_Insertion procedure.
2708
         --  This field is considered private to the Atree package.
2709
 
2710
         Analyzed : Boolean;
2711
         --  Flag to indicate the node has been analyzed (and expanded)
2712
 
2713
         Comes_From_Source : Boolean;
2714
         --  Flag to indicate that node comes from the source program (i.e.
2715
         --  was built by the parser or scanner, not the analyzer or expander).
2716
 
2717
         Error_Posted : Boolean;
2718
         --  Flag to indicate that an error message has been posted on the
2719
         --  node (to avoid duplicate flags on the same node)
2720
 
2721
         Flag4  : Boolean;
2722
         Flag5  : Boolean;
2723
         Flag6  : Boolean;
2724
         Flag7  : Boolean;
2725
         Flag8  : Boolean;
2726
         Flag9  : Boolean;
2727
         Flag10 : Boolean;
2728
         Flag11 : Boolean;
2729
         Flag12 : Boolean;
2730
         Flag13 : Boolean;
2731
         Flag14 : Boolean;
2732
         Flag15 : Boolean;
2733
         Flag16 : Boolean;
2734
         Flag17 : Boolean;
2735
         Flag18 : Boolean;
2736
         --  The eighteen flags for a normal node
2737
 
2738
         --  The above fields are used as follows in components 2-4 of
2739
         --  an extended node entry. These fields are not currently
2740
         --  used in component 5 (where we still have lots of room!)
2741
 
2742
         --    In_List            used as  Flag19, Flag40, Flag129
2743
         --    Unused_1           used as  Flag20, Flag41, Flag130
2744
         --    Rewrite_Ins        used as  Flag21, Flag42, Flag131
2745
         --    Analyzed           used as  Flag22, Flag43, Flag132
2746
         --    Comes_From_Source  used as  Flag23, Flag44, Flag133
2747
         --    Error_Posted       used as  Flag24, Flag45, Flag134
2748
         --    Flag4              used as  Flag25, Flag46, Flag135
2749
         --    Flag5              used as  Flag26, Flag47, Flag136
2750
         --    Flag6              used as  Flag27, Flag48, Flag137
2751
         --    Flag7              used as  Flag28, Flag49, Flag138
2752
         --    Flag8              used as  Flag29, Flag50, Flag139
2753
         --    Flag9              used as  Flag30, Flag51, Flag140
2754
         --    Flag10             used as  Flag31, Flag52, Flag141
2755
         --    Flag11             used as  Flag32, Flag53, Flag142
2756
         --    Flag12             used as  Flag33, Flag54, Flag143
2757
         --    Flag13             used as  Flag34, Flag55, Flag144
2758
         --    Flag14             used as  Flag35, Flag56, Flag145
2759
         --    Flag15             used as  Flag36, Flag57, Flag146
2760
         --    Flag16             used as  Flag37, Flag58, Flag147
2761
         --    Flag17             used as  Flag38, Flag59, Flag148
2762
         --    Flag18             used as  Flag39, Flag60, Flag149
2763
         --    Pflag1             used as  Flag61, Flag62, Flag150
2764
         --    Pflag2             used as  Flag63, Flag64, Flag151
2765
 
2766
         Nkind : Node_Kind;
2767
         --  For a non-extended node, or the initial section of an extended
2768
         --  node, this field holds the Node_Kind value. For an extended node,
2769
         --  The Nkind field is used as follows:
2770
         --
2771
         --     Second entry: holds the Ekind field of the entity
2772
         --     Third entry:  holds 8 additional flags (Flag65-Flag72)
2773
         --     Fourth entry: not currently used
2774
 
2775
         --  Now finally (on an 32-bit boundary!) comes the variant part
2776
 
2777
         case Is_Extension is
2778
 
2779
            --  Non-extended node, or first component of extended node
2780
 
2781
            when False =>
2782
 
2783
               Sloc : Source_Ptr;
2784
               --  Source location for this node
2785
 
2786
               Link : Union_Id;
2787
               --  This field is used either as the Parent pointer (if In_List
2788
               --  is False), or to point to the list header (if In_List is
2789
               --  True). This field is considered private and can be modified
2790
               --  only by Atree or by Nlists.
2791
 
2792
               Field1 : Union_Id;
2793
               Field2 : Union_Id;
2794
               Field3 : Union_Id;
2795
               Field4 : Union_Id;
2796
               Field5 : Union_Id;
2797
               --  Five general use fields, which can contain Node_Id, List_Id,
2798
               --  Elist_Id, String_Id, or Name_Id values depending on the
2799
               --  values in Nkind and (for extended nodes), in Ekind. See
2800
               --  packages Sinfo and Einfo for details of their use.
2801
 
2802
            --  Extension (second component) of extended node
2803
 
2804
            when True =>
2805
               Field6  : Union_Id;
2806
               Field7  : Union_Id;
2807
               Field8  : Union_Id;
2808
               Field9  : Union_Id;
2809
               Field10 : Union_Id;
2810
               Field11 : Union_Id;
2811
               Field12 : Union_Id;
2812
               --  Seven additional general fields available only for entities
2813
               --  See package Einfo for details of their use (which depends
2814
               --  on the value in the Ekind field).
2815
 
2816
            --  In the third component, the extension format as described
2817
            --  above is used to hold additional general fields and flags
2818
            --  as follows:
2819
 
2820
            --    Field6-11      Holds Field13-Field18
2821
            --    Field12        Holds Flag73-Flag96 and Convention
2822
 
2823
            --  In the fourth component, the extension format as described
2824
            --  above is used to hold additional general fields and flags
2825
            --  as follows:
2826
 
2827
            --    Field6-10      Holds Field19-Field23
2828
            --    Field11        Holds Flag152-Flag183
2829
            --    Field12        Holds Flag97-Flag128
2830
 
2831
            --  In the fifth component, the extension format as described
2832
            --  above is used to hold additional general fields and flags
2833
            --  as follows:
2834
 
2835
            --    Field6-9       Holds Field24-Field27
2836
            --    Field10        currently unused, reserved for expansion
2837
            --    Field11        Holds Flag184-Flag215
2838
            --    Field12        currently unused, reserved for expansion
2839
 
2840
         end case;
2841
      end record;
2842
 
2843
      pragma Pack (Node_Record);
2844
      for Node_Record'Size use 8*32;
2845
      for Node_Record'Alignment use 4;
2846
 
2847
      --  The following defines the extendible array used for the nodes table
2848
      --  Nodes with extensions use two consecutive entries in the array
2849
 
2850
      package Nodes is new Table.Table (
2851
        Table_Component_Type => Node_Record,
2852
        Table_Index_Type     => Node_Id,
2853
        Table_Low_Bound      => First_Node_Id,
2854
        Table_Initial        => Alloc.Nodes_Initial,
2855
        Table_Increment      => Alloc.Nodes_Increment,
2856
        Table_Name           => "Nodes");
2857
 
2858
   end Atree_Private_Part;
2859
 
2860
end Atree;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.