home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / sinfo.ads < prev    next >
Text File  |  1996-09-28  |  269KB  |  7,199 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                S I N F O                                 --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.254 $                            --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. --  This package defines the structure of the abstract syntax tree. The Tree
  27. --  package provides a basic tree structure. Sinfo describes how this
  28. --  structure is used to represent the syntax of an Ada program.
  29.  
  30. --  Note: the grammar used here is taken from Version 5.95 of the RM, dated
  31. --  November 1994. The grammar in the RM is followed very closely in the tree
  32. --  design, and is repeated as part of this source file.
  33.  
  34. --  The tree contains not only the full syntactic representation of the
  35. --  program, but also the results of semantic analysis. In particular, the
  36. --  nodes for defining identifiers, defining character literals and defining
  37. --  operator symbols, collectively referred to as entities, represent what
  38. --  would normally be regarded as the symbol table information. In addition
  39. --  a number of the tree nodes contain semantic information.
  40.  
  41. --  WARNING: There is a C version of this package. Any changes to this
  42. --  source file must be properly reflected in this C header file sinfo.h
  43. --  which is created automatically from sinfo.ads using xsinfo.spt.
  44.  
  45. with Types;  use Types;
  46. with Uintp;  use Uintp;
  47. with Urealp; use Urealp;
  48.  
  49. package Sinfo is
  50.  
  51.    ---------------------------------
  52.    -- Making Changes to This File --
  53.    ---------------------------------
  54.  
  55.    --  If changes are made to this file, a number of related steps must be
  56.    --  carried out to ensure consistency. First, if a field access function
  57.    --  is added, it appears in six places:
  58.  
  59.    --    The documentation associated with the node
  60.    --    The spec of the access function in sinfo.ads
  61.    --    The body of the access function in sinfo.adb
  62.    --    The spec of the set procedure in sinfo.ads
  63.    --    The body of the set procedure in sinfo.adb
  64.    --    The pragma Inline at the end of sinfo.ads
  65.  
  66.    --  The field chosen must be consistent in all places, and, for a node
  67.    --  that is a subexpression, must not overlap any of the standard
  68.    --  expression fields. In the body, the calls to the Dcheck_Node debug
  69.    --  procedure will need cross-references adding in alphabetical order.
  70.  
  71.    --  In addition, if any of the standard expression fields is changed, then
  72.    --  the utiliy program which creates the Treeprs spec (in file treeprs.ads)
  73.    --  must be updated appropriately, since it special cases expression fields.
  74.  
  75.    --  If a new tree node is added, then the following changes are made
  76.  
  77.    --    Add it to the documentation in the appropriate place
  78.    --    Add its fields to this documentation section
  79.    --    Define it in the appropriate classification in Node_Kind
  80.    --    In the body (sinfo), add entries to the Dcheck calls for all
  81.    --     its fields (except standard expression fields) to include
  82.    --     the new node in the debug cross-reference list
  83.    --    Add an appropriate section to the case statement in sprint.adb
  84.    --    Add an appropriate section to the case statement in sem.adb
  85.    --    For a subexpression, add an appropriate sections to the case
  86.    --     statement in sem_eval.adb
  87.    --    For a subexpression, add an appropriate sections to the case
  88.    --     statement in sem_res.adb
  89.  
  90.    --  Finally, four utility programs must be run:
  91.  
  92.    --    Run csinfo.spt to check that you have made the changes consistently.
  93.    --     It checks most of the rules given above, with clear error messages.
  94.    --     This utility reads sinfo.ads and sinfo.adb and generates a report
  95.    --     to standard output.
  96.  
  97.    --    Run xsinfo.spt to create a-sinfo.h, the corresponding C header. This
  98.    --     utility reads sinfo.ads and generates a-sinfo.h. Note that it
  99.    --     does not need to read sinfo.adb, since the contents of the body
  100.    --     are algorithmically determinable from the spec.
  101.  
  102.    --    Run xtreeprs.spt to create treeprs.ads, an updated version of
  103.    --     the module that is used to drive the tree print routine. This
  104.    --     utility reads (but does not modify) treeprs.adt, the template
  105.    --     that provides the basic structure of the file, and then fills in
  106.    --     the data from the comments in sinfo.ads.
  107.  
  108.    --    Run xnmake.spt to create nmake.ads and nmake.adb, the package body
  109.    --     and spec of the Nmake package which contains functions for
  110.    --     constructing nodes.
  111.  
  112.    --  Note: sometime we could write a utility that actually generated the
  113.    --  body of sinfo from the spec instead of simply checking it, since, as
  114.    --  noted above, the contents of the body can be determined from the spec.
  115.  
  116.    --------------------------------
  117.    -- Implicit Nodes in the Tree --
  118.    --------------------------------
  119.  
  120.    --  Generally the structure of the tree very closely follows the grammar
  121.    --  as defined in the RM. However, certain nodes are omitted to save
  122.    --  space and simplify semantic processing. Two general classes of such
  123.    --  omitted nodes are as follows:
  124.  
  125.    --   If the only possibilities for a non-terminal are one or more other
  126.    --   non terminals (i.e. the rule is a "skinny" rule), then usually the
  127.    --   corresponding node is omitted from the tree, and the target construct
  128.    --   appears directly. For example, a real type definition is either a
  129.    --   floating point definition or a fixed point definition. No explicit
  130.    --   node appears for real type definition. Instead either the floating
  131.    --   point definition or fixed point definition appears directly.
  132.  
  133.    --   If a non-terminal corresponds to a list of some other non-terminal
  134.    --   (possibly with separating punctuation), then usually it is omitted
  135.    --   from the tree, and a list of components appears instead. For
  136.    --   example, sequence of statements does not appear explicitly in the
  137.    --   tree. Instead a list of statements appears directly.
  138.  
  139.    --  Some additional cases of omitted nodes occur and are documented
  140.    --  individually. In particular, many nodes are omitted in the tree
  141.    --  generated for an expression.
  142.  
  143.    -------------------------------------------
  144.    -- Handling of Defining Identifier Lists --
  145.    -------------------------------------------
  146.  
  147.    --  In several declarative forms in the syntax, lists of defining
  148.    --  identifiers appear (object declarations, component declarations,
  149.    --  number declarations etc.)
  150.  
  151.    --  The semantics of such statements are equivalent to a series of
  152.    --  identical declarations of single defining identifiers (except that
  153.    --  conformance checks require the same grouping of identifiers in the
  154.    --  parameter case).
  155.  
  156.    --  To simplify semantic processing, the parser breaks down such multiple
  157.    --  declaration cases into sequences of single declarations, duplicating
  158.    --  type and initialization information as required. The flags More_Ids
  159.    --  and Prev_Ids are used to record the original form of the source in
  160.    --  the case where the original source used a list of names, More_Ids
  161.    --  being set on all but the last name and Prev_Ids being set on all
  162.    --  but the first name. These flags are used to reconstruct the original
  163.    --  source (e.g. in the Sprint package), and also are included in the
  164.    --  conformance checks, but otherwise have no semantic significance.
  165.  
  166.    --  Note: the reason that we use More_Ids and Prev_Ids rather than
  167.    --  First_Name and Last_Name flags is so that the flags are off in the
  168.    --  normal one identifier case, which minimizes tree print output.
  169.  
  170.    -----------------------
  171.    -- Use of Node Lists --
  172.    -----------------------
  173.  
  174.    --  With a few exceptions, if a construction of the form {non-terminal}
  175.    --  appears in the tree, lists are used in the corresponding tree node
  176.    --  (see package Mlists for handling of node lists). In this case a field
  177.    --  of the parent node points to a list of nodes for the non-terminal. The
  178.    --  field name for such fields has a plural name which always ends in "s".
  179.    --  For example, a case statement has a field Alternatives pointing to a
  180.    --  list of case statement alternative nodes.
  181.  
  182.    --  Only fields pointing to lists have names ending in "s", so generally
  183.    --  the structure is strongly typed, fields not ending in s point to
  184.    --  single nodes, and fields ending in s point to lists.
  185.  
  186.    --  The following example shows how a traversal of a list is written. We
  187.    --  suppose here that Stmt points to a N_Case_Statement node which has
  188.    --  a list field called Alternatives:
  189.  
  190.    --   Alt := First (Alternatives (Stmt));
  191.    --   while Present (Alt) loop
  192.    --      ..
  193.    --      -- processing for case statement alternative Alt
  194.    --      ..
  195.    --      Alt := Next (Alt);
  196.    --   end loop;
  197.  
  198.    --  The Present function tests for Empty, which in this case signals the
  199.    --  end of the list. First returns Empty immediately if the list is empty.
  200.    --  Present is defined in Atree, First and Next are defined in Nlists.
  201.  
  202.    --  The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all
  203.    --  contexts, which is handled as described in the previous section, and
  204.    --  with {,library_unit_NAME} in the N_With_Clause mode, which is handled
  205.    --  using the First_Name and Last_Name flags, as further detailed in the
  206.    --  description of the N_With_Clause node.
  207.  
  208.    ---------------------
  209.    -- Optional Fields --
  210.    ---------------------
  211.  
  212.    --  Fields which correspond to a section of the syntax enclosed in square
  213.    --  brackets are generally omitted (and the corresponding field set to
  214.    --  Empty for a node, or No_List for a list). The documentation of such
  215.    --  fields notes these cases. One exception to this rule occurs in the
  216.    --  case of possibly empty statement sequences (such as the sequence of
  217.    --  statements in an entry call alternative). Such cases appear in the
  218.    --  syntax rules as [SEQUENCE_OF_STATEMENTS] and the fields corresponding
  219.    --  to such optional statement sequences always contain an empty list (not
  220.    --  No_List) if no statements are present.
  221.  
  222.    --  Note: the utility program that constructs the body and spec of the
  223.    --  Nmake package relies on the format of the comments to determine if
  224.    --  a field should have a default value in the corresponding make routine.
  225.    --  The rule is that if the first line of the description of the field
  226.    --  contains the string "(set to xxx if", then a default value of xxx is
  227.    --  provided for this field in the corresponding Make_yyy routine.
  228.  
  229.    -----------------------------------
  230.    -- Note on Body/Spec Terminology --
  231.    -----------------------------------
  232.  
  233.    --  In informal discussions about Ada, it is customary to refer to package
  234.    --  and subprogram specs and bodies. However, this is not technically
  235.    --  correct, what is normally referred to as a spec or specification is in
  236.    --  fact a package declaration or subprogram declaration. We are careful
  237.    --  in GNAT to use the correct terminology and in particular, the full
  238.    --  word specification is never used as an incorrect substitute for
  239.    --  declaration. The structure and terminology used in the tree also
  240.    --  reflects the grammar and thus uses declaration and specification in
  241.    --  the technically correct manner.
  242.  
  243.    --  However, there are contexts in which the informal terminology is
  244.    --  useful. We have the word "body" to refer to the Interp_Etype declared by
  245.    --  the declaration of a unit body, and in some contexts we need a
  246.    --  similar term to refer to the entity declared by the package or
  247.    --  subprogram declaration, and simply using declaration can be confusing
  248.    --  since the body also has a declaration.
  249.  
  250.    --  An example of such a context is the link between the package body
  251.    --  and its declaration. With_Declaration is confusing, since
  252.    --  the package body itself is a declaration.
  253.  
  254.    --  To deal with this problem, we reserve the informal term Spec, i.e.
  255.    --  the popular abbreviation used in this context, to refer to the entity
  256.    --  declared by the package or subprogram declaration. So in the above
  257.    --  example case, the field in the body is called With_Spec.
  258.  
  259.    --  Another important context for the use of the word Spec is in error
  260.    --  messages, where a hyper-correct use of declaration would be confusing
  261.    --  to a typical Ada programmer, and even for an expert programmer can
  262.    --  cause confusion since the body has a declaration as well.
  263.  
  264.    --  So, to summarize:
  265.  
  266.    --     Declaration    always refers to the syntactic entity that is called
  267.    --                    a declaration. In particular, subprogram declaration
  268.    --                    and package declaration are used to describe the
  269.    --                    syntactic entity that includes the semicolon.
  270.  
  271.    --     Specification  always refers to the syntactic entity that is called
  272.    --                    a specification. In particular, the terms procedure
  273.    --                    specification, function specification, package
  274.    --                    specification, subprogram specification always refer
  275.    --                    to the syntactic entity that has no semicolon.
  276.  
  277.    --     Spec           is an informal term, used to refer to the entity
  278.    --                    that is declared by a task declaration, protected
  279.    --                    declaration, generic declaration, subprogram
  280.    --                    declaration or package declaration.
  281.  
  282.    --  This convention is followed throughout the GNAT documentation
  283.    --  both internal and external, and in all error message text.
  284.  
  285.    ------------------------
  286.    -- Internal Use Nodes --
  287.    ------------------------
  288.  
  289.    --  These are Node_Kind settings used in the internal implementation
  290.    --  which are not logically part of the specification.
  291.  
  292.    --  N_Unused_At_Start
  293.    --  Completely unused entry at the start of the enumeration type. This
  294.    --  is inserted so that no legitimate value is zero, which helps to get
  295.    --  better debugging behavior, since zero is a likely uninitialized value).
  296.  
  297.    --  N_Unused_At_End
  298.    --  Completely unused entry at the end of the enumeration type. This is
  299.    --  handy so that arrays with Node_Kind as the index type have an extra
  300.    --  entry at the end (see for example the use of the Pchar_Pos_Array in
  301.    --  Treepr, where the extra entry provides the limit value when dealing
  302.    --  with the last used entry in the array).
  303.  
  304.    ---------------------
  305.    -- Syntactic Nodes --
  306.    ---------------------
  307.  
  308.    --  In the following node definitions, all fields, both syntactic and
  309.    --  semantic, are documented. The one exception is in the case of entities
  310.    --  (defining indentifiers, character literals and operator symbols),
  311.    --  where the usage of the fields depends on the entity kind. Entity
  312.    --  fields are fully documented in the separate package Einfo.
  313.  
  314.    --  In the node definitions, three common sets of fields are abbreviated
  315.    --  to save both space in the documentation, and also space in the string
  316.    --  (defined in Tree_Print_Strings) used to print trees. The following
  317.    --  abbreviations are used:
  318.  
  319.    --  Note: the utility program that creates the Treeprs spec (in the file
  320.    --  treeprs.ads) knows about the special fields here, so it must be
  321.    --  modified if any change is made to these fields.
  322.  
  323.    --    "plus fields for binary operator"
  324.    --       Chars                   (Name1)      Name_Id for the operator
  325.    --       Left_Opnd               (Node2)      left operand expression
  326.    --       Right_Opnd              (Node3)      right operand expression
  327.    --       Entity                  (Node4-Sem)  defining entity for operator
  328.    --       Do_Overflow_Check       (Flag17-Sem) set if overflow check needed
  329.    --       Has_Private_View        (Flag11-Sem) set in generic units.
  330.  
  331.    --    "plus fields for unary operator"
  332.    --       Chars                   (Name1)      Name_Id for the operator
  333.    --       Right_Opnd              (Node3)      right operand expression
  334.    --       Entity                  (Node4-Sem)  defining entity for operator
  335.    --       Do_Overflow_Check       (Flag17-Sem) set if overflow check needed
  336.    --       Has_Private_View        (Flag11-Sem) set in generic units.
  337.  
  338.    --    "plus fields for expression"
  339.    --       Paren_Count                          number of parentheses levels
  340.    --       Etype                   (Node5-Sem)  type of the expression
  341.    --       Assignment_OK           (Flag1-Sem)  set if modification is OK
  342.    --       Is_Overloaded           (Flag5-Sem)  >1 type interpretation exists
  343.    --       Is_Static_Expression    (Flag6-Sem)  set for static expression
  344.    --       Raises_Constraint_Error (Flag7-Sem)  evaluation raises CE
  345.    --       Has_No_Side_Effects     (Flag8-Sem)  set if known to be SE free
  346.    --       Do_Range_Check          (Flag9-Sem)  set if a range check needed
  347.    --       Is_Controlling_Actual   (Flag16-Sem) set for controlling argument
  348.    --       Cannot_Be_Constant      (Flag18-Sem) set if constant not possible
  349.  
  350.    --  Note: see under (EXPRESSION) for further details on the use of
  351.    --  the Paren_Count field to record the number of parentheses levels.
  352.  
  353.    --  Node_Kind is the type used in the Nkind field to indicate the node
  354.    --  kind. The actual definition of this type is given later (the reason
  355.    --  for this is that we want the descriptions ordered by logical chapter
  356.    --  in the RM, but the type definition is reordered to facilitate the
  357.    --  definition of some subtype ranges. The individual descriptions of
  358.    --  the nodes show how the various fields are used in each node kind,
  359.    --  as well as providing logical names for the fields. Functions and
  360.    --  procedures are provided for accessing and setting these fields
  361.    --  using these logical names.
  362.  
  363.    -----------------------
  364.    -- Gigi Restrictions --
  365.    -----------------------
  366.  
  367.    --  The tree passed to Gigi is more restricted than the general tree form.
  368.    --  For example, as a result of expansion, most of the tasking nodes can
  369.    --  never appear. For each node to which either a complete or partial
  370.    --  restriction applies, a note entitled "Gigi restriction" appears which
  371.    --  documents the restriction.
  372.  
  373.    --  Note that most of these restrictions apply only to trees generated when
  374.    --  code is being generated, since they involved expander actions that
  375.    --  destroy the tree.
  376.  
  377.    --  The list of notes is by no means complete ???
  378.  
  379.    ------------------------
  380.    -- Common Flag Fields --
  381.    ------------------------
  382.  
  383.    --  The following flag fields appear in all nodes
  384.  
  385.    --  Analyzed (Flag15-Sem)
  386.    --    This flag is used to indicate that a node (and all its children
  387.    --    have been analyzed. It is used to avoid reanalysis of a node that
  388.    --    has already been analyzed, both for efficiency and functional
  389.    --    correctness reasons.
  390.  
  391.    --  Error_Posted (Flag13)
  392.    --    This flag is used to avoid multiple error messages being posted
  393.    --    on or referring to the same node. This flag is set if an error
  394.    --    message refers to a node or is posted on its source location,
  395.    --    and has the effect of inhibiting further messages involving
  396.    --    this same node.
  397.  
  398.    --  Comes_From_Source
  399.    --    This flag is on for any nodes built by the scanner or parser from
  400.    --    the source program, and off for any nodes built by the analyzer or
  401.    --    expander. It indicates that a node comes from the original source.
  402.    --    This flag is defined in Atree.
  403.  
  404.    ------------------------------------
  405.    -- Description of Semantic Fields --
  406.    ------------------------------------
  407.  
  408.    --  The meaning of the syntactic fields is generally clear from their
  409.    --  names without any further description, since the names are chosen
  410.    --  to correspond very closely to the syntax in the reference manual.
  411.    --  This section describes the usage of the semantic fields, which are
  412.    --  used to contain additional information determined during semantic
  413.    --  analysis.
  414.  
  415.    --  Actions (List1-Sem)
  416.    --    Present in an N_Expression_Actions node, to contain the list of
  417.    --    associated actions, and in an N_Freeze_Entity node where it
  418.    --    holds the list of associated freezing actions.
  419.  
  420.    --  Activation_Chain_Entity (Node2-Sem)
  421.    --    This is used in tree nodes representing task activators (blocks,
  422.    --    subprogram bodies, package declarations, and task bodies). It is
  423.    --    initially Empty, and then gets set to point to the entity for the
  424.    --    declared Activation_Chain variable when the first task is declared.
  425.    --    When tasks are declared in the corresponding declarative region
  426.    --    this entity is located by name (its name is always _Chain) and
  427.    --    the declared tasks are added to the chain.
  428.  
  429.    --  Acts_As_Spec (Flag4-Sem)
  430.    --    A flag set in the N_Subprogram_Body node for a subprogram body
  431.    --    which is acting as its own spec. This flag also appears in the
  432.    --    compilation unit node at the library level for such a subprogram
  433.    --    (see further description in spec of Lib package).
  434.  
  435.    --  Aggregate_Bounds (Node3-Sem)
  436.    --    Present in N_Aggregate nodes. Points to an N_Range node that is used
  437.    --    to hold the bounds of the aggregate. We don't need a full blown itype
  438.    --    for the bounds of internal aggregates, since this type would never be
  439.    --    used other than to reference the bounds in any case. This field is
  440.    --    used only when the N_Aggregate node is for a nested array aggregate.
  441.    --    Note that in any case a subaggregate has no type in the official RM
  442.    --    semantics, so it is quite appropriate not to build a full Itype for
  443.    --    a subaggregate. See Sem_Aggr for further details.
  444.  
  445.    --  Assignment_OK (Flag1-Sem)
  446.    --     This flag is set in a subexpression node corresponding to indicate
  447.    --     that the associated object can be modified, even if this would not
  448.    --     normally be permissible (either by direct assignment, or by being
  449.    --     passed as an out or in-out parameter. This is used by the expander
  450.    --     for a number of purposes, including initialzation of constants and
  451.    --     limited type objects (such as tasks), setting discriminant fields,
  452.    --     setting tag values, etc.
  453.  
  454.    --  Backwards_OK (Flag5-Sem)
  455.    --     A flag present in the N_Assignment_Statement node. It is used only
  456.    --     if the type being assigned is an array type, and is set if analysis
  457.    --     determines that it is definitely safe to do the copy backwards, i.e.
  458.    --     starting at the highest addressed element. Note that if neither of
  459.    --     the flags Forwards_OK or Backwards_OK is set, it means that the
  460.    --     front end could not determine that either direction is definitely
  461.    --     safe, and a runtime check is required.
  462.  
  463.    --  Body_Required (Flag3-Sem)
  464.    --     A flag that appears in the N_Compilation_Unit node for a package
  465.    --     spec to indicate that a body is required. In Ada 95, if this flag
  466.    --     is not set, then a body may not be present. In Ada 83, if this flag
  467.    --     is not set, then a body is optional.
  468.  
  469.    --  Cannot_Be_Constant (Flag18-Sem)
  470.    --     Besides expressions that are static by Ada 95, rules, Gigi treats
  471.    --     some additional expressions as constants (an example would be
  472.    --     X.C'First_Bit, which is not static, but which may often be known
  473.    --     to be a compile time constant by Gigi. In order to test whether
  474.    --     an non-static expression is static in this sense, Gigi evaluates
  475.    --     the expression. This causes trouble if the expression contains any
  476.    --     attached implicit types, or any expression actions nodes. This flag
  477.    --     is set on all expression nodes with implicit types and expression
  478.    --     action nodes, and on all their ancestor expressions. It is used by
  479.    --     Gigi to avoid the troublesome evaluation attempts.
  480.  
  481.    --  Cleanup_Call (Node5-Sem)
  482.    --     This is optionally present in a handled statement sequence node.
  483.    --     It represents the call to be made to a cleanup procedure on scope
  484.    --     exit (either normal or abnormal). This is a N_Procedure_Call node
  485.    --     where the name of the procedure is a simple identifier, and so are
  486.    --     all the parameters.
  487.  
  488.    --  Controlling_Argument (Node1-Sem)
  489.    --     This field is set in procedure and function call nodes if the call
  490.    --     is a dispatching call (it is Empty for a non-dispatching call).
  491.    --     It indicates the source of the controlling tag for the call. For
  492.    --     Procedure calls, the Controlling_Argument is one of the actuals.
  493.    --     For a function that has a dispatching result, it is an entity in
  494.    --     the context of the call that can provide a tag, or else it is the
  495.    --     tag of the root type of the class.
  496.  
  497.    --  Conversion_OK (Flag14-Sem)
  498.    --     A flag set on type conversion nodes to indicate that the conversion
  499.    --     is to be considered as being valid, even though it is the case that
  500.    --     the conversion is not valid Ada. This is used for the Enum_Rep,
  501.    --     Fixed_Value and Integer_Value attributes, for internal conversions
  502.    --     done for fixed-point operations, and for certain conversions for
  503.    --     calls to initialization procedures. If Conversion_OK is set, then
  504.    --     Etype must be set (the analyzer assumes that Etype has been set).
  505.    --     For the case of fixed-point operands, it also indicates that the
  506.    --     conversion is to be a direct conversion of the underlying integer
  507.    --     result, with no regard to the small operand.
  508.  
  509.    --  Corresponding_Body (Node5-Sem)
  510.    --     This field is set in subprogram declarations, where it is needed
  511.    --     if a pragma Inline is present and the subprogram is called, in
  512.    --     generic declarations if the generic is instantiated, and also in
  513.    --     package declarations that contain inlined subprograms that are
  514.    --     called, or generic declarations that are instantiated. It points
  515.    --     to the defining entity for the corresponding body.
  516.  
  517.    --  Corresponding_Integer_Value (Uint4-Sem)
  518.    --     This field is set in real literals of fixed-point types (it is not
  519.    --     used for floating-point types). It contains the integer value used
  520.    --     to represent the fixed-point value. It is also set on the universal
  521.    --     real literals used to represent bounds of fixed-point base types
  522.    --     and their first named subtypes.
  523.  
  524.    --  Corresponding_Spec (Node5-Sem)
  525.    --     This field is set in subprogram, package, task, and protected body
  526.    --     nodes, where it points to the defining entity in the corresponding
  527.    --     spec. The attribute is also set in N_With_Clause nodes, where
  528.    --     it points to the defining entity for the with'ed spec, and in
  529.    --     a subprogram naming declaration when it is a Renaming_As_Body.
  530.    --     The field is Empty if there is no corresponding spec, as in the
  531.    --     case of a subprogram body that serves as its own spec.
  532.  
  533.    --  Corresponding_Stub (Node3-Sem)
  534.    --    This field is present in an N_Subunit node. It holds the node in
  535.    --    the parent unit that is the stub declaration for the subunit. it is
  536.    --    set when analysis of the stub forces loading of the proper body. If
  537.    --    expansion of the proper body creates new declarative nodes, they are
  538.    --    inserted at the point of the corresponding_stub.
  539.  
  540.    --  Debug_Statement (Node3-Sem)
  541.    --    This field is present in an N_Pragma node. It is used only for
  542.    --    a Debug pragma or pragma Assert with a second parameter. The
  543.    --    parameter is of the form of an expression, as required by the
  544.    --    pragma syntax, but is actually a procedure call. To simplify
  545.    --    semantic processing, the parser creates a copy of the argument
  546.    --    rearranged into a procedure call statement and places it in the
  547.    --    Debug_Statement field.
  548.  
  549.    --  Do_Access_Check (Flag11-Sem)
  550.    --     This flag is set on N_Explicit_Dereference, N_Indexed_Component or
  551.    --     N_Selected_Component nodes to indicate that the Prefix field of
  552.    --     the node points to a pointer whose value must be checked for null
  553.    --     before carrying out the operation. The actual check is dealt with
  554.    --     by Gigi (all the front end does is to set the flag).
  555.  
  556.    --  Do_Accessibility_Check (Flag3-Sem)
  557.    --     This flag is set on N_Parameter_Specification nodesto indicate that
  558.    --     that an accessibility check is required for the parameter. It is
  559.    --     not yet decided who takes care of this check (TBD).
  560.  
  561.    --  Do_Discriminant_Check (Flag3-Sem)
  562.    --     This flag is set on N_Selected_Component nodes to indicate that a
  563.    --     discriminant check is required using the discriminant check routine
  564.    --     associated with the selector. The actual check is dealt with by
  565.    --     Gigi (all the front end does is to set the flag).
  566.  
  567.    --  Do_Division_Check (Flag3-Sem)
  568.    --     This flag is set on a division operator (/ mod rem) to indicate
  569.    --     that a zero divide check is required. The actual check is dealt
  570.    --     with by the backend (all the front end does is to set the flag).
  571.  
  572.    --  Do_Length_Check (Flag4-Sem)
  573.    --     This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or,
  574.    --     N_Op_Xor, or N_Type_Conversion node to indicate that a length check
  575.    --     is required. It is not determined who deals with this flag (TBD).
  576.  
  577.    --  Do_Overflow_Check (Flag17-Sem)
  578.    --     This flag is set on an operator where an overflow check is required
  579.    --     on the operation. The actual check is dealt with by the backend
  580.    --     (all the front end does is to set the flag). The other cases where
  581.    --     this flag is used is on a Type_Conversion node and for attribute
  582.    --     reference nodes. For a type conversion, it means that the conversion
  583.    --     is from one base type to another, and the value may not fit in the
  584.    --     target base type. See also the description of Do_Range_Check for
  585.    --     this case. The only attribute references which use this flag are
  586.    --     Pred and Succ, where it means that the result should be checked
  587.    --     for going outside the base range.
  588.  
  589.    --  Do_Range_Check (Flag9-Sem)
  590.    --     This flag is set on an expression which appears in a context where
  591.    --     a range check is required. The target type is clear from the
  592.    --     context. The contexts in which this flag can appear are limited to
  593.    --     the following.
  594.  
  595.    --       Right side of an assignment. In this case the target type is
  596.    --       taken from the left side of the assignment, which is referenced
  597.    --       by the Name of the N_Assignment_Statement node.
  598.  
  599.    --       Subscript expressions in an indexed component. In this case the
  600.    --       target type is determined from the type of the array, which is
  601.    --       referenced by the Prefix of the N_Indexed_Component node.
  602.  
  603.    --       Parameter expression for an IN parameter, appearing either
  604.    --       directly in the Parameter_Associations list of a call or as
  605.    --       the Expression of an N_Parameter_Association node that appears
  606.    --       in this list. In either case, the check is against the type of
  607.    --       the formal. Note that OUT and IN OUT parameters are handled by
  608.    --       expanding assignments and explicit type conversions where a
  609.    --       range check is required.
  610.  
  611.    --       Initialization expression for the initial value in an object
  612.    --       declaration. In this case the Do_Range_Check flag is set on
  613.    --       the initialization expression, and the check is against the
  614.    --       range of the type of the object being declared.
  615.  
  616.    --       The expression of a type conversion. In this case the range check
  617.    --       is against the target type of the conversion. See also the use of
  618.    --       Do_Overflow_Check on a type conversion. The distinction is that
  619.    --       the ovrflow check protects against a value that is outside the
  620.    --       range of the target base type, whereas a range check checks that
  621.    --       the resulting value (which is a value of the base type of the
  622.    --       target type), satisfies the range constraint of the target type.
  623.  
  624.    --     Note: when a range check is required in contexts other than those
  625.    --     listed above (e.g. in a return statement), an additional type
  626.    --     conversion node is introduced to represent the required check.
  627.  
  628.    --  Do_Storage_Check (Flag17-Sem)
  629.    --     This flag is set in an N_Allocator node to indicate that a storage
  630.    --     check is required for the allocation, or in an N_Subprogram_Body
  631.    --     node to indicate that a stack check is required in the subprogram
  632.    --     prolog. The N_Allocator case is handled by the routine that expands
  633.    --     the call to the runtime routine. The N_Subprogram_Body case is
  634.    --     handled by the backend, and all the semantics does is set the flag.
  635.  
  636.    --  Do_Tag_Check (Flag3-Sem)
  637.    --     This flag is set on an N_Assignment_Statement, N_Function_Call,
  638.    --     N_Procedure_Call_Statement, N_Type_Conversion or N_Return_Statememt
  639.    --     node to indicate that the tag check can be suppressed. It is not
  640.    --     yet decided how this flag is used (TBD).
  641.  
  642.    --  Elaborate_Present (Flag4-Sem)
  643.    --     This flag is set in the N_With_Clause node to indicate that a
  644.    --     pragma Elaborate pragma appears for the with'ed units.
  645.  
  646.    --  Elaborate_All_Present (Flag1-Sem)
  647.    --     This flag is set in the N_With_Clause node to indicate that a
  648.    --     pragma Elaborate_All pragma appears for the with'ed units.
  649.  
  650.    --  Elaborate_Body_Present (Flag7-Sem)
  651.    --     This flag is set in the N_Compilation_Unit node to indicate that
  652.    --     a valid Elaborate_Body pragma appears for this unit.
  653.  
  654.    --  Enclosing_Variant (Node2-Sem)
  655.    --     This field is present in the N_Variant node and identifies the
  656.    --     Node_Id corresponding to the immediately enclosing variant when
  657.    --     the variant is nested, and N_Empty otherwise. Set during semantic
  658.    --     processing of the variant part of a record type.
  659.  
  660.    --  Entity (Node4-Sem)
  661.    --     Appears in all direct names (identifier, character literal,
  662.    --     operator symbol), as well as expanded names, and attributes that
  663.    --     denote entities, such as 'Class. Points to the entity for the
  664.    --     corresponding defining occurrence. Set after name resolution.
  665.    --     In the case of identifiers in a WITH list, the corresponding
  666.    --     defining occurrence is in a separately compiled file, and this
  667.    --     pointer must be set using the library Load procedure. Note that
  668.    --     during name resolution, the value in Entity may be temporarily
  669.    --     incorrect (e.g. during overload resolution, Entity is
  670.    --     initially set to the first possible correct interpretation, and
  671.    --     then later modified if necessary to contain the correct value
  672.    --     after resolution).
  673.  
  674.    --  Etype (Node5-Sem)
  675.    --     Appears in all expression nodes, all direct names, and all
  676.    --     entities. Points to the entity for the related type. Set after
  677.    --     type resolution. Normally this is the actual subtype of the
  678.    --     expression. However, in certain contexts such as the right side
  679.    --     of an assignment, subscripts, arguments to calls, returned value
  680.    --     in a function, initial value etc. it is the desired target type.
  681.    --     In the event that this is different from the actual type, the
  682.    --     Do_Range_Check flag will be set if a range check is required.
  683.    --     During semantic analysis, this is used to point to a list of
  684.    --     N_Interpretation nodes to represent possible interpretations
  685.    --     resulting from overloading, see Sem_Type for further details.
  686.  
  687.    --  First_Inlined_Subprogram (Node5-Sem)
  688.    --     Present in the N_Compilation_Unit node for the main program. Points
  689.    --     to a chain of entities for subprograms that are to be inlined. The
  690.    --     Next_Inlined_Subprogram field of these entities is used as a link
  691.    --     pointer with Empty marking the end of the list. This field is Empty
  692.    --     if there are no inlined subprograms or inlining is not active.
  693.  
  694.    --  First_Itype (Node2-Sem)
  695.    --     Points to first of a list of entities for implicit types associated
  696.    --     with a node. Set to Empty if there are no associated implicit types.
  697.    --     See package Itypes for further details.
  698.  
  699.    --  First_Named_Actual (Node4-Sem)
  700.    --     Present in procedure call statement and function call nodes, and
  701.    --     also in Intrinsic nodes. Set during semantic analysis to point to
  702.    --     the first named parameter where parameters are ordered by declaration
  703.    --     order (as opposed to the actual order in the call which may be
  704.    --     different due to named associations). Note: this field points to the
  705.    --     explicit actual parameter itself, not the N_Parameter_Association
  706.    --     node (its parent).
  707.  
  708.    --  First_Real_Statement (Node2-Sem)
  709.    --     Present in N_Handled_Sequence_Of_Statements node. Normally set to
  710.    --     Empty. Used only when declarations are moved into the statement
  711.    --     part of a construct as a result of wrapping an AT END handler that
  712.    --     is required to cover the declarations. In this case, this field is
  713.    --     used to remember the location in the statements list of the first
  714.    --     real statement, i.e. the statement that used to be first in the
  715.    --     statement list before the declarations were prepended.
  716.  
  717.    --  First_Subtype_Link (Node5-Sem)
  718.    --     Present in N_Freeze_Entity node for an anonymous base type that
  719.    --     is implicitly created by the declaration of a first subtype. It
  720.    --     points to the entity for the first subtype.
  721.  
  722.    --  Float_Truncate (Flag11-Sem)
  723.    --     A flag present in type conversion nodes. This is used for float
  724.    --     to integer conversions where truncation is required rather than
  725.    --     rounding. Note that Gigi does not handle type conversions from real
  726.    --     to integer with rounding (see Expand_N_Type_Conversion).
  727.  
  728.    --  Forwards_OK (Flag5-Sem)
  729.    --     A flag present in the N_Assignment_Statement node. It is used only
  730.    --     if the type being assigned is an array type, and is set if analysis
  731.    --     determines that it is definitely safe to do the copy forwards, i.e.
  732.    --     starting at the lowest addressed element. Note that if neither of
  733.    --     the flags Forwards_OK or Backwards_OK is set, it means that the
  734.    --     front end could not determine that either direction is definitely
  735.    --     safe, and a runtime check is required.
  736.  
  737.    --  Generic_Parent (Node5-Sem)
  738.    --     Generic_parent is defined on declaration nodes that are instances.
  739.    --     The value of Generic_Parent is the generic entity from which the
  740.    --     instance is obtained.
  741.  
  742.    --  Has_Dynamic_Itype (Flag14-Sem)
  743.    --     Flag set if the node has a non-Empty Itypes list, and at least one
  744.    --     of the Itypes in the list is dynamic. A dynamic Itype is a type that
  745.    --     has either a range constraint or a discriminant constraint involving
  746.    --     a dynamic expression. A dynamic expression is a non-static expression
  747.    --     that is not the name of an enclosing discriminant. Operationally,
  748.    --     dynamic Itypes are those that require runtime elaboration.
  749.  
  750.    --  Has_No_Elab_Code (Flag17-Sem)
  751.    --     A flag that appears in the N_Compilation_Unit node to indicate
  752.    --     whether or not elaboration code is present for this unit. It is
  753.    --     initially set true for subprogram specs and bodies and false for
  754.    --     package specs and bodies. Gigi may set the flag in the package
  755.    --     case if it determines that no elaboration code is generated. Note
  756.    --     that this flag is not related to the Is_Preelaborated status, there
  757.    --     can be preelaborated packages that generate elaboration code, and
  758.    --     non-preelaborated packages which do not generate elaboration code.
  759.  
  760.    --  Has_No_Side_Effects (Flag8-Sem)
  761.    --     A flag present in all expression nodes. Set by semantic analysis
  762.    --     after determining that a given subexpression has no side effects.
  763.  
  764.    --  Has_Priority_Pragma (Flag6-Sem)
  765.    --     A flag present in N_Subprogram_Body, N_Task_Definition and
  766.    --     N_Protected_Definition nodes to flag the presence of either
  767.    --     a Priority or Interrupt_Priority pragma in the declaration
  768.    --     sequence (public or private in the task and protected cases)
  769.  
  770.    --  Has_Private_View (Flag11-Sem)
  771.    --     A flag present in generic nodes that have an entity, to indicate
  772.    --     that the node has a private type. Used to exchange private
  773.    --     and full declarations if the visibility at instantiation is
  774.    --     different from the visibility at generic definition.
  775.  
  776.    --  Has_Storage_Size_Pragma (Flag5-Sem)
  777.    --     A flag present in an N_Task_Definition node to flag the presence
  778.    --     of a Storage_Size pragma
  779.  
  780.    --  Homonym (Node4-Sem)
  781.    --     Present in defining identifiers, defining character literals and
  782.    --     defining operator symbols (i.e. in all entities). Within a given
  783.    --     scope, homonyms are chained using this field. See Einfo for details.
  784.  
  785.    --  Implicit_With (Flag17-Sem)
  786.    --     This flag is set in the N_With_Clause node that is implicitly
  787.    --     generated for runtime units that are loaded by the expander, and
  788.    --     also for package System, if it is loaded implicitly by a use of
  789.    --     the 'Address or 'Tag attribute
  790.  
  791.    --  Is_Controlling_Argument (Flag16-Sem)
  792.    --     This flag is set on in an expression that is a controlling argument
  793.    --     in a dispatching call. It is off in all other cases. See Sem_Disp
  794.    --     for details of its use.
  795.  
  796.    --  Is_Current_Instance (Flag14-Sem)
  797.    --     This flag is set on identifiers that denote the current type
  798.    --     declaration (RM 8.6), that is to say that appear legally within
  799.    --     the declaration itself (record or task).
  800.  
  801.    --  Is_Overloaded (Flag5-Sem)
  802.    --     A flag present in all expression nodes. Used temporarily during
  803.    --     overloading determination. The setting of this flag is not
  804.    --     relevant once overloading analysis is complete.
  805.  
  806.    --  Is_Static_Expression (Flag6-Sem)
  807.    --     Indicates that an expression is a static expression (RM 4.9). See
  808.    --     spec of package Sem_Eval for full details on the use of this flag.
  809.  
  810.    --  Is_Task_Master (Flag5-Sem)
  811.    --     A flag set in a Subprogram_Body, Block_Statement or Task_Body node
  812.    --     to indicate that the construct is a task master (i.e. has declared
  813.    --     tasks or declares an access to a task type).
  814.  
  815.    --  Library_Unit (Node4-Sem)
  816.    --    In a stub node, the Library_Unit field points to the compilation unit
  817.    --    node of the corresponding subunit.
  818.    --
  819.    --    In a with clause node, the Library_Unit field points to the spec
  820.    --    of the with'ed unit.
  821.    --
  822.    --    In a compilation unit node, the use of this field depends on
  823.    --    the unit type:
  824.    --
  825.    --      For a subprogram body, the Library_Unit field points to the
  826.    --      compilation unit node of the corresponding spec, unless
  827.    --      Acts_As_Spec is set, in which case it points to itself.
  828.    --
  829.    --      For a package body, the Library_Unit field points to the
  830.    --      compilation unit node of the corresponding spec.
  831.    --
  832.    --      For a subprogram spec to which pragma Inline applies, the
  833.    --      Library_Unit field points to the compilation unit node of
  834.    --      the corresponding body, if inlining is active.
  835.    --
  836.    --      For a generic declaration, the Library_Unit field points
  837.    --      to the compilation unit node of the corresponding generic body.
  838.    --
  839.    --      For a subunit, the Library_Unit field points to the compilation
  840.    --      unit node of the parent body.
  841.    --
  842.    --    Note that this field is not used to hold the parent pointer for a
  843.    --    child unit (which might in any case need to use it for some other
  844.    --    purpose as described above). Instead for a child unit, implicit
  845.    --    with's are generated for all parents.
  846.  
  847.    --  Next_Entity (Node2-Sem)
  848.    --     Present in defining identifiers, defining character literals and
  849.    --     defining operator symbols (i.e. in all entities). The entities of
  850.    --     a scope are chained, and this field is used as the forward pointer
  851.    --     for this list. See Einfo for further details.
  852.  
  853.    --  Next_Interp (Node2-Sem)
  854.    --     Used to chain entries in the N_Interpretation node list used to
  855.    --     store multiple overloaded interpretations of a single node.
  856.  
  857.    --  Next_Named_Actual (Node4-Sem)
  858.    --     Present in parameter association node. Set during semantic
  859.    --     analysis to point to the next named parameter, where parameters
  860.    --     are ordered by declaration order (as opposed to the actual order
  861.    --     in the call, which may be different due to named associations).
  862.    --     Not that this field points to the explicit actual parameter itself,
  863.    --     not to the N_Parameter_Association node (its parent).
  864.  
  865.    --  Next_Use_Clause (Node3-Sem)
  866.    --     While use clauses are active during semantic processing, they
  867.    --     are chained from the scope stack entry, using Next_Use_Clause
  868.    --     as a link pointer, with Empty marking the end of the list. The
  869.    --     head pointer is in the scope stack entry (First_Use_Clause). At
  870.    --     the end of semantic processing (i.e. when Gigi sees the tree,
  871.    --     the contents of this field is undefined and should not be read).
  872.  
  873.    --  No_Default_Init (Flag7-Sem)
  874.    --     Present in N_Object_Declaration to indicate that the object must
  875.    --     not be initialized (by Initialize or a call to _init_proc). This
  876.    --     is needed for controlled aggregates.
  877.  
  878.    --  No_Defer (Flag1-Sem)
  879.    --     Present in N_Raise_Statement node. Normally a raise statement makes
  880.    --     a call to defer task abortion. If this flag is set, this defer call
  881.    --     is suppressed (this is used to deal with the raise Program_Error
  882.    --     statements that appear in System.Finalization_Implementation).
  883.  
  884.    --  Object_Definition_Itypes (Node5-Sem)
  885.    --     Used to store Itypes coming from the Object_Definition of an object
  886.    --     declaration. These must be kept separate from the Itypes for the
  887.    --     declaration itself. See processing in Sem_Ch3 for further details.
  888.  
  889.    --  Others_Discrete_Choices (List1-Sem)
  890.    --     When a case statement or variant is analyzed, the semantic checks
  891.    --     determine the actual list of choices that correspond to an others
  892.    --     choice. This list is materialized for later use by the expander
  893.    --     and the Others_Discrete_Choices field of an N_Others_Choice node
  894.    --     points to this materialized list of choices, which is in standard
  895.    --     format for a list of discrete choices, except that of course it
  896.    --     cannot contain an N_Others_Choice entry.
  897.  
  898.    --  Parent_Spec (Node4-Sem)
  899.    --     For a library unit that is a child unit spec (package or subprogram
  900.    --     declaration, generic declaration or instantiation, or library level
  901.    --     rename, this field points to the compilation unit node for the parent
  902.    --     package specification. This field is Empty for library bodies (the
  903.    --     parent spec in this case can be found from the corresponding spec).
  904.  
  905.    --  Procedure_To_Call (Node4-Sem)
  906.    --     Present in N_Allocator. N_Free_Statement, and N_Return_Statement
  907.    --     nodes. References the entity for the declaration of the procedure
  908.    --     to be called to accomplish the required operation (i.e. for the
  909.    --     Allocate procedure in the case of N_Allocator and N_Return_Statement
  910.    --     (for allocating the return value), and for the Deallocate procedure
  911.    --     in the case of N_Free_Statement.
  912.  
  913.    --  Raises_Constraint_Error (Flag7-Sem)
  914.    --     Set on a potentially static subexpression that will raise a
  915.    --     constraint error exception if it is evaluated (e.g. because
  916.    --     of a zero divide). See Sem_Eval spec for further details.
  917.  
  918.    --  Redundant_Use (Flag3-Sem)
  919.    --     A flag present in Identifier nodes. Used only for identifiers
  920.    --     referenced in use package clauses. Set to indicate that a use
  921.    --     is redundant (and therefore need not be undone on scope exit)
  922.  
  923.    --  Return_Type (Node2-Sem)
  924.    --     Present in N_Return_Statement node. For a procedure, this is set
  925.    --     to Standard_Void_Type. For a function it references the entity
  926.    --     for the returned type.
  927.  
  928.    --  Rounded_Result (Flag12-Sem)
  929.    --     Present in N_Type_Conversion, N_Op_Divide and N_Op_Multiply nodes.
  930.    --     Used in the fixed-point cases to indicate that the result must be
  931.    --     rounded as a result of the use of the 'Round attribute. Also used
  932.    --     for integer N_Op_Divide nodes to indicate that the result should
  933.    --     be rounded to the nearest integer (breaking ties away from zero),
  934.    --     rather than truncated towards zero as usual. These rounded integer
  935.    --     operations are the result of expansion of rounded fixed-point
  936.    --     divide, conersion and multiplication operations.
  937.  
  938.    --  Scope (Node3-Sem)
  939.    --     Present in defining identifiers, defining character literals and
  940.    --     defining operator symbols (i.e. in all entities). The entities of
  941.    --     a scope all use this field to reference the corresponding scope
  942.    --     entity. See Einfo for further details.
  943.  
  944.    --  Storage_Pool (Node1-Sem)
  945.    --     Present in N_Allocato, N_Free_Statement and N_Return_Statement
  946.    --     nodes. References the entity for the storage pool to be used for
  947.    --     the allocate or free call or for the allocation of the returned
  948.    --     value from a function. Empty indicates that the global default
  949.    --     default pool is to be used.
  950.  
  951.    --  Treat_Fixed_As_Integer (Flag14-Sem)
  952.    --     This flag appears in operator nodes for divide, multiply, mod and
  953.    --     rem on fixed-point operands. It indicates that the operands are
  954.    --     to be treated as integer values, ignoring small values. This flag
  955.    --     is only set as a result of expansion of fixed-point operations.
  956.    --     Typically a fixed-point multplication in the source generates
  957.    --     subsidiary multiplication and division operations that work with
  958.    --     the underlying integer values and have this flag set. Note that
  959.    --     this flag is not needed on other arithmetic operations (add, neg,
  960.    --     subtract etc) since in these cases it is always the case that fixed
  961.    --     is treated as integer. The Etype field MUST be set if this flag
  962.    --     is set. The analyzer knows to leave such nodes alone, and whoever
  963.    --     makes them must set the correct Etype value.
  964.  
  965.    --  TSS_Elist (Elist3-Sem)
  966.    --     Present in N_Freeze_Entity nodes. Holds an element list containing
  967.    --     entries for each TSS (type support subprogram) associated with the
  968.    --     frozen type. The elements of the list are the entities for the
  969.    --     subprograms (see package Exp_TSS for further details). Set to
  970.    --     No_Elist if there are no type support subprograms for the type
  971.    --     or if the freeze node is not for a type.
  972.  
  973.       ---------------------
  974.       -- 2.3  Identifier --
  975.       ---------------------
  976.  
  977.       --  IDENTIFIER ::= IDENTIFIER_LETTER {[UNDERLINE] LETTER_OR_DIGIT}
  978.       --  LETTER_OR_DIGIT ::= IDENTIFIER_LETTER | DIGIT
  979.  
  980.       --  An IDENTIFIER shall not be a reserved word
  981.  
  982.       --  In the Ada grammar identifiers are the bottom level tokens which
  983.       --  have very few semantics. Actual program identifiers are direct
  984.       --  names. If we were being 100% honest with the grammar, then we would
  985.       --  have a node called N_Direct_Name which would point to an identifier.
  986.       --  However, that's too many extra nodes, so we just use the N_Identifier
  987.       --  node directly as a direct name, and it contains the expression fields
  988.       --  and Entity field that correspond to its use as a direct name. In
  989.       --  those few cases where identifiers appear in contexts where they are
  990.       --  not direct names (pragmas, pragma argument associations, attribute
  991.       --  references and attribute definition clauses), the Chars field of the
  992.       --  node contains the Name_Id for the identifier name.
  993.  
  994.       --  Note: in GNAT, a reserved word can be treated as an identifier
  995.       --  in two cases. First, an incorrect use of a reserved word as an
  996.       --  identifier is diagnosed and then treated as a normal identifier.
  997.       --  Second, an attribute designator of the form of a reserved word
  998.       --  (access, delta, digits, range) is treated as an identifier.
  999.  
  1000.       --  Note: The set of letters that is permitted in an identifier depends
  1001.       --  on the character set in use. See package Csets for full details.
  1002.  
  1003.       --  N_Identifier
  1004.       --  Sloc points to identifier
  1005.       --  Chars (Name1) contains the Name_Id for the identifier
  1006.       --  Entity (Node4-Sem)
  1007.       --  Redundant_Use (Flag3-Sem) set for redundant use clause
  1008.       --  Has_Private_View (Flag11-Sem) set in generic units.
  1009.       --  Is_Current_Instance (Flag14-Sem) set if entity is enclosing type.
  1010.       --  plus fields for expression
  1011.  
  1012.       --------------------------
  1013.       -- 2.4  Numeric Literal --
  1014.       --------------------------
  1015.  
  1016.       --  NUMERIC_LITERAL ::= DECIMAL_LITERAL | BASED_LITERAL
  1017.  
  1018.       ----------------------------
  1019.       -- 2.4.1  Decimal Literal --
  1020.       ----------------------------
  1021.  
  1022.       --  DECIMAL_LITERAL ::= NUMERAL [.NUMERAL] [EXPONENT]
  1023.  
  1024.       --  NUMERAL ::= DIGIT {[UNDERLINE] DIGIT}
  1025.  
  1026.       --  EXPONENT ::= E [+] NUMERAL | E - NUMERAL
  1027.  
  1028.       --  Decimal literals appear in the tree as either integer literal nodes
  1029.       --  or real literal nodes, depending on whether a period is present.
  1030.  
  1031.       --  Note: literal nodes appear as a result of direct use of literals
  1032.       --  in the source program, and also as the result of evaluating
  1033.       --  expressions at compile time. In the latter case, it is possible
  1034.       --  to construct real literals that have no syntactic representation
  1035.       --  using the standard literal format. Such literals are listed by
  1036.       --  Sprint using the notation [numerator / denominator].
  1037.  
  1038.       --  N_Integer_Literal
  1039.       --  Sloc points to literal
  1040.       --  Intval (Uint3) contains integer value of literal
  1041.       --  plus fields for expression
  1042.  
  1043.       --  N_Real_Literal
  1044.       --  Sloc points to literal
  1045.       --  Realval (Ureal3) contains real value of literal
  1046.       --  Corresponding_Integer_Value (Uint4-Sem)
  1047.       --  plus fields for expression
  1048.  
  1049.       --------------------------
  1050.       -- 2.4.2  Based Literal --
  1051.       --------------------------
  1052.  
  1053.       --  BASED_LITERAL ::=
  1054.       --   BASE # BASED_NUMERAL [.BASED_NUMERAL] # [EXPONENT]
  1055.  
  1056.       --  BASE ::= NUMERAL
  1057.  
  1058.       --  BASED_NUMERAL ::=
  1059.       --    EXTENDED_DIGIT {[UNDERLINE] EXTENDED_DIGIT}
  1060.  
  1061.       --  EXTENDED_DIGIT ::= DIGIT | A | B | C | D | E | F
  1062.  
  1063.       --  Based literals appear in the tree as either integer literal nodes
  1064.       --  or real literal nodes, depending on whether a period is present.
  1065.  
  1066.       ----------------------------
  1067.       -- 2.5  Character Literal --
  1068.       ----------------------------
  1069.  
  1070.       --  CHARACTER_LITERAL ::= ' GRAPHIC_CHARACTER '
  1071.  
  1072.       --  N_Character_Literal
  1073.       --  Sloc points to literal
  1074.       --  Chars (Name1) contains the Name_Id for the identifier
  1075.       --  Char_Literal_Value (Char_Code2) contains the literal value
  1076.       --  Entity (Node4-Sem)
  1077.       --  Has_Private_View (Flag11-Sem) set in generic units.
  1078.       --  plus fields for expression
  1079.  
  1080.       --  Note: the Entity field will be missing (and set to Empty) for
  1081.       --  character literals whose type is Standard.Wide_Character or
  1082.       --  Standard.Character or a type derived from one of these two.
  1083.       --  In this case the character literal stands for its own coding.
  1084.       --  The reason we take this irregular short cut is to avoid the
  1085.       --  need to build lots of junk defining character literal nodes.
  1086.  
  1087.       -------------------------
  1088.       -- 2.6  String Literal --
  1089.       -------------------------
  1090.  
  1091.       --  STRING LITERAL ::= "{STRING_ELEMENT}"
  1092.  
  1093.       --  A STRING_ELEMENT is either a pair of quotation marks ("), or a
  1094.       --  single GRAPHIC_CHARACTER other than a quotation mark.
  1095.  
  1096.       --  N_String_Literal
  1097.       --  Sloc points to literal
  1098.       --  Strval (Str3) contains Id of string value
  1099.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  1100.       --  Has_Dynamic_Itype (Flag14-Sem)
  1101.       --  plus fields for expression
  1102.  
  1103.       ------------------
  1104.       -- 2.7  Comment --
  1105.       ------------------
  1106.  
  1107.       --  A COMMENT starts with two adjacent hyphens and extends up to the
  1108.       --  end of the line. A COMMENT may appear on any line of a program.
  1109.  
  1110.       --  Comments are skipped by the scanner and do not appear in the tree.
  1111.       --  It is possible to reconstruct the position of comments with respect
  1112.       --  to the elements of the tree by using the source position (Sloc)
  1113.       --  pointers that appear in every tree node.
  1114.  
  1115.       -----------------
  1116.       -- 2.8  Pragma --
  1117.       -----------------
  1118.  
  1119.       --  PRAGMA ::= pragma IDENTIFIER
  1120.       --    [(PRAGMA_ARGUMENT_ASSOCIATION {, PRAGMA_ARGUMENT_ASSOCIATION})];
  1121.  
  1122.       --  Note that a pragma may appear in the tree anywhere a declaration
  1123.       --  or a statement may appear, as well as in some other situations
  1124.       --  which are explicitly documented.
  1125.  
  1126.       --  N_Pragma
  1127.       --  Sloc points to PRAGMA
  1128.       --  Chars (Name1) identifier name from pragma identifier
  1129.       --  Pragma_Argument_Associations (List2) (set to No_List if none)
  1130.       --  Debug_Statement (Node3-Sem)
  1131.  
  1132.       --------------------------------------
  1133.       -- 2.8  Pragma Argument Association --
  1134.       --------------------------------------
  1135.  
  1136.       --  PRAGMA_ARGUMENT_ASSOCIATION ::=
  1137.       --    [pragma_argument_IDENTIFIER =>] NAME
  1138.       --  | [pragma_argument_IDENTIFIER =>] EXPRESSION
  1139.  
  1140.       --  N_Pragma_Argument_Association
  1141.       --  Sloc points to first token in association
  1142.       --  Chars (Name1) (set to No_Name if no pragma argument identifier)
  1143.       --  Expression (Node3)
  1144.  
  1145.       ------------------------
  1146.       -- 2.9  Reserved Word --
  1147.       ------------------------
  1148.  
  1149.       --  Reserved words are parsed by the scanner, and returned as the
  1150.       --  corresponding token types (e.g. PACKAGE is returned as Tok_Package)
  1151.  
  1152.       ----------------------------
  1153.       -- 3.1  Basic Declaration --
  1154.       ----------------------------
  1155.  
  1156.       --  BASIC_DECLARATION ::=
  1157.       --    TYPE_DECLARATION          | SUBTYPE_DECLARATION
  1158.       --  | OBJECT_DECLARATION        | NUMBER_DECLARATION
  1159.       --  | SUBPROGRAM_DECLARATION    | ABSTRACT_SUBPROGRAM_DECLARATION
  1160.       --  | PACKAGE_DECLARATION       | RENAMING_DECLARATION
  1161.       --  | EXCEPTION_DECLARATION     | GENERIC_DECLARATION
  1162.       --  | GENERIC_INSTANTIATION
  1163.  
  1164.       --  Basic declaration also includes IMPLICIT_LABEL_DECLARATION
  1165.       --  see further description in section on semantic nodes.
  1166.  
  1167.       --  Also, in the tree that is constructed, a pragma may appear
  1168.       --  anywhere that a declaration may appear.
  1169.  
  1170.       ------------------------------
  1171.       -- 3.1  Defining Identifier --
  1172.       ------------------------------
  1173.  
  1174.       --  DEFINING_IDENTIFIER ::= IDENTIFIER
  1175.  
  1176.       --  A defining identifier is an entity, which has additional fields
  1177.       --  depending on the setting of the Ekind field. These additional
  1178.       --  fields are defined (and access subprograms declared) in package
  1179.       --  Entity_Info.
  1180.  
  1181.       --  Note: N_Defining_Identifier is an extended node whose fields are
  1182.       --  deliberate layed out to match the layout of fields in an ordinary
  1183.       --  N_Identifier node allowing for easy alteration of an identifier
  1184.       --  node into a defining identifier node. For details, see procedure
  1185.       --  Sinfo.CN.Change_Identifier_To_Defining_Identifier.
  1186.  
  1187.       --  N_Defining_Identifier
  1188.       --  Sloc points to identifier
  1189.       --  Chars (Name1) contains the Name_Id for the identifier
  1190.       --  Next_Entity (Node2-Sem)
  1191.       --  Scope (Node3-Sem)
  1192.       --  Homonym (Node4-Sem)
  1193.       --  Etype (Node5-Sem)
  1194.  
  1195.       -----------------------------
  1196.       -- 3.2.1  Type Declaration --
  1197.       -----------------------------
  1198.  
  1199.       --  TYPE_DECLARATION ::=
  1200.       --    FULL_TYPE_DECLARATION
  1201.       --  | INCOMPLETE_TYPE_DECLARATION
  1202.       --  | PRIVATE_TYPE_DECLARATION
  1203.       --  | PRIVATE_EXTENSION_DECLARATION
  1204.  
  1205.       ----------------------------------
  1206.       -- 3.2.1  Full Type Declaration --
  1207.       ----------------------------------
  1208.  
  1209.       --  FULL_TYPE_DECLARATION ::=
  1210.       --    type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
  1211.       --      is TYPE_DEFINITION;
  1212.       --  | TASK_TYPE_DECLARATION
  1213.       --  | PROTECTED_TYPE_DECLARATION
  1214.  
  1215.       --  The full type declaration node is used only for the first case. The
  1216.       --  second case (concurrent type declaration), is represented directly
  1217.       --  by a task type declaration or a protected type declaration.
  1218.  
  1219.       --  N_Full_Type_Declaration
  1220.       --  Sloc points to TYPE
  1221.       --  Defining_Identifier (Node1)
  1222.       --  Discriminant_Specifications (List4) (set to No_List if none)
  1223.       --  Type_Definition (Node3)
  1224.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  1225.       --  Has_Dynamic_Itype (Flag14-Sem)
  1226.  
  1227.       ----------------------------
  1228.       -- 3.2.1  Type Definition --
  1229.       ----------------------------
  1230.  
  1231.       --  TYPE_DEFINITION ::=
  1232.       --    ENUMERATION_TYPE_DEFINITION  | INTEGER_TYPE_DEFINITION
  1233.       --  | REAL_TYPE_DEFINITION         | ARRAY_TYPE_DEFINITION
  1234.       --  | RECORD_TYPE_DEFINITION       | ACCESS_TYPE_DEFINITION
  1235.       --  | DERIVED_TYPE_DEFINITION
  1236.  
  1237.       --------------------------------
  1238.       -- 3.2.2  Subtype Declaration --
  1239.       --------------------------------
  1240.  
  1241.       --  SUBTYPE_DECLARATION ::=
  1242.       --    subtype DEFINING_IDENTIFIER is SUBTYPE_INDICATION;
  1243.  
  1244.       --  The subtype indication field is set to Empty for subtypes
  1245.       --  declared in package Standard (Positive, Natural).
  1246.  
  1247.       --  N_Subtype_Declaration
  1248.       --  Sloc points to SUBTYPE
  1249.       --  Defining_Identifier (Node1)
  1250.       --  Subtype_Indication (Node5)
  1251.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  1252.       --  Has_Dynamic_Itype (Flag14-Sem)
  1253.  
  1254.       -------------------------------
  1255.       -- 3.2.2  Subtype Indication --
  1256.       -------------------------------
  1257.  
  1258.       --  SUBTYPE_INDICATION ::= SUBTYPE_MARK [CONSTRAINT]
  1259.  
  1260.       --  Note: if no constraint is present, the subtype indication appears
  1261.       --  directly in the tree as a subtype mark. The N_Subtype_Indication
  1262.       --  node is used only if a constraint is present.
  1263.  
  1264.       --  Note: the reason that this node has expression fields is that a
  1265.       --  subtype indication can appear as an operand of a membership test.
  1266.  
  1267.       --  N_Subtype_Indication
  1268.       --  Sloc points to first token of subtype mark
  1269.       --  Subtype_Mark (Node4)
  1270.       --  Constraint (Node3)
  1271.       --  Etype (Node5-Sem)
  1272.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  1273.       --  Has_Dynamic_Itype (Flag14-Sem)
  1274.  
  1275.       --  Note: Etype is a copy of the Etype field of the Subtype_Mark. The
  1276.       --  reason for this redundancy is so that in a list of array index types,
  1277.       --  the Etype can be uniformly accessed to determine the subscript type.
  1278.       --  This means that no Itype is constructed for the actual subtype that
  1279.       --  is created by the subtype indication. If such an Itype is required,
  1280.       --  it is constructed in the context in which the indication appears.
  1281.  
  1282.       --  Note: First_Itype is always Empty and Has_Dynamic_Itype is always
  1283.       --  False, since no Itypes are ever associated with this node. The
  1284.       --  reason that these fields are present is simply to enable the
  1285.       --  declaration of the N_Has_Itypes subtype range.
  1286.  
  1287.       -------------------------
  1288.       -- 3.2.2  Subtype Mark --
  1289.       -------------------------
  1290.  
  1291.       --  SUBTYPE_MARK ::= subtype_NAME
  1292.  
  1293.       -----------------------
  1294.       -- 3.2.2  Constraint --
  1295.       -----------------------
  1296.  
  1297.       --  CONSTRAINT ::= SCALAR_CONSTRAINT | COMPOSITE_CONSTRAINT
  1298.  
  1299.       ------------------------------
  1300.       -- 3.2.2  Scalar Constraint --
  1301.       ------------------------------
  1302.  
  1303.       --  SCALAR_CONSTRAINT ::=
  1304.       --    RANGE_CONSTRAINT | DIGITS_CONSTRAINT | DELTA_CONSTRAINT
  1305.  
  1306.       ---------------------------------
  1307.       -- 3.2.2  Composite Constraint --
  1308.       ---------------------------------
  1309.  
  1310.       --  COMPOSITE_CONSTRAINT ::=
  1311.       --    INDEX_CONSTRAINT | DISCRIMINANT_CONSTRAINT
  1312.  
  1313.       -------------------------------
  1314.       -- 3.3.1  Object Declaration --
  1315.       -------------------------------
  1316.  
  1317.       --  OBJECT_DECLARATION ::=
  1318.       --    DEFINING_IDENTIFIER_LIST : [aliased] [constant]
  1319.       --      SUBTYPE_INDICATION [:= EXPRESSION];
  1320.       --  | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
  1321.       --      ARRAY_TYPE_DEFINITION [:= EXPRESSION];
  1322.       --  | SINGLE_TASK_DECLARATION
  1323.       --  | SINGLE_PROTECTED_DECLARATION
  1324.  
  1325.       --  Note: aliased is not permitted in Ada 83 mode
  1326.  
  1327.       --  The N_Object_Declaration node is only for the first two cases.
  1328.       --  Single task declaration is handled by P_Task (9.1)
  1329.       --  Single protected declaration is handled by P_protected (9.5)
  1330.  
  1331.       --  Although the syntax allows multiple identifiers in the list, the
  1332.       --  semantics is as though successive declarations were given with
  1333.       --  identical type definition and expression components. To simplify
  1334.       --  semantic processing, the parser represents a multiple declaration
  1335.       --  case as a sequence of single declarations, using the More_Ids and
  1336.       --  Prev_Ids flags to preserve the original source form as described
  1337.       --  in the section on "Handling of Defining Identifier Lists".
  1338.  
  1339.       --  Note: if a range check is required for the initialization
  1340.       --  expression then the Do_Range_Check flag is set in the Expression,
  1341.       --  with the check being done against the type given by the object
  1342.       --  definition, which is also the Etype of the defining identifier.
  1343.  
  1344.       --  N_Object_Declaration
  1345.       --  Sloc points to first identifier
  1346.       --  Defining_Identifier (Node1)
  1347.       --  Aliased_Present (Flag1) set if ALIASED appears
  1348.       --  Constant_Present (Flag17) set if CONSTANT appears
  1349.       --  Object_Definition (Node4) subtype indication/array type definition
  1350.       --  Expression (Node3) (set to Empty if not present)
  1351.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  1352.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  1353.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  1354.       --  Object_Definition_Itypes (Node5-Sem) (set to Empty if no Itypes)
  1355.       --  Has_Dynamic_Itype (Flag14-Sem)
  1356.       --  No_Default_Init (Flag7)
  1357.  
  1358.       -------------------------------------
  1359.       -- 3.3.1  Defining Identifier List --
  1360.       -------------------------------------
  1361.  
  1362.       --  DEFINING_IDENTIFIER_LIST ::=
  1363.       --    DEFINING_IDENTIFIER {, DEFINING_IDENTIFIER}
  1364.  
  1365.       -------------------------------
  1366.       -- 3.3.2  Number Declaration --
  1367.       -------------------------------
  1368.  
  1369.       --  NUMBER_DECLARATION ::=
  1370.       --    DEFINING_IDENTIFIER_LIST : constant := static_EXPRESSION;
  1371.  
  1372.       --  Although the syntax allows multiple identifiers in the list, the
  1373.       --  semantics is as though successive declarations were given with
  1374.       --  identical expressions. To simplify semantic processing, the parser
  1375.       --  represents a multiple declaration case as a sequence of single
  1376.       --  declarations, using the More_Ids and Prev_Ids flags to preserve
  1377.       --  the original source form as described in the section on "Handling
  1378.       --  of Defining Identifier Lists".
  1379.  
  1380.       --  N_Number_Declaration
  1381.       --  Sloc points to first identifier
  1382.       --  Defining_Identifier (Node1)
  1383.       --  Expression (Node3)
  1384.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  1385.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  1386.  
  1387.       ----------------------------------
  1388.       -- 3.4  Derived Type Definition --
  1389.       ----------------------------------
  1390.  
  1391.       --  DERIVED_TYPE_DEFINITION ::=
  1392.       --    [abstract] new parent_SUBTYPE_INDICATION [RECORD_EXTENSION_PART]
  1393.  
  1394.       --  Note: ABSTRACT, record extension part not permitted in Ada 83 mode
  1395.  
  1396.       --  Note: a record extension part is required if ABSTRACT is present
  1397.  
  1398.       --  N_Derived_Type_Definition
  1399.       --  Sloc points to NEW
  1400.       --  Abstract_Present (Flag4)
  1401.       --  Subtype_Indication (Node5)
  1402.       --  Record_Extension_Part (Node3) (set to Empty if not present)
  1403.  
  1404.       ---------------------------
  1405.       -- 3.5  Range Constraint --
  1406.       ---------------------------
  1407.  
  1408.       --  RANGE_CONSTRAINT ::= range RANGE
  1409.  
  1410.       --  N_Range_Constraint
  1411.       --  Sloc points to RANGE
  1412.       --  Range_Expression (Node4)
  1413.  
  1414.       ----------------
  1415.       -- 3.5  Range --
  1416.       ----------------
  1417.  
  1418.       --  RANGE ::=
  1419.       --    RANGE_ATTRIBUTE_REFERENCE
  1420.       --  | SIMPLE_EXPRESSION .. SIMPLE_EXPRESSION
  1421.  
  1422.       --  Note: the case of a range given as a range attribute reference
  1423.       --  appears directly in the tree as an attribute reference.
  1424.  
  1425.       --  Note: the field name for a reference to a range is Range_Expression
  1426.       --  rather than Range, because range is a reserved keyword in Ada!
  1427.  
  1428.       --  Note: the reason that this node has expression fields is that a
  1429.       --  range can appear as an operand of a membership test. The Etype
  1430.       --  field is the type of the range (we do NOT construct an implicit
  1431.       --  subtype to represent the range exactly).
  1432.  
  1433.       --  N_Range
  1434.       --  Sloc points to ..
  1435.       --  Low_Bound (Node1)
  1436.       --  High_Bound (Node2)
  1437.       --  plus fields for expression
  1438.  
  1439.       --  Note: if the range appears in a context, such as a subtype
  1440.       --  declaration, where range checks are required on one or both of
  1441.       --  the expression fields, then type conversion nodes are inserted
  1442.       --  to represent the required checks.
  1443.  
  1444.       ----------------------------------------
  1445.       -- 3.5.1  Enumeration Type Definition --
  1446.       ----------------------------------------
  1447.  
  1448.       --  ENUMERATION_TYPE_DEFINITION ::=
  1449.       --    (ENUMERATION_LITERAL_SPECIFICATION
  1450.       --      {, ENUMERATION_LITERAL_SPECIFICATION})
  1451.  
  1452.       --  Note: the Literals field in the node described below is null for
  1453.       --  the case of the standard types CHARACTER and WIDE_CHARACTER, for
  1454.       --  which special processing handles these types as special cases.
  1455.  
  1456.       --  N_Enumeration_Type_Definition
  1457.       --  Sloc points to left parenthesis
  1458.       --  Literals (List1) (Empty for CHARACTER or WIDE_CHARACTER)
  1459.  
  1460.       ----------------------------------------------
  1461.       -- 3.5.1  Enumeration Literal Specification --
  1462.       ----------------------------------------------
  1463.  
  1464.       --  ENUMERATION_LITERAL_SPECIFICATION ::=
  1465.       --    DEFINING_IDENTIFIER | DEFINING_CHARACTER_LITERAL
  1466.  
  1467.       ---------------------------------------
  1468.       -- 3.5.1  Defining Character Literal --
  1469.       ---------------------------------------
  1470.  
  1471.       --  DEFINING_CHARACTER_LITERAL ::= CHARACTER_LITERAL
  1472.  
  1473.       --  A defining character literal is an entity, which has additional
  1474.       --  fields depending on the setting of the Ekind field. These
  1475.       --  additional fields are defined (and access subprograms declared)
  1476.       --  in package Entity_Info.
  1477.  
  1478.       --  Note: N_Defining_Character_Literal is an extended node whose fields
  1479.       --  are deliberate layed out to match the layout of fields in an ordinary
  1480.       --  N_Character_Literal node allowing for easy alteration of a character
  1481.       --  literal node into a defining character literal node. For details, see
  1482.       --  Sinfo.CN.Change_Character_Literal_To_Defining_Character_Literal.
  1483.  
  1484.       --  N_Defining_Character_Literal
  1485.       --  Sloc points to literal
  1486.       --  Chars (Name1) contains the Name_Id for the identifier
  1487.       --  Next_Entity (Node2-Sem)
  1488.       --  Scope (Node3-Sem)
  1489.       --  Homonym (Node4-Sem)
  1490.       --  Etype (Node5-Sem)
  1491.  
  1492.       ------------------------------------
  1493.       -- 3.5.4  Integer Type Definition --
  1494.       ------------------------------------
  1495.  
  1496.       --  Note: there is an error in this rule in the latest version of the
  1497.       --  grammar, so we have retained the old rule pending clarification.
  1498.  
  1499.       --  INTEGER_TYPE_DEFINITION ::=
  1500.       --    SIGNED_INTEGER_TYPE_DEFINITION
  1501.       --    MODULAR_TYPE_DEFINITION
  1502.  
  1503.       -------------------------------------------
  1504.       -- 3.5.4  Signed Integer Type Definition --
  1505.       -------------------------------------------
  1506.  
  1507.       --  SIGNED_INTEGER_TYPE_DEFINITION ::=
  1508.       --    range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION
  1509.  
  1510.       --  Note: the Low_Bound and High_Bound fields are set to Empty for
  1511.       --  integer types defined in package Standard.
  1512.  
  1513.       --  N_Signed_Integer_Type_Definition
  1514.       --  Sloc points to RANGE
  1515.       --  Low_Bound (Node1)
  1516.       --  High_Bound (Node2)
  1517.  
  1518.       -----------------------------------------
  1519.       -- 3.5.4  Unsigned Range Specification --
  1520.       -----------------------------------------
  1521.  
  1522.       --  MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION
  1523.  
  1524.       --  N_Modular_Type_Definition
  1525.       --  Sloc points to MOD
  1526.       --  Expression (Node3)
  1527.  
  1528.       ---------------------------------
  1529.       -- 3.5.6  Real Type Definition --
  1530.       ---------------------------------
  1531.  
  1532.       --  REAL_TYPE_DEFINITION ::=
  1533.       --    FLOATING_POINT_DEFINITION | FIXED_POINT_DEFINITION
  1534.  
  1535.       --------------------------------------
  1536.       -- 3.5.7  Floating Point Definition --
  1537.       --------------------------------------
  1538.  
  1539.       --  FLOATING_POINT_DEFINITION ::=
  1540.       --    digits static_SIMPLE_EXPRESSION [REAL_RANGE_SPECIFICATION]
  1541.  
  1542.       --  Note: The Digits_Expression and Real_Range_Specifications fields
  1543.       --  are set to Empty for floating-point types declared in Standard.
  1544.  
  1545.       --  N_Floating_Point_Definition
  1546.       --  Sloc points to DIGITS
  1547.       --  Digits_Expression (Node2)
  1548.       --  Real_Range_Specification (Node4) (set to Empty if not present)
  1549.  
  1550.       -------------------------------------
  1551.       -- 3.5.7  Real Range Specification --
  1552.       -------------------------------------
  1553.  
  1554.       --  REAL_RANGE_SPECIFICATION ::=
  1555.       --    range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION
  1556.  
  1557.       --  N_Real_Range_Specification
  1558.       --  Sloc points to RANGE
  1559.       --  Low_Bound (Node1)
  1560.       --  High_Bound (Node2)
  1561.  
  1562.       -----------------------------------
  1563.       -- 3.5.9  Fixed Point Definition --
  1564.       -----------------------------------
  1565.  
  1566.       --  FIXED_POINT_DEFINITION ::=
  1567.       --    ORDINARY_FIXED_POINT_DEFINITION | DECIMAL_FIXED_POINT_DEFINITION
  1568.  
  1569.       --------------------------------------------
  1570.       -- 3.5.9  Ordinary Fixed Point Definition --
  1571.       --------------------------------------------
  1572.  
  1573.       --  ORDINARY_FIXED_POINT_DEFINITION ::=
  1574.       --    delta static_EXPRESSION REAL_RANGE_SPECIFICATION
  1575.  
  1576.       --  Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION
  1577.  
  1578.       --  Note: the Delta_Expression and Real_Range_Specification fields
  1579.       --  are set to Empty for fixed point types declared in Standard.
  1580.  
  1581.       --  N_Ordinary_Fixed_Point_Definition
  1582.       --  Sloc points to DELTA
  1583.       --  Delta_Expression (Node3)
  1584.       --  Real_Range_Specification (Node4)
  1585.  
  1586.       -------------------------------------------
  1587.       -- 3.5.9  Decimal Fixed Point Definition --
  1588.       -------------------------------------------
  1589.  
  1590.       --  DECIMAL_FIXED_POINT_DEFINITION ::=
  1591.       --    delta static_EXPRESSION
  1592.       --      digits static_EXPRESSION [REAL_RANGE_SPECIFICATION]
  1593.  
  1594.       --  Note: decimal types are not permitted in Ada 83 mode
  1595.  
  1596.       --  N_Decimal_Fixed_Point_Definition
  1597.       --  Sloc points to DELTA
  1598.       --  Delta_Expression (Node3)
  1599.       --  Digits_Expression (Node2)
  1600.       --  Real_Range_Specification (Node4) (set to Empty if not present)
  1601.  
  1602.       ------------------------------
  1603.       -- 3.5.9  Digits Constraint --
  1604.       ------------------------------
  1605.  
  1606.       --  DIGITS_CONSTRAINT ::=
  1607.       --    digits static_EXPRESSION [RANGE_CONSTRAINT]
  1608.  
  1609.       --  Note: in Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION
  1610.       --  Note: in Ada 95, reduced accuracy subtypes are obsolescent
  1611.  
  1612.       --  N_Digits_Constraint
  1613.       --  Sloc points to DIGITS
  1614.       --  Digits_Expression (Node2)
  1615.       --  Range_Constraint (Node4) (set to Empty if not present)
  1616.  
  1617.       --------------------------------
  1618.       -- 3.6  Array Type Definition --
  1619.       --------------------------------
  1620.  
  1621.       --  ARRAY_TYPE_DEFINITION ::=
  1622.       --    UNCONSTRAINED_ARRAY_DEFINITION | CONSTRAINED_ARRAY_DEFINITION
  1623.  
  1624.       -----------------------------------------
  1625.       -- 3.6  Unconstrained Array Definition --
  1626.       -----------------------------------------
  1627.  
  1628.       --  UNCONSTRAINED_ARRAY_DEFINITION ::=
  1629.       --    array (INDEX_SUBTYPE_DEFINITION {, INDEX_SUBTYPE_DEFINITION}) of
  1630.       --      COMPONENT_DEFINITION
  1631.  
  1632.       --  Note: dimensionality of array is indicated by number of entries in
  1633.       --  the Subtype_Marks list, which has one entry for each dimension.
  1634.  
  1635.       --  N_Unconstrained_Array_Definition
  1636.       --  Sloc points to ARRAY
  1637.       --  Subtype_Marks (List2)
  1638.       --  Aliased_Present (Flag1) from component definition
  1639.       --  Subtype_Indication (Node5) from component definition
  1640.  
  1641.       -----------------------------------
  1642.       -- 3.6  Index Subtype Definition --
  1643.       -----------------------------------
  1644.  
  1645.       --  INDEX_SUBTYPE_DEFINITION ::= SUBTYPE_MARK range <>
  1646.  
  1647.       --  There is no explicit node in the tree for an index subtype
  1648.       --  definition since the N_Unconstrained_Array_Definition node
  1649.       --  incorporates the type marks which appear in this context.
  1650.  
  1651.       ---------------------------------------
  1652.       -- 3.6  Constrained Array Definition --
  1653.       ---------------------------------------
  1654.  
  1655.       --  CONSTRAINED_ARRAY_DEFINITION ::=
  1656.       --    array (DISCRETE_SUBTYPE_DEFINITION
  1657.       --      {, DISCRETE_SUBTYPE_DEFINITION})
  1658.       --        of COMPONENT_DEFINITION
  1659.  
  1660.       --  Note: dimensionality of array is indicated by number of entries
  1661.       --  in the Discrete_Subtype_Definitions list, which has one entry
  1662.       --  for each dimension.
  1663.  
  1664.       --  N_Constrained_Array_Definition
  1665.       --  Sloc points to ARRAY
  1666.       --  Discrete_Subtype_Definitions (List2)
  1667.       --  Aliased_Present (Flag1) from component definition
  1668.       --  Subtype_Indication (Node5) from component definition
  1669.  
  1670.       --------------------------------------
  1671.       -- 3.6  Discrete Subtype Definition --
  1672.       --------------------------------------
  1673.  
  1674.       --  DISCRETE_SUBTYPE_DEFINITION ::=
  1675.       --    discrete_SUBTYPE_INDICATION | RANGE
  1676.  
  1677.       -------------------------------
  1678.       -- 3.6  Component Definition --
  1679.       -------------------------------
  1680.  
  1681.       --  COMPONENT_DEFINITION ::= [aliased] SUBTYPE_INDICATION
  1682.  
  1683.       --  There is no explicit node in the tree for a component definition.
  1684.       --  Instead the subtype indication appears directly, and the ALIASED
  1685.       --  indication (Aliased_Present flag) is in the parent node.
  1686.  
  1687.       --  Note: although the syntax does not permit a component definition to
  1688.       --  be an anonymous array (and the parser will diagnose such an attempt
  1689.       --  with an appropriate message), it is possible for anonymous arrays
  1690.       --  to appear as component definitions. The semantics and back end handle
  1691.       --  this case properly, and the expander in fact generates such cases.
  1692.  
  1693.       -----------------------------
  1694.       -- 3.6.1  Index Constraint --
  1695.       -----------------------------
  1696.  
  1697.       --  INDEX_CONSTRAINT ::= (DISCRETE_RANGE {, DISCRETE_RANGE})
  1698.  
  1699.       --  It is not in general possible to distinguish between discriminant
  1700.       --  constraints and index constraints at parse time, since a simple
  1701.       --  name could be either the subtype mark of a discrete range, or an
  1702.       --  expression in a discriminant association with no name. Either
  1703.       --  entry appears simply as the name, and the semantic parse must
  1704.       --  distinguish between the two cases. Thus we use a common tree
  1705.       --  node format for both of these constraint types.
  1706.  
  1707.       --  See Discriminant_Constraint for format of node
  1708.  
  1709.       ---------------------------
  1710.       -- 3.6.1  Discrete Range --
  1711.       ---------------------------
  1712.  
  1713.       --  DISCRETE_RANGE ::= discrete_SUBTYPE_INDICATION | RANGE
  1714.  
  1715.       ----------------------------
  1716.       -- 3.7  Discriminant Part --
  1717.       ----------------------------
  1718.  
  1719.       --  DISCRIMINANT_PART ::=
  1720.       --    UNKNOWN_DISCRIMINANT_PART | KNOWN_DISCRIMINANT_PART
  1721.  
  1722.       ------------------------------------
  1723.       -- 3.7  Unknown Discriminant Part --
  1724.       ------------------------------------
  1725.  
  1726.       --  UNKNOWN_DISCRIMINANT_PART ::= (<>)
  1727.  
  1728.       --  Note: unknown discriminant parts are not permitted in Ada 83 mode
  1729.  
  1730.       --  There is no explicit node in the tree for an unknown discriminant
  1731.       --  part. Instead the Unknown_Discriminants_Present flag is set in the
  1732.       --  parent node.
  1733.  
  1734.       ----------------------------------
  1735.       -- 3.7  Known Discriminant Part --
  1736.       ----------------------------------
  1737.  
  1738.       --  KNOWN_DISCRIMINANT_PART ::=
  1739.       --    (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION})
  1740.  
  1741.       -------------------------------------
  1742.       -- 3.7  Discriminant Specification --
  1743.       -------------------------------------
  1744.  
  1745.       --  DISCRIMINANT_SPECIFICATION ::=
  1746.       --    DEFINING_IDENTIFIER_LIST : SUBTYPE_MARK
  1747.       --      [:= DEFAULT_EXPRESSION]
  1748.       --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
  1749.       --      [:= DEFAULT_EXPRESSION]
  1750.  
  1751.       --  Although the syntax allows multiple identifiers in the list, the
  1752.       --  semantics is as though successive specifications were given with
  1753.       --  identical type definition and expression components. To simplify
  1754.       --  semantic processing, the parser represents a multiple declaration
  1755.       --  case as a sequence of single specifications, using the More_Ids and
  1756.       --  Prev_Ids flags to preserve the original source form as described
  1757.       --  in the section on "Handling of Defining Identifier Lists".
  1758.  
  1759.       --  N_Discriminant_Specification
  1760.       --  Sloc points to first identifier
  1761.       --  Defining_Identifier (Node1)
  1762.       --  Discriminant_Type (Node2) subtype mark or
  1763.       --    access parameter definition
  1764.       --  Expression (Node3) (set to Empty if no default expression)
  1765.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  1766.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  1767.  
  1768.       -----------------------------
  1769.       -- 3.7  Default Expression --
  1770.       -----------------------------
  1771.  
  1772.       --  DEFAULT_EXPRESSION ::= EXPRESSION
  1773.  
  1774.       ------------------------------------
  1775.       -- 3.7.1  Discriminant Constraint --
  1776.       ------------------------------------
  1777.  
  1778.       --  DISCRIMINANT_CONSTRAINT ::=
  1779.       --    (DISCRIMINANT_ASSOCIATION {, DISCRIMINANT_ASSOCIATION})
  1780.  
  1781.       --  It is not in general possible to distinguish between discriminant
  1782.       --  constraints and index constraints at parse time, since a simple
  1783.       --  name could be either the subtype mark of a discrete range, or an
  1784.       --  expression in a discriminant association with no name. Either
  1785.       --  entry appears simply as the name, and the semantic parse must
  1786.       --  distinguish between the two cases. Thus we use a common tree
  1787.       --  node format for both of these constraint types.
  1788.  
  1789.       --  N_Index_Or_Discriminant_Constraint
  1790.       --  Sloc points to left paren
  1791.       --  Constraints (List1) points to list of discrete ranges or
  1792.       --    discriminant associations
  1793.  
  1794.       -------------------------------------
  1795.       -- 3.7.1  Discriminant Association --
  1796.       -------------------------------------
  1797.  
  1798.       --  DISCRIMINANT_ASSOCIATION ::=
  1799.       --    [discriminant_SELECTOR_NAME
  1800.       --      {| discriminant_SELECTOR_NAME} =>] EXPRESSION
  1801.  
  1802.       --  Note: a discriminant association that has no selector name list
  1803.       --  appears directly as an expression in the tree.
  1804.  
  1805.       --  N_Discriminant_Association
  1806.       --  Sloc points to first token of discriminant association
  1807.       --  Selector_Names (List1) (always non-empty, since if no selector
  1808.       --   names are present, this node is not used, see comment above)
  1809.       --  Expression (Node3)
  1810.  
  1811.       ---------------------------------
  1812.       -- 3.8  Record Type Definition --
  1813.       ---------------------------------
  1814.  
  1815.       --  RECORD_TYPE_DEFINITION ::=
  1816.       --    [[abstract] tagged] [limited] RECORD_DEFINITION
  1817.  
  1818.       --  Note: ABSTRACT, TAGGED, LIMITED are not permitted in Ada 83 mode
  1819.  
  1820.       --  There is no explicit node in the tree for a record type definition.
  1821.       --  Instead the flags for Tagged_Present and Limited_Present appear in
  1822.       --  the N_Record_Definition node for a record definition appearing in
  1823.       --  the context of a record type definition.
  1824.  
  1825.       ----------------------------
  1826.       -- 3.8  Record Definition --
  1827.       ----------------------------
  1828.  
  1829.       --  RECORD_DEFINITION ::=
  1830.       --    record
  1831.       --      COMPONENT_LIST
  1832.       --    end record
  1833.       --  | null record
  1834.  
  1835.       --  Note: the Abstract_Present, Tagged_Present and Limited_Present
  1836.       --  flags appear only for a record definition appearing in a record
  1837.       --  type definition.
  1838.  
  1839.       --  Note: the NULL RECORD case is not permitted in Ada 83
  1840.  
  1841.       --  N_Record_Definition
  1842.       --  Sloc points to RECORD or NULL
  1843.       --  Abstract_Present (Flag4)
  1844.       --  Tagged_Present (Flag1)
  1845.       --  Limited_Present (Flag17)
  1846.       --  Component_List (Node1) empty in null record case
  1847.       --  Null_Present (Flag3) set in null record case
  1848.  
  1849.       -------------------------
  1850.       -- 3.8  Component List --
  1851.       -------------------------
  1852.  
  1853.       --  COMPONENT_LIST ::=
  1854.       --    COMPONENT_ITEM {COMPONENT_ITEM}
  1855.       --  | {COMPONENT_ITEM} VARIANT_PART
  1856.       --  | null;
  1857.  
  1858.       --  N_Component_List
  1859.       --  Sloc points to first token of component list
  1860.       --  Component_Items (List3)
  1861.       --  Variant_Part (Node4) (set to Empty if no variant part)
  1862.       --  Null_Present (Flag3)
  1863.  
  1864.       -------------------------
  1865.       -- 3.8  Component Item --
  1866.       -------------------------
  1867.  
  1868.       --  COMPONENT_ITEM ::= COMPONENT_DECLARATION | REPRESENTATION_CLAUSE
  1869.  
  1870.       --------------------------------
  1871.       -- 3.8  Component Declaration --
  1872.       --------------------------------
  1873.  
  1874.       --  COMPONENT_DECLARATION ::=
  1875.       --    DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION
  1876.       --      [:= DEFAULT_EXPRESSION]
  1877.  
  1878.       --  Note: although the syntax does not permit a component definition to
  1879.       --  be an anonymous array (and the parser will diagnose such an attempt
  1880.       --  with an appropriate message), it is possible for anonymous arrays
  1881.       --  to appear as component definitions. The semantics and back end handle
  1882.       --  this case properly, and the expander in fact generates such cases.
  1883.  
  1884.       --  Although the syntax allows multiple identifiers in the list, the
  1885.       --  semantics is as though successive declarations were given with the
  1886.       --  same component definition and expression components. To simplify
  1887.       --  semantic processing, the parser represents a multiple declaration
  1888.       --  case as a sequence of single declarations, using the More_Ids and
  1889.       --  Prev_Ids flags to preserve the original source form as described
  1890.       --  in the section on "Handling of Defining Identifier Lists".
  1891.  
  1892.       --  N_Component_Declaration
  1893.       --  Sloc points to identifier
  1894.       --  Defining_Identifier (Node1)
  1895.       --  Aliased_Present (Flag1) from component definition
  1896.       --  Subtype_Indication (Node5) from component definition
  1897.       --  Expression (Node3) (set to Empty if no default expression)
  1898.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  1899.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  1900.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  1901.       --  Has_Dynamic_Itype (Flag14-Sem)
  1902.  
  1903.       -------------------------
  1904.       -- 3.8.1  Variant Part --
  1905.       -------------------------
  1906.  
  1907.       --  VARIANT_PART ::=
  1908.       --    case discriminant_DIRECT_NAME is
  1909.       --      VARIANT
  1910.       --      {VARIANT}
  1911.       --    end case;
  1912.  
  1913.       --  N_Variant_Part
  1914.       --  Sloc points to CASE
  1915.       --  Name (Node2)
  1916.       --  Variants (List1)
  1917.  
  1918.       --------------------
  1919.       -- 3.8.1  Variant --
  1920.       --------------------
  1921.  
  1922.       --  VARIANT ::=
  1923.       --    when DISCRETE_CHOICE_LIST =>
  1924.       --      COMPONENT_LIST
  1925.  
  1926.       --  N_Variant
  1927.       --  Sloc points to WHEN
  1928.       --  Discrete_Choices (List4)
  1929.       --  Component_List (Node1)
  1930.       --  Enclosing_Variant (Node2-Sem)
  1931.  
  1932.       ---------------------------------
  1933.       -- 3.8.1  Discrete Choice List --
  1934.       ---------------------------------
  1935.  
  1936.       --  DISCRETE_CHOICE_LIST ::= DISCRETE_CHOICE {| DISCRETE_CHOICE}
  1937.  
  1938.       ----------------------------
  1939.       -- 3.8.1  Discrete Choice --
  1940.       ----------------------------
  1941.  
  1942.       --  DISCRETE_CHOICE ::= EXPRESSION | DISCRETE_RANGE | others
  1943.  
  1944.       --  Note: in Ada 83 mode, the expression must be a simple expression
  1945.  
  1946.       --  The only choice that appears explicitly is the OTHERS choice, as
  1947.       --  defined here. Other cases of discrete choice (expression and
  1948.       --  discrete range) appear directly. This production is also used
  1949.       --  for the OTHERS possibility of an exception choice.
  1950.  
  1951.       --  Note: in accordance with the syntax, the parser does not check that
  1952.       --  OTHERS appears at the end on its own in a choice list context. This
  1953.       --  is a semantic check.
  1954.  
  1955.       --  N_Others_Choice
  1956.       --  Sloc points to OTHERS
  1957.       --  Others_Discrete_Choices (List1-Sem)
  1958.  
  1959.       ----------------------------------
  1960.       -- 3.9.1  Record Extension Part --
  1961.       ----------------------------------
  1962.  
  1963.       --  RECORD_EXTENSION_PART ::= with RECORD_DEFINITION
  1964.  
  1965.       --  Note: record extension parts are not permitted in Ada 83 mode
  1966.  
  1967.       ----------------------------------
  1968.       -- 3.10  Access Type Definition --
  1969.       ----------------------------------
  1970.  
  1971.       --  ACCESS_TYPE_DEFINITION ::=
  1972.       --    ACCESS_TO_OBJECT_DEFINITION
  1973.       --  | ACCESS_TO_SUBPROGRAM_DEFINITION
  1974.  
  1975.       ---------------------------------------
  1976.       -- 3.10  Access To Object Definition --
  1977.       ---------------------------------------
  1978.  
  1979.       --  ACCESS_TO_OBJECT_DEFINITION ::=
  1980.       --    access [GENERAL_ACCESS_MODIFIER] SUBTYPE_INDICATION
  1981.  
  1982.       --  N_Access_To_Object_Definition
  1983.       --  Sloc points to ACCESS
  1984.       --  All_Present (Flag1)
  1985.       --  Subtype_Indication (Node5)
  1986.       --  Constant_Present (Flag17)
  1987.  
  1988.       -----------------------------------
  1989.       -- 3.10  General Access Modifier --
  1990.       -----------------------------------
  1991.  
  1992.       --  GENERAL_ACCESS_MODIFIER ::= all | constant
  1993.  
  1994.       --  Note: general access modifiers are not permitted in Ada 83 mode
  1995.  
  1996.       --  There is no explicit node in the tree for general access modifier.
  1997.       --  Instead the All_Present or Constant_Present flags are set in the
  1998.       --  parent node.
  1999.  
  2000.       -------------------------------------------
  2001.       -- 3.10  Access To Subprogram Definition --
  2002.       -------------------------------------------
  2003.  
  2004.       --  ACCESS_TO_SUBPROGRAM_DEFINITION
  2005.       --    access [protected] procedure PARAMETER_PROFILE
  2006.       --  | access [protected] function PARAMETER_AND_RESULT_PROFILE
  2007.  
  2008.       --  Note: access to subprograms are not permitted in Ada 83 mode
  2009.  
  2010.       --  N_Access_Function_Definition
  2011.       --  Sloc points to ACCESS
  2012.       --  Protected_Present (Flag1)
  2013.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2014.       --  Has_Dynamic_Itype (Flag14-Sem)
  2015.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  2016.       --  Subtype_Mark (Node4) result subtype
  2017.  
  2018.       --  N_Access_Procedure_Definition
  2019.       --  Sloc points to ACCESS
  2020.       --  Protected_Present (Flag1)
  2021.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2022.       --  Has_Dynamic_Itype (Flag14-Sem)
  2023.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  2024.  
  2025.       -----------------------------
  2026.       -- 3.10  Access Definition --
  2027.       -----------------------------
  2028.  
  2029.       --  ACCESS_DEFINITION ::= access SUBTYPE_MARK
  2030.  
  2031.       --  N_Access_Definition
  2032.       --  Sloc points to ACCESS
  2033.       --  Subtype_Mark (Node4)
  2034.  
  2035.       -----------------------------------------
  2036.       -- 3.10.1  Incomplete Type Declaration --
  2037.       -----------------------------------------
  2038.  
  2039.       --  INCOMPLETE_TYPE_DECLARATION ::=
  2040.       --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART];
  2041.  
  2042.       --  N_Incomplete_Type_Declaration
  2043.       --  Sloc points to TYPE
  2044.       --  Defining_Identifier (Node1)
  2045.       --  Discriminant_Specifications (List4) (set to No_List if no
  2046.       --   discriminant part, or if the discriminant part is an
  2047.       --   unknown discriminant part)
  2048.       --  Unknown_Discriminants_Present (Flag3) set if (<>) discriminant
  2049.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2050.       --  Has_Dynamic_Itype (Flag14-Sem)
  2051.  
  2052.       ----------------------------
  2053.       -- 3.11  Declarative Part --
  2054.       ----------------------------
  2055.  
  2056.       --  DECLARATIVE_PART ::= {DECLARATIVE_ITEM}
  2057.  
  2058.       --  Note: although the parser enforces the syntactic requirement that
  2059.       --  a declarative part can contain only declarations, the semantic
  2060.       --  processing may add statements to the list of actions in a
  2061.       --  declarative part, so the code generator should be prepared
  2062.       --  to accept a statement in this position.
  2063.  
  2064.       ----------------------------
  2065.       -- 3.11  Declarative Item --
  2066.       ----------------------------
  2067.  
  2068.       --  DECLARATIVE_ITEM ::= BASIC_DECLARATIVE_ITEM | BODY
  2069.  
  2070.       ----------------------------------
  2071.       -- 3.11  Basic Declarative Item --
  2072.       ----------------------------------
  2073.  
  2074.       --  BASIC_DECLARATIVE_ITEM ::=
  2075.       --    BASIC_DECLARATION | REPRESENTATION_CLAUSE | USE_CLAUSE
  2076.  
  2077.       ----------------
  2078.       -- 3.11  Body --
  2079.       ----------------
  2080.  
  2081.       --  BODY ::= PROPER_BODY | BODY_STUB
  2082.  
  2083.       -----------------------
  2084.       -- 3.11  Proper Body --
  2085.       -----------------------
  2086.  
  2087.       --  PROPER_BODY ::=
  2088.       --    SUBPROGRAM_BODY | PACKAGE_BODY | TASK_BODY | PROTECTED_BODY
  2089.  
  2090.       ---------------
  2091.       -- 4.1  Name --
  2092.       ---------------
  2093.  
  2094.       --  NAME ::=
  2095.       --    DIRECT_NAME        | EXPLICIT_DEREFERENCE
  2096.       --  | INDEXED_COMPONENT  | SLICE
  2097.       --  | SELECTED_COMPONENT | ATTRIBUTE_REFERENCE
  2098.       --  | TYPE_CONVERSION    | FUNCTION_CALL
  2099.       --  | CHARACTER_LITERAL
  2100.  
  2101.       ----------------------
  2102.       -- 4.1  Direct Name --
  2103.       ----------------------
  2104.  
  2105.       --  DIRECT_NAME ::= IDENTIFIER | OPERATOR_SYMBOL
  2106.  
  2107.       -----------------
  2108.       -- 4.1  Prefix --
  2109.       -----------------
  2110.  
  2111.       --  PREFIX ::= NAME | IMPLICIT_DEREFERENCE
  2112.  
  2113.       -------------------------------
  2114.       -- 4.1  Explicit Dereference --
  2115.       -------------------------------
  2116.  
  2117.       --  EXPLICIT_DEREFERENCE ::= NAME . all
  2118.  
  2119.       --  N_Explicit_Dereference
  2120.       --  Sloc points to ALL
  2121.       --  Prefix (Node3)
  2122.       --  Do_Access_Check (Flag11-Sem)
  2123.       --  plus fields for expression
  2124.  
  2125.       -------------------------------
  2126.       -- 4.1  Implicit Dereference --
  2127.       -------------------------------
  2128.  
  2129.       --  IMPLICIT_DEREFERENCE ::= NAME
  2130.  
  2131.       ------------------------------
  2132.       -- 4.1.1  Indexed Component --
  2133.       ------------------------------
  2134.  
  2135.       --  INDEXED_COMPONENT ::= PREFIX (EXPRESSION {, EXPRESSION})
  2136.  
  2137.       --  Note: the parser may generate this node in some situations where it
  2138.       --  should be a function call. The semantic  pass must correct this
  2139.       --  misidentification (which is inevitable at the parser level).
  2140.  
  2141.       --  N_Indexed_Component
  2142.       --  Sloc points to first token of prefix
  2143.       --  Prefix (Node3)
  2144.       --  Expressions (List1)
  2145.       --  Do_Access_Check (Flag11-Sem)
  2146.       --  plus fields for expression
  2147.  
  2148.       --  Note: if any of the subscripts requires a range check, then the
  2149.       --  Do_Range_Check flag is set on the corresponding expression, with
  2150.       --  the index type being determined from the type of the Prefix, which
  2151.       --  references the array being indexed.
  2152.  
  2153.       ------------------
  2154.       -- 4.1.2  Slice --
  2155.       ------------------
  2156.  
  2157.       --  SLICE ::= PREFIX (DISCRETE_RANGE)
  2158.  
  2159.       --  Note: an implicit subtype is created to describe the resulting
  2160.       --  type, so that the bounds of this type are the bounds of the slice.
  2161.  
  2162.       --  N_Slice
  2163.       --  Sloc points to first token of prefix
  2164.       --  Prefix (Node3)
  2165.       --  Discrete_Range (Node4)
  2166.       --  Do_Access_Check (Flag11-Sem)
  2167.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2168.       --  Has_Dynamic_Itype (Flag14-Sem)
  2169.       --  plus fields for expression
  2170.  
  2171.       -------------------------------
  2172.       -- 4.1.3  Selected Component --
  2173.       -------------------------------
  2174.  
  2175.       --  SELECTED_COMPONENT ::= PREFIX . SELECTOR_NAME
  2176.  
  2177.       --  Note: selected components that are semantically expanded names get
  2178.       --  changed during semantic processing into the separate N_Expanded_Name
  2179.       --  node. See description of this node in the section on semantic nodes.
  2180.  
  2181.       --  N_Selected_Component
  2182.       --  Sloc points to period
  2183.       --  Prefix (Node3)
  2184.       --  Selector_Name (Node2)
  2185.       --  Do_Access_Check (Flag11-Sem)
  2186.       --  Do_Discriminant_Check (Flag3-Sem)
  2187.       --  plus fields for expression
  2188.  
  2189.       --------------------------
  2190.       -- 4.1.3  Selector Name --
  2191.       --------------------------
  2192.  
  2193.       --  SELECTOR_NAME ::= IDENTIFIER | CHARACTER_LITERAL | OPERATOR_SYMBOL
  2194.  
  2195.       --------------------------------
  2196.       -- 4.1.4  Attribute Reference --
  2197.       --------------------------------
  2198.  
  2199.       --  ATTRIBUTE_REFERENCE ::= PREFIX ' ATTRIBUTE_DESIGNATOR
  2200.  
  2201.       --  Note: the syntax is quite ambiguous at this point. Consider:
  2202.  
  2203.       --    A'Length (X)  X is part of the attribute designator
  2204.       --    A'Pos (X)     X is an explicit actual parameter of function A'Pos
  2205.       --    A'Class (X)   X is the expression of a type conversion
  2206.  
  2207.       --  It would be possible for the parser to distinguish these cases
  2208.       --  by looking at the attribute identifier. However, that would mean
  2209.       --  more work in introducing new implementation defined attributes,
  2210.       --  and also it would mean that special processing for attributes
  2211.       --  would be scattered around, instead of being centralized in the
  2212.       --  semantic routine that handles an N_Attribute_Reference node.
  2213.       --  Consequently, the parser in all the above cases stores the
  2214.       --  expression (X in these examples) as a single element list in
  2215.       --  in the Expressions field of the N_Attribute_Reference node.
  2216.  
  2217.       --  Similarly, for attributes like Max which take two arguments,
  2218.       --  we store the two arguments as a two element list in the
  2219.       --  Expressions field. Of course it is clear at parse time that
  2220.       --  this case is really a function call with an attribute as the
  2221.       --  prefix, but it turns out to be convenient to handle the two
  2222.       --  argument case in a similar manner to the one argument case,
  2223.       --  and indeed in general the parser will accept any number of
  2224.       --  expressions in this position and store them as a list in the
  2225.       --  attribute reference node. This allows for future addition of
  2226.       --  attributes that take more than two arguments.
  2227.  
  2228.       --  Note: named associates are not permitted in function calls where
  2229.       --  the function is an attribute (see RM 6.4(3)) so it is legitimate
  2230.       --  to skip the normal subprogram argument processing.
  2231.  
  2232.       --  Note: for the attributes whose designators are technically keywords,
  2233.       --  i.e. digits, access, delta, range, the Chars field contains the
  2234.       --  corresponding name, even though no identifier is involved.
  2235.  
  2236.       --  See Sem_Attr for a complete description of which attributes are
  2237.       --  passed onto Gigi, and which are handled entirely by the front end.
  2238.  
  2239.       --  N_Attribute_Reference
  2240.       --  Sloc points to apostrophe
  2241.       --  Prefix (Node3)
  2242.       --  Attribute_Name (Name2) identifier name from attribute designator
  2243.       --  Expressions (List1) (set to No_List if no associated expressions)
  2244.       --  Entity (Node4-Sem) used if the attribute yields a type
  2245.       --  Do_Access_Check (Flag11-Sem)
  2246.       --  Do_Overflow_Check (Flag17-Sem)
  2247.       --  plus fields for expression
  2248.  
  2249.       ---------------------------------
  2250.       -- 4.1.4  Attribute Designator --
  2251.       ---------------------------------
  2252.  
  2253.       --  ATTRIBUTE_DESIGNATOR ::=
  2254.       --    IDENTIFIER [(static_EXPRESSION)]
  2255.       --  | access | delta | digits
  2256.  
  2257.       --  There is no explicit node in the tree for an attribute designator.
  2258.       --  Instead the Chars and Expressions fields of the parent node
  2259.       --  (N_Attribute_Reference node) hold the information.
  2260.  
  2261.       --  Note: if ACCESS, DELTA or DIGITS appears in an attribute
  2262.       --  designator, then they are treated as identifiers internally
  2263.       --  rather than the keywords of the same name.
  2264.  
  2265.       --------------------------------------
  2266.       -- 4.1.4  Range Attribute Reference --
  2267.       --------------------------------------
  2268.  
  2269.       --  RANGE_ATTRIBUTE_REFERENCE ::= PREFIX ' RANGE_ATTRIBUTE_DESIGNATOR
  2270.  
  2271.       --  A range attribute reference is represented in the tree using the
  2272.       --  normal N_Attribute_Reference node.
  2273.  
  2274.       ---------------------------------------
  2275.       -- 4.1.4  Range Attribute Designator --
  2276.       ---------------------------------------
  2277.  
  2278.       --  RANGE_ATTRIBUTE_DESIGNATOR ::= Range [(static_EXPRESSION)]
  2279.  
  2280.       --  A range attribute designator is represented in the tree using the
  2281.       --  normal N_Attribute_Reference node.
  2282.  
  2283.       --------------------
  2284.       -- 4.3  Aggregate --
  2285.       --------------------
  2286.  
  2287.       --  AGGREGATE ::=
  2288.       --    RECORD_AGGREGATE | EXTENSION_AGGREGATE | ARRAY_AGGREGATE
  2289.  
  2290.       -----------------------------
  2291.       -- 4.3.1  Record Aggregate --
  2292.       -----------------------------
  2293.  
  2294.       --  RECORD_AGGREGATE ::= (RECORD_COMPONENT_ASSOCIATION_LIST)
  2295.  
  2296.       --  N_Aggregate
  2297.       --  Sloc points to left parenthesis
  2298.       --  Expressions (List1) (set to No_List if none or null record case)
  2299.       --  Component_Associations (List4) (set to No_List if none)
  2300.       --  Null_Record_Present (Flag17)
  2301.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2302.       --  Aggregate_Bounds (Node3-Sem)
  2303.       --  Has_Dynamic_Itype (Flag14-Sem)
  2304.       --  plus fields for expression
  2305.  
  2306.       --  Note: this structure is used for both record and array aggregates
  2307.       --  since the two cases are not separable by the parser. The parser
  2308.       --  makes no attempt to enforce consistency here, so it is up to the
  2309.       --  semantic phase to make sure that the aggregate is consistent (i.e.
  2310.       --  that it is not a "half-and-half" case that mixes record and array
  2311.       --  syntax. In particular, for a record aggregate, the expressions
  2312.       --  field will be set if there are positional associations.
  2313.  
  2314.       ----------------------------------------------
  2315.       -- 4.3.1  Record Component Association List --
  2316.       ----------------------------------------------
  2317.  
  2318.       --  RECORD_COMPONENT_ASSOCIATION_LIST ::=
  2319.       --     RECORD_COMPONENT_ASSOCIATION {, RECORD_COMPONENT_ASSOCIATION}
  2320.       --   | null record
  2321.  
  2322.       --  There is no explicit node in the tree for a record component
  2323.       --  association list. Instead the Null_Record_Present flag is set in
  2324.       --  the parent node for the NULL RECORD case.
  2325.  
  2326.       ------------------------------------------------------
  2327.       -- 4.3.1  Record Component Association (also 4.3.3) --
  2328.       ------------------------------------------------------
  2329.  
  2330.       --  RECORD_COMPONENT_ASSOCIATION ::=
  2331.       --    [COMPONENT_CHOICE_LIST =>] EXPRESSION
  2332.  
  2333.       --  N_Component_Association
  2334.       --  Sloc points to first selector name
  2335.       --  Choices (List1)
  2336.       --  Expression (Node3)
  2337.  
  2338.       --  Note: this structure is used for both record component associations
  2339.       --  and array component associations, since the two cases aren't always
  2340.       --  separable by the parser. The choices list may represent either a
  2341.       --  list of selector names in the record aggregate case, or a list of
  2342.       --  discrete choices in the array aggregate case or an N_Others_Choice
  2343.       --  node (which appears as a singleton list).
  2344.  
  2345.       ------------------------------------
  2346.       --  4.3.1  Commponent Choice List --
  2347.       ------------------------------------
  2348.  
  2349.       --  COMPONENT_CHOICE_LIST ::=
  2350.       --    component_SELECTOR_NAME {| component_SELECTOR_NAME}
  2351.       --  | others
  2352.  
  2353.       --  The entries of a component choice list appear in the Choices list
  2354.       --  of the associated N_Component_Association, as either selector
  2355.       --  names, or as an N_Others_Choice node.
  2356.  
  2357.       --------------------------------
  2358.       -- 4.3.2  Extension Aggregate --
  2359.       --------------------------------
  2360.  
  2361.       --  EXTENSION_AGGREGATE ::=
  2362.       --    (ANCESTOR_PART with RECORD_COMPONENT_ASSOCIATION_LIST)
  2363.  
  2364.       --  Note: extension aggregates are not permitted in Ada 83 mode
  2365.  
  2366.       --  N_Extension_Aggregate
  2367.       --  Sloc points to left parenthesis
  2368.       --  Ancestor_Part (Node3)
  2369.       --  Expressions (List1) (set to No_List if none or null record case)
  2370.       --  Component_Associations (List4) (set to No_List if none)
  2371.       --  Null_Record_Present (Flag17)
  2372.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2373.       --  Has_Dynamic_Itype (Flag14-Sem)
  2374.       --  plus fields for expression
  2375.  
  2376.       --------------------------
  2377.       -- 4.3.2  Ancestor Part --
  2378.       --------------------------
  2379.  
  2380.       --  ANCESTOR_PART ::= EXPRESSION | SUBTYPE_MARK
  2381.  
  2382.       ----------------------------
  2383.       -- 4.3.3  Array Aggregate --
  2384.       ----------------------------
  2385.  
  2386.       --  ARRAY_AGGREGATE ::=
  2387.       --    POSITIONAL_ARRAY_AGGREGATE | NAMED_ARRAY_AGGREGATE
  2388.  
  2389.       ---------------------------------------
  2390.       -- 4.3.3  Positional Array Aggregate --
  2391.       ---------------------------------------
  2392.  
  2393.       --  POSITIONAL_ARRAY_AGGREGATE ::=
  2394.       --    (EXPRESSION, EXPRESSION {, EXPRESSION})
  2395.       --  | (EXPRESSION {, EXPRESSION}, others => EXPRESSION)
  2396.  
  2397.       --  See Record_Aggregate (4.3.1) for node structure
  2398.  
  2399.       ----------------------------------
  2400.       -- 4.3.3  Named Array Aggregate --
  2401.       ----------------------------------
  2402.  
  2403.       --  NAMED_ARRAY_AGGREGATE ::=
  2404.       --  | (ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION})
  2405.  
  2406.       --  See Record_Aggregate (4.3.1) for node structure
  2407.  
  2408.       ----------------------------------------
  2409.       -- 4.3.3  Array Component Association --
  2410.       ----------------------------------------
  2411.  
  2412.       --  ARRAY_COMPONENT_ASSOCIATION ::=
  2413.       --    DISCRETE_CHOICE_LIST => EXPRESSION
  2414.  
  2415.       --  See Record_Component_Association (4.3.1) for node structure
  2416.  
  2417.       --------------------------------------------------
  2418.       -- 4.4  Expression/Relation/Term/Factor/Primary --
  2419.       --------------------------------------------------
  2420.  
  2421.       --  EXPRESSION ::=
  2422.       --    RELATION {and RELATION} | RELATION {and then RELATION}
  2423.       --  | RELATION {or RELATION}  | RELATION {or else RELATION}
  2424.       --  | RELATION {xor RELATION}
  2425.  
  2426.       --  RELATION ::=
  2427.       --    SIMPLE_EXPRESSION [RELATIONAL_OPERATOR SIMPLE_EXPRESSION]
  2428.       --  | SIMPLE_EXPRESSION [not] in RANGE
  2429.       --  | SIMPLE_EXPRESSION [not] in SUBTYPE_MARK
  2430.  
  2431.       --  SIMPLE_EXPRESSION ::=
  2432.       --    [UNARY_ADDING_OPERATOR] TERM {BINARY_ADDING_OPERATOR TERM}
  2433.  
  2434.       --  TERM ::= FACTOR {MULTIPLYING_OPERATOR FACTOR}
  2435.  
  2436.       --  FACTOR ::= PRIMARY [** PRIMARY] | abs PRIMARY | not PRIMARY
  2437.  
  2438.       --  No nodes are generated for any of these constructs. Instead, the
  2439.       --  node for the operator appears directly. When we refer to an
  2440.       --  expression in this description, we mean any of the possible
  2441.       --  consistuent components of an expression (e.g. identifier is
  2442.       --  an example of an expression).
  2443.  
  2444.       ------------------
  2445.       -- 4.4  Primary --
  2446.       ------------------
  2447.  
  2448.       --  PRIMARY ::=
  2449.       --    NUMERIC_LITERAL  | null
  2450.       --  | STRING_LITERAL   | AGGREGATE
  2451.       --  | NAME             | QUALIFIED_EXPRESSION
  2452.       --  | ALLOCATOR        | (EXPRESSION)
  2453.  
  2454.       --  Usually there is no explicit node in the tree for primary. Instead
  2455.       --  the constituent (e.g. AGGREGATE) appears directly. There are two
  2456.       --  exceptions. First, there is an explicit node for a null primary.
  2457.  
  2458.       --  N_Null
  2459.       --  Sloc points to NULL
  2460.       --  plus fields for expression
  2461.  
  2462.       --  Second, the case of (EXPRESSION) is handled specially. Ada requires
  2463.       --  that the parser keep track of which subexpressions are enclosed
  2464.       --  in parentheses, and how many levels of parentheses are used. This
  2465.       --  information is required for optimization purposes, and also for
  2466.       --  some semantic checks (e.g. (((1))) in a procedure spec does not
  2467.       --  conform with ((((1)))) in the body).
  2468.  
  2469.       --  The parentheses are recorded by keeping a Paren_Count field in every
  2470.       --  subexpression node (it is actually present in all nodes, but only
  2471.       --  used in subexpression nodes). This count records the number of
  2472.       --  levels of parentheses. If the number of levels in the source exceeds
  2473.       --  the maximum accomodated by this count, then the count is simply left
  2474.       --  at the maximum value. This means that there are some pathalogical
  2475.       --  cases of failure to detect conformance failures (e.g. an expression
  2476.       --  with 500 levels of parens will conform with one with 501 levels),
  2477.       --  but we do not need to lose sleep over this.
  2478.  
  2479.       --  Historical note: in versions of GNAT prior to 1.75, there was a node
  2480.       --  type N_Parenthesized_Expression used to accurately record unlimited
  2481.       --  numbers of levels of parentheses. However, it turned out to be a
  2482.       --  real nuisance to have to take into account the possible presence of
  2483.       --  this node during semantic analysis, since basically parentheses have
  2484.       --  zero relevance to semantic analysis.
  2485.  
  2486.       --  Note: the level of parentheses always present in things like
  2487.       --  aggregates does not count, only the parentheses in the primary
  2488.       --  (EXPRESSION) affect the setting of the Paren_Count field.
  2489.  
  2490.       --------------------------------------
  2491.       -- 4.5  Short Circuit Control Forms --
  2492.       --------------------------------------
  2493.  
  2494.       --  EXPRESSION ::=
  2495.       --    RELATION {and then RELATION} | RELATION {or else RELATION}
  2496.  
  2497.       --  N_And_Then
  2498.       --  Sloc points to AND of AND THEN
  2499.       --  Left_Opnd (Node2)
  2500.       --  Right_Opnd (Node3)
  2501.       --  Actions (List1-Sem)
  2502.       --  plus fields for expression
  2503.  
  2504.       --  N_Or_Else
  2505.       --  Sloc points to OR of OR ELSE
  2506.       --  Left_Opnd (Node2)
  2507.       --  Right_Opnd (Node3)
  2508.       --  Actions (List1-Sem)
  2509.       --  plus fields for expression
  2510.  
  2511.       ---------------------------
  2512.       -- 4.5  Membership Tests --
  2513.       ---------------------------
  2514.  
  2515.       --  RELATION ::=
  2516.       --    SIMPLE_EXPRESSION [not] in RANGE
  2517.       --  | SIMPLE_EXPRESSION [not] in SUBTYPE_MARK
  2518.  
  2519.       --  N_In
  2520.       --  Sloc points to IN
  2521.       --  Left_Opnd (Node2)
  2522.       --  Right_Opnd (Node3)
  2523.       --  plus fields for expression
  2524.  
  2525.       --  N_Not_In
  2526.       --  Sloc points to NOT of NOT IN
  2527.       --  Left_Opnd (Node2)
  2528.       --  Right_Opnd (Node3)
  2529.       --  plus fields for expression
  2530.  
  2531.       --------------------
  2532.       -- 4.5  Operators --
  2533.       --------------------
  2534.  
  2535.       --  LOGICAL_OPERATOR             ::=  and | or  | xor
  2536.  
  2537.       --  RELATIONAL_OPERATOR          ::=  =   | /=  | <   | <= | > | >=
  2538.  
  2539.       --  BINARY_ADDING_OPERATOR       ::=  +   |  -  | &
  2540.  
  2541.       --  UNARY_ADDING_OPERATOR        ::=  +   |  -
  2542.  
  2543.       --  MULTIPLYING_OPERATOR         ::=  *   |  /  | mod | rem
  2544.  
  2545.       --  HIGHEST_PRECEDENCE_OPERATOR  ::=  **  | abs | not
  2546.  
  2547.       --  Sprint syntax if Treat_Fixed_As_Integer is set:
  2548.  
  2549.       --     x #* y
  2550.       --     x #/ y
  2551.       --     x #mod y
  2552.       --     x #rem y
  2553.  
  2554.       --  Note: For the operators * / mod rem with fixed-point operands, Gigi
  2555.       --  will only be given nodes with the Treat_Fixed_As_Integer flag set.
  2556.       --  All handling of smalls for multiplication and division is handled
  2557.       --  by the front end (mod and rem result only from expansion). Gigi
  2558.       --  thus never needs to worry about small values (for other operators
  2559.       --  operating on fixed-point, e.g. addition, the small value does not
  2560.       --  have any semantic effect anyway, these are always integer operations.
  2561.  
  2562.       --  N_Op_And
  2563.       --  Sloc points to AND
  2564.       --  Do_Length_Check (Flag4-Sem)
  2565.       --  plus fields for binary operator
  2566.       --  plus fields for expression
  2567.  
  2568.       --  N_Op_Or
  2569.       --  Sloc points to OR
  2570.       --  Do_Length_Check (Flag4-Sem)
  2571.       --  plus fields for binary operator
  2572.       --  plus fields for expression
  2573.  
  2574.       --  N_Op_Xor
  2575.       --  Sloc points to XOR
  2576.       --  Do_Length_Check (Flag4-Sem)
  2577.       --  plus fields for binary operator
  2578.       --  plus fields for expression
  2579.  
  2580.       --  N_Op_Eq
  2581.       --  Sloc points to =
  2582.       --  plus fields for binary operator
  2583.       --  plus fields for expression
  2584.  
  2585.       --  N_Op_Ne
  2586.       --  Sloc points to /=
  2587.       --  plus fields for binary operator
  2588.       --  plus fields for expression
  2589.  
  2590.       --  N_Op_Lt
  2591.       --  Sloc points to <
  2592.       --  plus fields for binary operator
  2593.       --  plus fields for expression
  2594.  
  2595.       --  N_Op_Le
  2596.       --  Sloc points to <=
  2597.       --  plus fields for binary operator
  2598.       --  plus fields for expression
  2599.  
  2600.       --  N_Op_Gt
  2601.       --  Sloc points to >
  2602.       --  plus fields for binary operator
  2603.       --  plus fields for expression
  2604.  
  2605.       --  N_Op_Ge
  2606.       --  Sloc points to >=
  2607.       --  plus fields for binary operator
  2608.       --  plus fields for expression
  2609.  
  2610.       --  N_Op_Add
  2611.       --  Sloc points to + (binary)
  2612.       --  plus fields for binary operator
  2613.       --  plus fields for expression
  2614.  
  2615.       --  N_Op_Subtract
  2616.       --  Sloc points to - (binary)
  2617.       --  plus fields for binary operator
  2618.       --  plus fields for expression
  2619.  
  2620.       --  N_Op_Concat
  2621.       --  Sloc points to &
  2622.       --  plus fields for binary operator
  2623.       --  plus fields for expression
  2624.  
  2625.       --  N_Op_Multiply
  2626.       --  Sloc points to *
  2627.       --  Treat_Fixed_As_Integer (Flag14-Sem)
  2628.       --  Rounded_Result (Flag12-Sem)
  2629.       --  plus fields for binary operator
  2630.       --  plus fields for expression
  2631.  
  2632.       --  N_Op_Divide
  2633.       --  Sloc points to /
  2634.       --  Treat_Fixed_As_Integer (Flag14-Sem)
  2635.       --  Do_Division_Check (Flag3-Sem)
  2636.       --  Rounded_Result (Flag12-Sem)
  2637.       --  plus fields for binary operator
  2638.       --  plus fields for expression
  2639.  
  2640.       --  N_Op_Mod
  2641.       --  Sloc points to MOD
  2642.       --  Treat_Fixed_As_Integer (Flag14-Sem)
  2643.       --  Do_Division_Check (Flag3-Sem)
  2644.       --  plus fields for binary operator
  2645.       --  plus fields for expression
  2646.  
  2647.       --  N_Op_Rem
  2648.       --  Sloc points to REM
  2649.       --  Treat_Fixed_As_Integer (Flag14-Sem)
  2650.       --  Do_Division_Check (Flag3-Sem)
  2651.       --  plus fields for binary operator
  2652.       --  plus fields for expression
  2653.  
  2654.       --  N_Op_Expon
  2655.       --  Sloc points to **
  2656.       --  plus fields for binary operator
  2657.       --  plus fields for expression
  2658.  
  2659.       --  N_Op_Plus
  2660.       --  Sloc points to + (unary)
  2661.       --  plus fields for unary operator
  2662.       --  plus fields for expression
  2663.  
  2664.       --  N_Op_Minus
  2665.       --  Sloc points to - (unary)
  2666.       --  plus fields for unary operator
  2667.       --  plus fields for expression
  2668.  
  2669.       --  N_Op_Abs
  2670.       --  Sloc points to ABS
  2671.       --  plus fields for unary operator
  2672.       --  plus fields for expression
  2673.  
  2674.       --  N_Op_Not
  2675.       --  Sloc points to NOT
  2676.       --  plus fields for unary operator
  2677.       --  plus fields for expression
  2678.  
  2679.       --  See also shift operators in section B.2
  2680.  
  2681.       --  Note on fixed-point operations passed to Gigi: For adding operators,
  2682.       --  the semantics is to treat these simply as integer operations, with
  2683.       --  the small values being ignored (the bounds are already stored in
  2684.       --  units of small, so that constraint checking works as usual). For the
  2685.       --  case of multiply/divide/rem/mod operations, Gigi will only see fixed
  2686.       --  point operands if the Treat_Fixed_As_Integer flag is set and will
  2687.       --  thus treat these nodes in identical manner, ignoring small values.
  2688.  
  2689.       --------------------------
  2690.       -- 4.6  Type Conversion --
  2691.       --------------------------
  2692.  
  2693.       --  TYPE_CONVERSION ::=
  2694.       --    SUBTYPE_MARK (EXPRESSION) | SUBTYPE_MARK (NAME)
  2695.  
  2696.       --  In the (NAME) case, the name is stored as the expression
  2697.  
  2698.       --  Note: the parser never generates a type conversion node, since it
  2699.       --  looks like an indexed component which is generated by preference.
  2700.       --  The semantic pass must correct this misidentification.
  2701.  
  2702.       --  Gigi handles conversions that involve no change in the root type,
  2703.       --  and also all conversions from integer to floating-point types.
  2704.       --  Conversions from floating-point to integer are only handled in
  2705.       --  the case where Float_Truncate flag set. Other conversions from
  2706.       --  floating-point to integer (involving rounding) and all conversions
  2707.       --  involving fixed-point types are handled by the expander.
  2708.  
  2709.       --  Sprint syntax if Float_Truncate set: X^(Y)
  2710.       --  Sprint syntax if Conversion_OK set X?(Y)
  2711.       --  Sprint syntax if both flags set X?^(Y)
  2712.  
  2713.       --  Note: If either the operand or result type is fixed-point, Gigi will
  2714.       --  only see a type conversion node with Treat_Fixed_As_Integer set. The
  2715.       --  front end takes care of all handling of small's for conversions.
  2716.  
  2717.       --  N_Type_Conversion
  2718.       --  Sloc points to first token of subtype mark
  2719.       --  Subtype_Mark (Node4)
  2720.       --  Expression (Node3)
  2721.       --  Do_Overflow_Check (Flag17-Sem)
  2722.       --  Do_Tag_Check (Flag3-Sem)
  2723.       --  Do_Length_Check (Flag4-Sem)
  2724.       --  Float_Truncate (Flag11-Sem)
  2725.       --  Rounded_Result (Flag12-Sem)
  2726.       --  Conversion_OK (Flag14-Sem)
  2727.       --  plus fields for expression
  2728.  
  2729.       --  Note: if a range check is required, then the Do_Range_Check flag
  2730.       --  is set in the Expression with the check being done against the
  2731.       --  target type range (after the base type conversion, if any).
  2732.  
  2733.       -------------------------------
  2734.       -- 4.7  Qualified Expression --
  2735.       -------------------------------
  2736.  
  2737.       --  QUALIFIED_EXPRESSION ::=
  2738.       --    SUBTYPE_MARK ' (EXPRESSION) | SUBTYPE_MARK ' AGGREGATE
  2739.  
  2740.       --  Note: the parentheses in the (EXPRESSION) case are deemed to enclose
  2741.       --  the expression, so the Expression field of this node always points
  2742.       --  to a parenthesized expression in this case (i.e. Paren_Count will
  2743.       --  always be non-zero for the referenced expression if is is not an
  2744.       --  aggregate).
  2745.  
  2746.       --  N_Qualified_Expression
  2747.       --  Sloc points to apostrophe
  2748.       --  Subtype_Mark (Node4)
  2749.       --  Expression (Node3) expression or aggregate
  2750.       --  plus fields for expression
  2751.  
  2752.       --------------------
  2753.       -- 4.8  Allocator --
  2754.       --------------------
  2755.  
  2756.       --  ALLOCATOR ::=
  2757.       --    new SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
  2758.  
  2759.       --  Sprint syntax (when storage pool present)
  2760.       --    new xxx (storage_pool = pool)
  2761.  
  2762.       --  N_Allocator
  2763.       --  Sloc points to NEW
  2764.       --  Expression (Node3) subtype indication or qualified expression
  2765.       --  Storage_Pool (Node1-Sem)
  2766.       --  Procedure_To_Call (Node4-Sem)
  2767.       --  Do_Storage_Check (Flag17-Sem)
  2768.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2769.       --  Has_Dynamic_Itype (Flag14-Sem)
  2770.       --  plus fields for expression
  2771.  
  2772.       ---------------------------------
  2773.       -- 5.1  Sequence Of Statements --
  2774.       ---------------------------------
  2775.  
  2776.       --  SEQUENCE_OF_STATEMENTS ::= STATEMENT {STATEMENT}
  2777.  
  2778.       --  Note: Although the parser will not accept a declaration as a
  2779.       --  statement, the semantic analyzer may insert declarations (e.g.
  2780.       --  declarations of implicit types needed for execution of other
  2781.       --  statements) into a sequence of statements, so the code genmerator
  2782.       --  should be prepared to accept a declaration where a statement is
  2783.       --  expected. Note also that pragmas can appear as statements.
  2784.  
  2785.       --------------------
  2786.       -- 5.1  Statement --
  2787.       --------------------
  2788.  
  2789.       --  STATEMENT ::=
  2790.       --    {LABEL} SIMPLE_STATEMENT | {LABEL} COMPOUND_STATEMENT
  2791.  
  2792.       --  There is no explicit node in the tree for a statement. Instead, the
  2793.       --  individual statement appears directly. Labels are treated  as a
  2794.       --  kind of statement, i.e. they are linked into a statement list at
  2795.       --  the point they appear, so the labeled statement appears following
  2796.       --  the label or labels in the statement list.
  2797.  
  2798.       ---------------------------
  2799.       -- 5.1  Simple Statement --
  2800.       ---------------------------
  2801.  
  2802.       --  SIMPLE_STATEMENT ::=      NULL_STATEMENT
  2803.       --  | ASSIGNMENT_STATEMENT  | EXIT_STATEMENT
  2804.       --  | GOTO_STATEMENT        | PROCEDURE_CALL_STATEMENT
  2805.       --  | RETURN_STATEMENT      | ENTRY_CALL_STATEMENT
  2806.       --  | REQUEUE_STATEMENT     | DELAY_STATEMENT
  2807.       --  | ABORT_STATEMENT       | RAISE_STATEMENT
  2808.       --  | CODE_STATEMENT
  2809.  
  2810.       -----------------------------
  2811.       -- 5.1  Compound Statement --
  2812.       -----------------------------
  2813.  
  2814.       --  COMPOUND_STATEMENT ::=
  2815.       --    IF_STATEMENT         | CASE_STATEMENT
  2816.       --  | LOOP_STATEMENT       | BLOCK_STATEMENT
  2817.       --  | ACCEPT_STATEMENT     | SELECT_STATEMENT
  2818.  
  2819.       -------------------------
  2820.       -- 5.1  Null Statement --
  2821.       -------------------------
  2822.  
  2823.       --  NULL_STATEMENT ::= null;
  2824.  
  2825.       --  N_Null_Statement
  2826.       --  Sloc points to NULL
  2827.  
  2828.       ----------------
  2829.       -- 5.1  Label --
  2830.       ----------------
  2831.  
  2832.       --  LABEL ::= <<label_STATEMENT_IDENTIFIER>>
  2833.  
  2834.       --  Note that the occurrence of a label is not a defining identifier,
  2835.       --  but rather a referencing occurrence. The defining occurrence is
  2836.       --  in the implicit label declaration which occurs in the innermost
  2837.       --  enclosing block.
  2838.  
  2839.       --  N_Label
  2840.       --  Sloc points to <<
  2841.       --  Identifier (Node1) direct name of statement identifier
  2842.  
  2843.       -------------------------------
  2844.       -- 5.1  Statement Identifier --
  2845.       -------------------------------
  2846.  
  2847.       --  STATEMENT_INDENTIFIER ::= DIRECT_NAME
  2848.  
  2849.       --  The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier
  2850.       --  (not an OPERATOR_SYMBOL)
  2851.  
  2852.       -------------------------------
  2853.       -- 5.2  Assignment Statement --
  2854.       -------------------------------
  2855.  
  2856.       --  ASSIGNMENT_STATEMENT ::=
  2857.       --    variable_NAME := EXPRESSION;
  2858.  
  2859.       --  N_Assignment_Statement
  2860.       --  Sloc points to :=
  2861.       --  Name (Node2)
  2862.       --  Expression (Node3)
  2863.       --  Do_Tag_Check (Flag3-Sem)
  2864.       --  Do_Length_Check (Flag4-Sem)
  2865.       --  Forwards_OK (Flag5-Sem)
  2866.       --  Backwards_OK (Flag6-Sem)
  2867.  
  2868.       --  Note: if a range check is required, then the Do_Range_Check flag
  2869.       --  is set in the Expression (right hand side), with the check being
  2870.       --  done against the type of the Name (left hand side).
  2871.  
  2872.       -----------------------
  2873.       -- 5.3  If Statement --
  2874.       -----------------------
  2875.  
  2876.       --  IF_STATEMENT ::=
  2877.       --    if CONDITION then
  2878.       --      SEQUENCE_OF_STATEMENTS
  2879.       --    {elsif CONDITION then
  2880.       --      SEQUENCE_OF_STATEMENTS}
  2881.       --    [else
  2882.       --      SEQUENCE_OF_STATEMENTS]
  2883.       --    end if;
  2884.  
  2885.       --  N_If_Statement
  2886.       --  Sloc points to IF
  2887.       --  Condition (Node5)
  2888.       --  Then_Statements (List2)
  2889.       --  Elsif_Parts (List3) (set to No_List if none present)
  2890.       --  Else_Statements (List4) (set to No_List if no else part present)
  2891.  
  2892.       --  N_Elsif_Part
  2893.       --  Sloc points to ELSIF
  2894.       --  Condition (Node5)
  2895.       --  Then_Statements (List2)
  2896.       --  Condition_Actions (List3-Sem)
  2897.  
  2898.       --------------------
  2899.       -- 5.3  Condition --
  2900.       --------------------
  2901.  
  2902.       --  CONDITION ::= boolean_EXPRESSION
  2903.  
  2904.       -------------------------
  2905.       -- 5.4  Case Statement --
  2906.       -------------------------
  2907.  
  2908.       --  CASE_STATEMENT ::=
  2909.       --    case EXPRESSION is
  2910.       --      CASE_STATEMENT_ALTERNATIVE
  2911.       --      {CASE_STATEMENT_ALTERNATIVE}
  2912.       --    end case;
  2913.  
  2914.       --  N_Case_Statement
  2915.       --  Sloc points to CASE
  2916.       --  Expression (Node3)
  2917.       --  Alternatives (List4)
  2918.  
  2919.       -------------------------------------
  2920.       -- 5.4  Case Statement Alternative --
  2921.       -------------------------------------
  2922.  
  2923.       --  CASE_STATEMENT_ALTERNATIVE ::=
  2924.       --    when DISCRETE_CHOICE_LIST =>
  2925.       --      SEQUENCE_OF_STATEMENTS
  2926.  
  2927.       --  N_Case_Statement_Alternative
  2928.       --  Sloc points to WHEN
  2929.       --  Discrete_Choices (List4)
  2930.       --  Statements (List3)
  2931.  
  2932.       -------------------------
  2933.       -- 5.5  Loop Statement --
  2934.       -------------------------
  2935.  
  2936.       --  LOOP_STATEMENT ::=
  2937.       --    [loop_STATEMENT_IDENTIFIER :]
  2938.       --      [ITERATION_SCHEME] loop
  2939.       --        SEQUENCE_OF_STATEMENTS
  2940.       --      end loop [loop_IDENTIFIER];
  2941.  
  2942.       --  Note: The occurrence of a loop label is not a defining identifier
  2943.       --  but rather a referencing occurrence. The defining occurrence is in
  2944.       --  the implicit label declaration which occurs in the innermost
  2945.       --  enclosing block.
  2946.  
  2947.       --  Note: there is always a loop statement identifier present in
  2948.       --  the tree, even if none was given in the source. In the case where
  2949.       --  no loop identifier is given in the source, the parser creates
  2950.       --  a name of the form _Loop_n, where n is a decimal integer (the
  2951.       --  two underlines ensure that the loop names created in this manner
  2952.       --  do not conflict with any user defined identifiers), and the flag
  2953.       --  Has_Created_Identifier is set to True. The only exception to the
  2954.       --  rule that all loop statement nodes have identifiers occurs for
  2955.       --  loops constructed by the expander, and the semantic analyzer will
  2956.       --  create and supply dummy loop identifiers in these cases.
  2957.  
  2958.       --  N_Loop_Statement
  2959.       --  Sloc points to LOOP
  2960.       --  Identifier (Node1) loop identifier (set to Empty if no identifier)
  2961.       --  Iteration_Scheme (Node2) (set to Empty if no iteration scheme)
  2962.       --  Statements (List3)
  2963.       --  Has_Created_Identifier (Flag1)
  2964.  
  2965.       --------------------------
  2966.       -- 5.5 Iteration Scheme --
  2967.       --------------------------
  2968.  
  2969.       --  ITERATION_SCHEME ::=
  2970.       --    while CONDITION | for LOOP_PARAMETER_SPECIFICATION
  2971.  
  2972.       --  N_Iteration_Scheme
  2973.       --  Sloc points to WHILE or FOR
  2974.       --  Condition (Node5) (set to Empty if for case)
  2975.       --  Condition_Actions (List3-Sem)
  2976.       --  Loop_Parameter_Specification (Node1) (set to Empty if while case)
  2977.  
  2978.       ---------------------------------------
  2979.       -- 5.5  Loop parameter specification --
  2980.       ---------------------------------------
  2981.  
  2982.       --  LOOP_PARAMETER_SPECIFICATION ::=
  2983.       --    DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION
  2984.  
  2985.       --  N_Loop_Parameter_Specification
  2986.       --  Sloc points to first identifier
  2987.       --  Defining_Identifier (Node1)
  2988.       --  Reverse_Present (Flag1)
  2989.       --  Discrete_Subtype_Definition (Node4)
  2990.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  2991.       --  Has_Dynamic_Itype (Flag14-Sem)
  2992.  
  2993.       --------------------------
  2994.       -- 5.6  Block Statement --
  2995.       --------------------------
  2996.  
  2997.       --  BLOCK_STATEMENT ::=
  2998.       --    [block_STATEMENT_IDENTIFIER:]
  2999.       --      [declare
  3000.       --        DECLARATIVE_PART]
  3001.       --      begin
  3002.       --        HANDLED_SEQUENCE_OF_STATEMENTS
  3003.       --      end [block_IDENTIFIER];
  3004.  
  3005.       --  Note that the occurrence of a block identifier is not a defining
  3006.       --  identifier, but rather a referencing occurrence. The defining
  3007.       --  occurrence is in the implicit label declaration which occurs in
  3008.       --  the innermost enclosing block.
  3009.  
  3010.       --  Note: there is always a block statement identifier present in
  3011.       --  the tree, even if none was given in the source. In the case where
  3012.       --  no block identifier is given in the source, the parser creates
  3013.       --  a name of the form _Block_n, where n is a decimal integer (the
  3014.       --  two underlines ensure that the block names created in this manner
  3015.       --  do not conflict with any user defined identifiers), and the flag
  3016.       --  Has_Created_Identifier is set to True. The only exception to the
  3017.       --  rule that all loop statement nodes have identifiers occurs for
  3018.       --  blocks constructed by the expander, and the semantic analyzer
  3019.       --  creates and supplies dummy names for the blocks).
  3020.  
  3021.       --  N_Block_Statement
  3022.       --  Sloc points to DECLARE or BEGIN
  3023.       --  Identifier (Node1) block direct name (set to Empty if not present)
  3024.       --  Declarations (List3) (set to No_List if no DECLARE part)
  3025.       --  Handled_Statement_Sequence (Node4)
  3026.       --  Is_Task_Master (Flag5-Sem)
  3027.       --  Activation_Chain_Entity (Node2-Sem)
  3028.       --  Has_Created_Identifier (Flag1)
  3029.  
  3030.       -------------------------
  3031.       -- 5.7  Exit Statement --
  3032.       -------------------------
  3033.  
  3034.       --  EXIT_STATEMENT ::= exit [loop_NAME] [when CONDITION];
  3035.  
  3036.       --  N_Exit_Statement
  3037.       --  Sloc points to EXIT
  3038.       --  Name (Node2) (set to Empty if no loop name present)
  3039.       --  Condition (Node5) (set to Empty if no when part present)
  3040.  
  3041.       -------------------------
  3042.       -- 5.9  Goto Statement --
  3043.       -------------------------
  3044.  
  3045.       --  GOTO_STATEMENT ::= goto label_NAME;
  3046.  
  3047.       --  N_Goto_Statement
  3048.       --  Sloc points to GOTO
  3049.       --  Name (Node2)
  3050.  
  3051.       ---------------------------------
  3052.       -- 6.1  Subprogram Declaration --
  3053.       ---------------------------------
  3054.  
  3055.       --  SUBPROGRAM_DECLARATION ::= SUBPROGRAM_SPECIFICATION;
  3056.  
  3057.       --  N_Subprogram_Declaration
  3058.       --  Sloc points to FUNCTION or PROCEDURE
  3059.       --  Specification (Node1)
  3060.       --  Corresponding_Body (Node5-Sem)
  3061.       --  Parent_Spec (Node4-Sem)
  3062.  
  3063.       ------------------------------------------
  3064.       -- 6.1  Abstract Subprogram Declaration --
  3065.       ------------------------------------------
  3066.  
  3067.       --  ABSTRACT_SUBPROGRAM_DECLARATION ::=
  3068.       --    SUBPROGRAM_SPECIFICATION is abstract;
  3069.  
  3070.       --  N_Abstract_Subprogram_Declaration
  3071.       --  Sloc points to ABSTRACT
  3072.       --  Specification (Node1)
  3073.  
  3074.       -----------------------------------
  3075.       -- 6.1  Subprogram Specification --
  3076.       -----------------------------------
  3077.  
  3078.       --  SUBPROGRAM_SPECIFICATION ::=
  3079.       --    procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE
  3080.       --  | function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE
  3081.  
  3082.       --  Note: there are no separate nodes for the profiles, instead the
  3083.       --  information appears directly in the following nodes.
  3084.  
  3085.       --  N_Function_Specification
  3086.       --  Sloc points to FUNCTION
  3087.       --  Defining_Unit_Name (Node1) (the designator)
  3088.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  3089.       --  Subtype_Mark (Node4) for return type
  3090.       --  Generic_Parent (Node5-Sem)
  3091.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3092.       --  Has_Dynamic_Itype (Flag14-Sem)
  3093.  
  3094.       --  N_Procedure_Specification
  3095.       --  Sloc points to PROCEDURE
  3096.       --  Defining_Unit_Name (Node1)
  3097.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  3098.       --  Generic_Parent (Node5-Sem)
  3099.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3100.       --  Has_Dynamic_Itype (Flag14-Sem)
  3101.  
  3102.       ---------------------
  3103.       -- 6.1  Designator --
  3104.       ---------------------
  3105.  
  3106.       --  DESIGNATOR ::=
  3107.       --    [PARENT_UNIT_NAME .] IDENTIFIER | OPERATOR_SYMBOL
  3108.  
  3109.       --  Designators that are simply identifiers or operator symbols appear
  3110.       --  directly in the tree in this form. The following node is used only
  3111.       --  in the case where the designator has a parent unit name component.
  3112.  
  3113.       --  N_Designator
  3114.       --  Sloc points to period
  3115.       --  Name (Node2) holds the parent unit name. Note that this is always
  3116.       --   non-Empty, since this node is only used for the case where a
  3117.       --   parent library unit package name is present.
  3118.       --  Identifier (Node1)
  3119.  
  3120.       ------------------------------
  3121.       -- 6.1  Defining Designator --
  3122.       ------------------------------
  3123.  
  3124.       --  DEFINING_DESIGNATOR ::=
  3125.       --    DEFINING_PROGRAM_UNIT_NAME | DEFINING_OPERATOR_SYMBOL
  3126.  
  3127.       -------------------------------------
  3128.       -- 6.1  Defining Program Unit Name --
  3129.       -------------------------------------
  3130.  
  3131.       --  DEFINING_PROGRAM_UNIT_NAME ::=
  3132.       --    [PARENT_UNIT_NAME .] DEFINING_IDENTIFIER
  3133.  
  3134.       --  The parent unit name is present only in the case of a child unit
  3135.       --  name (permissible only for Ada 95 for a library level unit, i.e.
  3136.       --  a unit at scope level one). If no such name is present, the defining
  3137.       --  program unit name is represented simply as the defining identifier.
  3138.       --  In the child unit case, the following node is used to represent the
  3139.       --  child unit name.
  3140.  
  3141.       --  N_Defining_Program_Unit_Name
  3142.       --  Sloc points to period
  3143.       --  Name (Node2) holds the parent unit name. Note that this is always
  3144.       --   non-Empty, since this node is only used for the case where a
  3145.       --   parent unit name is present.
  3146.       --  Defining_Identifier (Node1)
  3147.  
  3148.       --------------------------
  3149.       -- 6.1  Operator Symbol --
  3150.       --------------------------
  3151.  
  3152.       --  OPERATOR_SYMBOL ::= STRING_LITERAL
  3153.  
  3154.       --  Note: the fields of the N_Operator_Symbol node are laid out to
  3155.       --  match the corresponding fields of an N_Character_Literal node. This
  3156.       --  allows easy conversion of the operator symbol node into a character
  3157.       --  literal node in the case where a string constant of the form of an
  3158.       --  operator symbol is scanned out as such, but turns out semantically
  3159.       --  to be a string literal that is not an operator. For details see
  3160.       --  Sinfo.CN.Change_Operator_Symbol_To_String_Literal.
  3161.  
  3162.       --  N_Operator_Symbol
  3163.       --  Sloc points to literal
  3164.       --  Chars (Name1) contains the Name_Id for the operator symbol
  3165.       --  Strval (Str3) Id of string value. This is used if the operator
  3166.       --   symbol turns out to be a normal string after all.
  3167.       --  Entity (Node4-Sem)
  3168.       --  Has_Private_View (Flag11-Sem) set in generic units.
  3169.       --  Etype (Node5-Sem)
  3170.  
  3171.       -----------------------------------
  3172.       -- 6.1  Defining Operator Symbol --
  3173.       -----------------------------------
  3174.  
  3175.       --  DEFINING_OPERATOR_SYMBOL ::= OPERATOR_SYMBOL
  3176.  
  3177.       --  A defining operator symbol is an entity, which has additional
  3178.       --  fields depending on the setting of the Ekind field. These
  3179.       --  additional fields are defined (and access subprograms declared)
  3180.       --  in package Entity_Info.
  3181.  
  3182.       --  Note: N_Defining_Operator_Symbol is an extended node whose fields
  3183.       --  are deliberate layed out to match the layout of fields in an ordinary
  3184.       --  N_Operator_Symbol node allowing for easy alteration of an operator
  3185.       --  symbol node into a defining operator symbol node. For details, see
  3186.       --  Sinfo.CN.Change_Operator_Symbol_To_Defining_Operator_Symbol.
  3187.  
  3188.       --  N_Defining_Operator_Symbol
  3189.       --  Sloc points to literal
  3190.       --  Chars (Name1) contains the Name_Id for the operator symbol
  3191.       --  Next_Entity (Node2-Sem)
  3192.       --  Scope (Node3-Sem)
  3193.       --  Homonym (Node4-Sem)
  3194.       --  Etype (Node5-Sem)
  3195.  
  3196.       ----------------------------
  3197.       -- 6.1  Parameter Profile --
  3198.       ----------------------------
  3199.  
  3200.       --  PARAMETER_PROFILE ::= [FORMAL_PART]
  3201.  
  3202.       ---------------------------------------
  3203.       -- 6.1  Parameter and Result Profile --
  3204.       ---------------------------------------
  3205.  
  3206.       --  PARAMETER_AND_RESULT_PROFILE ::= [FORMAL_PART] return SUBTYPE_MARK
  3207.  
  3208.       --  There is no explicit node in the tree for a parameter and result
  3209.       --  profile. Instead the information appears directly in the parent.
  3210.  
  3211.       ----------------------
  3212.       -- 6.1  Formal part --
  3213.       ----------------------
  3214.  
  3215.       --  FORMAL_PART ::=
  3216.       --    (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION})
  3217.  
  3218.       ----------------------------------
  3219.       -- 6.1  Parameter specification --
  3220.       ----------------------------------
  3221.  
  3222.       --  PARAMETER_SPECIFICATION ::=
  3223.       --    DEFINING_IDENTIFIER_LIST : MODE SUBTYPE_MARK
  3224.       --      [:= DEFAULT_EXPRESSION]
  3225.       --  | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
  3226.       --      [:= DEFAULT_EXPRESSION]
  3227.  
  3228.       --  Although the syntax allows multiple identifiers in the list, the
  3229.       --  semantics is as though successive specifications were given with
  3230.       --  identical type definition and expression components. To simplify
  3231.       --  semantic processing, the parser represents a multiple declaration
  3232.       --  case as a sequence of single Specifications, using the More_Ids and
  3233.       --  Prev_Ids flags to preserve the original source form as described
  3234.       --  in the section on "Handling of Defining Identifier Lists".
  3235.  
  3236.       --  N_Parameter_Specification
  3237.       --  Sloc points to first identifier
  3238.       --  Defining_Identifier (Node1)
  3239.       --  In_Present (Flag1)
  3240.       --  Out_Present (Flag17)
  3241.       --  Parameter_Type (Node2) subtype mark or access definition
  3242.       --  Expression (Node3) (set to Empty if no initialization present)
  3243.       --  Do_Accessibility_Check (Flag3-Sem)
  3244.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  3245.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  3246.  
  3247.       ---------------
  3248.       -- 6.1  Mode --
  3249.       ---------------
  3250.  
  3251.       --  MODE ::= [in] | in out | out
  3252.  
  3253.       --  There is no explicit node in the tree for the Mode. Instead the
  3254.       --  In_Present and Out_Present flags are set in the parent node to
  3255.       --  record the presence of keywords specifying the mode.
  3256.  
  3257.       --------------------------
  3258.       -- 6.3  Subprogram Body --
  3259.       --------------------------
  3260.  
  3261.       --  SUBPROGRAM_BODY ::=
  3262.       --    SUBPROGRAM_SPECIFICATION is
  3263.       --      DECLARATIVE_PART
  3264.       --    begin
  3265.       --      HANDLED_SEQUENCE_OF_STATEMENTS
  3266.       --    end [DESIGNATOR];
  3267.  
  3268.       --  N_Subprogram_Body
  3269.       --  Sloc points to FUNCTION or PROCEDURE
  3270.       --  Specification (Node1)
  3271.       --  Declarations (List3)
  3272.       --  Handled_Statement_Sequence (Node4)
  3273.       --  Bad_Is_Detected (Flag1) used only by parser
  3274.       --  Corresponding_Spec (Node5-Sem)
  3275.       --  Acts_As_Spec (Flag4-Sem)
  3276.       --  Do_Storage_Check (Flag17-Sem)
  3277.       --  Is_Task_Master (Flag5-Sem)
  3278.       --  Activation_Chain_Entity (Node2-Sem)
  3279.       --  Has_Priority_Pragma (Flag6-Sem)
  3280.  
  3281.       -----------------------------------
  3282.       -- 6.4  Procedure Call Statement --
  3283.       -----------------------------------
  3284.  
  3285.       --  PROCEDURE_CALL_STATEMENT ::=
  3286.       --    procedure_NAME; | procedure_PREFIX ACTUAL_PARAMETER_PART;
  3287.  
  3288.       --  Note: the reason that a procedure call has expression fields is
  3289.       --  that it semantically resembles an expression, e.g. overloading is
  3290.       --  allowed and a type is concocted for semantic processing purposes.
  3291.       --  Certain of these fields, such as Parens are not relevant, but it
  3292.       --  is easier to just supply all of them together!
  3293.  
  3294.       --  N_Procedure_Call_Statement
  3295.       --  Sloc points to first token of name or prefix
  3296.       --  Name (Node2) stores name or prefix
  3297.       --  Parameter_Associations (List3) (set to No_List if no
  3298.       --   actual parameter part)
  3299.       --  First_Named_Actual (Node4-Sem)
  3300.       --  Controlling_Argument (Node1-Sem) controlling tag (set to Empty if
  3301.       --   non-dispatching call)
  3302.       --  Do_Tag_Check (Flag3-Sem)
  3303.       --  plus fields for expression
  3304.  
  3305.       --  If any IN parameter requires a range check, then the corresponding
  3306.       --  argument expression has the Do_Range_Check flag set, and the range
  3307.       --  check is done against the formal type. Note that this argument
  3308.       --  expression may appear directly in the Parameter_Associations list,
  3309.       --  or may be a descendent of an N_Parameter_Association node that
  3310.       --  appears in this list.
  3311.  
  3312.       ------------------------
  3313.       -- 6.4  Function Call --
  3314.       ------------------------
  3315.  
  3316.       --  FUNCTION_CALL ::=
  3317.       --    function_NAME | function_PREFIX ACTUAL_PARAMETER_PART
  3318.  
  3319.       --  Note: the parser may generate an indexed component node or simply
  3320.       --  a name node instead of a function call node. The semantic pass must
  3321.       --  correct this misidentification.
  3322.  
  3323.       --  N_Function_Call
  3324.       --  Sloc points to first token of name or prefix
  3325.       --  Name (Node2) stores name or prefix
  3326.       --  Parameter_Associations (List3) (set to No_List if no
  3327.       --   actual parameter part)
  3328.       --  First_Named_Actual (Node4-Sem)
  3329.       --  Controlling_Argument (Node1-Sem) controlling tag (set to Empty if
  3330.       --   non-dispatching call)
  3331.       --  Do_Tag_Check (Flag3-Sem)
  3332.       --  plus fields for expression
  3333.  
  3334.       --------------------------------
  3335.       -- 6.4  Actual Parameter Part --
  3336.       --------------------------------
  3337.  
  3338.       --  ACTUAL_PARAMETER_PART ::=
  3339.       --    (PARAMETER_ASSOCIATION {,PARAMETER_ASSOCIATION})
  3340.  
  3341.       --------------------------------
  3342.       -- 6.4  Parameter Association --
  3343.       --------------------------------
  3344.  
  3345.       --  PARAMETER_ASSOCIATION ::=
  3346.       --    [formal_parameter_SELECTOR_NAME =>] EXPLICIT_ACTUAL_PARAMETER
  3347.  
  3348.       --  Note: the N_Parameter_Association node is built only if a formal
  3349.       --  parameter selector name is present, otherwise the parameter
  3350.       --  association appears in the tree simply as the node for the
  3351.       --  explicit actual parameter.
  3352.  
  3353.       --  N_Parameter_Association
  3354.       --  Sloc points to formal parameter
  3355.       --  Selector_Name (Node2) (always non-Empty, since this node is
  3356.       --   only used if a formal parameter selector name is present)
  3357.       --  Explicit_Actual_Parameter (Node3)
  3358.       --  Next_Named_Actual (Node4-Sem)
  3359.  
  3360.       ---------------------------
  3361.       -- 6.4  Actual Parameter --
  3362.       ---------------------------
  3363.  
  3364.       --  EXPLICIT_ACTUAL_PARAMETER ::= EXPRESSION | variable_NAME
  3365.  
  3366.       ---------------------------
  3367.       -- 6.5  Return Statement --
  3368.       ---------------------------
  3369.  
  3370.       --  RETURN_STATEMENT ::= return [EXPRESSION];
  3371.  
  3372.       --  N_Return_Statement
  3373.       --  Sloc points to RETURN
  3374.       --  Expression (Node3) (set to Empty if no expression present)
  3375.       --  Storage_Pool (Node1-Sem)
  3376.       --  Procedure_To_Call (Node4-Sem)
  3377.       --  Do_Tag_Check (Flag3-Sem)
  3378.       --  Return_Type (Node2-Sem)
  3379.  
  3380.       --  Note: if a range check is required, then Do_Range_Check is set
  3381.       --  on the Expression. The range check is against Return_Type.
  3382.  
  3383.       ------------------------------
  3384.       -- 7.1  Package Declaration --
  3385.       ------------------------------
  3386.  
  3387.       --  PACKAGE_DECLARATION ::= PACKAGE_SPECIFICATION;
  3388.  
  3389.       --  Note: the activation chain entity for a package spec is used for
  3390.       --  all tasks declared in the package spec, or in the package body.
  3391.  
  3392.       --  N_Package_Declaration
  3393.       --  Sloc points to PACKAGE
  3394.       --  Specification (Node1)
  3395.       --  Corresponding_Body (Node5-Sem)
  3396.       --  Parent_Spec (Node4-Sem)
  3397.       --  Activation_Chain_Entity (Node2-Sem)
  3398.  
  3399.       --------------------------------
  3400.       -- 7.1  Package Specification --
  3401.       --------------------------------
  3402.  
  3403.       --  PACKAGE_SPECIFICATION ::=
  3404.       --    package DEFINING_PROGRAM_UNIT_NAME is
  3405.       --      {BASIC_DECLARATIVE_ITEM}
  3406.       --    [private
  3407.       --      {BASIC_DECLARATIVE_ITEM}]
  3408.       --    end [[PARENT_UNIT_NAME .] IDENTIFIER]
  3409.  
  3410.       --  N_Package_Specification
  3411.       --  Sloc points to PACKAGE
  3412.       --  Defining_Unit_Name (Node1)
  3413.       --  Visible_Declarations (List2)
  3414.       --  Private_Declarations (List4) (set to No_List if no private
  3415.       --   part present)
  3416.       --  Generic_Parent (Node5-Sem)
  3417.  
  3418.       -----------------------
  3419.       -- 7.1  Package Body --
  3420.       -----------------------
  3421.  
  3422.       --  PACKAGE_BODY ::=
  3423.       --    package body DEFINING_PROGRAM_UNIT_NAME is
  3424.       --      DECLARATIVE_PART
  3425.       --    [begin
  3426.       --      HANDLED_SEQUENCE_OF_STATEMENTS]
  3427.       --    end [[PARENT_UNIT_NAME .] IDENTIFIER];
  3428.  
  3429.       --  N_Package_Body
  3430.       --  Sloc points to PACKAGE
  3431.       --  Defining_Unit_Name (Node1)
  3432.       --  Declarations (List3)
  3433.       --  Handled_Statement_Sequence (Node4) (set to Empty if not present)
  3434.       --  Corresponding_Spec (Node5-Sem)
  3435.  
  3436.       -----------------------------------
  3437.       -- 7.4  Private Type Declaration --
  3438.       -----------------------------------
  3439.  
  3440.       --  PRIVATE_TYPE_DECLARATION ::=
  3441.       --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART]
  3442.       --      is [[abstract] tagged] [limited] private;
  3443.  
  3444.       --  Note: TAGGED is not permitted in Ada 83 mode
  3445.  
  3446.       --  N_Private_Type_Declaration
  3447.       --  Sloc points to TYPE
  3448.       --  Defining_Identifier (Node1)
  3449.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3450.       --  Has_Dynamic_Itype (Flag14-Sem)
  3451.       --  Discriminant_Specifications (List4) (set to No_List if no
  3452.       --   discriminant part)
  3453.       --  Unknown_Discriminants_Present (Flag3) set if (<>) discriminant
  3454.       --  Abstract_Present (Flag4)
  3455.       --  Tagged_Present (Flag1)
  3456.       --  Limited_Present (Flag17)
  3457.  
  3458.       ----------------------------------------
  3459.       -- 7.4  Private Extension Declaration --
  3460.       ----------------------------------------
  3461.  
  3462.       --  PRIVATE_EXTENSION_DECLARATION ::=
  3463.       --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is
  3464.       --      [abstract] new ancestor_SUBTYPE_INDICATION with private;
  3465.  
  3466.       --  Note: private extension declarations are not allowed in Ada 83 mode
  3467.  
  3468.       --  N_Private_Extension_Declaration
  3469.       --  Sloc points to TYPE
  3470.       --  Defining_Identifier (Node1)
  3471.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3472.       --  Has_Dynamic_Itype (Flag14-Sem)
  3473.       --  Discriminant_Specifications (List4) (set to No_List if no
  3474.       --   discriminant part)
  3475.       --  Unknown_Discriminants_Present (Flag3) set if (<>) discriminant
  3476.       --  Abstract_Present (Flag4)
  3477.       --  Subtype_Indication (Node5)
  3478.  
  3479.       ---------------------
  3480.       -- 8.4  Use Clause --
  3481.       ---------------------
  3482.  
  3483.       --  USE_CLAUSE ::= USE_PACKAGE_CLAUSE | USE_TYPE_CLAUSE
  3484.  
  3485.       -----------------------------
  3486.       -- 8.4  Use Package Clause --
  3487.       -----------------------------
  3488.  
  3489.       --  USE_PACKAGE_CLAUSE ::= use package_NAME {, package_NAME};
  3490.  
  3491.       --  N_Use_Package_Clause
  3492.       --  Sloc points to USE
  3493.       --  Names (List2)
  3494.       --  Next_Use_Clause (Node3-Sem)
  3495.  
  3496.       --------------------------
  3497.       -- 8.4  Use Type Clause --
  3498.       --------------------------
  3499.  
  3500.       --  USE_TYPE_CLAUSE ::= use type SUBTYPE_MARK {, SUBTYPE_MARK};
  3501.  
  3502.       --  Note: use type clause is not permitted in Ada 83 mode
  3503.  
  3504.       --  N_Use_Type_Clause
  3505.       --  Sloc points to USE
  3506.       --  Subtype_Marks (List2)
  3507.       --  Next_Use_Clause (Node3-Sem)
  3508.  
  3509.       -------------------------------
  3510.       -- 8.5  Renaming Declaration --
  3511.       -------------------------------
  3512.  
  3513.       --  RENAMING_DECLARATION ::=
  3514.       --    OBJECT_RENAMING_DECLARATION
  3515.       --  | EXCEPTION_RENAMING_DECLARATION
  3516.       --  | PACKAGE_RENAMING_DECLARATION
  3517.       --  | SUBPROGRAM_RENAMING_DECLARATION
  3518.       --  | GENERIC_RENAMING_DECLARATION
  3519.  
  3520.       --------------------------------------
  3521.       -- 8.5  Object Renaming Declaration --
  3522.       --------------------------------------
  3523.  
  3524.       --  OBJECT_RENAMING_DECLARATION ::=
  3525.       --    DEFINING_IDENTIFIER : SUBTYPE_MARK renames object_NAME;
  3526.  
  3527.       --  N_Object_Renaming_Declaration
  3528.       --  Sloc points to first identifier
  3529.       --  Defining_Identifier (Node1)
  3530.       --  Subtype_Mark (Node4)
  3531.       --  Name (Node2)
  3532.  
  3533.       -----------------------------------------
  3534.       -- 8.5  Exception Renaming Declaration --
  3535.       -----------------------------------------
  3536.  
  3537.       --  EXCEPTION_RENAMING_DECLARATION ::=
  3538.       --    DEFINING_IDENTIFIER : exception renames exception_NAME;
  3539.  
  3540.       --  N_Exception_Renaming_Declaration
  3541.       --  Sloc points to first identifier
  3542.       --  Defining_Identifier (Node1)
  3543.       --  Name (Node2)
  3544.  
  3545.       ---------------------------------------
  3546.       -- 8.5  Package Renaming Declaration --
  3547.       ---------------------------------------
  3548.  
  3549.       --  PACKAGE_RENAMING_DECLARATION ::=
  3550.       --    package DEFINING_PROGRAM_UNIT_NAME renames package_NAME;
  3551.  
  3552.       --  N_Package_Renaming_Declaration
  3553.       --  Sloc points to PACKAGE
  3554.       --  Defining_Unit_Name (Node1)
  3555.       --  Name (Node2)
  3556.       --  Parent_Spec (Node4-Sem)
  3557.  
  3558.       ------------------------------------------
  3559.       -- 8.5  Subprogram Renaming Declaration --
  3560.       ------------------------------------------
  3561.  
  3562.       --  SUBPROGRAM_RENAMING_DECLARATION ::=
  3563.       --    SUBPROGRAM_SPECIFICATION renames callable_entity_NAME;
  3564.  
  3565.       --  N_Subprogram_Renaming_Declaration
  3566.       --  Sloc points to RENAMES
  3567.       --  Specification (Node1)
  3568.       --  Name (Node2)
  3569.       --  Parent_Spec (Node4-Sem)
  3570.       --  Corresponding_Spec (Node5-Sem)
  3571.  
  3572.       -----------------------------------------
  3573.       -- 8.5.5  Generic Renaming Declaration --
  3574.       -----------------------------------------
  3575.  
  3576.       --  GENERIC_RENAMING_DECLARATION ::=
  3577.       --    generic package DEFINING_PROGRAM_UNIT_NAME
  3578.       --      renames generic_package_NAME
  3579.       --  | generic procedure DEFINING_PROGRAM_UNIT_NAME
  3580.       --      renames generic_procedure_NAME
  3581.       --  | generic function DEFINING_PROGRAM_UNIT_NAME
  3582.       --      renames generic_function_NAME
  3583.  
  3584.       --  N_Generic_Package_Renaming_Declaration
  3585.       --  Sloc points to GENERIC
  3586.       --  Defining_Unit_Name (Node1)
  3587.       --  Name (Node2)
  3588.       --  Parent_Spec (Node4-Sem)
  3589.  
  3590.       --  N_Generic_Procedure_Renaming_Declaration
  3591.       --  Sloc points to GENERIC
  3592.       --  Defining_Unit_Name (Node1)
  3593.       --  Name (Node2)
  3594.       --  Parent_Spec (Node4-Sem)
  3595.  
  3596.       --  N_Generic_Function_Renaming_Declaration
  3597.       --  Sloc points to GENERIC
  3598.       --  Defining_Unit_Name (Node1)
  3599.       --  Name (Node2)
  3600.       --  Parent_Spec (Node4-Sem)
  3601.  
  3602.       --------------------------------
  3603.       -- 9.1  Task Type Declaration --
  3604.       --------------------------------
  3605.  
  3606.       --  TASK_TYPE_DECLARATION ::=
  3607.       --    task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
  3608.       --      [is TASK_DEFINITITION];
  3609.  
  3610.       --  N_Task_Type_Declaration
  3611.       --  Sloc points to TASK
  3612.       --  Defining_Identifier (Node1)
  3613.       --  Discriminant_Specifications (List4) (set to No_List if no
  3614.       --   discriminant part)
  3615.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3616.       --  Has_Dynamic_Itype (Flag14-Sem)
  3617.       --  Task_Definition (Node3) (set to Empty if not present)
  3618.       --  Corresponding_Body (Node5-Sem)
  3619.  
  3620.       ----------------------------------
  3621.       -- 9.1  Single Task Declaration --
  3622.       ----------------------------------
  3623.  
  3624.       --  SINGLE_TASK_DECLARATION ::=
  3625.       --    task DEFINING_IDENTIFIER [is TASK_DEFINITION];
  3626.  
  3627.       --  N_Single_Task_Declaration
  3628.       --  Sloc points to TASK
  3629.       --  Defining_Identifier (Node1)
  3630.       --  Task_Definition (Node3) (set to Empty if not present)
  3631.  
  3632.       --------------------------
  3633.       -- 9.1  Task Definition --
  3634.       --------------------------
  3635.  
  3636.       --  TASK_DEFINITION ::=
  3637.       --      {TASK_ITEM}
  3638.       --    [private
  3639.       --      {TASK_ITEM}]
  3640.       --    end [task_IDENTIFIER]
  3641.  
  3642.       --  Note: as a result of semantic analysis, the list of task items can
  3643.       --  include implicit type declarations resulting from entry families.
  3644.  
  3645.       --  N_Task_Definition
  3646.       --  Sloc points to first token of task definition
  3647.       --  Visible_Declarations (List2)
  3648.       --  Private_Declarations (List4) (set to No_List if no private part)
  3649.       --  Has_Priority_Pragma (Flag6-Sem)
  3650.       --  Has_Storage_Size_Pragma (Flag5-Sem)
  3651.  
  3652.       --------------------
  3653.       -- 9.1  Task Item --
  3654.       --------------------
  3655.  
  3656.       --  TASK_ITEM ::= ENTRY_DECLARATION | REPRESENTATION_CLAUSE
  3657.  
  3658.       --------------------
  3659.       -- 9.1  Task Body --
  3660.       --------------------
  3661.  
  3662.       --  TASK_BODY ::=
  3663.       --    task body task_DEFINING_IDENTIFIER is
  3664.       --      DECLARATIVE_PART
  3665.       --    begin
  3666.       --      HANDLED_SEQUENCE_OF_STATEMENTS
  3667.       --    end [task_IDENTIFIER];
  3668.  
  3669.       --  Gigi restriction: This node never appears.
  3670.  
  3671.       --  N_Task_Body
  3672.       --  Sloc points to TASK
  3673.       --  Defining_Identifier (Node1)
  3674.       --  Declarations (List3)
  3675.       --  Handled_Statement_Sequence (Node4)
  3676.       --  Is_Task_Master (Flag5-Sem)
  3677.       --  Activation_Chain_Entity (Node2-Sem)
  3678.       --  Corresponding_Spec (Node5-Sem)
  3679.  
  3680.       -------------------------------------
  3681.       -- 9.4  Protected Type Declaration --
  3682.       -------------------------------------
  3683.  
  3684.       --  PROTECTED_TYPE_DECLARATION ::=
  3685.       --    protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
  3686.       --      is PROTECTED_DEFINITION;
  3687.  
  3688.       --  Note: protected type declarations are not permitted in Ada 83 mode
  3689.  
  3690.       --  N_Protected_Type_Declaration
  3691.       --  Sloc points to PROTECTED
  3692.       --  Defining_Identifier (Node1)
  3693.       --  Discriminant_Specifications (List4) (set to No_List if no
  3694.       --   discriminant part)
  3695.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3696.       --  Has_Dynamic_Itype (Flag14-Sem)
  3697.       --  Protected_Definition (Node3)
  3698.       --  Corresponding_Body (Node5-Sem)
  3699.  
  3700.       ---------------------------------------
  3701.       -- 9.4  Single Protected Declaration --
  3702.       ---------------------------------------
  3703.  
  3704.       --  SINGLE_PROTECTED_DECLARATION ::=
  3705.       --    protected DEFINING_IDENTIFIER is PROTECTED_DEFINITION;
  3706.  
  3707.       --  Note: single protected declarations are not allowed in Ada 83 mode
  3708.  
  3709.       --  N_Single_Protected_Declaration
  3710.       --  Sloc points to PROTECTED
  3711.       --  Defining_Identifier (Node1)
  3712.       --  Protected_Definition (Node3)
  3713.  
  3714.       -------------------------------
  3715.       -- 9.4  Protected Definition --
  3716.       -------------------------------
  3717.  
  3718.       --  PROTECTED_DEFINITION ::=
  3719.       --      {PROTECTED_OPERATION_DECLARATION}
  3720.       --    [private
  3721.       --      {PROTECTED_ELEMENT_DECLARATION}]
  3722.       --    end [protected_IDENTIFIER]
  3723.  
  3724.       --  N_Protected_Definition
  3725.       --  Sloc points to first token of protected definition
  3726.       --  Visible_Declarations (List2)
  3727.       --  Private_Declarations (List4) (set to No_List if no private part)
  3728.       --  Has_Priority_Pragma (Flag6-Sem)
  3729.  
  3730.       ------------------------------------------
  3731.       -- 9.4  Protected Operation Declaration --
  3732.       ------------------------------------------
  3733.  
  3734.       --  PROTECTED_OPERATION_DECLARATION ::=
  3735.       --    SUBPROGRAM_DECLARATION
  3736.       --  | ENTRY_DECLARATION
  3737.       --  | REPRESENTATION_CLAUSE
  3738.  
  3739.       ----------------------------------------
  3740.       -- 9.4  Protected Element Declaration --
  3741.       ----------------------------------------
  3742.  
  3743.       --  PROTECTED_ELEMENT_DECLARATION ::=
  3744.       --    PROTECTED_OPERATION_DECLARATION | COMPONENT_DECLARATION
  3745.  
  3746.       -------------------------
  3747.       -- 9.4  Protected Body --
  3748.       -------------------------
  3749.  
  3750.       --  PROTECTED_BODY ::=
  3751.       --    protected body DEFINING_IDENTIFIER is
  3752.       --      {PROTECTED_OPERATION_ITEM}
  3753.       --    end [protected_IDENTIFIER];
  3754.  
  3755.       --  Note: protected bodies are not allowed in Ada 83 mode
  3756.  
  3757.       --  Gigi restriction: This node never appears.
  3758.  
  3759.       --  N_Protected_Body
  3760.       --  Sloc points to PROTECTED
  3761.       --  Defining_Identifier (Node1)
  3762.       --  Declarations (List3) protected operation items (and pragmas)
  3763.       --  Corresponding_Spec (Node5-Sem)
  3764.  
  3765.       -----------------------------------
  3766.       -- 9.4  Protected Operation Item --
  3767.       -----------------------------------
  3768.  
  3769.       --  PROTECTED_OPERATION_ITEM ::=
  3770.       --    SUBPROGRAM_DECLARATION
  3771.       --  | SUBPROGRAM_BODY
  3772.       --  | ENTRY_BODY
  3773.       --  | REPRESENTATION_CLAUSE
  3774.  
  3775.       ------------------------------
  3776.       -- 9.5.2  Entry Declaration --
  3777.       ------------------------------
  3778.  
  3779.       --  ENTRY_DECLARATION ::=
  3780.       --    entry DEFINING_IDENTIFIER
  3781.       --      [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE;
  3782.  
  3783.       --  N_Entry_Declaration
  3784.       --  Sloc points to ENTRY
  3785.       --  Defining_Identifier (Node1)
  3786.       --  Discrete_Subtype_Definition (Node4) (set to Empty if not present)
  3787.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  3788.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3789.       --  Has_Dynamic_Itype (Flag14-Sem)
  3790.  
  3791.       -----------------------------
  3792.       -- 9.5.2  Accept statement --
  3793.       -----------------------------
  3794.  
  3795.       --  ACCEPT_STATEMENT ::=
  3796.       --    accept entry_DIRECT_NAME
  3797.       --      [(ENTRY_INDEX)] PARAMETER_PROFILE [do
  3798.       --        HANDLED_SEQUENCE_OF_STATEMENTS
  3799.       --    end [entry_IDENTIFIER]];
  3800.  
  3801.       --  Gigi restriction: This node never appears.
  3802.  
  3803.       --  N_Accept_Statement
  3804.       --  Sloc points to ACCEPT
  3805.       --  Entry_Direct_Name (Node1)
  3806.       --  Entry_Index (Node5) (set to Empty if not present)
  3807.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  3808.       --  Handled_Statement_Sequence (Node4)
  3809.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3810.       --  Has_Dynamic_Itype (Flag14-Sem)
  3811.  
  3812.       ------------------------
  3813.       -- 9.5.2  Entry Index --
  3814.       ------------------------
  3815.  
  3816.       --  ENTRY_INDEX ::= EXPRESSION
  3817.  
  3818.       -----------------------
  3819.       -- 9.5.2  Entry Body --
  3820.       -----------------------
  3821.  
  3822.       --  ENTRY_BODY ::=
  3823.       --    entry DEFINING_IDENTIFIER ENTRY_BODY_FORMAL_PART ENTRY_BARRIER is
  3824.       --      DECLARATIVE_PART
  3825.       --    begin
  3826.       --      HANDLED_SEQUENCE_OF_STATEMENTS
  3827.       --    end [entry_IDENTIFIER];
  3828.  
  3829.       --  ENTRY_BARRIER ::= when CONDITION
  3830.  
  3831.       --  Note: we store the CONDITION of the ENTRY_BARRIER in the node for
  3832.       --  the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting
  3833.       --  too full (it would otherwise have too many fields)
  3834.  
  3835.       --  Gigi restriction: This node never appears.
  3836.  
  3837.       --  N_Entry_Body
  3838.       --  Sloc points to ENTRY
  3839.       --  Defining_Identifier (Node1)
  3840.       --  Entry_Body_Formal_Part (Node5)
  3841.       --  Declarations (List3)
  3842.       --  Handled_Statement_Sequence (Node4)
  3843.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3844.       --  Has_Dynamic_Itype (Flag14-Sem)
  3845.  
  3846.       -----------------------------------
  3847.       -- 9.5.2  Entry Body Formal Part --
  3848.       -----------------------------------
  3849.  
  3850.       --  ENTRY_BODY_FORMAL_PART ::=
  3851.       --    [(ENTRY_INDEX_SPECIFIATION)] PARAMETER_PROFILE
  3852.  
  3853.       --  Note that an entry body formal part node is present even if it is
  3854.       --  empty. This reflects the grammar, in which it is the components of
  3855.       --  the entry body formal part that are optional, not the entry body
  3856.       --  formal part itself. Also this means that the barrier condition
  3857.       --  always has somewhere to be stored.
  3858.  
  3859.       --  Gigi restriction: This node never appears.
  3860.  
  3861.       --  N_Entry_Body_Formal_Part
  3862.       --  Entry_Index_Specification (Node1) (set to Empty if not present)
  3863.       --  Parameter_Specifications (List3) (set to No_List if no formal part)
  3864.       --  Condition (Node5) from entry barrier of entry body
  3865.  
  3866.       --------------------------
  3867.       -- 9.5.2  Entry Barrier --
  3868.       --------------------------
  3869.  
  3870.       --  ENTRY_BARRIER ::= when CONDITION
  3871.  
  3872.       --------------------------------------
  3873.       -- 9.5.2  Entry Index Specification --
  3874.       --------------------------------------
  3875.  
  3876.       --  ENTRY_INDEX_SPECIFICATION ::=
  3877.       --    for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION
  3878.  
  3879.       --  Gigi restriction: This node never appears.
  3880.  
  3881.       --  N_Entry_Index_Specification
  3882.       --  Sloc points to FOR
  3883.       --  Defining_Identifier (Node1)
  3884.       --  Discrete_Subtype_Definition (Node4)
  3885.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  3886.       --  Has_Dynamic_Itype (Flag14-Sem)
  3887.  
  3888.       ---------------------------------
  3889.       -- 9.5.3  Entry Call Statement --
  3890.       ---------------------------------
  3891.  
  3892.       --  ENTRY_CALL_STATEMENT ::= entry_NAME [ACTUAL_PARAMETER_PART];
  3893.  
  3894.       --  The parser may generate a procedure call for this construct. The
  3895.       --  semantic pass must correct this misidentification where needed.
  3896.  
  3897.       --  Gigi restriction: This node never appears.
  3898.  
  3899.       --  N_Entry_Call_Statement
  3900.       --  Sloc points to first token of name
  3901.       --  Name (Node2)
  3902.       --  Parameter_Associations (List3) (set to No_List if no
  3903.       --   actual parameter part)
  3904.       --  First_Named_Actual (Node4-Sem)
  3905.  
  3906.       ------------------------------
  3907.       -- 9.5.4  Requeue Statement --
  3908.       ------------------------------
  3909.  
  3910.       --  REQUEUE_STATEMENT ::= requeue entry_NAME [with abort];
  3911.  
  3912.       --  Note: requeue statements are not permitted in Ada 83 mode
  3913.  
  3914.       --  Gigi restriction: This node never appears.
  3915.  
  3916.       --  N_Requeue_Statement
  3917.       --  Sloc points to REQUEUE
  3918.       --  Name (Node2)
  3919.       --  Abort_Present (Flag1)
  3920.  
  3921.       --------------------------
  3922.       -- 9.6  Delay Statement --
  3923.       --------------------------
  3924.  
  3925.       --  DELAY_STATEMENT ::=
  3926.       --    DELAY_UNTIL_STATEMENT
  3927.       --  | DELAY_RELATIVE_STATEMENT
  3928.  
  3929.       --------------------------------
  3930.       -- 9.6  Delay Until Statement --
  3931.       --------------------------------
  3932.  
  3933.       --  DELAY_UNTIL_STATEMENT ::= delay until delay_EXPRESSION;
  3934.  
  3935.       --  Note: delay until statements are not permitted in Ada 83 mode
  3936.  
  3937.       --  Gigi restriction: This node never appears.
  3938.  
  3939.       --  N_Delay_Until_Statement
  3940.       --  Sloc points to DELAY
  3941.       --  Expression (Node3)
  3942.  
  3943.       -----------------------------------
  3944.       -- 9.6  Delay Relative Statement --
  3945.       -----------------------------------
  3946.  
  3947.       --  DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION;
  3948.  
  3949.       --  Gigi restriction: This node never appears.
  3950.  
  3951.       --  N_Delay_Relative_Statement
  3952.       --  Sloc points to DELAY
  3953.       --  Expression (Node3)
  3954.  
  3955.       ---------------------------
  3956.       -- 9.7  Select Statement --
  3957.       ---------------------------
  3958.  
  3959.       --  SELECT_STATEMENT ::=
  3960.       --    SELECTIVE_ACCEPT
  3961.       --  | TIMED_ENTRY_CALL
  3962.       --  | CONDITIONAL_ENTRY_CALL
  3963.       --  | ASYNCHRONOUS_SELECT
  3964.  
  3965.       -----------------------------
  3966.       -- 9.7.1  Selective Accept --
  3967.       -----------------------------
  3968.  
  3969.       --  SELECTIVE_ACCEPT ::=
  3970.       --    select
  3971.       --      [GUARD]
  3972.       --        SELECT_ALTERNATIVE
  3973.       --    {or
  3974.       --      [GUARD]
  3975.       --        SELECT_ALTERNATIVE}
  3976.       --    [else
  3977.       --      SEQUENCE_OF_STATEMENTS]
  3978.       --    end select;
  3979.  
  3980.       --  Gigi restriction: This node never appears.
  3981.  
  3982.       --  Note: the guard expression, if present, appears in the node for
  3983.       --  the select alternative.
  3984.  
  3985.       --  N_Selective_Accept
  3986.       --  Sloc points to SELECT
  3987.       --  Select_Alternatives (List1)
  3988.       --  Else_Statements (List4) (set to No_List if no else part)
  3989.  
  3990.       ------------------
  3991.       -- 9.7.1  Guard --
  3992.       ------------------
  3993.  
  3994.       --  GUARD ::= when CONDITION =>
  3995.  
  3996.       --  As noted above, the CONDITION that is part of a GUARD is included
  3997.       --  in the node for the select alernative for convenience.
  3998.  
  3999.       -------------------------------
  4000.       -- 9.7.1  Select Alternative --
  4001.       -------------------------------
  4002.  
  4003.       --  SELECT_ALTERNATIVE ::=
  4004.       --    ACCEPT_ALTERNATIVE
  4005.       --  | DELAY_ALTERNATIVE
  4006.       --  | TERMINATE_ALTERNATIVE
  4007.  
  4008.       -------------------------------
  4009.       -- 9.7.1  Accept Alternative --
  4010.       -------------------------------
  4011.  
  4012.       --  ACCEPT_ALTERNATIVE ::=
  4013.       --    ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS]
  4014.  
  4015.       --  Gigi restriction: This node never appears.
  4016.  
  4017.       --  N_Accept_Alternative
  4018.       --  Sloc points to ACCEPT
  4019.       --  Accept_Statement (Node2)
  4020.       --  Condition (Node5) from the guard (set to Empty if no guard present)
  4021.       --  Statements (List3) (set to Empty_List if no statements)
  4022.  
  4023.       ------------------------------
  4024.       -- 9.7.1  Delay Alternative --
  4025.       ------------------------------
  4026.  
  4027.       --  DELAY_ALTERNATIVE ::=
  4028.       --    DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS]
  4029.  
  4030.       --  Gigi restriction: This node never appears.
  4031.  
  4032.       --  N_Delay_Alternative
  4033.       --  Sloc points to DELAY
  4034.       --  Delay_Statement (Node2)
  4035.       --  Condition (Node5) from the guard (set to Empty if no guard present)
  4036.       --  Statements (List3) (set to Empty_List if no statements)
  4037.  
  4038.       ----------------------------------
  4039.       -- 9.7.1  Terminate Alternative --
  4040.       ----------------------------------
  4041.  
  4042.       --  TERMINATE_ALTERNATIVE ::= terminate;
  4043.  
  4044.       --  Gigi restriction: This node never appears.
  4045.  
  4046.       --  N_Terminate_Alternative
  4047.       --  Sloc points to TERMINATE
  4048.       --  Condition (Node5) from the guard (set to Empty if no guard present)
  4049.  
  4050.       -----------------------------
  4051.       -- 9.7.2  Timed Entry Call --
  4052.       -----------------------------
  4053.  
  4054.       --  TIMED_ENTRY_CALL ::=
  4055.       --    select
  4056.       --      ENTRY_CALL_ALTERNATIVE
  4057.       --    or
  4058.       --      DELAY_ALTERNATIVE
  4059.       --    end select;
  4060.  
  4061.       --  Gigi restriction: This node never appears.
  4062.  
  4063.       --  N_Timed_Entry_Call
  4064.       --  Sloc points to SELECT
  4065.       --  Entry_Call_Alternative (Node1)
  4066.       --  Delay_Alternative (Node4)
  4067.  
  4068.       -----------------------------------
  4069.       -- 9.7.2  Entry Call Alternative --
  4070.       -----------------------------------
  4071.  
  4072.       --  ENTRY_CALL_ALTERNATIVE ::=
  4073.       --    ENTRY_CALL_STATEMENT [SEQUENCE_OF_STATEMENTS]
  4074.  
  4075.       --  Gigi restriction: This node never appears.
  4076.  
  4077.       --  N_Entry_Call_Alternative
  4078.       --  Sloc points to first token of entry call statement
  4079.       --  Entry_Call_Statement (Node1)
  4080.       --  Statements (List3) (set to Empty_List if no statements)
  4081.  
  4082.       -----------------------------------
  4083.       -- 9.7.3  Conditional Entry Call --
  4084.       -----------------------------------
  4085.  
  4086.       --  CONDITIONAL_ENTRY_CALL ::=
  4087.       --    select
  4088.       --      ENTRY_CALL_ALTERNATIVE
  4089.       --    else
  4090.       --      SEQUENCE_OF_STATEMENTS
  4091.       --    end select;
  4092.  
  4093.       --  Gigi restriction: This node never appears.
  4094.  
  4095.       --  N_Conditional_Entry_Call
  4096.       --  Sloc points to SELECT
  4097.       --  Entry_Call_Alternative (Node1)
  4098.       --  Else_Statements (List4)
  4099.  
  4100.       --------------------------------
  4101.       -- 9.7.4  Asynchronous Select --
  4102.       --------------------------------
  4103.  
  4104.       --  ASYNCHRONOUS_SELECT ::=
  4105.       --    select
  4106.       --      TRIGGERING_ALTERNATIVE
  4107.       --    then abort
  4108.       --      ABORTABLE_PART
  4109.       --    end select;
  4110.  
  4111.       --  Note: asynchronous select is not permitted in Ada 83 mode
  4112.  
  4113.       --  Gigi restriction: This node never appears.
  4114.  
  4115.       --  N_Asynchronous_Select
  4116.       --  Sloc points to SELECT
  4117.       --  Triggering_Alternative (Node1)
  4118.       --  Abortable_Part (Node2)
  4119.  
  4120.       -----------------------------------
  4121.       -- 9.7.4  Triggering Alternative --
  4122.       -----------------------------------
  4123.  
  4124.       --  TRIGGERING_ALTERNATIVE ::=
  4125.       --    TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS]
  4126.  
  4127.       --  Gigi restriction: This node never appears.
  4128.  
  4129.       --  N_Triggering_Alternative
  4130.       --  Sloc points to first token of triggering statement
  4131.       --  Triggering_Statement (Node1)
  4132.       --  Statements (List3) (set to Empty_List if no statements)
  4133.  
  4134.       ---------------------------------
  4135.       -- 9.7.4  Triggering Statement --
  4136.       ---------------------------------
  4137.  
  4138.       --  TRIGGERING_STATEMENT ::= ENTRY_CALL_STATEMENT | DELAY_STATEMENT
  4139.  
  4140.       ---------------------------
  4141.       -- 9.7.4  Abortable Part --
  4142.       ---------------------------
  4143.  
  4144.       --  ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS
  4145.  
  4146.       --  Gigi restriction: This node never appears.
  4147.  
  4148.       --  N_Abortable_Part
  4149.       --  Sloc points to ABORT
  4150.       --  Statements (List3)
  4151.  
  4152.       --------------------------
  4153.       -- 9.8  Abort Statement --
  4154.       --------------------------
  4155.  
  4156.       --  ABORT_STATEMENT ::= abort task_NAME {, task_NAME};
  4157.  
  4158.       --  Gigi restriction: This node never appears.
  4159.  
  4160.       --  N_Abort_Statement
  4161.       --  Sloc points to ABORT
  4162.       --  Names (List2)
  4163.  
  4164.       -------------------------
  4165.       -- 10.1.1  Compilation --
  4166.       -------------------------
  4167.  
  4168.       --  COMPILATION ::= {COMPILATION_UNIT}
  4169.  
  4170.       --  There is no explicit node in the tree for a compilation, since in
  4171.       --  general the compiler is processing only a single compilation unit
  4172.       --  at a time. It is possible to parse multiple units in syntax check
  4173.       --  only mode, but they the trees are discarded in any case.
  4174.  
  4175.       ------------------------------
  4176.       -- 10.1.1  Compilation Unit --
  4177.       ------------------------------
  4178.  
  4179.       --  COMPILATION_UNIT ::=
  4180.       --    CONTEXT_CLAUSE LIBRARY_ITEM
  4181.       --  | CONTEXT_CLAUSE SUBUNIT
  4182.  
  4183.       --  N_Compilation_Unit
  4184.       --  Sloc points to first token of defining unit name
  4185.       --  Library_Unit (Node4-Sem) corresponding/parent spec/body
  4186.       --  Context_Items (List1) context items and pragmas preceding unit
  4187.       --  Private_Present (Flag1) set if library unit has private keyword
  4188.       --  Unit (Node2) library item or subunit
  4189.       --  Following_Pragmas (List3) pragmas after unit (set to No_List if
  4190.       --   no following pragmas)
  4191.       --  Has_No_Elab_Code (Flag17-Sem)
  4192.       --  Body_Required (Flag3-Sem) set for spec if body is required
  4193.       --  Acts_As_Spec (Flag4-Sem) flag for subprogram body with no spec
  4194.       --  Elaborate_Body_Present (Flag7-Sem) set if Elaborate_Body pragma
  4195.       --  First_Inlined_Subprogram (Node5-Sem)
  4196.  
  4197.       --------------------------
  4198.       -- 10.1.1  Library Item --
  4199.       --------------------------
  4200.  
  4201.       --  LIBRARY_ITEM ::=
  4202.       --    [private] LIBRARY_UNIT_DECLARATION
  4203.       --  | LIBRARY_UNIT_BODY
  4204.       --  | [private] LIBRARY_UNIT_RENAMING_DECLARATION
  4205.  
  4206.       --  Note: PRIVATE is not allowed in Ada 83 mode
  4207.  
  4208.       --  There is no explicit node in the tree for library item, instead
  4209.       --  the declaration or body, and the flag for private if present,
  4210.       --  appear in the N_Compilation_Unit clause.
  4211.  
  4212.       ----------------------------------------
  4213.       -- 10.1.1  Library Unit Declararation --
  4214.       ----------------------------------------
  4215.  
  4216.       --  LIBRARY_UNIT_DECLARATION ::=
  4217.       --    SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION
  4218.       --  | GENERIC_DECLARATION    | GENERIC_INSTANTIATION
  4219.  
  4220.       -------------------------------------------------
  4221.       -- 10.1.1  Library Unit Renaming Declararation --
  4222.       -------------------------------------------------
  4223.  
  4224.       --  LIBRARY_UNIT_RENAMING_DECLARATION ::=
  4225.       --    PACKAGE_RENAMING_DECLARATION
  4226.       --  | GENERIC_RENAMING_DECLARATION
  4227.       --  | SUBPROGRAM_RENAMING_DECLARATION
  4228.  
  4229.       -------------------------------
  4230.       -- 10.1.1  Library unit body --
  4231.       -------------------------------
  4232.  
  4233.       --  LIBRARY_UNIT_BODY ::= SUBPROGRAM_BODY | PACKAGE_BODY
  4234.  
  4235.       ------------------------------
  4236.       -- 10.1.1  Parent Unit Name --
  4237.       ------------------------------
  4238.  
  4239.       --  PARENT_UNIT_NAME ::= NAME
  4240.  
  4241.       ----------------------------
  4242.       -- 10.1.2  Context clause --
  4243.       ----------------------------
  4244.  
  4245.       --  CONTEXT_CLAUSE ::= {CONTEXT_ITEM}
  4246.  
  4247.       --  Note: context items can also include pragma Elaborate and pragma
  4248.       --  Elaborate_Body, so these items can also appear in this list as
  4249.       --  well as other configuration pragmas that might appear. In addition,
  4250.       --  any pragmas appearing after the compilation unit, in particular,
  4251.       --  pragma Inline's are appended to the end of this list.
  4252.  
  4253.       --------------------------
  4254.       -- 10.1.2  Context_Item --
  4255.       --------------------------
  4256.  
  4257.       --  CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE
  4258.  
  4259.       -------------------------
  4260.       -- 10.1.2  With clause --
  4261.       -------------------------
  4262.  
  4263.       --  WITH_CLAUSE ::=
  4264.       --    with library_unit_NAME {,library_unit_NAME};
  4265.  
  4266.       --  A separate With clause is built for each name, so that we have
  4267.       --  a Corresponding_Spec field for each with'ed spec. The flags
  4268.       --  First_Name and Last_Name are used to reconstruct the exact
  4269.       --  source form. When a list of names appears in one with clause,
  4270.       --  the first name in the list has First_Name set, and the last
  4271.       --  has Last_Name set. If the with clause has only one name, then
  4272.       --  both of the flags First_Name and Last_Name are set in this name.
  4273.  
  4274.       --  Note: in the case of implicit with's that are installed by the
  4275.       --  Rtsfind routine, Implicit_With is set, and the Sloc is typically
  4276.       --  set to Standard_Location, but it is incorrect to test the Sloc
  4277.       --  to find out if a with clause is implicit, test the flag instead.
  4278.  
  4279.       --  N_With_Clause
  4280.       --  Sloc points to first token of library unit name
  4281.       --  Name (Node2)
  4282.       --  Library_Unit (Node4-Sem)
  4283.       --  Corresponding_Spec (Node5-Sem)
  4284.       --  First_Name (Flag5) (set to True if first name or only one name)
  4285.       --  Last_Name (Flag6) (set to True if last name or only one name)
  4286.       --  Context_Installed (Flag3-Sem)
  4287.       --  Elaborate_Present (Flag4-Sem)
  4288.       --  Elaborate_All_Present (Flag1-Sem)
  4289.       --  Implicit_With (Flag17-Sem)
  4290.  
  4291.       ---------------------
  4292.       -- 10.2  Body stub --
  4293.       ---------------------
  4294.  
  4295.       --  BODY_STUB ::=
  4296.       --    SUBPROGRAM_BODY_STUB
  4297.       --  | PACKAGE_BODY_STUB
  4298.       --  | TASK_BODY_STUB
  4299.       --  | PROTECTED_BODY_STUB
  4300.  
  4301.       ----------------------------------
  4302.       -- 10.1.3  Subprogram Body Stub --
  4303.       ----------------------------------
  4304.  
  4305.       --  SUBPROGRAM_BODY_STUB ::=
  4306.       --    SUBPROGRAM_SPECIFICATION is separate;
  4307.  
  4308.       --  N_Subprogram_Body_Stub
  4309.       --  Sloc points to FUNCTION or PROCEDURE
  4310.       --  Specification (Node1)
  4311.       --  Library_Unit (Node4-Sem) points to the subunit
  4312.       --  Corresponding_Body (Node5-Sem)
  4313.  
  4314.       -------------------------------
  4315.       -- 10.1.3  Package Body Stub --
  4316.       -------------------------------
  4317.  
  4318.       --  PACKAGE_BODY_STUB ::=
  4319.       --    package body DEFINING_IDENTIFIER is separate;
  4320.  
  4321.       --  N_Package_Body_Stub
  4322.       --  Sloc points to PACKAGE
  4323.       --  Defining_Identifier (Node1)
  4324.       --  Library_Unit (Node4-Sem) points to the subunit
  4325.       --  Corresponding_Body (Node5-Sem)
  4326.  
  4327.       ----------------------------
  4328.       -- 10.1.3  Task Body Stub --
  4329.       ----------------------------
  4330.  
  4331.       --  TASK_BODY_STUB ::=
  4332.       --    task body DEFINING_IDENTIFIER is separate;
  4333.  
  4334.       --  N_Task_Body_Stub
  4335.       --  Sloc points to TASK
  4336.       --  Defining_Identifier (Node1)
  4337.       --  Library_Unit (Node4-Sem) points to the subunit
  4338.       --  Corresponding_Body (Node5-Sem)
  4339.  
  4340.       ---------------------------------
  4341.       -- 10.1.3  Protected Body Stub --
  4342.       ---------------------------------
  4343.  
  4344.       --  PROTECTED_BODY_STUB ::=
  4345.       --    protected body DEFINING_IDENTIFIER is separate;
  4346.  
  4347.       --  Note: protected body stubs are not allowed in Ada 83 mode
  4348.  
  4349.       --  N_Protected_Body_Stub
  4350.       --  Sloc points to PROTECTED
  4351.       --  Defining_Identifier (Node1)
  4352.       --  Library_Unit (Node4-Sem) points to the subunit
  4353.       --  Corresponding_Body (Node5-Sem)
  4354.  
  4355.       ---------------------
  4356.       -- 10.1.3  Subunit --
  4357.       ---------------------
  4358.  
  4359.       --  SUBUNIT ::= separate (PARENT_UNIT_NAME) PROPER_BODY
  4360.  
  4361.       --  N_Subunit
  4362.       --  Sloc points to SEPARATE
  4363.       --  Name (Node2) is the name of the parent unit
  4364.       --  Proper_Body (Node1) is the subunit body
  4365.       --  Corresponding_Stub (Node3-Sem) is the stub declaration for the unit.
  4366.  
  4367.       ---------------------------------
  4368.       -- 11.1  Exception Declaration --
  4369.       ---------------------------------
  4370.  
  4371.       --  EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception;
  4372.  
  4373.       --  For consistency with object declarations etc, the parser converts
  4374.       --  the case of multiple identifiers being declared to a series of
  4375.       --  declarations in which the expression is copied, using the More_Ids
  4376.       --  and Prev_Ids flags to remember the souce form as described in the
  4377.       --  section on "Handling of Defining Identifier Lists".
  4378.  
  4379.       --  N_Exception_Declaration
  4380.       --  Sloc points to EXCEPTION
  4381.       --  Defining_Identifier (Node1)
  4382.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  4383.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  4384.  
  4385.       ------------------------------------------
  4386.       -- 11.2  Handled Sequence Of Statements --
  4387.       ------------------------------------------
  4388.  
  4389.       --  HANDLED_SEQUENCE_OF_STATEMENTS ::=
  4390.       --      SEQUENCE_OF_STATEMENTS
  4391.       --    [exception
  4392.       --      EXCEPTION_HANDLER
  4393.       --      {EXCEPTION_HANDLER}]
  4394.       --    [at end
  4395.       --      cleanup_procedure_call (param, param, param, ...);]
  4396.  
  4397.       --  The AT END phrase is a GNAT extension to provide for cleanups. It is
  4398.       --  used only internally currently, but is considered to be syntactic.
  4399.       --  At the moment, the only cleanup action allowed is a single call to
  4400.       --  a parameterless procedure, and the Identifier field of the node is
  4401.       --  the procedure to be called. Also there is a current restriction
  4402.       --  that exception handles and a cleanup cannot be present in the same
  4403.       --  frame, so at least one of Exception_Handlers or the Identifier must
  4404.       --  be missing.
  4405.  
  4406.       --  The AT END cleanup handler protects only the sequence of statements
  4407.       --  (not the associated declarations of the parent), just like exception
  4408.       --  handlers. The big difference is that the cleanup procedure is called
  4409.       --  on either a normal or an abnormal exit from the statement sequence.
  4410.  
  4411.       --  Note: although in the Ada syntax, the sequence of statements can
  4412.       --  only contain statements, at the tree level, it is fine to mix in
  4413.       --  declarations into this statement sequence. This is used in some
  4414.       --  cases where a cleanup procedure is required to cover declarations
  4415.       --  as well as statements.
  4416.  
  4417.       --  N_Handled_Sequence_Of_Statements
  4418.       --  Sloc points to first token of first statement
  4419.       --  Statements (List3)
  4420.       --  Exception_Handlers (List4) (set to No_List if none present)
  4421.       --  Identifier (Node1) (set to Empty if no clean up procedure)
  4422.       --  Cleanup_Call (Node5-Sem) Cleanup call (set to Empty if no cleanup)
  4423.       --  First_Real_Statement (Node2-Sem)
  4424.  
  4425.       --  Note: the parent always contains a Declarations field which contains
  4426.       --  declarations associated with the handled sequence of statements. This
  4427.       --  is true even in the case of an accept statement (see description of
  4428.       --  the N_Accept_Statement node).
  4429.  
  4430.       --  Note the Identifier field is obsolescent, and will be removed
  4431.       --  once all instances of cleanup calls use Cleanup_Call ??? It is
  4432.       --  the name of a parameterless procedure call.
  4433.  
  4434.       -----------------------------
  4435.       -- 11.2  Exception Handler --
  4436.       -----------------------------
  4437.  
  4438.       --  EXCEPTION_HANDLER ::=
  4439.       --    when [CHOICE_PARAMETER_SPECIFICATION :]
  4440.       --      EXCEPTION_CHOICE {| EXCEPTION_CHOICE} =>
  4441.       --        SEQUENCE_OF_STATEMENTS
  4442.  
  4443.       --  Note: choice parameter specification is not allowed in Ada 83 mode
  4444.  
  4445.       --  N_Exception_Handler
  4446.       --  Sloc points to WHEN
  4447.       --  Choice_Parameter (Node2) (set to Empty if not present)
  4448.       --  Exception_Choices (List4)
  4449.       --  Statements (List3)
  4450.  
  4451.       ------------------------------------------
  4452.       -- 11.2  Choice parameter specification --
  4453.       ------------------------------------------
  4454.  
  4455.       --  CHOICE_PARAMETER_SPECIFICATION ::= DEFINING_IDENTIFIER
  4456.  
  4457.       ----------------------------
  4458.       -- 11.2  Exception Choice --
  4459.       ----------------------------
  4460.  
  4461.       --  EXCEPTION_CHOICE ::= exception_NAME | others
  4462.  
  4463.       --  Except in the case of OTHERS, no explicit node appears in the tree
  4464.       --  for exception choice. Instead the exception name appears directly.
  4465.       --  An OTHERS choice is represented by a N_Others_Choice node (see
  4466.       --  section 3.8.1.
  4467.  
  4468.       ---------------------------
  4469.       -- 11.3  Raise Statement --
  4470.       ---------------------------
  4471.  
  4472.       --  RAISE_STATEMENT ::= raise [exception_NAME];
  4473.  
  4474.       --  N_Raise_Statement
  4475.       --  Sloc points to RAISE
  4476.       --  Name (Node2) (set to Empty if no exception name present)
  4477.       --  No_Defer (Flag1-Sem)
  4478.  
  4479.       -------------------------------
  4480.       -- 12.1  Generic Declaration --
  4481.       -------------------------------
  4482.  
  4483.       --  GENERIC_DECLARATION ::=
  4484.       --    GENERIC_SUBPROGRAM_DECLARATION | GENERIC_PACKAGE_DECLARATION
  4485.  
  4486.       ------------------------------------------
  4487.       -- 12.1  Generic Subprogram Declaration --
  4488.       ------------------------------------------
  4489.  
  4490.       --  GENERIC_SUBPROGRAM_DECLARATION ::=
  4491.       --    GENERIC_FORMAL_PART SUBPROGRAM_SPECIFICATION;
  4492.  
  4493.       --  N_Generic_Subprogram_Declaration
  4494.       --  Sloc points to GENERIC
  4495.       --  Specification (Node1) subprogram specification
  4496.       --  Corresponding_Body (Node5-Sem)
  4497.       --  Generic_Formal_Declarations (List3) from generic formal part
  4498.       --  Parent_Spec (Node4-Sem)
  4499.  
  4500.       ---------------------------------------
  4501.       -- 12.1  Generic Package Declaration --
  4502.       ---------------------------------------
  4503.  
  4504.       --  GENERIC_PACKAGE_DECLARATION ::=
  4505.       --    GENERIC_FORMAL_PART PACKAGE_SPECIFICATION;
  4506.  
  4507.       --  Note: when we do generics right, the Activation_Chain_Entity entry
  4508.       --  for this node can be removed (since the expander won't see generic
  4509.       --  units any more).
  4510.  
  4511.       --  N_Generic_Package_Declaration
  4512.       --  Sloc points to GENERIC
  4513.       --  Specification (Node1) package specification
  4514.       --  Corresponding_Body (Node5-Sem)
  4515.       --  Generic_Formal_Declarations (List3) from generic formal part
  4516.       --  Parent_Spec (Node4-Sem)
  4517.       --  Activation_Chain_Entity (Node2-Sem)
  4518.  
  4519.       -------------------------------
  4520.       -- 12.1  Generic Formal Part --
  4521.       -------------------------------
  4522.  
  4523.       --  GENERIC_FORMAL_PART ::=
  4524.       --    generic {GENERIC_FORMAL_PARAMETER_DECLARATION | USE_CLAUSE}
  4525.  
  4526.       ------------------------------------------------
  4527.       -- 12.1  Generic Formal Parameter Declaration --
  4528.       ------------------------------------------------
  4529.  
  4530.       --  GENERIC_FORMAL_PARAMETER_DECLARATION ::=
  4531.       --    FORMAL_OBJECT_DECLARATION
  4532.       --  | FORMAL_TYPE_DECLARATION
  4533.       --  | FORMAL_SUBPROGRAM_DECLARATION
  4534.       --  | FORMAL_PACKAGE_DECLARATION
  4535.  
  4536.       ---------------------------------
  4537.       -- 12.3  Generic Instantiation --
  4538.       ---------------------------------
  4539.  
  4540.       --  GENERIC_INSTANTIATION ::=
  4541.       --    package DEFINING_PROGRAM_UNIT_NAME is
  4542.       --      new generic_package_NAME [GENERIC_ACTUAL_PART];
  4543.       --  | procedure DEFINING_PROGRAM_UNIT_NAME is
  4544.       --      new generic_procedure_NAME [GENERIC_ACTUAL_PART];
  4545.       --  | function DEFINING_DESIGNATOR is
  4546.       --      new generic_function_NAME [GENERIC_ACTUAL_PART];
  4547.  
  4548.       --  N_Package_Instantiation
  4549.       --  Sloc points to PACKAGE
  4550.       --  Defining_Unit_Name (Node1)
  4551.       --  Name (Node2)
  4552.       --  Parent_Spec (Node4-Sem)
  4553.       --  Generic_Associations (List3) (set to No_List if no
  4554.       --   generic actual part)
  4555.  
  4556.       --  N_Procedure_Instantiation
  4557.       --  Sloc points to PROCEDURE
  4558.       --  Defining_Unit_Name (Node1)
  4559.       --  Name (Node2)
  4560.       --  Parent_Spec (Node4-Sem)
  4561.       --  Generic_Associations (List3) (set to No_List if no
  4562.       --   generic actual part)
  4563.  
  4564.       --  N_Function_Instantiation
  4565.       --  Sloc points to FUNCTION
  4566.       --  Defining_Unit_Name (Node1)
  4567.       --  Name (Node2)
  4568.       --  Generic_Associations (List3) (set to No_List if no
  4569.       --   generic actual part)
  4570.       --  Parent_Spec (Node4-Sem)
  4571.  
  4572.       ------------------------------
  4573.       -- 12.3 Generic Actual Part --
  4574.       ------------------------------
  4575.  
  4576.       --  GENERIC_ACTUAL_PART ::=
  4577.       --    (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION})
  4578.  
  4579.       -------------------------------
  4580.       -- 12.3  Generic Association --
  4581.       -------------------------------
  4582.  
  4583.       --  GENERIC_ASSOCIATION ::=
  4584.       --    [generic_formal_parameter_SELECTOR_NAME =>]
  4585.       --      EXPLICIT_GENERIC_ACTUAL_PARAMETER
  4586.  
  4587.       --  Note: unlike the procedure call case, a generic association node
  4588.       --  is generated for every association, even if no formal is present.
  4589.       --  In this case the parser will leave the Selector_Name field set
  4590.       --  to Empty, to be filled in later by the semantic pass.
  4591.  
  4592.       --  N_Generic_Association
  4593.       --  Sloc points to first token of generic association
  4594.       --  Selector_Name (Node2) (set to Empty if no formal
  4595.       --   parameter selector name)
  4596.       --  Explicit_Generic_Actual_Parameter (Node1)
  4597.  
  4598.       ---------------------------------------------
  4599.       -- 12.3  Explicit Generic Actual Parameter --
  4600.       ---------------------------------------------
  4601.  
  4602.       --  EXPLICIT_GENERIC_ACTUAL_PARAMETER ::=
  4603.       --    EXPRESSION      | variable_NAME   | subprogram_NAME
  4604.       --  | entry_NAME      | SUBTYPE_MARK    | package_instance_NAME
  4605.  
  4606.       -------------------------------------
  4607.       -- 12.4  Formal Object Declaration --
  4608.       -------------------------------------
  4609.  
  4610.       --  FORMAL_OBJECT_DECLARATION ::=
  4611.       --    DEFINING_IDENTIFIER_LIST :
  4612.       --      MODE SUBTYPE_MARK [:= DEFAULT_EXPRESSION];
  4613.  
  4614.       --  Although the syntax allows multiple identifiers in the list, the
  4615.       --  semantics is as though successive declarations were given with
  4616.       --  identical type definition and expression components. To simplify
  4617.       --  semantic processing, the parser represents a multiple declaration
  4618.       --  case as a sequence of single declarations, using the More_Ids and
  4619.       --  Prev_Ids flags to preserve the original source form as described
  4620.       --  in the section on "Handling of Defining Identifier Lists".
  4621.  
  4622.       --  N_Formal_Object_Declaration
  4623.       --  Sloc points to first identifier
  4624.       --  Defining_Identifier (Node1)
  4625.       --  In_Present (Flag1)
  4626.       --  Out_Present (Flag17)
  4627.       --  Subtype_Mark (Node4)
  4628.       --  Expression (Node3) (set to Empty if no default expression)
  4629.       --  More_Ids (Flag5) (set to False if no more identifiers in list)
  4630.       --  Prev_Ids (Flag6) (set to False if no previous identifiers in list)
  4631.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  4632.       --  Has_Dynamic_Itype (Flag14-Sem)
  4633.  
  4634.       -----------------------------------
  4635.       -- 12.5  Formal Type Declaration --
  4636.       -----------------------------------
  4637.  
  4638.       --  FORMAL_TYPE_DECLARATION ::=
  4639.       --    type DEFINING_IDENTIFIER [DISCRIMINANT_PART]
  4640.       --      is FORMAL_TYPE_DEFINITION;
  4641.  
  4642.       --  N_Formal_Type_Declaration
  4643.       --  Sloc points to TYPE
  4644.       --  Defining_Identifier (Node1)
  4645.       --  Formal_Type_Definition (Node3)
  4646.       --  Discriminant_Specifications (List4) (set to No_List if no
  4647.       --   discriminant part)
  4648.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  4649.       --  Has_Dynamic_Itype (Flag14-Sem)
  4650.       --  Unknown_Discriminants_Present (Flag3) set if (<>) discriminant
  4651.  
  4652.       ----------------------------------
  4653.       -- 12.5  Formal type definition --
  4654.       ----------------------------------
  4655.  
  4656.       --  FORMAL_TYPE_DEFINITION ::=
  4657.       --    FORMAL_PRIVATE_TYPE_DEFINITION
  4658.       --  | FORMAL_DERIVED_TYPE_DEFINITION
  4659.       --  | FORMAL_DISCRETE_TYPE_DEFINITION
  4660.       --  | FORMAL_SIGNED_INTEGER_TYPE_DEFINITION
  4661.       --  | FORMAL_MODULAR_TYPE_DEFINITION
  4662.       --  | FORMAL_FLOATING_POINT_DEFINITION
  4663.       --  | FORMAL_ORDINARY_FIXED_POINT_DEFINITION
  4664.       --  | FORMAL_DECIMAL_FIXED_POINT_DEFINITION
  4665.       --  | FORMAL_ARRAY_TYPE_DEFINITION
  4666.       --  | FORMAL_ACCESS_TYPE_DEFINITION
  4667.  
  4668.       ---------------------------------------------
  4669.       -- 12.5.1  Formal Private Type Definition --
  4670.       ---------------------------------------------
  4671.  
  4672.       --  FORMAL_PRIVATE_TYPE_DEFINITION ::=
  4673.       --    [[abstract] tagged] [limited] private
  4674.  
  4675.       --  Note: TAGGED is not allowed in Ada 83 mode
  4676.  
  4677.       --  N_Formal_Private_Type_Definition
  4678.       --  Sloc points to PRIVATE
  4679.       --  Abstract_Present (Flag4)
  4680.       --  Tagged_Present (Flag1)
  4681.       --  Limited_Present (Flag17)
  4682.  
  4683.       --------------------------------------------
  4684.       -- 12.5.1  Formal Derived Type Definition --
  4685.       --------------------------------------------
  4686.  
  4687.       --  FORMAL_DERIVED_TYPE_DEFINITION ::=
  4688.       --    [abstract] new SUBTYPE_MARK [with private]
  4689.  
  4690.       --  Note: this construct is not allowed in Ada 83 mode
  4691.  
  4692.       --  N_Formal_Derived_Type_Definition
  4693.       --  Sloc points to NEW
  4694.       --  Subtype_Mark (Node4)
  4695.       --  Private_Present (Flag1)
  4696.       --  Abstract_Present (Flag4)
  4697.  
  4698.       ---------------------------------------------
  4699.       -- 12.5.2  Formal Discrete Type Definition --
  4700.       ---------------------------------------------
  4701.  
  4702.       --  FORMAL_DISCRETE_TYPE_DEFINITION ::= (<>)
  4703.  
  4704.       --  N_Formal_Discrete_Type_Definition
  4705.       --  Sloc points to <>
  4706.  
  4707.       ---------------------------------------------------
  4708.       -- 12.5.2  Formal Signed Integer Type Definition --
  4709.       ---------------------------------------------------
  4710.  
  4711.       --  FORMAL_SIGNED_INTEGER_TYPE_DEFINITION ::= range <>
  4712.  
  4713.       --  N_Formal_Signed_Integer_Type_Definition
  4714.       --  Sloc points to RANGE
  4715.  
  4716.       --------------------------------------------
  4717.       -- 12.5.2  Formal Modular Type Definition --
  4718.       --------------------------------------------
  4719.  
  4720.       --  FORMAL_MODULAR_TYPE_DEFINITION ::= mod <>
  4721.  
  4722.       --  N_Formal_Modular_Type_Definition
  4723.       --  Sloc points to MOD
  4724.  
  4725.       ----------------------------------------------
  4726.       -- 12.5.2  Formal Floating Point Definition --
  4727.       ----------------------------------------------
  4728.  
  4729.       --  FORMAL_FLOATING_POINT_DEFINITION ::= digits <>
  4730.  
  4731.       --  N_Formal_Floating_Point_Definition
  4732.       --  Sloc points to DIGITS
  4733.  
  4734.       ----------------------------------------------------
  4735.       -- 12.5.2  Formal Ordinary Fixed Point Definition --
  4736.       ----------------------------------------------------
  4737.  
  4738.       --  FORMAL_ORDINARY_FIXED_POINT_DEFINITION ::= delta <>
  4739.  
  4740.       --  N_Formal_Ordinary_Fixed_Point_Definition
  4741.       --  Sloc points to DELTA
  4742.  
  4743.       ---------------------------------------------------
  4744.       -- 12.5.2  Formal Decimal Fixed Point Definition --
  4745.       ---------------------------------------------------
  4746.  
  4747.       --  FORMAL_DECIMAL_FIXED_POINT_DEFINITION ::= delta <> digits <>
  4748.  
  4749.       --  Note: formal decimal fixed point definition not allowed in Ada 83
  4750.  
  4751.       --  N_Formal_Decimal_Fixed_Point_Definition
  4752.       --  Sloc points to DELTA
  4753.  
  4754.       ------------------------------------------
  4755.       -- 12.5.3  Formal Array Type Definition --
  4756.       ------------------------------------------
  4757.  
  4758.       --  FORMAL_ARRAY_TYPE_DEFINITION ::= ARRAY_TYPE_DEFINITION
  4759.  
  4760.       -------------------------------------------
  4761.       -- 12.5.4  Formal Access Type Definition --
  4762.       -------------------------------------------
  4763.  
  4764.       --  FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION
  4765.  
  4766.       -----------------------------------------
  4767.       -- 12.6  Formal Subprogram Declaration --
  4768.       -----------------------------------------
  4769.  
  4770.       --  FORMAL_SUBPROGRAM_DECLARATION ::=
  4771.       --    with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
  4772.  
  4773.       --  N_Formal_Subprogram_Declaration
  4774.       --  Sloc points to WITH
  4775.       --  Specification (Node1)
  4776.       --  Default_Name (Node2) (set to Empty if no subprogram default)
  4777.       --  Box_Present (Flag1)
  4778.  
  4779.       --  Note: if no subprogram default is present, then Name is set
  4780.       --  to Empty, and Box_Present is False.
  4781.  
  4782.       ------------------------------
  4783.       -- 12.6  Subprogram Default --
  4784.       ------------------------------
  4785.  
  4786.       --  SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
  4787.  
  4788.       --  There is no separate node in the tree for a subprogram default.
  4789.       --  Instead the parent (N_Formal_Subprogram_Declaration) node contains
  4790.       --  the default name or box indication, as needed.
  4791.  
  4792.       ------------------------
  4793.       -- 12.6  Default Name --
  4794.       ------------------------
  4795.  
  4796.       --  DEFAULT_NAME ::= NAME
  4797.  
  4798.       --------------------------------------
  4799.       -- 12.7  Formal Package Declaration --
  4800.       --------------------------------------
  4801.  
  4802.       --  FORMAL_PACKAGE_DECLARATION ::=
  4803.       --    with package DEFINING_IDENTIFIER
  4804.       --      is new generic_package_NAME FORMAL_PACKAGE_ACTUAL_PART;
  4805.  
  4806.       --  Note: formal package declarations not allowed in Ada 83 mode
  4807.  
  4808.       --  N_Formal_Package_Declaration
  4809.       --  Sloc points to WITH
  4810.       --  Defining_Identifier (Node1)
  4811.       --  Name (Node2)
  4812.       --  Generic_Associations (List3) (set to No_List if (<>) case or
  4813.       --   empty generic actual part)
  4814.       --  Box_Present (Flag1)
  4815.  
  4816.       --------------------------------------
  4817.       -- 12.7  Formal Package Actual Part --
  4818.       --------------------------------------
  4819.  
  4820.       --  FORMAL_PACKAGE_ACTUAL_PART ::=
  4821.       --    (<>) | [GENERIC_ACTUAL_PART]
  4822.  
  4823.       --  There is no explicit node in the tree for a formal package
  4824.       --  actual part. Instead the information appears in the parent node
  4825.       --  (i.e. the formal package declaration node itself).
  4826.  
  4827.       ---------------------------------
  4828.       -- 13.1  Representation clause --
  4829.       ---------------------------------
  4830.  
  4831.       --  REPRESENTATION_CLAUSE ::=
  4832.       --    ATTRIBUTE_DEFINITION_CLAUSE
  4833.       --  | ENUMERATION_REPRESENTATION_CLAUSE
  4834.       --  | RECORD_REPRESENTATION_CLAUSE
  4835.       --  | AT_CLAUSE
  4836.  
  4837.       ----------------------
  4838.       -- 13.1  Local Name --
  4839.       ----------------------
  4840.  
  4841.       --  LOCAL_NAME :=
  4842.       --    DIRECT_NAME
  4843.       --  | DIRECT_NAME'ATTRIBUTE_DESIGNATOR
  4844.       --  | library_unit_NAME
  4845.  
  4846.       --  The construct DIRECT_NAME'ATTRIBUTE_DESIGNATOR appears in the tree
  4847.       --  as an attribute reference, which has essentially the same form.
  4848.  
  4849.       ---------------------------------------
  4850.       -- 13.3  Attribute definition clause --
  4851.       ---------------------------------------
  4852.  
  4853.       --  ATTRIBUTE_DEFINITION_CLAUSE ::=
  4854.       --    for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use EXPRESSION;
  4855.       --  | for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use NAME;
  4856.  
  4857.       --  In Ada 83, the expression must be a simple expression and the
  4858.       --  local name must be a direct name.
  4859.  
  4860.       --  Note: The only attribute definition clause that is processed
  4861.       --  by Gigi is the alignment clause (for all other cases, the
  4862.       --  information is extracted by the front end and either results
  4863.       --  in setting entity information, e.g. Esize for the Size case,
  4864.       --  or in appropriate expansion actions (e.g. in the storage size
  4865.       --  case). For the alignment case, Gigi requires that the expression
  4866.       --  be an integer literal.
  4867.  
  4868.       --  N_Attribute_Definition_Clause
  4869.       --  Sloc points to FOR
  4870.       --  Name (Node2) the local name
  4871.       --  Chars (Name1) the identifier name from the attribute designator
  4872.       --  Expression (Node3) the expression or name
  4873.  
  4874.       ---------------------------------------------
  4875.       -- 13.4  Enumeration representation clause --
  4876.       ---------------------------------------------
  4877.  
  4878.       --  ENUMERATION_REPRESENTATION_CLAUSE ::=
  4879.       --    for first_subtype_LOCAL_NAME use ENUMERATION_AGGREGATE;
  4880.  
  4881.       --  In Ada 83, the name must be a direct name
  4882.  
  4883.       --  N_Enumeration_Representation_Clause
  4884.       --  Sloc points to FOR
  4885.       --  Identifier (Node1) direct name
  4886.       --  Array_Aggregate (Node4)
  4887.  
  4888.       ---------------------------------
  4889.       -- 13.4  Enumeration aggregate --
  4890.       ---------------------------------
  4891.  
  4892.       --  ENUMERATION_AGGREGATE ::= ARRAY_AGGREGATE
  4893.  
  4894.       ------------------------------------------
  4895.       -- 13.5.1  Record representation clause --
  4896.       ------------------------------------------
  4897.  
  4898.       --  RECORD_REPRESENTATION_CLAUSE ::=
  4899.       --    for first_subtype_LOCAL_NAME use
  4900.       --      record [MOD_CLAUSE]
  4901.       --        {COMPONENT_CLAUSE}
  4902.       --      end record;
  4903.  
  4904.       --  Gigi restriction: Mod_Clause is always Empty (if present it is
  4905.       --  replaced by a corresponding Alignment attribute definition clause).
  4906.  
  4907.       --  N_Record_Representation_Clause
  4908.       --  Sloc points to FOR
  4909.       --  Identifier (Node1) direct name
  4910.       --  Mod_Clause (Node2) (set to Empty if no mod clause present)
  4911.       --  Component_Clauses (List3)
  4912.  
  4913.       ------------------------------
  4914.       -- 13.5.1  Component clause --
  4915.       ------------------------------
  4916.  
  4917.       --  COMPONENT_CLAUSE ::=
  4918.       --    component_LOCAL_NAME at POSITION
  4919.       --      range FIRST_BIT .. LAST_BIT;
  4920.  
  4921.       --  N_Component_Clause
  4922.       --  Sloc points to AT
  4923.       --  Component_Name (Node1) points to Name or Attribute_Reference
  4924.       --  Position (Node2)
  4925.       --  First_Bit (Node3)
  4926.       --  Last_Bit (Node4)
  4927.  
  4928.       ----------------------
  4929.       -- 13.5.1  Position --
  4930.       ----------------------
  4931.  
  4932.       --  POSITION ::= static_EXPRESSION
  4933.  
  4934.       -----------------------
  4935.       -- 13.5.1  First_Bit --
  4936.       -----------------------
  4937.  
  4938.       --  FIRST_BIT ::= static_SIMPLE_EXPRESSION
  4939.  
  4940.       ----------------------
  4941.       -- 13.5.1  Last_Bit --
  4942.       ----------------------
  4943.  
  4944.       --  LAST_BIT ::= static_SIMPLE_EXPRESSION
  4945.  
  4946.       --------------------------
  4947.       -- 13.8  Code statement --
  4948.       --------------------------
  4949.  
  4950.       --  CODE_STATEMENT ::= QUALIFIED_EXPRESSION;
  4951.  
  4952.       --  N_Code_Statement
  4953.       --  Sloc points to first token of subtype mark
  4954.       --  Expression (Node3)
  4955.  
  4956.       ------------------------
  4957.       -- 13.12  Restriction --
  4958.       ------------------------
  4959.  
  4960.       --  RESTRICTION ::=
  4961.       --    restriction_IDENTIFIER
  4962.       --  | restriction_parameter_IDENTIFIER => EXPRESSION
  4963.  
  4964.       --  There is no explicit node for restrictions. Instead the restriction
  4965.       --  appears in normal pragma syntax as a pragma argument association,
  4966.       --  which has the same syntactic form.
  4967.  
  4968.       --------------------------
  4969.       -- B.2  Shift Operators --
  4970.       --------------------------
  4971.  
  4972.       --  Calls to the intrinsic shift functions are converted to one of
  4973.       --  the following shift nodes, which have the form of normal binary
  4974.       --  operator names. Note that for a given shift operation, one node
  4975.       --  covers all possible types, as for normal operators.
  4976.  
  4977.       --  Note: it is perfectly permissible for the expander to generate
  4978.       --  shift operation nodes directly, in which case they will be analyzed
  4979.       --  and parsed in the usual manner.
  4980.  
  4981.       --  Sprint syntax: shift-function-name!(expr, count)
  4982.  
  4983.       --  Note: the Left_Opnd field holds the first argument (the value to
  4984.       --  be shifted). The Right_Opnd field holds the second argument (the
  4985.       --  shift count). The Chars field is the name of the intrinsic function.
  4986.  
  4987.       --  N_Op_Rotate_Left
  4988.       --  Sloc points to the function name
  4989.       --  plus fields for binary operator
  4990.       --  plus fields for expression
  4991.  
  4992.       --  N_Op_Rotate_Right
  4993.       --  Sloc points to the function name
  4994.       --  plus fields for binary operator
  4995.       --  plus fields for expression
  4996.  
  4997.       --  N_Op_Shift_Left
  4998.       --  Sloc points to the function name
  4999.       --  plus fields for binary operator
  5000.       --  plus fields for expression
  5001.  
  5002.       --  N_Op_Shift_Right_Arithmetic
  5003.       --  Sloc points to the function name
  5004.       --  plus fields for binary operator
  5005.       --  plus fields for expression
  5006.  
  5007.       --  N_Op_Shift_Right
  5008.       --  Sloc points to the function name
  5009.       --  plus fields for binary operator
  5010.       --  plus fields for expression
  5011.  
  5012.    --------------------------
  5013.    -- Obsolescent Features --
  5014.    --------------------------
  5015.  
  5016.       --  The syntax descriptions and tree nodes for obsolescent features are
  5017.       --  grouped together, corresponding to their location in appendix I in
  5018.       --  the RM. However, parsing and semantic analysis for these constructs
  5019.       --  is located in an appropriate chapter (see individual notes).
  5020.  
  5021.       ---------------------------
  5022.       -- I.3  Delta Constraint --
  5023.       ---------------------------
  5024.  
  5025.       --  Note: the parse routine for this construct is located in section
  5026.       --  3.5.9 of Par-Ch3, and semantic analysis is in Sem_Ch3, which is
  5027.       --  where delta constraint logically belongs.
  5028.  
  5029.       --  DELTA CONSTRAINT ::= DELTA STATIC_EXPRESSION [RANGE_CONSTRAINT]
  5030.  
  5031.       --  N_Delta_Constraint
  5032.       --  Sloc points to DELTA
  5033.       --  Delta_Expression (Node3)
  5034.       --  Range_Constraint (Node4) (set to Empty if not present)
  5035.  
  5036.       --------------------
  5037.       -- I.7  At Clause --
  5038.       --------------------
  5039.  
  5040.       --  AT_CLAUSE ::= for DIRECT_NAME use at EXPRESSION;
  5041.  
  5042.       --  Note: the parse routine for this construct is located in Par-Ch13,
  5043.       --  and the semantic analysis is in Sem_Ch13, where at clause logically
  5044.       --  belongs if it were not obsolescent.
  5045.  
  5046.       --  Note: in Ada 83 the expression must be a simple expression
  5047.  
  5048.       --  Gigi restriction: This node never appears, it is rewritten as an
  5049.       --  address attribute definition clause.
  5050.  
  5051.       --  N_At_Clause
  5052.       --  Sloc points to FOR
  5053.       --  Identifier (Node1)
  5054.       --  Expression (Node3)
  5055.  
  5056.       ---------------------
  5057.       -- I.8  Mod clause --
  5058.       ---------------------
  5059.  
  5060.       --  MOD_CLAUSE ::= at mod static_EXPRESSION;
  5061.  
  5062.       --  Note: the parse routine for this construct is located in Par-Ch13,
  5063.       --  and the semantic analysis is in Sem_Ch13, where mod clause logically
  5064.       --  belongs if it were not obsolescent.
  5065.  
  5066.       --  Note: in Ada 83, the expression must be a simple expression
  5067.  
  5068.       --  Gigi restriction: this node never appears. It is replaced
  5069.       --  by a corresponding Alignment attribute definition clause.
  5070.  
  5071.       --  N_Mod_Clause
  5072.       --  Sloc points to AT
  5073.       --  Expression (Node3)
  5074.  
  5075.    --------------------
  5076.    -- Semantic Nodes --
  5077.    --------------------
  5078.  
  5079.    --  These semantic nodes are used to hold additional semantic information.
  5080.    --  They are inserted into the tree as a resut of semantic processing.
  5081.    --  Although there are no legitimate source syntax constructions that
  5082.    --  correspond directly to these nodes, we need a source syntax for the
  5083.    --  reconstructed tree printed by Sprint, and the node descriptions here
  5084.    --  show this syntax.
  5085.  
  5086.       ---------------------
  5087.       -- Concat Multiple --
  5088.       ---------------------
  5089.  
  5090.       --  During semantic analysis, this node is created if a sequence of
  5091.       --  concatenation nodes construct a single concatenation result. The
  5092.       --  creation of this node is used to optimize both compile time
  5093.       --  evaluation and run time processing for concatenation, by avoiding
  5094.       --  the construction of intermediate results.
  5095.  
  5096.       --  Sprint syntax: expression && expression && expression ..
  5097.  
  5098.       --  N_Concat_Multiple
  5099.       --  Sloc points to first of the & operators
  5100.       --  Expressions (List1) points to list of operands
  5101.       --  plus fields for expression
  5102.  
  5103.       ----------------------------
  5104.       -- Conditional Expression --
  5105.       ----------------------------
  5106.  
  5107.       --  This node is used to represent an expression corresponding to the
  5108.       --  C construct (condition ? then-expression : else_expression), where
  5109.       --  Expressions is a three element list, whose first expression is the
  5110.       --  condition, and whose second and third expressions are the then and
  5111.       --  else expressions respectively.
  5112.  
  5113.       --  Sprint syntax: (if expr then expr else expr)
  5114.  
  5115.       --  N_Conditional_Expression
  5116.       --  Expressions (List1)
  5117.       --  Then_Actions (List2-Sem)
  5118.       --  Else_Actions (List3-Sem)
  5119.       --  plus fields for expression
  5120.  
  5121.       -------------------
  5122.       -- Expanded_Name --
  5123.       -------------------
  5124.  
  5125.       --  The N_Expanded_Name node is used to represent a selected component
  5126.       --  name that has been resolved to an expanded name. The semantic phase
  5127.       --  replaces N_Selected_Component nodes that represent names by the use
  5128.       --  of this node, leaving the N_Selected_Component node used only when
  5129.       --  the prefix is a record or protected type.
  5130.  
  5131.       --  The fields of the N_Expanded_Name node are layed out identically
  5132.       --  to those of the N_Selected_Component node, allowing conversion of
  5133.       --  an expanded name node to a selected component node to be done
  5134.       --  easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name.
  5135.  
  5136.       --  There is no special sprint syntax for an expanded name.
  5137.  
  5138.       --  N_Expanded_Name
  5139.       --  Sloc points to the period
  5140.       --  Chars (Name1) copy of Chars field of selector name
  5141.       --  Prefix (Node3)
  5142.       --  Selector_Name (Node2)
  5143.       --  Entity (Node4-Sem)
  5144.       --  Redundant_Use (Flag3-Sem) set for redundant use clause
  5145.       --  Has_Private_View (Flag11-Sem) set in generic units.
  5146.       --  Is_Current_Instance (Flag14-Sem) set if entity is enclosing type.
  5147.       --  plus fields for expression
  5148.  
  5149.       ------------------------
  5150.       -- Expression Actions --
  5151.       ------------------------
  5152.  
  5153.       --  The N_Expression_Actions node is inserted into an expression as a
  5154.       --  result of semantic processing that indicates that some actions
  5155.       --  (e.g. the creation of some implicit types) are required as part
  5156.       --  of the processing for an expression. The list of actions can
  5157.       --  include declarations, statements and expressions.
  5158.  
  5159.       --  Sprint syntax: [action; action; action; expression]
  5160.  
  5161.       --  N_Expression_Actions
  5162.       --  Sloc is set to some relevant token in the original source
  5163.       --  Actions (List1)
  5164.       --  Expression (Node3)
  5165.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  5166.       --  Has_Dynamic_Itype (Flag14-Sem)
  5167.       --  plus fields for expression
  5168.  
  5169.       --------------------
  5170.       -- Free Statement --
  5171.       --------------------
  5172.  
  5173.       --  The N_Free_Statement node is generated as a result of a call to an
  5174.       --  instantiation of Unchecked_Deallocation. The instantiation of this
  5175.       --  generic is handled specially and generates this node directly.
  5176.  
  5177.       --  Sprint syntax: free expression
  5178.  
  5179.       --  N_Free_Statement
  5180.       --  Sloc is copied from call to unchecked deallocation procedure
  5181.       --  Expression (Node3) argument to unchecked deallocation call
  5182.       --  Storage_Pool (Node1-Sem)
  5183.       --  Procedure_To_Call (Node4-Sem)
  5184.  
  5185.       -------------------
  5186.       -- Freeze Entity --
  5187.       -------------------
  5188.  
  5189.       --  This node marks the point in a declarative part at which an entity
  5190.       --  declared therein becomes frozen. The expander places initialization
  5191.       --  procedures for types at those points. Gigi uses the freezing point
  5192.       --  to elaborate entities that may depend on previous private types.
  5193.  
  5194.       --  The Entity field points back to the entity for the type (whose
  5195.       --  Freeze_Node field points back to this freeze node). Itypes can
  5196.       --  be present in the case where freezing generates associated types,
  5197.       --  or in the case of an Itype which itself needs freezing (in this
  5198.       --  case the Itype sits on its own freeze node)
  5199.  
  5200.       --  The Actions field contains a list of declarations and statements
  5201.       --  generated by the expander which are associated with the freeze
  5202.       --  node, and are elaborated as though the freeze node were replaced
  5203.       --  by this sequence of actions.
  5204.  
  5205.       --  Note: the Sloc field in the freeze node references a construct
  5206.       --  associated with the freezing point. This is used for posting
  5207.       --  messages in some error/warning situations, e.g. the case where
  5208.       --  a primitive operation of a tagged type is declared too late.
  5209.  
  5210.       --  Sprint syntax: freeze entity-name [
  5211.       --                   freeze actions
  5212.       --                 ]
  5213.  
  5214.       --  N_Freeze_Entity
  5215.       --  Sloc set near freeze point (see above special note)
  5216.       --  Entity (Node4-Sem)
  5217.       --  TSS_Elist (Elist3-Sem) (set to No_Elist if no associated TSS's)
  5218.       --  Actions (List1) (set to No_List if no freeze actions)
  5219.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  5220.       --  First_Subtype_Link (Node5-Sem) (set to Empty if no link)
  5221.       --  Has_Dynamic_Itype (Flag14-Sem)
  5222.  
  5223.       --------------------------------
  5224.       -- Implicit Label Declaration --
  5225.       --------------------------------
  5226.  
  5227.       --  An implicit label declaration is created for every occurrence of a
  5228.       --  label on a statement or a label on a block or loop. It is chained
  5229.       --  in the declarations of the innermost enclosing block as specified
  5230.       --  in RM section 5.1 (3).
  5231.  
  5232.       --  Note: from the grammar, this might better be called an implicit
  5233.       --  statement identifier declaration, but the term we choose seems
  5234.       --  friendlier, since at least informally statement identifiers are
  5235.       --  called labels in both cases (i.e. when used in labels, and when
  5236.       --  used as the identifiers of blocks and loops).
  5237.  
  5238.       --  Note: although this is logically a semantic node, since it does
  5239.       --  not correspond directly to a source syntax construction, these
  5240.       --  nodes are actually created by the parser in a post pass done just
  5241.       --  after parsing is complete, before semantic analysis is started (see
  5242.       --  the Par.Labl subunit in file par-labl.adb).
  5243.  
  5244.       --  Sprint syntax: labelname : label;
  5245.  
  5246.       --  The label field in the implicit label node points to the node
  5247.       --  containing the label (N_Label, N_Loop_Statement, N_Block_Statement).
  5248.  
  5249.       --  N_Implicit_Label_Declaration
  5250.       --  Sloc points to the << of the label
  5251.       --  Defining_Identifier (Node1)
  5252.       --  Label (Node2) points to the associated node
  5253.  
  5254.       --------------------
  5255.       -- Implicit Types --
  5256.       --------------------
  5257.  
  5258.       --  Normally implicit types are attached to the node to which they
  5259.       --  apply. For example, in the case of a subexpression which requires
  5260.       --  implicit types, the implicit types are attached to the subexpression
  5261.       --  node. However, in certain situations, there is no node to which the
  5262.       --  list of implicit types can be attached, and in this situation, an
  5263.       --  N_Implicit_Types node is created to hold the list.
  5264.  
  5265.       --  Sprint syntax: implicit type type-name is <Einfo.Entity_Kind name>.
  5266.  
  5267.       --  N_Implicit_Types
  5268.       --  Sloc is copied from the node giving rise to first implicit type
  5269.       --  First_Itype (Node2-Sem)
  5270.       --  Has_Dynamic_Itype (Flag14-Sem)
  5271.  
  5272.       --------------------
  5273.       -- Interpretation --
  5274.       --------------------
  5275.  
  5276.       --  During overload resolution, the Etype field of a possibly overloaded
  5277.       --  reference is used to point to a chain of N_Interpretation nodes, one
  5278.       --  for each possible interpretation. See Sem_Type for further details.
  5279.  
  5280.       --  Note that these nodes are simply for temporary use by the semantic
  5281.       --  analyzer. Logically they are not part of the tree, and are always
  5282.       --  eventually eliminated when final type determination is complete.
  5283.       --  Gigi will never see these nodes in the final tree.
  5284.  
  5285.       --  Sprint syntax: none, since Sprint does not print type information
  5286.  
  5287.       --  N_Interpretation
  5288.       --  Sloc is copied from the node to which the interpretation applies
  5289.       --  Chars (Name1) is copied from Chars (Etype)
  5290.       --  Next_Interp (Node2-Sem)
  5291.       --  Entity (Node4-Sem)
  5292.       --  Etype (Node5-Sem)
  5293.  
  5294.       ----------------------------
  5295.       -- Raise_Constraint_Error --
  5296.       ----------------------------
  5297.  
  5298.       --  This node is created during semantic analysis to replace a node
  5299.       --  for an expression that is determined to definitely raise constraint
  5300.       --  error. The creation of this node will usually be accompanied by a
  5301.       --  warning message (unless it appears within the right operand of a
  5302.       --  short circuit form whose left argument is static and decisively
  5303.       --  eliminates elaboration of the constraint error.
  5304.  
  5305.       --  Sprint syntax: [constraint_error]
  5306.  
  5307.       --  N_Raise_Constraint_Error
  5308.       --  Sloc is copied from the expression generating the exception
  5309.       --  plus fields for expression
  5310.  
  5311.       ---------------
  5312.       -- Reference --
  5313.       ---------------
  5314.  
  5315.       --  For a number of purposes, we need to construct references to objects.
  5316.       --  These references are subsequently treated as normal access values.
  5317.       --  An example is the construction of the parameter block passed to a
  5318.       --  task entry. The N_Reference node is provided for this purpose. It is
  5319.       --  similar in effect to the use of the Unrestricted_Access attribute,
  5320.       --  and like Unrestricted_Access can be applied to objects which would
  5321.       --  not be valid prefixes for the Unchecked_Access attribute (e.g.
  5322.       --  objects which are not aliased, and slices). In addition it can be
  5323.       --  applied to composite type values as well as objects, including string
  5324.       --  values and aggregates.
  5325.  
  5326.       --  Note: we use the Prefix field for this expression so that the
  5327.       --  resulting node can be treated using common code with the attribute
  5328.       --  nodes for the 'Access and related attributes. Logically it would make
  5329.       --  more sense to call it an Expression field, but then we would have to
  5330.       --  special case the treatment of the N_Reference node.
  5331.  
  5332.       --  Sprint syntax: prefix'reference
  5333.  
  5334.       --  N_Reference
  5335.       --  Sloc is copied from the expression
  5336.       --  Prefix (Node3)
  5337.       --  First_Itype (Node2-Sem) (set to Empty if no Itypes)
  5338.       --  Has_Dynamic_Itype (Flag14-Sem)
  5339.       --  plus fields for expression
  5340.  
  5341.       -------------------------------
  5342.       -- Unchecked Type Conversion --
  5343.       -------------------------------
  5344.  
  5345.       --  An unchecked type conversion node represents the semantic action
  5346.       --  corresponding to a call to an instantiation of Unchecked_Conversion.
  5347.       --  It is generated as a result of actual use of Unchecked_Conversion
  5348.       --  and also the expander generates unchecked type conversion nodes
  5349.       --  directly for expansion of complex semantic actions.
  5350.  
  5351.       --  Note: an unchecked type conversion is a variable as far as the
  5352.       --  semantics are concerned, which is convenient for the expander.
  5353.       --  This does not change what Ada source programs are legal, since
  5354.       --  clearly a function call to an instantiation of Unchecked_Conversion
  5355.       --  is not a variable in any case.
  5356.  
  5357.       --  Sprint syntax: subtype-mark!(expression).
  5358.  
  5359.       --  N_Unchecked_Type_Conversion
  5360.       --  Sloc points to related node in source
  5361.       --  Subtype_Mark (Node4)
  5362.       --  Expression (Node3)
  5363.       --  plus fields for expression
  5364.  
  5365.    -----------
  5366.    -- Empty --
  5367.    -----------
  5368.  
  5369.    --  N_Empty
  5370.    --  Chars (Name1) is set to No_Name
  5371.    --  Used as the contents of the Nkind field of the dummy Empty node
  5372.    --  and in some other situations to indicate an uninitialized value.
  5373.  
  5374.    -----------
  5375.    -- Error --
  5376.    -----------
  5377.  
  5378.    --  N_Error
  5379.    --  Chars (Name1) is set to Error_Name
  5380.    --  Used as the contents of the Nkind field of the dummy Error node
  5381.  
  5382.    --------------------------
  5383.    -- Node Type Definition --
  5384.    --------------------------
  5385.  
  5386.    --  The following is the definition of the Node_Kind type. As previously
  5387.    --  discussed, this is separated off to allow rearrangement of the order
  5388.    --  to facilitiate definition of subtype ranges. The comments show the
  5389.    --  subtype classes which apply to each set of node kinds. The first
  5390.    --  entry in the comment characterizes the following list of nodes.
  5391.  
  5392.    type Node_Kind is (
  5393.       N_Unused_At_Start,
  5394.  
  5395.       --  N_Representation_Clause
  5396.       N_At_Clause,
  5397.       N_Component_Clause,
  5398.       N_Enumeration_Representation_Clause,
  5399.       N_Mod_Clause,
  5400.       N_Record_Representation_Clause,
  5401.  
  5402.       --  N_Representation_Clause, N_Has_Chars
  5403.  
  5404.       N_Attribute_Definition_Clause,
  5405.  
  5406.       --  N_Has_Chars
  5407.       N_Empty,
  5408.       N_Error,
  5409.       N_Pragma,
  5410.       N_Pragma_Argument_Association,
  5411.  
  5412.       --  N_Entity, N_Has_Etype, N_Has_Chars
  5413.       N_Defining_Character_Literal,
  5414.       N_Defining_Identifier,
  5415.       N_Defining_Operator_Symbol,
  5416.  
  5417.       --  N_Has_Etype, N_Has_Chars
  5418.  
  5419.       N_Interpretation,
  5420.  
  5421.       --  N_Subexpr, N_Has_Etype, N_Has_Chars, N_Subexpr_Has_Entity
  5422.       N_Expanded_Name,
  5423.  
  5424.       --  N_Direct_Name, N_Subexpr, N_Has_Etype,
  5425.       --  N_Has_Chars, N_Subexpr_Has_Entity
  5426.       N_Identifier,
  5427.       N_Character_Literal,
  5428.       N_Operator_Symbol,
  5429.  
  5430.       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype,
  5431.       --  N_Has_Chars, N_Subexpr_Has_Entity
  5432.       N_Op_Add,
  5433.       N_Op_And,
  5434.       N_Op_Concat,
  5435.       N_Op_Divide,
  5436.       N_Op_Eq,
  5437.       N_Op_Expon,
  5438.       N_Op_Ge,
  5439.       N_Op_Gt,
  5440.       N_Op_Le,
  5441.       N_Op_Lt,
  5442.       N_Op_Mod,
  5443.       N_Op_Multiply,
  5444.       N_Op_Ne,
  5445.       N_Op_Or,
  5446.       N_Op_Rem,
  5447.       N_Op_Subtract,
  5448.       N_Op_Xor,
  5449.  
  5450.       --  N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype,
  5451.       --  N_Op_Shift, N_Has_Chars, N_Subexpr_Has_Entity
  5452.       N_Op_Rotate_Left,
  5453.       N_Op_Rotate_Right,
  5454.       N_Op_Shift_Left,
  5455.       N_Op_Shift_Right,
  5456.       N_Op_Shift_Right_Arithmetic,
  5457.  
  5458.       --  N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype,
  5459.       --  N_Has_Chars, N_Subexpr_Has_Entity
  5460.       N_Op_Abs,
  5461.       N_Op_Minus,
  5462.       N_Op_Not,
  5463.       N_Op_Plus,
  5464.  
  5465.       --  N_Subexpr, N_Has_Etype, N_Subexpr_Has_Entity
  5466.       N_Attribute_Reference,
  5467.  
  5468.       --  N_Subexpr, N_Has_Etype
  5469.       N_And_Then,
  5470.       N_Concat_Multiple,
  5471.       N_Conditional_Expression,
  5472.       N_Explicit_Dereference,
  5473.       N_Function_Call,
  5474.       N_In,
  5475.       N_Indexed_Component,
  5476.       N_Integer_Literal,
  5477.       N_Not_In,
  5478.       N_Null,
  5479.       N_Or_Else,
  5480.       N_Procedure_Call_Statement,
  5481.       N_Qualified_Expression,
  5482.       N_Raise_Constraint_Error,
  5483.       N_Range,
  5484.       N_Real_Literal,
  5485.       N_Selected_Component,
  5486.       N_Type_Conversion,
  5487.       N_Unchecked_Type_Conversion,
  5488.  
  5489.       --  N_Subexpr, N_Has_Etype, N_Has_Itypes
  5490.       N_Allocator,
  5491.       N_Aggregate,
  5492.       N_Expression_Actions,
  5493.       N_Extension_Aggregate,
  5494.       N_Reference,
  5495.       N_Slice,
  5496.       N_String_Literal,
  5497.  
  5498.       --  N_Has_Etype, N_Has_Itypes
  5499.       N_Subtype_Indication,
  5500.  
  5501.       --  N_Has_Itypes
  5502.       N_Component_Declaration,
  5503.       N_Entry_Body,
  5504.       N_Entry_Declaration,
  5505.       N_Entry_Index_Specification,
  5506.       N_Formal_Object_Declaration,
  5507.       N_Formal_Type_Declaration,
  5508.       N_Freeze_Entity,
  5509.       N_Full_Type_Declaration,
  5510.       N_Incomplete_Type_Declaration,
  5511.       N_Implicit_Types,
  5512.       N_Loop_Parameter_Specification,
  5513.       N_Object_Declaration,
  5514.       N_Private_Extension_Declaration,
  5515.       N_Private_Type_Declaration,
  5516.       N_Subtype_Declaration,
  5517.       N_Protected_Type_Declaration,
  5518.       N_Accept_Statement,
  5519.  
  5520.       --  N_Has_Itypes, N_Subprogram_Specification
  5521.       N_Function_Specification,
  5522.       N_Procedure_Specification,
  5523.  
  5524.       --  N_Has_Itypes, N_Access_To_Subprogram_Definition
  5525.       N_Access_Function_Definition,
  5526.       N_Access_Procedure_Definition,
  5527.  
  5528.       --  N_Has_Itypes, N_Later_Decl_Item,
  5529.       N_Task_Type_Declaration,
  5530.  
  5531.       --  N_Body_Stub, N_Later_Decl_Item
  5532.       N_Package_Body_Stub,
  5533.       N_Protected_Body_Stub,
  5534.       N_Subprogram_Body_Stub,
  5535.       N_Task_Body_Stub,
  5536.  
  5537.       --  N_Generic_Instantiation, N_Later_Decl_Item
  5538.       N_Function_Instantiation,
  5539.       N_Package_Instantiation,
  5540.       N_Procedure_Instantiation,
  5541.  
  5542.       --  N_Unit_Body, N_Later_Decl_Item
  5543.       N_Package_Body,
  5544.       N_Subprogram_Body,
  5545.  
  5546.       --  N_Later_Decl_Item
  5547.       N_Implicit_Label_Declaration,
  5548.       N_Package_Declaration,
  5549.       N_Single_Task_Declaration,
  5550.       N_Subprogram_Declaration,
  5551.       N_Task_Body,
  5552.       N_Use_Package_Clause,
  5553.  
  5554.       --  N_Generic_Declaration, N_Later_Decl_Item
  5555.       N_Generic_Package_Declaration,
  5556.       N_Generic_Subprogram_Declaration,
  5557.  
  5558.       --  N_Array_Type_Definition
  5559.       N_Constrained_Array_Definition,
  5560.       N_Unconstrained_Array_Definition,
  5561.  
  5562.       --  N_Renaming_Declaration
  5563.       N_Exception_Renaming_Declaration,
  5564.       N_Object_Renaming_Declaration,
  5565.       N_Package_Renaming_Declaration,
  5566.       N_Subprogram_Renaming_Declaration,
  5567.  
  5568.       --  N_Generic_Renaming_Declarations, N_Renaming_Declaration
  5569.       N_Generic_Function_Renaming_Declaration,
  5570.       N_Generic_Package_Renaming_Declaration,
  5571.       N_Generic_Procedure_Renaming_Declaration,
  5572.  
  5573.       --  N_Statement
  5574.       N_Abort_Statement,
  5575.       N_Assignment_Statement,
  5576.       N_Asynchronous_Select,
  5577.       N_Block_Statement,
  5578.       N_Case_Statement,
  5579.       N_Code_Statement,
  5580.       N_Conditional_Entry_Call,
  5581.       N_Delay_Relative_Statement,
  5582.       N_Delay_Until_Statement,
  5583.       N_Entry_Call_Statement,
  5584.       N_Exit_Statement,
  5585.       N_Free_Statement,
  5586.       N_Goto_Statement,
  5587.       N_If_Statement,
  5588.       N_Loop_Statement,
  5589.       N_Null_Statement,
  5590.       N_Raise_Statement,
  5591.       N_Requeue_Statement,
  5592.       N_Return_Statement,
  5593.       N_Selective_Accept,
  5594.       N_Timed_Entry_Call,
  5595.  
  5596.       --  Other nodes (not part of any subtype class)
  5597.       N_Abortable_Part,
  5598.       N_Abstract_Subprogram_Declaration,
  5599.       N_Accept_Alternative,
  5600.       N_Access_Definition,
  5601.       N_Access_To_Object_Definition,
  5602.       N_Case_Statement_Alternative,
  5603.       N_Compilation_Unit,
  5604.       N_Component_Association,
  5605.       N_Component_List,
  5606.       N_Derived_Type_Definition,
  5607.       N_Decimal_Fixed_Point_Definition,
  5608.       N_Defining_Program_Unit_Name,
  5609.       N_Delay_Alternative,
  5610.       N_Delta_Constraint,
  5611.       N_Designator,
  5612.       N_Digits_Constraint,
  5613.       N_Discriminant_Association,
  5614.       N_Discriminant_Specification,
  5615.       N_Elsif_Part,
  5616.       N_Enumeration_Type_Definition,
  5617.       N_Entry_Body_Formal_Part,
  5618.       N_Entry_Call_Alternative,
  5619.       N_Exception_Declaration,
  5620.       N_Exception_Handler,
  5621.       N_Floating_Point_Definition,
  5622.       N_Formal_Decimal_Fixed_Point_Definition,
  5623.       N_Formal_Derived_Type_Definition,
  5624.       N_Formal_Discrete_Type_Definition,
  5625.       N_Formal_Floating_Point_Definition,
  5626.       N_Formal_Modular_Type_Definition,
  5627.       N_Formal_Ordinary_Fixed_Point_Definition,
  5628.       N_Formal_Package_Declaration,
  5629.       N_Formal_Private_Type_Definition,
  5630.       N_Formal_Signed_Integer_Type_Definition,
  5631.       N_Formal_Subprogram_Declaration,
  5632.       N_Generic_Association,
  5633.       N_Handled_Sequence_Of_Statements,
  5634.       N_Index_Or_Discriminant_Constraint,
  5635.       N_Iteration_Scheme,
  5636.       N_Label,
  5637.       N_Modular_Type_Definition,
  5638.       N_Number_Declaration,
  5639.       N_Ordinary_Fixed_Point_Definition,
  5640.       N_Others_Choice,
  5641.       N_Package_Specification,
  5642.       N_Parameter_Association,
  5643.       N_Parameter_Specification,
  5644.       N_Protected_Body,
  5645.       N_Protected_Definition,
  5646.       N_Range_Constraint,
  5647.       N_Real_Range_Specification,
  5648.       N_Record_Definition,
  5649.       N_Signed_Integer_Type_Definition,
  5650.       N_Single_Protected_Declaration,
  5651.       N_Subunit,
  5652.       N_Task_Definition,
  5653.       N_Terminate_Alternative,
  5654.       N_Triggering_Alternative,
  5655.       N_Use_Type_Clause,
  5656.       N_Variant,
  5657.       N_Variant_Part,
  5658.       N_With_Clause,
  5659.       N_Unused_At_End);
  5660.  
  5661.    ----------------------------
  5662.    -- Node Class Definitions --
  5663.    ----------------------------
  5664.  
  5665.    subtype N_Access_To_Subprogram_Definition is Node_Kind range
  5666.      N_Access_Function_Definition ..
  5667.      N_Access_Procedure_Definition;
  5668.  
  5669.    subtype N_Array_Type_Definition is Node_Kind range
  5670.      N_Constrained_Array_Definition ..
  5671.      N_Unconstrained_Array_Definition;
  5672.  
  5673.    subtype N_Binary_Op is Node_Kind range
  5674.      N_Op_Add ..
  5675.      N_Op_Shift_Right_Arithmetic;
  5676.  
  5677.    subtype N_Body_Stub is Node_Kind range
  5678.      N_Package_Body_Stub ..
  5679.      N_Task_Body_Stub;
  5680.  
  5681.    subtype N_Direct_Name is Node_Kind range
  5682.      N_Identifier ..
  5683.      N_Operator_Symbol;
  5684.  
  5685.    subtype N_Entity is Node_Kind range
  5686.      N_Defining_Character_Literal ..
  5687.      N_Defining_Operator_Symbol;
  5688.  
  5689.    subtype N_Generic_Declaration is Node_Kind range
  5690.      N_Generic_Package_Declaration ..
  5691.      N_Generic_Subprogram_Declaration;
  5692.  
  5693.    subtype N_Generic_Instantiation is Node_Kind range
  5694.      N_Function_Instantiation ..
  5695.      N_Procedure_Instantiation;
  5696.  
  5697.    subtype N_Generic_Renaming_Declaration is Node_Kind range
  5698.      N_Generic_Function_Renaming_Declaration ..
  5699.      N_Generic_Procedure_Renaming_Declaration;
  5700.  
  5701.    subtype N_Has_Chars is Node_Kind range
  5702.      N_Attribute_Definition_Clause ..
  5703.      N_Op_Plus;
  5704.  
  5705.    subtype N_Has_Etype is Node_Kind range
  5706.      N_Defining_Character_Literal ..
  5707.      N_Subtype_Indication;
  5708.  
  5709.    subtype N_Has_Itypes is Node_Kind range
  5710.      N_Allocator ..
  5711.      N_Task_Type_Declaration;
  5712.    --  Nodes having First_Itype and Has_Dynamic_Itype fields
  5713.  
  5714.    subtype N_Op_Shift is Node_Kind range
  5715.      N_Op_Rotate_Left ..
  5716.      N_Op_Shift_Right_Arithmetic;
  5717.  
  5718.    subtype N_Later_Decl_Item is Node_Kind range
  5719.      N_Package_Body_Stub .. N_Generic_Subprogram_Declaration;
  5720.    --  Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and
  5721.    --  includes only those items which can appear as later declarative
  5722.    --  items. This also includes N_Implicit_Label_Declaration which is
  5723.    --  not specifically in the grammar but may appear as a valid later
  5724.    --  declarative items. It does NOT include N_Pragma which can also
  5725.    --  appear among later declarative items.
  5726.  
  5727.    subtype N_Op is Node_Kind range
  5728.      N_Op_Add ..
  5729.      N_Op_Plus;
  5730.  
  5731.    subtype N_Renaming_Declaration is Node_Kind range
  5732.      N_Exception_Renaming_Declaration ..
  5733.      N_Generic_Procedure_Renaming_Declaration;
  5734.  
  5735.    subtype N_Representation_Clause is Node_Kind range
  5736.      N_At_Clause ..
  5737.      N_Attribute_Definition_Clause;
  5738.  
  5739.    subtype N_Statement is Node_Kind range
  5740.      N_Abort_Statement ..
  5741.      N_Timed_Entry_Call;
  5742.    --  Note that this includes all statement types except for the cases of the
  5743.    --  N_Procedure_Call_Statement which is considered to be a subexpression
  5744.    --  (since overloading is possible, so it needs to go through the normal
  5745.    --  overloading resolution for expressions), and also the special case of
  5746.    --  N_Accept_Statement (which has Itypes and therefore cannot be fit into
  5747.    --  the range of statement types).
  5748.  
  5749.    subtype N_Subexpr is Node_Kind range
  5750.      N_Expanded_Name ..
  5751.      N_String_Literal;
  5752.    --  Nodes with expression fields
  5753.  
  5754.    subtype N_Subexpr_Has_Entity is Node_Kind range
  5755.      N_Expanded_Name ..
  5756.      N_Attribute_Reference;
  5757.    --  Subexpression nodes that have Entity fields
  5758.  
  5759.    subtype N_Subprogram_Specification is Node_Kind range
  5760.      N_Function_Specification ..
  5761.      N_Procedure_Specification;
  5762.  
  5763.    subtype N_Unary_Op is Node_Kind range
  5764.      N_Op_Abs ..
  5765.      N_Op_Plus;
  5766.  
  5767.    subtype N_Unit_Body is Node_Kind range
  5768.      N_Package_Body ..
  5769.      N_Subprogram_Body;
  5770.  
  5771.    ---------------------------
  5772.    -- Node Access Functions --
  5773.    ---------------------------
  5774.  
  5775.    --  The following functions return the contents of the indicated field of
  5776.    --  the node referenced by the argument, which is a Node_Id. They provide
  5777.    --  logical access to fields in the node which could be accessed using the
  5778.    --  Atree.Unchecked_Access package, but the idea is always to use these
  5779.    --  higher level routines which preserve strong typing. In debug mode,
  5780.    --  these routines check that they are being applied to an appropriate
  5781.    --  node, as well as checking that the node is in range.
  5782.  
  5783.    function Abort_Present
  5784.      (N : Node_Id) return Boolean;    -- Flag1
  5785.  
  5786.    function Abortable_Part
  5787.      (N : Node_Id) return Node_Id;    -- Node2
  5788.  
  5789.    function Abstract_Present
  5790.      (N : Node_Id) return Boolean;    -- Flag4
  5791.  
  5792.    function Accept_Statement
  5793.      (N : Node_Id) return Node_Id;    -- Node2
  5794.  
  5795.    function Actions
  5796.      (N : Node_Id) return List_Id;    -- List1
  5797.  
  5798.    function Activation_Chain_Entity
  5799.      (N : Node_Id) return Node_Id;    -- Node2
  5800.  
  5801.    function Acts_As_Spec
  5802.      (N : Node_Id) return Boolean;    -- Flag4
  5803.  
  5804.    function Aggregate_Bounds
  5805.      (N : Node_Id) return Node_Id;    -- Node3
  5806.  
  5807.    function Aliased_Present
  5808.      (N : Node_Id) return Boolean;    -- Flag1
  5809.  
  5810.    function All_Present
  5811.      (N : Node_Id) return Boolean;    -- Flag1
  5812.  
  5813.    function Alternatives
  5814.      (N : Node_Id) return List_Id;    -- List4
  5815.  
  5816.    function Analyzed
  5817.      (N : Node_Id) return Boolean;    -- Flag15
  5818.  
  5819.    function Ancestor_Part
  5820.      (N : Node_Id) return Node_Id;    -- Node3
  5821.  
  5822.    function Array_Aggregate
  5823.      (N : Node_Id) return Node_Id;    -- Node4
  5824.  
  5825.    function Assignment_OK
  5826.      (N : Node_Id) return Boolean;    -- Flag1
  5827.  
  5828.    function Attribute_Name
  5829.      (N : Node_Id) return Name_Id;    -- Name2
  5830.  
  5831.    function Backwards_OK
  5832.      (N : Node_Id) return Boolean;    -- Flag6
  5833.  
  5834.    function Bad_Is_Detected
  5835.      (N : Node_Id) return Boolean;    -- Flag1
  5836.  
  5837.    function Body_Required
  5838.      (N : Node_Id) return Boolean;    -- Flag3
  5839.  
  5840.    function Box_Present
  5841.      (N : Node_Id) return Boolean;    -- Flag1
  5842.  
  5843.    function Cannot_Be_Constant
  5844.      (N : Node_Id) return Boolean;    -- Flag18
  5845.  
  5846.    function Char_Literal_Value
  5847.      (N : Node_Id) return Char_Code;  -- Char_Code2
  5848.  
  5849.    function Chars
  5850.      (N : Node_Id) return Name_Id;    -- Name1
  5851.  
  5852.    function Choice_Parameter
  5853.      (N : Node_Id) return Node_Id;    -- Node2
  5854.  
  5855.    function Choices
  5856.      (N : Node_Id) return List_Id;    -- List1
  5857.  
  5858.    function Cleanup_Call
  5859.      (N : Node_Id) return Node_Id;    -- Node5
  5860.  
  5861.    function Component_Associations
  5862.      (N : Node_Id) return List_Id;    -- List4
  5863.  
  5864.    function Component_Clauses
  5865.      (N : Node_Id) return List_Id;    -- List3
  5866.  
  5867.    function Component_Items
  5868.      (N : Node_Id) return List_Id;    -- List3
  5869.  
  5870.    function Component_List
  5871.      (N : Node_Id) return Node_Id;    -- Node1
  5872.  
  5873.    function Component_Name
  5874.      (N : Node_Id) return Node_Id;    -- Node1
  5875.  
  5876.    function Condition
  5877.      (N : Node_Id) return Node_Id;    -- Node5
  5878.  
  5879.    function Condition_Actions
  5880.      (N : Node_Id) return List_Id;    -- List3
  5881.  
  5882.    function Constant_Present
  5883.      (N : Node_Id) return Boolean;    -- Flag17
  5884.  
  5885.    function Constraint
  5886.      (N : Node_Id) return Node_Id;    -- Node3
  5887.  
  5888.    function Constraints
  5889.      (N : Node_Id) return List_Id;    -- List1
  5890.  
  5891.    function Context_Installed
  5892.      (N : Node_Id) return Boolean;    -- Flag3
  5893.  
  5894.    function Context_Items
  5895.      (N : Node_Id) return List_Id;    -- List1
  5896.  
  5897.    function Controlling_Argument
  5898.      (N : Node_Id) return Node_Id;    -- Node1
  5899.  
  5900.    function Conversion_OK
  5901.      (N : Node_Id) return Boolean;    -- Flag14
  5902.  
  5903.    function Corresponding_Body
  5904.      (N : Node_Id) return Node_Id;    -- Node5
  5905.  
  5906.    function Corresponding_Integer_Value
  5907.      (N : Node_Id) return Uint;       -- Uint4
  5908.  
  5909.    function Corresponding_Spec
  5910.      (N : Node_Id) return Node_Id;    -- Node5
  5911.  
  5912.    function Corresponding_Stub
  5913.      (N : Node_Id) return Node_Id;    -- Node3
  5914.  
  5915.    function Debug_Statement
  5916.      (N : Node_Id) return Node_Id;    -- Node3
  5917.  
  5918.    function Declarations
  5919.      (N : Node_Id) return List_Id;    -- List3
  5920.  
  5921.    function Default_Name
  5922.      (N : Node_Id) return Node_Id;    -- Node2
  5923.  
  5924.    function Defining_Identifier
  5925.      (N : Node_Id) return Entity_Id;  -- Node1
  5926.  
  5927.    function Defining_Unit_Name
  5928.      (N : Node_Id) return Node_Id;    -- Node1
  5929.  
  5930.    function Delay_Alternative
  5931.      (N : Node_Id) return Node_Id;    -- Node4
  5932.  
  5933.    function Delay_Statement
  5934.      (N : Node_Id) return Node_Id;    -- Node2
  5935.  
  5936.    function Delta_Expression
  5937.      (N : Node_Id) return Node_Id;    -- Node3
  5938.  
  5939.    function Digits_Expression
  5940.      (N : Node_Id) return Node_Id;    -- Node2
  5941.  
  5942.    function Discrete_Choices
  5943.      (N : Node_Id) return List_Id;    -- List4
  5944.  
  5945.    function Discrete_Range
  5946.      (N : Node_Id) return Node_Id;    -- Node4
  5947.  
  5948.    function Discrete_Subtype_Definition
  5949.      (N : Node_Id) return Node_Id;    -- Node4
  5950.  
  5951.    function Discrete_Subtype_Definitions
  5952.      (N : Node_Id) return List_Id;    -- List2
  5953.  
  5954.    function Discriminant_Specifications
  5955.      (N : Node_Id) return List_Id;    -- List4
  5956.  
  5957.    function Discriminant_Type
  5958.      (N : Node_Id) return Node_Id;    -- Node2
  5959.  
  5960.    function Do_Access_Check
  5961.      (N : Node_Id) return Boolean;    -- Flag11
  5962.  
  5963.    function Do_Accessibility_Check
  5964.      (N : Node_Id) return Boolean;    -- Flag3
  5965.  
  5966.    function Do_Discriminant_Check
  5967.      (N : Node_Id) return Boolean;    -- Flag3
  5968.  
  5969.    function Do_Division_Check
  5970.      (N : Node_Id) return Boolean;    -- Flag3
  5971.  
  5972.    function Do_Length_Check
  5973.      (N : Node_Id) return Boolean;    -- Flag4
  5974.  
  5975.    function Do_Overflow_Check
  5976.      (N : Node_Id) return Boolean;    -- Flag17
  5977.  
  5978.    function Do_Range_Check
  5979.      (N : Node_Id) return Boolean;    -- Flag9
  5980.  
  5981.    function Do_Storage_Check
  5982.      (N : Node_Id) return Boolean;    -- Flag17
  5983.  
  5984.    function Do_Tag_Check
  5985.      (N : Node_Id) return Boolean;    -- Flag3
  5986.  
  5987.    function Elaborate_Present
  5988.      (N : Node_Id) return Boolean;    -- Flag4
  5989.  
  5990.    function Elaborate_All_Present
  5991.      (N : Node_Id) return Boolean;    -- Flag1
  5992.  
  5993.    function Elaborate_Body_Present
  5994.      (N : Node_Id) return Boolean;    -- Flag7
  5995.  
  5996.    function Else_Actions
  5997.      (N : Node_Id) return List_Id;    -- List3
  5998.  
  5999.    function Else_Statements
  6000.      (N : Node_Id) return List_Id;    -- List4
  6001.  
  6002.    function Elsif_Parts
  6003.      (N : Node_Id) return List_Id;    -- List3
  6004.  
  6005.    function Enclosing_Variant
  6006.      (N : Node_Id) return Node_Id;    -- Node2
  6007.  
  6008.    function Entity
  6009.      (N : Node_Id) return Node_Id;    -- Node4
  6010.  
  6011.    function Entry_Body_Formal_Part
  6012.      (N : Node_Id) return Node_Id;    -- Node5
  6013.  
  6014.    function Entry_Call_Alternative
  6015.      (N : Node_Id) return Node_Id;    -- Node1
  6016.  
  6017.    function Entry_Call_Statement
  6018.      (N : Node_Id) return Node_Id;    -- Node1
  6019.  
  6020.    function Entry_Direct_Name
  6021.      (N : Node_Id) return Node_Id;    -- Node1
  6022.  
  6023.    function Entry_Index
  6024.      (N : Node_Id) return Node_Id;    -- Node5
  6025.  
  6026.    function Entry_Index_Specification
  6027.      (N : Node_Id) return Node_Id;    -- Node1
  6028.  
  6029.    function Error_Posted
  6030.      (N : Node_Id) return Boolean;    -- Flag13
  6031.  
  6032.    function Etype
  6033.      (N : Node_Id) return Node_Id;    -- Node5
  6034.  
  6035.    function Exception_Choices
  6036.      (N : Node_Id) return List_Id;    -- List4
  6037.  
  6038.    function Exception_Handlers
  6039.      (N : Node_Id) return List_Id;    -- List4
  6040.  
  6041.    function Explicit_Actual_Parameter
  6042.      (N : Node_Id) return Node_Id;    -- Node3
  6043.  
  6044.    function Explicit_Generic_Actual_Parameter
  6045.      (N : Node_Id) return Node_Id;    -- Node1
  6046.  
  6047.    function Expression
  6048.      (N : Node_Id) return Node_Id;    -- Node3
  6049.  
  6050.    function Expressions
  6051.      (N : Node_Id) return List_Id;    -- List1
  6052.  
  6053.    function First_Bit
  6054.      (N : Node_Id) return Node_Id;    -- Node3
  6055.  
  6056.    function First_Inlined_Subprogram
  6057.      (N : Node_Id) return Entity_Id;  -- Node5
  6058.  
  6059.    function First_Itype
  6060.      (N : Node_Id) return Entity_Id;  -- Node2
  6061.  
  6062.    function First_Name
  6063.      (N : Node_Id) return Boolean;    -- Flag5
  6064.  
  6065.    function First_Named_Actual
  6066.      (N : Node_Id) return Node_Id;    -- Node4
  6067.  
  6068.    function First_Real_Statement
  6069.      (N : Node_Id) return Node_Id;    -- Node2
  6070.  
  6071.    function First_Subtype_Link
  6072.      (N : Node_Id) return Entity_Id;  -- Node5
  6073.  
  6074.    function Float_Truncate
  6075.      (N : Node_Id) return Boolean;    -- Flag11
  6076.  
  6077.    function Following_Pragmas
  6078.      (N : Node_Id) return List_Id;    -- List3
  6079.  
  6080.    function Formal_Type_Definition
  6081.      (N : Node_Id) return Node_Id;    -- Node3
  6082.  
  6083.    function Forwards_OK
  6084.      (N : Node_Id) return Boolean;    -- Flag5
  6085.  
  6086.    function Generic_Associations
  6087.      (N : Node_Id) return List_Id;    -- List3
  6088.  
  6089.    function Generic_Formal_Declarations
  6090.      (N : Node_Id) return List_Id;    -- List3
  6091.  
  6092.    function Generic_Parent
  6093.      (N : Node_Id) return Node_Id;    -- Node5
  6094.  
  6095.    function Handled_Statement_Sequence
  6096.      (N : Node_Id) return Node_Id;    -- Node4
  6097.  
  6098.    function Has_Created_Identifier
  6099.      (N : Node_Id) return Boolean;    -- Flag1
  6100.  
  6101.    function Has_Dynamic_Itype
  6102.      (N : Node_Id) return Boolean;    -- Flag14
  6103.  
  6104.    function Has_No_Elab_Code
  6105.      (N : Node_Id) return Boolean;    -- Flag17
  6106.  
  6107.    function Has_No_Side_Effects
  6108.      (N : Node_Id) return Boolean;    -- Flag8
  6109.  
  6110.    function Has_Priority_Pragma
  6111.      (N : Node_Id) return Boolean;    -- Flag6
  6112.  
  6113.    function Has_Private_View
  6114.      (N : Node_Id) return Boolean;    -- Flag11
  6115.  
  6116.    function Has_Storage_Size_Pragma
  6117.      (N : Node_Id) return Boolean;    -- Flag5
  6118.  
  6119.    function High_Bound
  6120.      (N : Node_Id) return Node_Id;    -- Node2
  6121.  
  6122.    function Homonym
  6123.      (N : Node_Id) return Node_Id;    -- Node4
  6124.  
  6125.    function Identifier
  6126.      (N : Node_Id) return Node_Id;    -- Node1
  6127.  
  6128.    function Implicit_With
  6129.      (N : Node_Id) return Boolean;    -- Flag17
  6130.  
  6131.    function In_Present
  6132.      (N : Node_Id) return Boolean;    -- Flag1
  6133.  
  6134.    function Intval
  6135.      (N : Node_Id) return Uint;       -- Uint3
  6136.  
  6137.    function Is_Controlling_Actual
  6138.      (N : Node_Id) return Boolean;    -- Flag16
  6139.  
  6140.    function Is_Current_Instance
  6141.      (N : Node_Id) return Boolean;    -- Flag14
  6142.  
  6143.    function Is_Overloaded
  6144.      (N : Node_Id) return Boolean;    -- Flag5
  6145.  
  6146.    function Is_Static_Expression
  6147.      (N : Node_Id) return Boolean;    -- Flag6
  6148.  
  6149.    function Is_Task_Master
  6150.      (N : Node_Id) return Boolean;    -- Flag5
  6151.  
  6152.    function Iteration_Scheme
  6153.      (N : Node_Id) return Node_Id;    -- Node2
  6154.  
  6155.    function Left_Opnd
  6156.      (N : Node_Id) return Node_Id;    -- Node2
  6157.  
  6158.    function Label
  6159.      (N : Node_Id) return Node_Id;    -- Node2
  6160.  
  6161.    function Last_Bit
  6162.      (N : Node_Id) return Node_Id;    -- Node4
  6163.  
  6164.    function Last_Name
  6165.      (N : Node_Id) return Boolean;    -- Flag6
  6166.  
  6167.    function Library_Unit
  6168.      (N : Node_Id) return Node_Id;    -- Node4
  6169.  
  6170.    function Literals
  6171.      (N : Node_Id) return List_Id;    -- List1
  6172.  
  6173.    function Limited_Present
  6174.      (N : Node_Id) return Boolean;    -- Flag17
  6175.  
  6176.    function Loop_Parameter_Specification
  6177.      (N : Node_Id) return Node_Id;    -- Node1
  6178.  
  6179.    function Low_Bound
  6180.      (N : Node_Id) return Node_Id;    -- Node1
  6181.  
  6182.    function Mod_Clause
  6183.      (N : Node_Id) return Node_Id;    -- Node2
  6184.  
  6185.    function More_Ids
  6186.      (N : Node_Id) return Boolean;    -- Flag5
  6187.  
  6188.    function Name
  6189.      (N : Node_Id) return Node_Id;    -- Node2
  6190.  
  6191.    function Names
  6192.      (N : Node_Id) return List_Id;    -- List2
  6193.  
  6194.    function Next_Entity
  6195.      (N : Node_Id) return Node_Id;    -- Node2
  6196.  
  6197.    function Next_Interp
  6198.      (N : Node_Id) return Node_Id;    -- Node2
  6199.  
  6200.    function Next_Named_Actual
  6201.      (N : Node_Id) return Node_Id;    -- Node4
  6202.  
  6203.    function Next_Use_Clause
  6204.      (N : Node_Id) return Node_Id;    -- Node3
  6205.  
  6206.    function No_Default_Init
  6207.      (N : Node_Id) return Boolean;    -- Flag7
  6208.  
  6209.    function No_Defer
  6210.      (N : Node_Id) return Boolean;    -- Flag1
  6211.  
  6212.    function Null_Present
  6213.      (N : Node_Id) return Boolean;    -- Flag3
  6214.  
  6215.    function Null_Record_Present
  6216.      (N : Node_Id) return Boolean;    -- Flag17
  6217.  
  6218.    function Object_Definition
  6219.      (N : Node_Id) return Node_Id;    -- Node4
  6220.  
  6221.    function Object_Definition_Itypes
  6222.      (N : Node_Id) return Node_Id;    -- Node5
  6223.  
  6224.    function Others_Discrete_Choices
  6225.      (N : Node_Id) return List_Id;    -- List1
  6226.  
  6227.    function Out_Present
  6228.      (N : Node_Id) return Boolean;    -- Flag17
  6229.  
  6230.    function Parameter_Associations
  6231.      (N : Node_Id) return List_Id;    -- List3
  6232.  
  6233.    function Parameter_Specifications
  6234.      (N : Node_Id) return List_Id;    -- List3
  6235.  
  6236.    function Parameter_Type
  6237.      (N : Node_Id) return Node_Id;    -- Node2
  6238.  
  6239.    function Parent_Spec
  6240.      (N : Node_Id) return Node_Id;    -- Node4
  6241.  
  6242.    function Position
  6243.      (N : Node_Id) return Node_Id;    -- Node2
  6244.  
  6245.    function Pragma_Argument_Associations
  6246.      (N : Node_Id) return List_Id;    -- List2
  6247.  
  6248.    function Prefix
  6249.      (N : Node_Id) return Node_Id;    -- Node3
  6250.  
  6251.    function Prev_Ids
  6252.      (N : Node_Id) return Boolean;    -- Flag6
  6253.  
  6254.    function Private_Declarations
  6255.      (N : Node_Id) return List_Id;    -- List4
  6256.  
  6257.    function Private_Present
  6258.      (N : Node_Id) return Boolean;    -- Flag1
  6259.  
  6260.    function Procedure_To_Call
  6261.      (N : Node_Id) return Node_Id;    -- Node4
  6262.  
  6263.    function Proper_Body
  6264.      (N : Node_Id) return Node_Id;    -- Node1
  6265.  
  6266.    function Protected_Definition
  6267.      (N : Node_Id) return Node_Id;    -- Node3
  6268.  
  6269.    function Protected_Present
  6270.      (N : Node_Id) return Boolean;    -- Flag1
  6271.  
  6272.    function Raises_Constraint_Error
  6273.      (N : Node_Id) return Boolean;    -- Flag7
  6274.  
  6275.    function Range_Constraint
  6276.      (N : Node_Id) return Node_Id;    -- Node4
  6277.  
  6278.    function Range_Expression
  6279.      (N : Node_Id) return Node_Id;    -- Node4
  6280.  
  6281.    function Realval
  6282.      (N : Node_Id) return Ureal;      -- Ureal3
  6283.  
  6284.    function Real_Range_Specification
  6285.      (N : Node_Id) return Node_Id;    -- Node4
  6286.  
  6287.    function Record_Extension_Part
  6288.      (N : Node_Id) return Node_Id;    -- Node3
  6289.  
  6290.    function Redundant_Use
  6291.      (N : Node_Id) return Boolean;    -- Flag3
  6292.  
  6293.    function Return_Type
  6294.      (N : Node_Id) return Node_Id;    -- Node2
  6295.  
  6296.    function Reverse_Present
  6297.      (N : Node_Id) return Boolean;    -- Flag1
  6298.  
  6299.    function Right_Opnd
  6300.      (N : Node_Id) return Node_Id;    -- Node3
  6301.  
  6302.    function Rounded_Result
  6303.      (N : Node_Id) return Boolean;    -- Flag12
  6304.  
  6305.    function Scope
  6306.      (N : Node_Id) return Node_Id;    -- Node3
  6307.  
  6308.    function Select_Alternatives
  6309.      (N : Node_Id) return List_Id;    -- List1
  6310.  
  6311.    function Selector_Name
  6312.      (N : Node_Id) return Node_Id;    -- Node2
  6313.  
  6314.    function Selector_Names
  6315.      (N : Node_Id) return List_Id;    -- List1
  6316.  
  6317.    function Specification
  6318.      (N : Node_Id) return Node_Id;    -- Node1
  6319.  
  6320.    function Statements
  6321.      (N : Node_Id) return List_Id;    -- List3
  6322.  
  6323.    function Storage_Pool
  6324.      (N : Node_Id) return Node_Id;    -- Node1
  6325.  
  6326.    function Strval
  6327.      (N : Node_Id) return String_Id;  -- Str3
  6328.  
  6329.    function Subtype_Indication
  6330.      (N : Node_Id) return Node_Id;    -- Node5
  6331.  
  6332.    function Subtype_Mark
  6333.      (N : Node_Id) return Node_Id;    -- Node4
  6334.  
  6335.    function Subtype_Marks
  6336.      (N : Node_Id) return List_Id;    -- List2
  6337.  
  6338.    function Tagged_Present
  6339.      (N : Node_Id) return Boolean;    -- Flag1
  6340.  
  6341.    function Task_Definition
  6342.      (N : Node_Id) return Node_Id;    -- Node3
  6343.  
  6344.    function Then_Actions
  6345.      (N : Node_Id) return List_Id;    -- List2
  6346.  
  6347.    function Then_Statements
  6348.      (N : Node_Id) return List_Id;    -- List2
  6349.  
  6350.    function Treat_Fixed_As_Integer
  6351.      (N : Node_Id) return Boolean;    -- Flag14
  6352.  
  6353.    function Triggering_Alternative
  6354.      (N : Node_Id) return Node_Id;    -- Node1
  6355.  
  6356.    function Triggering_Statement
  6357.      (N : Node_Id) return Node_Id;    -- Node1
  6358.  
  6359.    function TSS_Elist
  6360.      (N : Node_Id) return Elist_Id;   -- Elist3
  6361.  
  6362.    function Type_Definition
  6363.      (N : Node_Id) return Node_Id;    -- Node3
  6364.  
  6365.    function Unit
  6366.      (N : Node_Id) return Node_Id;    -- Node2
  6367.  
  6368.    function Unknown_Discriminants_Present
  6369.      (N : Node_Id) return Boolean;    -- Flag3
  6370.  
  6371.    function Variant_Part
  6372.      (N : Node_Id) return Node_Id;    -- Node4
  6373.  
  6374.    function Variants
  6375.      (N : Node_Id) return List_Id;    -- List1
  6376.  
  6377.    function Visible_Declarations
  6378.      (N : Node_Id) return List_Id;    -- List2
  6379.  
  6380.    --  End functions (note used by xsinfo utility program to end processing)
  6381.  
  6382.    ----------------------------
  6383.    -- Node Update Procedures --
  6384.    ----------------------------
  6385.  
  6386.    --  These are the corresponding node update routines, which again provide
  6387.    --  a high level logical access with type checking. In addition to setting
  6388.    --  the indicated field of the node N to the given Val, in the case of
  6389.    --  tree pointers (List1-4), the parent pointer of the Val node is set to
  6390.    --  point back to node N. This automates the setting of the parent pointer.
  6391.  
  6392.    procedure Set_Abort_Present
  6393.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6394.  
  6395.    procedure Set_Abortable_Part
  6396.      (N : Node_Id; Val : Node_Id);            -- Node2
  6397.  
  6398.    procedure Set_Abstract_Present
  6399.      (N : Node_Id; Val : Boolean := True);    -- Flag4
  6400.  
  6401.    procedure Set_Accept_Statement
  6402.      (N : Node_Id; Val : Node_Id);            -- Node2
  6403.  
  6404.    procedure Set_Actions
  6405.      (N : Node_Id; Val : List_Id);            -- List1
  6406.  
  6407.    procedure Set_Activation_Chain_Entity
  6408.      (N : Node_Id; Val : Node_Id);            -- Node2
  6409.  
  6410.    procedure Set_Acts_As_Spec
  6411.      (N : Node_Id; Val : Boolean := True);    -- Flag4
  6412.  
  6413.    procedure Set_Aggregate_Bounds
  6414.      (N : Node_Id; Val : Node_Id);            -- Node3
  6415.  
  6416.    procedure Set_Aliased_Present
  6417.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6418.  
  6419.    procedure Set_All_Present
  6420.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6421.  
  6422.    procedure Set_Alternatives
  6423.      (N : Node_Id; Val : List_Id);            -- List4
  6424.  
  6425.    procedure Set_Analyzed
  6426.      (N : Node_Id; Val : Boolean := True);    -- Flag15
  6427.  
  6428.    procedure Set_Ancestor_Part
  6429.      (N : Node_Id; Val : Node_Id);            -- Node3
  6430.  
  6431.    procedure Set_Array_Aggregate
  6432.      (N : Node_Id; Val : Node_Id);            -- Node4
  6433.  
  6434.    procedure Set_Assignment_OK
  6435.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6436.  
  6437.    procedure Set_Attribute_Name
  6438.      (N : Node_Id; Val : Name_Id);            -- Name2
  6439.  
  6440.    procedure Set_Backwards_OK
  6441.      (N : Node_Id; Val : Boolean := True);    -- Flag6
  6442.  
  6443.    procedure Set_Bad_Is_Detected
  6444.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6445.  
  6446.    procedure Set_Body_Required
  6447.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6448.  
  6449.    procedure Set_Box_Present
  6450.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6451.  
  6452.    procedure Set_Cannot_Be_Constant
  6453.      (N : Node_Id; Val : Boolean := True);    -- Flag18
  6454.  
  6455.    procedure Set_Char_Literal_Value
  6456.      (N : Node_Id; Val : Char_Code);          -- Char_Code2
  6457.  
  6458.    procedure Set_Chars
  6459.      (N : Node_Id; Val : Name_Id);            -- Name1
  6460.  
  6461.    procedure Set_Choice_Parameter
  6462.      (N : Node_Id; Val : Node_Id);            -- Node2
  6463.  
  6464.    procedure Set_Choices
  6465.      (N : Node_Id; Val : List_Id);            -- List1
  6466.  
  6467.    procedure Set_Cleanup_Call
  6468.      (N : Node_Id; Val : Node_Id);            -- Node5
  6469.  
  6470.    procedure Set_Component_Associations
  6471.      (N : Node_Id; Val : List_Id);            -- List4
  6472.  
  6473.    procedure Set_Component_Clauses
  6474.      (N : Node_Id; Val : List_Id);            -- List3
  6475.  
  6476.    procedure Set_Component_Items
  6477.      (N : Node_Id; Val : List_Id);            -- List3
  6478.  
  6479.    procedure Set_Component_List
  6480.      (N : Node_Id; Val : Node_Id);            -- Node1
  6481.  
  6482.    procedure Set_Component_Name
  6483.      (N : Node_Id; Val : Node_Id);            -- Node1
  6484.  
  6485.    procedure Set_Condition
  6486.      (N : Node_Id; Val : Node_Id);            -- Node5
  6487.  
  6488.    procedure Set_Condition_Actions
  6489.      (N : Node_Id; Val : List_Id);            -- List3
  6490.  
  6491.    procedure Set_Constant_Present
  6492.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6493.  
  6494.    procedure Set_Constraint
  6495.      (N : Node_Id; Val : Node_Id);            -- Node3
  6496.  
  6497.    procedure Set_Constraints
  6498.      (N : Node_Id; Val : List_Id);            -- List1
  6499.  
  6500.    procedure Set_Context_Installed
  6501.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6502.  
  6503.    procedure Set_Context_Items
  6504.      (N : Node_Id; Val : List_Id);            -- List1
  6505.  
  6506.    procedure Set_Controlling_Argument
  6507.      (N : Node_Id; Val : Node_Id);            -- Node1
  6508.  
  6509.    procedure Set_Conversion_OK
  6510.      (N : Node_Id; Val : Boolean := True);    -- Flag14
  6511.  
  6512.    procedure Set_Corresponding_Body
  6513.      (N : Node_Id; Val : Node_Id);            -- Node5
  6514.  
  6515.    procedure Set_Corresponding_Integer_Value
  6516.      (N : Node_Id; Val : Uint);               -- Uint4
  6517.  
  6518.    procedure Set_Corresponding_Spec
  6519.      (N : Node_Id; Val : Node_Id);            -- Node5
  6520.  
  6521.    procedure Set_Corresponding_Stub
  6522.      (N : Node_Id; Val : Node_Id);            -- Node3
  6523.  
  6524.    procedure Set_Debug_Statement
  6525.      (N : Node_Id; Val : Node_Id);            -- Node3
  6526.  
  6527.    procedure Set_Declarations
  6528.      (N : Node_Id; Val : List_Id);            -- List3
  6529.  
  6530.    procedure Set_Default_Name
  6531.      (N : Node_Id; Val : Node_Id);            -- Node2
  6532.  
  6533.    procedure Set_Defining_Identifier
  6534.      (N : Node_Id; Val : Entity_Id);          -- Node1
  6535.  
  6536.    procedure Set_Defining_Unit_Name
  6537.      (N : Node_Id; Val : Node_Id);            -- Node1
  6538.  
  6539.    procedure Set_Delay_Alternative
  6540.      (N : Node_Id; Val : Node_Id);            -- Node4
  6541.  
  6542.    procedure Set_Delay_Statement
  6543.      (N : Node_Id; Val : Node_Id);            -- Node2
  6544.  
  6545.    procedure Set_Delta_Expression
  6546.      (N : Node_Id; Val : Node_Id);            -- Node3
  6547.  
  6548.    procedure Set_Digits_Expression
  6549.      (N : Node_Id; Val : Node_Id);            -- Node2
  6550.  
  6551.    procedure Set_Discrete_Choices
  6552.      (N : Node_Id; Val : List_Id);            -- List4
  6553.  
  6554.    procedure Set_Discrete_Range
  6555.      (N : Node_Id; Val : Node_Id);            -- Node4
  6556.  
  6557.    procedure Set_Discrete_Subtype_Definition
  6558.      (N : Node_Id; Val : Node_Id);            -- Node4
  6559.  
  6560.    procedure Set_Discrete_Subtype_Definitions
  6561.      (N : Node_Id; Val : List_Id);            -- List2
  6562.  
  6563.    procedure Set_Discriminant_Specifications
  6564.      (N : Node_Id; Val : List_Id);            -- List4
  6565.  
  6566.    procedure Set_Discriminant_Type
  6567.      (N : Node_Id; Val : Node_Id);            -- Node2
  6568.  
  6569.    procedure Set_Do_Access_Check
  6570.      (N : Node_Id; Val : Boolean := True);    -- Flag11
  6571.  
  6572.    procedure Set_Do_Accessibility_Check
  6573.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6574.  
  6575.    procedure Set_Do_Discriminant_Check
  6576.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6577.  
  6578.    procedure Set_Do_Division_Check
  6579.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6580.  
  6581.    procedure Set_Do_Length_Check
  6582.      (N : Node_Id; Val : Boolean := True);    -- Flag4
  6583.  
  6584.    procedure Set_Do_Overflow_Check
  6585.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6586.  
  6587.    procedure Set_Do_Range_Check
  6588.      (N : Node_Id; Val : Boolean := True);    -- Flag9
  6589.  
  6590.    procedure Set_Do_Storage_Check
  6591.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6592.  
  6593.    procedure Set_Do_Tag_Check
  6594.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6595.  
  6596.    procedure Set_Elaborate_Present
  6597.      (N : Node_Id; Val : Boolean := True);    -- Flag4
  6598.  
  6599.    procedure Set_Elaborate_All_Present
  6600.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6601.  
  6602.    procedure Set_Elaborate_Body_Present
  6603.      (N : Node_Id; Val : Boolean := True);    -- Flag7
  6604.  
  6605.    procedure Set_Else_Actions
  6606.      (N : Node_Id; Val : List_Id);            -- List3
  6607.  
  6608.    procedure Set_Else_Statements
  6609.      (N : Node_Id; Val : List_Id);            -- List4
  6610.  
  6611.    procedure Set_Elsif_Parts
  6612.      (N : Node_Id; Val : List_Id);            -- List3
  6613.  
  6614.    procedure Set_Enclosing_Variant
  6615.      (N : Node_Id; Val : Node_Id);            -- Node2
  6616.  
  6617.    procedure Set_Entity
  6618.      (N : Node_Id; Val : Node_Id);            -- Node4
  6619.  
  6620.    procedure Set_Entry_Body_Formal_Part
  6621.      (N : Node_Id; Val : Node_Id);            -- Node5
  6622.  
  6623.    procedure Set_Entry_Call_Alternative
  6624.      (N : Node_Id; Val : Node_Id);            -- Node1
  6625.  
  6626.    procedure Set_Entry_Call_Statement
  6627.      (N : Node_Id; Val : Node_Id);            -- Node1
  6628.  
  6629.    procedure Set_Entry_Direct_Name
  6630.      (N : Node_Id; Val : Node_Id);            -- Node1
  6631.  
  6632.    procedure Set_Entry_Index
  6633.      (N : Node_Id; Val : Node_Id);            -- Node5
  6634.  
  6635.    procedure Set_Entry_Index_Specification
  6636.      (N : Node_Id; Val : Node_Id);            -- Node1
  6637.  
  6638.    procedure Set_Error_Posted
  6639.      (N : Node_Id; Val : Boolean := True);    -- Flag13
  6640.  
  6641.    procedure Set_Etype
  6642.      (N : Node_Id; Val : Node_Id);            -- Node5
  6643.  
  6644.    procedure Set_Exception_Choices
  6645.      (N : Node_Id; Val : List_Id);            -- List4
  6646.  
  6647.    procedure Set_Exception_Handlers
  6648.      (N : Node_Id; Val : List_Id);            -- List4
  6649.  
  6650.    procedure Set_Explicit_Actual_Parameter
  6651.      (N : Node_Id; Val : Node_Id);            -- Node3
  6652.  
  6653.    procedure Set_Explicit_Generic_Actual_Parameter
  6654.      (N : Node_Id; Val : Node_Id);            -- Node1
  6655.  
  6656.    procedure Set_Expression
  6657.      (N : Node_Id; Val : Node_Id);            -- Node3
  6658.  
  6659.    procedure Set_Expressions
  6660.      (N : Node_Id; Val : List_Id);            -- List1
  6661.  
  6662.    procedure Set_First_Bit
  6663.      (N : Node_Id; Val : Node_Id);            -- Node3
  6664.  
  6665.    procedure Set_First_Inlined_Subprogram
  6666.      (N : Node_Id; Val : Entity_Id);          -- Node5
  6667.  
  6668.    procedure Set_First_Itype
  6669.      (N : Node_Id; Val : Entity_Id);          -- Node2
  6670.  
  6671.    procedure Set_First_Name
  6672.      (N : Node_Id; Val : Boolean := True);    -- Flag5
  6673.  
  6674.    procedure Set_First_Named_Actual
  6675.      (N : Node_Id; Val : Node_Id);            -- Node4
  6676.  
  6677.    procedure Set_First_Real_Statement
  6678.      (N : Node_Id; Val : Node_Id);            -- Node2
  6679.  
  6680.    procedure Set_First_Subtype_Link
  6681.      (N : Node_Id; Val : Entity_Id);          -- Node5
  6682.  
  6683.    procedure Set_Float_Truncate
  6684.      (N : Node_Id; Val : Boolean := True);    -- Flag11
  6685.  
  6686.    procedure Set_Following_Pragmas
  6687.      (N : Node_Id; Val : List_Id);            -- List3
  6688.  
  6689.    procedure Set_Formal_Type_Definition
  6690.      (N : Node_Id; Val : Node_Id);            -- Node3
  6691.  
  6692.    procedure Set_Forwards_OK
  6693.      (N : Node_Id; Val : Boolean := True);    -- Flag5
  6694.  
  6695.    procedure Set_Generic_Associations
  6696.      (N : Node_Id; Val : List_Id);            -- List3
  6697.  
  6698.    procedure Set_Generic_Formal_Declarations
  6699.      (N : Node_Id; Val : List_Id);            -- List3
  6700.  
  6701.    procedure Set_Generic_Parent
  6702.      (N : Node_Id; Val : Node_Id);            -- Node5
  6703.  
  6704.    procedure Set_Handled_Statement_Sequence
  6705.      (N : Node_Id; Val : Node_Id);            -- Node4
  6706.  
  6707.    procedure Set_Has_Created_Identifier
  6708.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6709.  
  6710.    procedure Set_Has_Dynamic_Itype
  6711.      (N : Node_Id; Val : Boolean := True);    -- Flag14
  6712.  
  6713.    procedure Set_Has_No_Elab_Code
  6714.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6715.  
  6716.    procedure Set_Has_No_Side_Effects
  6717.      (N : Node_Id; Val : Boolean := True);    -- Flag8
  6718.  
  6719.    procedure Set_Has_Priority_Pragma
  6720.      (N : Node_Id; Val : Boolean := True);    -- Flag6
  6721.  
  6722.    procedure Set_Has_Private_View
  6723.      (N : Node_Id; Val : Boolean := True);    -- Flag11
  6724.  
  6725.    procedure Set_Has_Storage_Size_Pragma
  6726.      (N : Node_Id; Val : Boolean := True);    -- Flag5
  6727.  
  6728.    procedure Set_High_Bound
  6729.      (N : Node_Id; Val : Node_Id);            -- Node2
  6730.  
  6731.    procedure Set_Homonym
  6732.      (N : Node_Id; Val : Node_Id);            -- Node4
  6733.  
  6734.    procedure Set_Identifier
  6735.      (N : Node_Id; Val : Node_Id);            -- Node1
  6736.  
  6737.    procedure Set_Implicit_With
  6738.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6739.  
  6740.    procedure Set_In_Present
  6741.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6742.  
  6743.    procedure Set_Intval
  6744.      (N : Node_Id; Val : Uint);               -- Uint3
  6745.  
  6746.    procedure Set_Is_Controlling_Actual
  6747.      (N : Node_Id; Val : Boolean := True);    -- Flag16
  6748.  
  6749.    procedure Set_Is_Current_Instance
  6750.      (N : Node_Id; Val : Boolean := True);    -- Flag14
  6751.  
  6752.    procedure Set_Is_Overloaded
  6753.      (N : Node_Id; Val : Boolean := True);    -- Flag5
  6754.  
  6755.    procedure Set_Is_Static_Expression
  6756.      (N : Node_Id; Val : Boolean := True);    -- Flag6
  6757.  
  6758.    procedure Set_Is_Task_Master
  6759.      (N : Node_Id; Val : Boolean := True);    -- Flag5
  6760.  
  6761.    procedure Set_Iteration_Scheme
  6762.      (N : Node_Id; Val : Node_Id);            -- Node2
  6763.  
  6764.    procedure Set_Label
  6765.      (N : Node_Id; Val : Node_Id);            -- Node2
  6766.  
  6767.    procedure Set_Last_Bit
  6768.      (N : Node_Id; Val : Node_Id);            -- Node4
  6769.  
  6770.    procedure Set_Last_Name
  6771.      (N : Node_Id; Val : Boolean := True);    -- Flag6
  6772.  
  6773.    procedure Set_Library_Unit
  6774.      (N : Node_Id; Val : Node_Id);            -- Node4
  6775.  
  6776.    procedure Set_Left_Opnd
  6777.      (N : Node_Id; Val : Node_Id);            -- Node2
  6778.  
  6779.    procedure Set_Literals
  6780.      (N : Node_Id; Val : List_Id);            -- List1
  6781.  
  6782.    procedure Set_Limited_Present
  6783.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6784.  
  6785.    procedure Set_Loop_Parameter_Specification
  6786.      (N : Node_Id; Val : Node_Id);            -- Node1
  6787.  
  6788.    procedure Set_Low_Bound
  6789.      (N : Node_Id; Val : Node_Id);            -- Node1
  6790.  
  6791.    procedure Set_Mod_Clause
  6792.      (N : Node_Id; Val : Node_Id);            -- Node2
  6793.  
  6794.    procedure Set_More_Ids
  6795.      (N : Node_Id; Val : Boolean := True);    -- Flag5
  6796.  
  6797.    procedure Set_Name
  6798.      (N : Node_Id; Val : Node_Id);            -- Node2
  6799.  
  6800.    procedure Set_Names
  6801.      (N : Node_Id; Val : List_Id);            -- List2
  6802.  
  6803.    procedure Set_Next_Entity
  6804.      (N : Node_Id; Val : Node_Id);            -- Node2
  6805.  
  6806.    procedure Set_Next_Interp
  6807.      (N : Node_Id; Val : Node_Id);            -- Node2
  6808.  
  6809.    procedure Set_Next_Named_Actual
  6810.      (N : Node_Id; Val : Node_Id);            -- Node4
  6811.  
  6812.    procedure Set_Next_Use_Clause
  6813.      (N : Node_Id; Val : Node_Id);            -- Node3
  6814.  
  6815.    procedure Set_No_Default_Init
  6816.      (N : Node_Id; Val : Boolean := True);    -- Flag7
  6817.  
  6818.    procedure Set_No_Defer
  6819.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6820.  
  6821.    procedure Set_Null_Present
  6822.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6823.  
  6824.    procedure Set_Null_Record_Present
  6825.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6826.  
  6827.    procedure Set_Object_Definition
  6828.      (N : Node_Id; Val : Node_Id);            -- Node4
  6829.  
  6830.    procedure Set_Object_Definition_Itypes
  6831.      (N : Node_Id; Val : Node_Id);            -- Node5
  6832.  
  6833.    procedure Set_Others_Discrete_Choices
  6834.      (N : Node_Id; Val : List_Id);            -- List1
  6835.  
  6836.    procedure Set_Out_Present
  6837.      (N : Node_Id; Val : Boolean := True);    -- Flag17
  6838.  
  6839.    procedure Set_Parameter_Associations
  6840.      (N : Node_Id; Val : List_Id);            -- List3
  6841.  
  6842.    procedure Set_Parameter_Specifications
  6843.      (N : Node_Id; Val : List_Id);            -- List3
  6844.  
  6845.    procedure Set_Parameter_Type
  6846.      (N : Node_Id; Val : Node_Id);            -- Node2
  6847.  
  6848.    procedure Set_Parent_Spec
  6849.      (N : Node_Id; Val : Node_Id);            -- Node4
  6850.  
  6851.    procedure Set_Position
  6852.      (N : Node_Id; Val : Node_Id);            -- Node2
  6853.  
  6854.    procedure Set_Pragma_Argument_Associations
  6855.      (N : Node_Id; Val : List_Id);            -- List2
  6856.  
  6857.    procedure Set_Prefix
  6858.      (N : Node_Id; Val : Node_Id);            -- Node3
  6859.  
  6860.    procedure Set_Prev_Ids
  6861.      (N : Node_Id; Val : Boolean := True);    -- Flag6
  6862.  
  6863.    procedure Set_Private_Declarations
  6864.      (N : Node_Id; Val : List_Id);            -- List4
  6865.  
  6866.    procedure Set_Private_Present
  6867.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6868.  
  6869.    procedure Set_Procedure_To_Call
  6870.      (N : Node_Id; Val : Node_Id);            -- Node4
  6871.  
  6872.    procedure Set_Proper_Body
  6873.      (N : Node_Id; Val : Node_Id);            -- Node1
  6874.  
  6875.    procedure Set_Protected_Definition
  6876.      (N : Node_Id; Val : Node_Id);            -- Node3
  6877.  
  6878.    procedure Set_Protected_Present
  6879.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6880.  
  6881.    procedure Set_Raises_Constraint_Error
  6882.      (N : Node_Id; Val : Boolean := True);    -- Flag7
  6883.  
  6884.    procedure Set_Range_Constraint
  6885.      (N : Node_Id; Val : Node_Id);            -- Node4
  6886.  
  6887.    procedure Set_Range_Expression
  6888.      (N : Node_Id; Val : Node_Id);            -- Node4
  6889.  
  6890.    procedure Set_Realval
  6891.      (N : Node_Id; Val : Ureal);              -- Ureal3
  6892.  
  6893.    procedure Set_Real_Range_Specification
  6894.      (N : Node_Id; Val : Node_Id);            -- Node4
  6895.  
  6896.    procedure Set_Record_Extension_Part
  6897.      (N : Node_Id; Val : Node_Id);            -- Node3
  6898.  
  6899.    procedure Set_Redundant_Use
  6900.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6901.  
  6902.    procedure Set_Return_Type
  6903.      (N : Node_Id; Val : Node_Id);            -- Node2
  6904.  
  6905.    procedure Set_Reverse_Present
  6906.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6907.  
  6908.    procedure Set_Right_Opnd
  6909.      (N : Node_Id; Val : Node_Id);            -- Node3
  6910.  
  6911.    procedure Set_Rounded_Result
  6912.      (N : Node_Id; Val : Boolean := True);    -- Flag12
  6913.  
  6914.    procedure Set_Scope
  6915.      (N : Node_Id; Val : Node_Id);            -- Node3
  6916.  
  6917.    procedure Set_Select_Alternatives
  6918.      (N : Node_Id; Val : List_Id);            -- List1
  6919.  
  6920.    procedure Set_Selector_Name
  6921.      (N : Node_Id; Val : Node_Id);            -- Node2
  6922.  
  6923.    procedure Set_Selector_Names
  6924.      (N : Node_Id; Val : List_Id);            -- List1
  6925.  
  6926.    procedure Set_Specification
  6927.      (N : Node_Id; Val : Node_Id);            -- Node1
  6928.  
  6929.    procedure Set_Statements
  6930.      (N : Node_Id; Val : List_Id);            -- List3
  6931.  
  6932.    procedure Set_Storage_Pool
  6933.      (N : Node_Id; Val : Node_Id);            -- Node1
  6934.  
  6935.    procedure Set_Strval
  6936.      (N : Node_Id; Val : String_Id);          -- Str3
  6937.  
  6938.    procedure Set_Subtype_Indication
  6939.      (N : Node_Id; Val : Node_Id);            -- Node5
  6940.  
  6941.    procedure Set_Subtype_Mark
  6942.      (N : Node_Id; Val : Node_Id);            -- Node4
  6943.  
  6944.    procedure Set_Subtype_Marks
  6945.      (N : Node_Id; Val : List_Id);            -- List2
  6946.  
  6947.    procedure Set_Tagged_Present
  6948.      (N : Node_Id; Val : Boolean := True);    -- Flag1
  6949.  
  6950.    procedure Set_Task_Definition
  6951.      (N : Node_Id; Val : Node_Id);            -- Node3
  6952.  
  6953.    procedure Set_Then_Actions
  6954.      (N : Node_Id; Val : List_Id);            -- List2
  6955.  
  6956.    procedure Set_Then_Statements
  6957.      (N : Node_Id; Val : List_Id);            -- List2
  6958.  
  6959.    procedure Set_Treat_Fixed_As_Integer
  6960.      (N : Node_Id; Val : Boolean := True);    -- Flag14
  6961.  
  6962.    procedure Set_Triggering_Alternative
  6963.      (N : Node_Id; Val : Node_Id);            -- Node1
  6964.  
  6965.    procedure Set_Triggering_Statement
  6966.      (N : Node_Id; Val : Node_Id);            -- Node1
  6967.  
  6968.    procedure Set_TSS_Elist
  6969.      (N : Node_Id; Val : Elist_Id);           -- Elist3
  6970.  
  6971.    procedure Set_Type_Definition
  6972.      (N : Node_Id; Val : Node_Id);            -- Node3
  6973.  
  6974.    procedure Set_Unit
  6975.      (N : Node_Id; Val : Node_Id);            -- Node2
  6976.  
  6977.    procedure Set_Unknown_Discriminants_Present
  6978.      (N : Node_Id; Val : Boolean := True);    -- Flag3
  6979.  
  6980.    procedure Set_Variant_Part
  6981.      (N : Node_Id; Val : Node_Id);            -- Node4
  6982.  
  6983.    procedure Set_Variants
  6984.      (N : Node_Id; Val : List_Id);            -- List1
  6985.  
  6986.    procedure Set_Visible_Declarations
  6987.      (N : Node_Id; Val : List_Id);            -- List2
  6988.  
  6989.    --------------------
  6990.    -- Inline Pragmas --
  6991.    --------------------
  6992.  
  6993.    pragma Inline (Abort_Present);
  6994.    pragma Inline (Abortable_Part);
  6995.    pragma Inline (Abstract_Present);
  6996.    pragma Inline (Accept_Statement);
  6997.    pragma Inline (Actions);
  6998.    pragma Inline (Activation_Chain_Entity);
  6999.    pragma Inline (Acts_As_Spec);
  7000.    pragma Inline (Aggregate_Bounds);
  7001.    pragma Inline (Aliased_Present);
  7002.    pragma Inline (All_Present);
  7003.    pragma Inline (Alternatives);
  7004.    pragma Inline (Analyzed);
  7005.    pragma Inline (Ancestor_Part);
  7006.    pragma Inline (Array_Aggregate);
  7007.    pragma Inline (Assignment_OK);
  7008.    pragma Inline (Attribute_Name);
  7009.    pragma Inline (Backwards_OK);
  7010.    pragma Inline (Bad_Is_Detected);
  7011.    pragma Inline (Body_Required);
  7012.    pragma Inline (Box_Present);
  7013.    pragma Inline (Cannot_Be_Constant);
  7014.    pragma Inline (Char_Literal_Value);
  7015.    pragma Inline (Chars);
  7016.    pragma Inline (Choice_Parameter);
  7017.    pragma Inline (Choices);
  7018.    pragma Inline (Cleanup_Call);
  7019.    pragma Inline (Component_Associations);
  7020.    pragma Inline (Component_Clauses);
  7021.    pragma Inline (Component_Items);
  7022.    pragma Inline (Component_List);
  7023.    pragma Inline (Component_Name);
  7024.    pragma Inline (Condition);
  7025.    pragma Inline (Condition_Actions);
  7026.    pragma Inline (Constant_Present);
  7027.    pragma Inline (Constraint);
  7028.    pragma Inline (Constraints);
  7029.    pragma Inline (Context_Installed);
  7030.    pragma Inline (Context_Items);
  7031.    pragma Inline (Controlling_Argument);
  7032.    pragma Inline (Conversion_OK);
  7033.    pragma Inline (Corresponding_Body);
  7034.    pragma Inline (Corresponding_Integer_Value);
  7035.    pragma Inline (Corresponding_Spec);
  7036.    pragma Inline (Corresponding_Stub);
  7037.    pragma Inline (Debug_Statement);
  7038.    pragma Inline (Declarations);
  7039.    pragma Inline (Default_Name);
  7040.    pragma Inline (Defining_Identifier);
  7041.    pragma Inline (Defining_Unit_Name);
  7042.    pragma Inline (Delay_Alternative);
  7043.    pragma Inline (Delay_Statement);
  7044.    pragma Inline (Delta_Expression);
  7045.    pragma Inline (Digits_Expression);
  7046.    pragma Inline (Discrete_Choices);
  7047.    pragma Inline (Discrete_Range);
  7048.    pragma Inline (Discrete_Subtype_Definition);
  7049.    pragma Inline (Discrete_Subtype_Definitions);
  7050.    pragma Inline (Discriminant_Specifications);
  7051.    pragma Inline (Discriminant_Type);
  7052.    pragma Inline (Do_Access_Check);
  7053.    pragma Inline (Do_Accessibility_Check);
  7054.    pragma Inline (Do_Discriminant_Check);
  7055.    pragma Inline (Do_Length_Check);
  7056.    pragma Inline (Do_Division_Check);
  7057.    pragma Inline (Do_Overflow_Check);
  7058.    pragma Inline (Do_Range_Check);
  7059.    pragma Inline (Do_Storage_Check);
  7060.    pragma Inline (Do_Tag_Check);
  7061.    pragma Inline (Elaborate_Present);
  7062.    pragma Inline (Elaborate_All_Present);
  7063.    pragma Inline (Elaborate_Body_Present);
  7064.    pragma Inline (Else_Actions);
  7065.    pragma Inline (Else_Statements);
  7066.    pragma Inline (Elsif_Parts);
  7067.    pragma Inline (Enclosing_Variant);
  7068.    pragma Inline (Entity);
  7069.    pragma Inline (Entry_Body_Formal_Part);
  7070.    pragma Inline (Entry_Call_Alternative);
  7071.    pragma Inline (Entry_Call_Statement);
  7072.    pragma Inline (Entry_Direct_Name);
  7073.    pragma Inline (Entry_Index);
  7074.    pragma Inline (Entry_Index_Specification);
  7075.    pragma Inline (Error_Posted);
  7076.    pragma Inline (Etype);
  7077.    pragma Inline (Exception_Choices);
  7078.    pragma Inline (Exception_Handlers);
  7079.    pragma Inline (Explicit_Actual_Parameter);
  7080.    pragma Inline (Explicit_Generic_Actual_Parameter);
  7081.    pragma Inline (Expression);
  7082.    pragma Inline (Expressions);
  7083.    pragma Inline (First_Bit);
  7084.    pragma Inline (First_Inlined_Subprogram);
  7085.    pragma Inline (First_Itype);
  7086.    pragma Inline (First_Name);
  7087.    pragma Inline (First_Named_Actual);
  7088.    pragma Inline (First_Real_Statement);
  7089.    pragma Inline (First_Subtype_Link);
  7090.    pragma Inline (Float_Truncate);
  7091.    pragma Inline (Following_Pragmas);
  7092.    pragma Inline (Formal_Type_Definition);
  7093.    pragma Inline (Forwards_OK);
  7094.    pragma Inline (Generic_Associations);
  7095.    pragma Inline (Generic_Formal_Declarations);
  7096.    pragma Inline (Generic_Parent);
  7097.    pragma Inline (Handled_Statement_Sequence);
  7098.    pragma Inline (Has_Created_Identifier);
  7099.    pragma Inline (Has_Dynamic_Itype);
  7100.    pragma Inline (Has_No_Elab_Code);
  7101.    pragma Inline (Has_No_Side_Effects);
  7102.    pragma Inline (Has_Priority_Pragma);
  7103.    pragma Inline (Has_Private_View);
  7104.    pragma Inline (Has_Storage_Size_Pragma);
  7105.    pragma Inline (High_Bound);
  7106.    pragma Inline (Homonym);
  7107.    pragma Inline (Identifier);
  7108.    pragma Inline (Implicit_With);
  7109.    pragma Inline (In_Present);
  7110.    pragma Inline (Intval);
  7111.    pragma Inline (Is_Controlling_Actual);
  7112.    pragma Inline (Is_Current_Instance);
  7113.    pragma Inline (Is_Overloaded);
  7114.    pragma Inline (Is_Static_Expression);
  7115.    pragma Inline (Is_Task_Master);
  7116.    pragma Inline (Iteration_Scheme);
  7117.    pragma Inline (Label);
  7118.    pragma Inline (Last_Bit);
  7119.    pragma Inline (Last_Name);
  7120.    pragma Inline (Library_Unit);
  7121.    pragma Inline (Left_Opnd);
  7122.    pragma Inline (Limited_Present);
  7123.    pragma Inline (Literals);
  7124.    pragma Inline (Loop_Parameter_Specification);
  7125.    pragma Inline (Low_Bound);
  7126.    pragma Inline (Mod_Clause);
  7127.    pragma Inline (More_Ids);
  7128.    pragma Inline (Name);
  7129.    pragma Inline (Names);
  7130.    pragma Inline (Next_Entity);
  7131.    pragma Inline (Next_Interp);
  7132.    pragma Inline (Next_Named_Actual);
  7133.    pragma Inline (Next_Use_Clause);
  7134.    pragma Inline (No_Default_Init);
  7135.    pragma Inline (No_Defer);
  7136.    pragma Inline (Null_Present);
  7137.    pragma Inline (Null_Record_Present);
  7138.    pragma Inline (Object_Definition);
  7139.    pragma Inline (Object_Definition_Itypes);
  7140.    pragma Inline (Others_Discrete_Choices);
  7141.    pragma Inline (Out_Present);
  7142.    pragma Inline (Parameter_Associations);
  7143.    pragma Inline (Parameter_Specifications);
  7144.    pragma Inline (Parameter_Type);
  7145.    pragma Inline (Parent_Spec);
  7146.    pragma Inline (Position);
  7147.    pragma Inline (Pragma_Argument_Associations);
  7148.    pragma Inline (Prefix);
  7149.    pragma Inline (Prev_Ids);
  7150.    pragma Inline (Private_Declarations);
  7151.    pragma Inline (Private_Present);
  7152.    pragma Inline (Procedure_To_Call);
  7153.    pragma Inline (Proper_Body);
  7154.    pragma Inline (Protected_Definition);
  7155.    pragma Inline (Protected_Present);
  7156.    pragma Inline (Raises_Constraint_Error);
  7157.    pragma Inline (Range_Constraint);
  7158.    pragma Inline (Range_Expression);
  7159.    pragma Inline (Realval);
  7160.    pragma Inline (Real_Range_Specification);
  7161.    pragma Inline (Record_Extension_Part);
  7162.    pragma Inline (Redundant_Use);
  7163.    pragma Inline (Return_Type);
  7164.    pragma Inline (Reverse_Present);
  7165.    pragma Inline (Right_Opnd);
  7166.    pragma Inline (Rounded_Result);
  7167.    pragma Inline (Scope);
  7168.    pragma Inline (Select_Alternatives);
  7169.    pragma Inline (Selector_Name);
  7170.    pragma Inline (Selector_Names);
  7171.    pragma Inline (Specification);
  7172.    pragma Inline (Statements);
  7173.    pragma Inline (Storage_Pool);
  7174.    pragma Inline (Strval);
  7175.    pragma Inline (Subtype_Indication);
  7176.    pragma Inline (Subtype_Mark);
  7177.    pragma Inline (Subtype_Marks);
  7178.    pragma Inline (Tagged_Present);
  7179.    pragma Inline (Task_Definition);
  7180.    pragma Inline (Then_Actions);
  7181.    pragma Inline (Then_Statements);
  7182.    pragma Inline (Triggering_Alternative);
  7183.    pragma Inline (Triggering_Statement);
  7184.    pragma Inline (Treat_Fixed_As_Integer);
  7185.    pragma Inline (TSS_Elist);
  7186.    pragma Inline (Type_Definition);
  7187.    pragma Inline (Unit);
  7188.    pragma Inline (Unknown_Discriminants_Present);
  7189.    pragma Inline (Variant_Part);
  7190.    pragma Inline (Variants);
  7191.    pragma Inline (Visible_Declarations);
  7192.  
  7193.    pragma Inline (Set_Analyzed);
  7194.    pragma Inline (Set_Entity);
  7195.    pragma Inline (Set_Error_Posted);
  7196.    pragma Inline (Set_Etype);
  7197.  
  7198. end Sinfo;
  7199.