-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
-- for more details. You should have received a copy of the GNU General --
-- Public License distributed with GNAT; see file COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
+-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
+-- Boston, MA 02110-1301, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
------------------------------------------------------------------------------
-- This package defines the structure of the abstract syntax tree. The Tree
--- package provides a basic tree structure. Sinfo describes how this
--- structure is used to represent the syntax of an Ada program.
+-- package provides a basic tree structure. Sinfo describes how this structure
+-- is used to represent the syntax of an Ada program.
--- Note: the grammar used here is taken from Version 5.95 of the RM, dated
--- November 1994. The grammar in the RM is followed very closely in the tree
+-- The grammar in the RM is followed very closely in the tree
-- design, and is repeated as part of this source file.
-- The tree contains not only the full syntactic representation of the
-- program, but also the results of semantic analysis. In particular, the
-- nodes for defining identifiers, defining character literals and defining
-- operator symbols, collectively referred to as entities, represent what
--- would normally be regarded as the symbol table information. In addition
--- a number of the tree nodes contain semantic information.
+-- would normally be regarded as the symbol table information. In addition a
+-- number of the tree nodes contain semantic information.
--- WARNING: There is a C version of this package. Any changes to this
--- source file must be properly reflected in this C header file sinfo.h
--- which is created automatically from sinfo.ads using xsinfo.spt.
+-- WARNING: Several files are automatically generated from this package.
+-- See below for details.
+with Namet; use Namet;
with Types; use Types;
with Uintp; use Uintp;
with Urealp; use Urealp;
---------------------------------
-- If changes are made to this file, a number of related steps must be
- -- carried out to ensure consistency. First, if a field access function
- -- is added, it appears in seven places:
+ -- carried out to ensure consistency. First, if a field access function is
+ -- added, it appears in seven places:
-- The documentation associated with the node
-- The spec of the access function in sinfo.ads
-- The body of the set procedure in sinfo.adb
-- The pragma Inline at the end of sinfo.ads for the set procedure
- -- The field chosen must be consistent in all places, and, for a node
- -- that is a subexpression, must not overlap any of the standard
- -- expression fields.
+ -- The field chosen must be consistent in all places, and, for a node that
+ -- is a subexpression, must not overlap any of the standard expression
+ -- fields.
-- In addition, if any of the standard expression fields is changed, then
- -- the utiliy program which creates the Treeprs spec (in file treeprs.ads)
+ -- the utility program which creates the Treeprs spec (in file treeprs.ads)
-- must be updated appropriately, since it special cases expression fields.
-- If a new tree node is added, then the following changes are made
-- node in the checks.
-- Add an appropriate section to the case statement in sprint.adb
-- Add an appropriate section to the case statement in sem.adb
- -- Add an appropraite section to the case statement in exp_util.adb
+ -- Add an appropriate section to the case statement in exp_util.adb
-- (Insert_Actions procedure)
- -- For a subexpression, add an appropriate sections to the case
+ -- For a subexpression, add an appropriate section to the case
-- statement in sem_eval.adb
- -- For a subexpression, add an appropriate sections to the case
+ -- For a subexpression, add an appropriate section to the case
-- statement in sem_res.adb
-- Finally, four utility programs must be run:
- -- Run CSinfo to check that you have made the changes consistently.
- -- It checks most of the rules given above, with clear error messages.
- -- This utility reads sinfo.ads and sinfo.adb and generates a report
- -- to standard output.
+ -- Run CSinfo to check that you have made the changes consistently. It
+ -- checks most of the rules given above, with clear error messages. This
+ -- utility reads sinfo.ads and sinfo.adb and generates a report to
+ -- standard output.
- -- Run XSinfo to create a-sinfo.h, the corresponding C header. This
- -- utility reads sinfo.ads and generates a-sinfo.h. Note that it
- -- does not need to read sinfo.adb, since the contents of the body
- -- are algorithmically determinable from the spec.
+ -- Run XSinfo to create sinfo.h, the corresponding C header. This
+ -- utility reads sinfo.ads and generates sinfo.h. Note that it does
+ -- not need to read sinfo.adb, since the contents of the body are
+ -- algorithmically determinable from the spec.
- -- Run XTreeprs to create treeprs.ads, an updated version of
- -- the module that is used to drive the tree print routine. This
- -- utility reads (but does not modify) treeprs.adt, the template
- -- that provides the basic structure of the file, and then fills
- -- in the data from the comments in sinfo.ads.
+ -- Run XTreeprs to create treeprs.ads, an updated version of the module
+ -- that is used to drive the tree print routine. This utility reads (but
+ -- does not modify) treeprs.adt, the template that provides the basic
+ -- structure of the file, and then fills in the data from the comments
+ -- in sinfo.ads.
- -- Run XNmake to create nmake.ads and nmake.adb, the package body
- -- and spec of the Nmake package which contains functions for
- -- constructing nodes.
+ -- Run XNmake to create nmake.ads and nmake.adb, the package body and
+ -- spec of the Nmake package which contains functions for constructing
+ -- nodes.
- -- Note: sometime we could write a utility that actually generated the
- -- body of sinfo from the spec instead of simply checking it, since, as
- -- noted above, the contents of the body can be determined from the spec.
+ -- All of the above steps except CSinfo are done automatically by the
+ -- build scripts when you do a full bootstrap.
+
+ -- Note: sometime we could write a utility that actually generated the body
+ -- of sinfo from the spec instead of simply checking it, since, as noted
+ -- above, the contents of the body can be determined from the spec.
--------------------------------
-- Implicit Nodes in the Tree --
--------------------------------
- -- Generally the structure of the tree very closely follows the grammar
- -- as defined in the RM. However, certain nodes are omitted to save
- -- space and simplify semantic processing. Two general classes of such
- -- omitted nodes are as follows:
+ -- Generally the structure of the tree very closely follows the grammar as
+ -- defined in the RM. However, certain nodes are omitted to save space and
+ -- simplify semantic processing. Two general classes of such omitted nodes
+ -- are as follows:
-- If the only possibilities for a non-terminal are one or more other
- -- non terminals (i.e. the rule is a "skinny" rule), then usually the
+ -- non-terminals (i.e. the rule is a "skinny" rule), then usually the
-- corresponding node is omitted from the tree, and the target construct
- -- appears directly. For example, a real type definition is either a
- -- floating point definition or a fixed point definition. No explicit
- -- node appears for real type definition. Instead either the floating
- -- point definition or fixed point definition appears directly.
+ -- appears directly. For example, a real type definition is either
+ -- floating point definition or a fixed point definition. No explicit node
+ -- appears for real type definition. Instead either the floating point
+ -- definition or fixed point definition appears directly.
-- If a non-terminal corresponds to a list of some other non-terminal
- -- (possibly with separating punctuation), then usually it is omitted
- -- from the tree, and a list of components appears instead. For
- -- example, sequence of statements does not appear explicitly in the
- -- tree. Instead a list of statements appears directly.
+ -- (possibly with separating punctuation), then usually it is omitted from
+ -- the tree, and a list of components appears instead. For example,
+ -- sequence of statements does not appear explicitly in the tree. Instead
+ -- a list of statements appears directly.
-- Some additional cases of omitted nodes occur and are documented
-- individually. In particular, many nodes are omitted in the tree
-------------------------------------------
-- In several declarative forms in the syntax, lists of defining
- -- identifiers appear (object declarations, component declarations,
- -- number declarations etc.)
+ -- identifiers appear (object declarations, component declarations, number
+ -- declarations etc.)
- -- The semantics of such statements are equivalent to a series of
- -- identical declarations of single defining identifiers (except that
- -- conformance checks require the same grouping of identifiers in the
- -- parameter case).
+ -- The semantics of such statements are equivalent to a series of identical
+ -- declarations of single defining identifiers (except that conformance
+ -- checks require the same grouping of identifiers in the parameter case).
-- To simplify semantic processing, the parser breaks down such multiple
-- declaration cases into sequences of single declarations, duplicating
- -- type and initialization information as required. The flags More_Ids
- -- and Prev_Ids are used to record the original form of the source in
- -- the case where the original source used a list of names, More_Ids
- -- being set on all but the last name and Prev_Ids being set on all
- -- but the first name. These flags are used to reconstruct the original
- -- source (e.g. in the Sprint package), and also are included in the
- -- conformance checks, but otherwise have no semantic significance.
+ -- type and initialization information as required. The flags More_Ids and
+ -- Prev_Ids are used to record the original form of the source in the case
+ -- where the original source used a list of names, More_Ids being set on
+ -- all but the last name and Prev_Ids being set on all but the first name.
+ -- These flags are used to reconstruct the original source (e.g. in the
+ -- Sprint package), and also are included in the conformance checks, but
+ -- otherwise have no semantic significance.
-- Note: the reason that we use More_Ids and Prev_Ids rather than
-- First_Name and Last_Name flags is so that the flags are off in the
-----------------------
-- With a few exceptions, if a construction of the form {non-terminal}
- -- appears in the tree, lists are used in the corresponding tree node
- -- (see package Nlists for handling of node lists). In this case a field
- -- of the parent node points to a list of nodes for the non-terminal. The
- -- field name for such fields has a plural name which always ends in "s".
- -- For example, a case statement has a field Alternatives pointing to a
- -- list of case statement alternative nodes.
+ -- appears in the tree, lists are used in the corresponding tree node (see
+ -- package Nlists for handling of node lists). In this case a field of the
+ -- parent node points to a list of nodes for the non-terminal. The field
+ -- name for such fields has a plural name which always ends in "s". For
+ -- example, a case statement has a field Alternatives pointing to list of
+ -- case statement alternative nodes.
- -- Only fields pointing to lists have names ending in "s", so generally
- -- the structure is strongly typed, fields not ending in s point to
- -- single nodes, and fields ending in s point to lists.
+ -- Only fields pointing to lists have names ending in "s", so generally the
+ -- structure is strongly typed, fields not ending in s point to single
+ -- nodes, and fields ending in s point to lists.
-- The following example shows how a traversal of a list is written. We
- -- suppose here that Stmt points to a N_Case_Statement node which has
- -- a list field called Alternatives:
+ -- suppose here that Stmt points to a N_Case_Statement node which has a
+ -- list field called Alternatives:
-- Alt := First (Alternatives (Stmt));
-- while Present (Alt) loop
-- Alt := Next (Alt);
-- end loop;
- -- The Present function tests for Empty, which in this case signals the
- -- end of the list. First returns Empty immediately if the list is empty.
+ -- The Present function tests for Empty, which in this case signals the end
+ -- of the list. First returns Empty immediately if the list is empty.
-- Present is defined in Atree, First and Next are defined in Nlists.
-- The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all
-- Pragmas --
-------------
- -- Pragmas can appear in many different context, but are not included
- -- in the grammar. Still they must appear in the tree, so they can be
- -- properly processed.
+ -- Pragmas can appear in many different context, but are not included in
+ -- the grammar. Still they must appear in the tree, so they can be properly
+ -- processed.
- -- Two approaches are used. In some cases, an extra field is defined
- -- in an appropriate node that contains a list of pragmas appearing
- -- in the expected context. For example pragmas can appear before an
+ -- Two approaches are used. In some cases, an extra field is defined in an
+ -- appropriate node that contains a list of pragmas appearing in the
+ -- expected context. For example pragmas can appear before an
-- Accept_Alternative in a Selective_Accept_Statement, and these pragmas
-- appear in the Pragmas_Before field of the N_Accept_Alternative node.
-- The other approach is to simply allow pragmas to appear in syntactic
-- lists where the grammar (of course) does not include the possibility.
- -- For example, the Variants field of an N_Variant_Part node points to
- -- a list that can contain both N_Pragma and N_Variant nodes.
+ -- For example, the Variants field of an N_Variant_Part node points to a
+ -- list that can contain both N_Pragma and N_Variant nodes.
-- To make processing easier in the latter case, the Nlists package
-- provides a set of routines (First_Non_Pragma, Last_Non_Pragma,
- -- Next_Non_Pragma, Prev_Non_Pragma) that allow such lists to be
- -- handled ignoring all pragmas.
+ -- Next_Non_Pragma, Prev_Non_Pragma) that allow such lists to be handled
+ -- ignoring all pragmas.
-- In the case of the variants list, we can either write:
-- Variant := Next_Non_Pragma (Variant);
-- end loop;
- -- In the first form of the loop, Variant can either be an N_Pragma or
- -- an N_Variant node. In the second form, Variant can only be N_Variant
- -- since all pragmas are skipped.
+ -- In the first form of the loop, Variant can either be an N_Pragma or an
+ -- N_Variant node. In the second form, Variant can only be N_Variant since
+ -- all pragmas are skipped.
---------------------
-- Optional Fields --
---------------------
-- Fields which correspond to a section of the syntax enclosed in square
- -- brackets are generally omitted (and the corresponding field set to
- -- Empty for a node, or No_List for a list). The documentation of such
- -- fields notes these cases. One exception to this rule occurs in the
- -- case of possibly empty statement sequences (such as the sequence of
- -- statements in an entry call alternative). Such cases appear in the
- -- syntax rules as [SEQUENCE_OF_STATEMENTS] and the fields corresponding
- -- to such optional statement sequences always contain an empty list (not
- -- No_List) if no statements are present.
-
- -- Note: the utility program that constructs the body and spec of the
- -- Nmake package relies on the format of the comments to determine if
- -- a field should have a default value in the corresponding make routine.
- -- The rule is that if the first line of the description of the field
- -- contains the string "(set to xxx if", then a default value of xxx is
- -- provided for this field in the corresponding Make_yyy routine.
+ -- brackets are generally omitted (and the corresponding field set to Empty
+ -- for a node, or No_List for a list). The documentation of such fields
+ -- notes these cases. One exception to this rule occurs in the case of
+ -- possibly empty statement sequences (such as the sequence of statements
+ -- in an entry call alternative). Such cases appear in the syntax rules as
+ -- [SEQUENCE_OF_STATEMENTS] and the fields corresponding to such optional
+ -- statement sequences always contain an empty list (not No_List) if no
+ -- statements are present.
+
+ -- Note: the utility program that constructs the body and spec of the Nmake
+ -- package relies on the format of the comments to determine if a field
+ -- should have a default value in the corresponding make routine. The rule
+ -- is that if the first line of the description of the field contains the
+ -- string "(set to xxx if", then a default value of xxx is provided for
+ -- this field in the corresponding Make_yyy routine.
-----------------------------------
-- Note on Body/Spec Terminology --
-- In informal discussions about Ada, it is customary to refer to package
-- and subprogram specs and bodies. However, this is not technically
-- correct, what is normally referred to as a spec or specification is in
- -- fact a package declaration or subprogram declaration. We are careful
- -- in GNAT to use the correct terminology and in particular, the full
- -- word specification is never used as an incorrect substitute for
- -- declaration. The structure and terminology used in the tree also
- -- reflects the grammar and thus uses declaration and specification in
- -- the technically correct manner.
-
- -- However, there are contexts in which the informal terminology is
- -- useful. We have the word "body" to refer to the Interp_Etype declared by
- -- the declaration of a unit body, and in some contexts we need a
- -- similar term to refer to the entity declared by the package or
- -- subprogram declaration, and simply using declaration can be confusing
- -- since the body also has a declaration.
-
- -- An example of such a context is the link between the package body
- -- and its declaration. With_Declaration is confusing, since
- -- the package body itself is a declaration.
-
- -- To deal with this problem, we reserve the informal term Spec, i.e.
- -- the popular abbreviation used in this context, to refer to the entity
+ -- fact a package declaration or subprogram declaration. We are careful in
+ -- GNAT to use the correct terminology and in particular, the full word
+ -- specification is never used as an incorrect substitute for declaration.
+ -- The structure and terminology used in the tree also reflects the grammar
+ -- and thus uses declaration and specification in the technically correct
+ -- manner.
+
+ -- However, there are contexts in which the informal terminology is useful.
+ -- We have the word "body" to refer to the Interp_Etype declared by the
+ -- declaration of a unit body, and in some contexts we need similar term to
+ -- refer to the entity declared by the package or subprogram declaration,
+ -- and simply using declaration can be confusing since the body also has a
+ -- declaration.
+
+ -- An example of such a context is the link between the package body and
+ -- its declaration. With_Declaration is confusing, since the package body
+ -- itself is a declaration.
+
+ -- To deal with this problem, we reserve the informal term Spec, i.e. the
+ -- popular abbreviation used in this context, to refer to the entity
-- declared by the package or subprogram declaration. So in the above
-- example case, the field in the body is called With_Spec.
-- Another important context for the use of the word Spec is in error
- -- messages, where a hyper-correct use of declaration would be confusing
- -- to a typical Ada programmer, and even for an expert programmer can
- -- cause confusion since the body has a declaration as well.
+ -- messages, where a hyper-correct use of declaration would be confusing to
+ -- a typical Ada programmer, and even for an expert programmer can cause
+ -- confusion since the body has a declaration as well.
-- So, to summarize:
-- Internal Use Nodes --
------------------------
- -- These are Node_Kind settings used in the internal implementation
- -- which are not logically part of the specification.
+ -- These are Node_Kind settings used in the internal implementation which
+ -- are not logically part of the specification.
-- N_Unused_At_Start
-- Completely unused entry at the start of the enumeration type. This
-- Completely unused entry at the end of the enumeration type. This is
-- handy so that arrays with Node_Kind as the index type have an extra
-- entry at the end (see for example the use of the Pchar_Pos_Array in
- -- Treepr, where the extra entry provides the limit value when dealing
- -- with the last used entry in the array).
+ -- Treepr, where the extra entry provides the limit value when dealing with
+ -- the last used entry in the array).
-----------------------------------------
-- Note on the settings of Sloc fields --
-----------------------------------------
- -- The Sloc field of nodes that come from the source is set by the
- -- parser. For internal nodes, and nodes generated during expansion
- -- the Sloc is usually set in the call to the constructor for the node.
- -- In general the Sloc value chosen for an internal node is the Sloc of
- -- the source node whose processing is responsible for the expansion. For
- -- example, the Sloc of an inherited primitive operation is the Sloc of
- -- the corresponding derived type declaration.
+ -- The Sloc field of nodes that come from the source is set by the parser.
+ -- For internal nodes, and nodes generated during expansion the Sloc is
+ -- usually set in the call to the constructor for the node. In general the
+ -- Sloc value chosen for an internal node is the Sloc of the source node
+ -- whose processing is responsible for the expansion. For example, the Sloc
+ -- of an inherited primitive operation is the Sloc of the corresponding
+ -- derived type declaration.
- -- For the nodes of a generic instantiation, the Sloc value is encoded
- -- to represent both the original Sloc in the generic unit, and the Sloc
- -- of the instantiation itself. See Sinput.ads for details.
+ -- For the nodes of a generic instantiation, the Sloc value is encoded to
+ -- represent both the original Sloc in the generic unit, and the Sloc of
+ -- the instantiation itself. See Sinput.ads for details.
-- Subprogram instances create two callable entities: one is the visible
-- subprogram instance, and the other is an anonymous subprogram nested
-- In the following node definitions, all fields, both syntactic and
-- semantic, are documented. The one exception is in the case of entities
- -- (defining indentifiers, character literals and operator symbols),
- -- where the usage of the fields depends on the entity kind. Entity
- -- fields are fully documented in the separate package Einfo.
+ -- (defining identifiers, character literals and operator symbols), where
+ -- the usage of the fields depends on the entity kind. Entity fields are
+ -- fully documented in the separate package Einfo.
- -- In the node definitions, three common sets of fields are abbreviated
- -- to save both space in the documentation, and also space in the string
+ -- In the node definitions, three common sets of fields are abbreviated to
+ -- save both space in the documentation, and also space in the string
-- (defined in Tree_Print_Strings) used to print trees. The following
-- abbreviations are used:
-- Note: see under (EXPRESSION) for further details on the use of
-- the Paren_Count field to record the number of parentheses levels.
- -- Node_Kind is the type used in the Nkind field to indicate the node
- -- kind. The actual definition of this type is given later (the reason
- -- for this is that we want the descriptions ordered by logical chapter
- -- in the RM, but the type definition is reordered to facilitate the
- -- definition of some subtype ranges. The individual descriptions of
- -- the nodes show how the various fields are used in each node kind,
- -- as well as providing logical names for the fields. Functions and
- -- procedures are provided for accessing and setting these fields
- -- using these logical names.
+ -- Node_Kind is the type used in the Nkind field to indicate the node kind.
+ -- The actual definition of this type is given later (the reason for this
+ -- is that we want the descriptions ordered by logical chapter in the RM,
+ -- but the type definition is reordered to facilitate the definition of
+ -- some subtype ranges. The individual descriptions of the nodes show how
+ -- the various fields are used in each node kind, as well as providing
+ -- logical names for the fields. Functions and procedures are provided for
+ -- accessing and setting these fields using these logical names.
-----------------------
-- Gigi Restrictions --
-- The following flag fields appear in all nodes
- -- Analyzed
- -- This flag is used to indicate that a node (and all its children
- -- have been analyzed. It is used to avoid reanalysis of a node that
- -- has already been analyzed, both for efficiency and functional
- -- correctness reasons.
-
- -- Error_Posted
- -- This flag is used to avoid multiple error messages being posted
- -- on or referring to the same node. This flag is set if an error
- -- message refers to a node or is posted on its source location,
- -- and has the effect of inhibiting further messages involving
- -- this same node.
-
- -- Comes_From_Source
- -- This flag is on for any nodes built by the scanner or parser from
- -- the source program, and off for any nodes built by the analyzer or
+ -- Analyzed (Flag1)
+ -- This flag is used to indicate that a node (and all its children have
+ -- been analyzed. It is used to avoid reanalysis of a node that has
+ -- already been analyzed, both for efficiency and functional correctness
+ -- reasons.
+
+ -- Comes_From_Source (Flag2)
+ -- This flag is on for any nodes built by the scanner or parser from the
+ -- source program, and off for any nodes built by the analyzer or
-- expander. It indicates that a node comes from the original source.
-- This flag is defined in Atree.
- -- Has_Dynamic_Length_Check and Has_Dynamic_Range_Check also appear on
- -- all nodes. They are fully described in the next section.
+ -- Error_Posted (Flag3)
+ -- This flag is used to avoid multiple error messages being posted on or
+ -- referring to the same node. This flag is set if an error message
+ -- refers to a node or is posted on its source location, and has the
+ -- effect of inhibiting further messages involving this same node.
+
+ -- Has_Dynamic_Length_Check (Flag10-Sem)
+ -- This flag is present on all nodes. It is set to indicate that one of
+ -- the routines in unit Checks has generated a length check action which
+ -- has been inserted at the flagged node. This is used to avoid the
+ -- generation of duplicate checks.
+
+ -- Has_Dynamic_Range_Check (Flag12-Sem)
+ -- This flag is present on all nodes. It is set to indicate that one of
+ -- the routines in unit Checks has generated a range check action which
+ -- has been inserted at the flagged node. This is used to avoid the
+ -- generation of duplicate checks.
+
+ -- Has_Local_Raise (Flag8-Sem)
+ -- Present in exception handler nodes. Set if the handler can be entered
+ -- via a local raise that gets transformed to a goto statement. This will
+ -- always be set if Local_Raise_Statements is non-empty, but can also be
+ -- set as a result of generation of N_Raise_xxx nodes, or flags set in
+ -- nodes requiring generation of back end checks.
------------------------------------
-- Description of Semantic Fields --
------------------------------------
- -- The meaning of the syntactic fields is generally clear from their
- -- names without any further description, since the names are chosen
- -- to correspond very closely to the syntax in the reference manual.
- -- This section describes the usage of the semantic fields, which are
- -- used to contain additional information determined during semantic
- -- analysis.
+ -- The meaning of the syntactic fields is generally clear from their names
+ -- without any further description, since the names are chosen to
+ -- correspond very closely to the syntax in the reference manual. This
+ -- section describes the usage of the semantic fields, which are used to
+ -- contain additional information determined during semantic analysis.
-- ABE_Is_Certain (Flag18-Sem)
- -- This flag is set in an instantiation node or a call node is
- -- determined to be sure to raise an ABE. This is used to trigger
- -- special handling of such cases, particularly in the instantiation
- -- case where we avoid instantiating the body if this flag is set.
- -- This flag is also present in an N_Formal_Package_Declaration_Node
- -- since formal package declarations are treated like instantiations,
- -- but it is always set to False in this context.
+ -- This flag is set in an instantiation node or a call node is determined
+ -- to be sure to raise an ABE. This is used to trigger special handling
+ -- of such cases, particularly in the instantiation case where we avoid
+ -- instantiating the body if this flag is set. This flag is also present
+ -- in an N_Formal_Package_Declaration_Node since formal package
+ -- declarations are treated like instantiations, but it is always set to
+ -- False in this context.
-- Accept_Handler_Records (List5-Sem)
- -- This field is present only in an N_Accept_Alternative node. It is
- -- used to temporarily hold the exception handler records from an
- -- accept statement in a selective accept. These exception handlers
- -- will eventually be placed in the Handler_Records list of the
- -- procedure built for this accept (see Expand_N_Selective_Accept
- -- procedure in Exp_Ch9 for further details).
+ -- This field is present only in an N_Accept_Alternative node. It is used
+ -- to temporarily hold the exception handler records from an accept
+ -- statement in a selective accept. These exception handlers will
+ -- eventually be placed in the Handler_Records list of the procedure
+ -- built for this accept (see Expand_N_Selective_Accept procedure in
+ -- Exp_Ch9 for further details).
-- Access_Types_To_Process (Elist2-Sem)
-- Present in N_Freeze_Entity nodes for Incomplete or private types.
- -- Contains the list of access types which may require specific
- -- treatment when the nature of the type completion is completely
- -- known. An example of such treatement is the generation of the
- -- associated_final_chain.
+ -- Contains the list of access types which may require specific treatment
+ -- when the nature of the type completion is completely known. An example
+ -- of such treatment is the generation of the associated_final_chain.
-- Actions (List1-Sem)
- -- This field contains a sequence of actions that are associated
- -- with the node holding the field. See the individual node types
- -- for details of how this field is used, as well as the description
- -- of the specific use for a particular node type.
+ -- This field contains a sequence of actions that are associated with the
+ -- node holding the field. See the individual node types for details of
+ -- how this field is used, as well as the description of the specific use
+ -- for a particular node type.
-- Activation_Chain_Entity (Node3-Sem)
-- This is used in tree nodes representing task activators (blocks,
-- subprogram bodies, package declarations, and task bodies). It is
-- initially Empty, and then gets set to point to the entity for the
-- declared Activation_Chain variable when the first task is declared.
- -- When tasks are declared in the corresponding declarative region
- -- this entity is located by name (its name is always _Chain) and
- -- the declared tasks are added to the chain.
+ -- When tasks are declared in the corresponding declarative region this
+ -- entity is located by name (its name is always _Chain) and the declared
+ -- tasks are added to the chain. Note that N_Extended_Return_Statement
+ -- does not have this attribute, although it does have an activation
+ -- chain. This chain is used to store the tasks temporarily, and is not
+ -- used for activating them. On successful completion of the return
+ -- statement, the tasks are moved to the caller's chain, and the caller
+ -- activates them.
-- Acts_As_Spec (Flag4-Sem)
- -- A flag set in the N_Subprogram_Body node for a subprogram body
- -- which is acting as its own spec. This flag also appears in the
- -- compilation unit node at the library level for such a subprogram
- -- (see further description in spec of Lib package).
+ -- A flag set in the N_Subprogram_Body node for a subprogram body which
+ -- is acting as its own spec, except in the case of a library level
+ -- subprogram, in which case the flag is set on the parent compilation
+ -- unit node instead (see further description in spec of Lib package).
+ -- ??? Above note about Lib is dubious since lib.ads does not mention
+ -- Acts_As_Spec at all.
+
+ -- Actual_Designated_Subtype (Node4-Sem)
+ -- Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi
+ -- needs to known the dynamic constrained subtype of the designated
+ -- object, this attribute is set to that type. This is done for
+ -- N_Free_Statements for access-to-classwide types and access to
+ -- unconstrained packed array types, and for N_Explicit_Dereference when
+ -- the designated type is an unconstrained packed array and the
+ -- dereference is the prefix of a 'Size attribute reference.
+
+ -- Address_Warning_Posted (Flag18-Sem)
+ -- Present in N_Attribute_Definition nodes. Set to indicate that we have
+ -- posted a warning for the address clause regarding size or alignment
+ -- issues. Used to inhibit multiple redundant messages.
-- Aggregate_Bounds (Node3-Sem)
-- Present in array N_Aggregate nodes. If the aggregate contains
-- component associations this field points to an N_Range node whose
-- bounds give the lowest and highest discrete choice values. If the
- -- named aggregate contains a dynamic or null choice this field is
- -- empty. If the aggregate contains positional elements this field
- -- points to an N_Integer_Literal node giving the number of positional
- -- elements. Note that if the aggregate contains positional elements
- -- and an other choice the N_Integer_Literal only accounts for the
- -- number of positional elements.
+ -- named aggregate contains a dynamic or null choice this field is empty.
+ -- If the aggregate contains positional elements this field points to an
+ -- N_Integer_Literal node giving the number of positional elements. Note
+ -- that if the aggregate contains positional elements and an other choice
+ -- the N_Integer_Literal only accounts for the number of positional
+ -- elements.
-- All_Others (Flag11-Sem)
- -- Present in an N_Others_Choice node. This flag is set in the case
- -- of an others exception where all exceptions are to be caught, even
- -- those that are not normally handled (in particular the tasking abort
- -- signal). This is used for translation of the at end handler into
- -- a normal exception handler.
+ -- Present in an N_Others_Choice node. This flag is set for an others
+ -- exception where all exceptions are to be caught, even those that are
+ -- not normally handled (in particular the tasking abort signal). This
+ -- is used for translation of the at end handler into a normal exception
+ -- handler.
-- Assignment_OK (Flag15-Sem)
-- This flag is set in a subexpression node for an object, indicating
-- that the associated object can be modified, even if this would not
-- normally be permissible (either by direct assignment, or by being
-- passed as an out or in-out parameter). This is used by the expander
- -- for a number of purposes, including initialzation of constants and
+ -- for a number of purposes, including initialization of constants and
-- limited type objects (such as tasks), setting discriminant fields,
-- setting tag values, etc. N_Object_Declaration nodes also have this
-- flag defined. Here it is used to indicate that an initialization
-- Present in nodes that can denote an entity: identifiers, character
-- literals, operator symbols, expanded names, operator nodes, and
-- attribute reference nodes (all these nodes have an Entity field).
- -- This field is also present in N_Aggregate, N_Selected_Component,
- -- and N_Extension_Aggregate nodes. This field is used in generic
- -- processing to create links between the generic template and the
- -- generic copy. See Sem_Ch12.Get_Associated_Node for full details.
- -- Note that this field overlaps Entity, which is fine, since, as
- -- explained in Sem_Ch12, the normal function of Entity is not
- -- required at the point where the Associated_Node is set. Note
- -- also, that in generic templates, this means that the Entity field
- -- does not necessarily point to an Entity. Since the back end is
- -- expected to ignore generic templates, this is harmless.
+ -- This field is also present in N_Aggregate, N_Selected_Component, and
+ -- N_Extension_Aggregate nodes. This field is used in generic processing
+ -- to create links between the generic template and the generic copy.
+ -- See Sem_Ch12.Get_Associated_Node for full details. Note that this
+ -- field overlaps Entity, which is fine, since, as explained in Sem_Ch12,
+ -- the normal function of Entity is not required at the point where the
+ -- Associated_Node is set. Note also, that in generic templates, this
+ -- means that the Entity field does not necessarily point to an Entity.
+ -- Since the back end is expected to ignore generic templates, this is
+ -- harmless.
-- At_End_Proc (Node1)
-- This field is present in an N_Handled_Sequence_Of_Statements node.
- -- It contains an identifier reference for the cleanup procedure to
- -- be called. See description of this node for further details.
+ -- It contains an identifier reference for the cleanup procedure to be
+ -- called. See description of this node for further details.
-- Backwards_OK (Flag6-Sem)
-- A flag present in the N_Assignment_Statement node. It is used only
-- if the type being assigned is an array type, and is set if analysis
-- determines that it is definitely safe to do the copy backwards, i.e.
- -- starting at the highest addressed element. Note that if neither of
- -- the flags Forwards_OK or Backwards_OK is set, it means that the
- -- front end could not determine that either direction is definitely
- -- safe, and a runtime check is required.
+ -- starting at the highest addressed element. Note that if neither of the
+ -- flags Forwards_OK or Backwards_OK is set, it means that the front end
+ -- could not determine that either direction is definitely safe, and a
+ -- runtime check may be required if the backend cannot figure it out.
-- Body_To_Inline (Node3-Sem)
-- present in subprogram declarations. Denotes analyzed but unexpanded
-- Body_Required (Flag13-Sem)
-- A flag that appears in the N_Compilation_Unit node indicating that
-- the corresponding unit requires a body. For the package case, this
- -- indicates that a completion is required. In Ada 95, if the flag
- -- is not set for the package case, then a body may not be present.
- -- In Ada 83, if the flag is not set for the package case, then a
- -- body is optional. For a subprogram declaration, the flag is set
- -- except in the case where a pragma Import or Interface applies,
- -- in which case no body is permitted (in Ada 83 or Ada 95).
+ -- indicates that a completion is required. In Ada 95, if the flag is not
+ -- set for the package case, then a body may not be present. In Ada 83,
+ -- if the flag is not set for the package case, then body is optional.
+ -- For a subprogram declaration, the flag is set except in the case where
+ -- a pragma Import or Interface applies, in which case no body is
+ -- permitted (in Ada 83 or Ada 95).
-- By_Ref (Flag5-Sem)
- -- A flag present in the N_Return_Statement_Node. It is set when the
- -- returned expression is already allocated on the secondary stack
- -- and thus the result is passed by reference rather than copied
- -- another time.
+ -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement,
+ -- this flag is set when the returned expression is already allocated on
+ -- the secondary stack and thus the result is passed by reference rather
+ -- than copied another time.
-- Check_Address_Alignment (Flag11-Sem)
-- A flag present in N_Attribute_Definition clause for a 'Address
- -- attribute definition. This flag is set if a dynamic check should
- -- be generated at the freeze point for the entity to which this
- -- address clause applies. The reason that we need this flag is that
- -- we want to check for range checks being suppressed at the point
- -- where the attribute definition clause is given, rather than
- -- testing this at the freeze point.
+ -- attribute definition. This flag is set if a dynamic check should be
+ -- generated at the freeze point for the entity to which this address
+ -- clause applies. The reason that we need this flag is that we want to
+ -- check for range checks being suppressed at the point where the
+ -- attribute definition clause is given, rather than testing this at the
+ -- freeze point.
+
+ -- Coextensions (Elist4-Sem)
+ -- Present in allocators nodes. Points to list of allocators for the
+ -- access discriminants of the allocated object.
+
+ -- Comes_From_Extended_Return_Statement (Flag18-Sem)
+ -- Present in N_Simple_Return_Statement nodes. True if this node was
+ -- constructed as part of the N_Extended_Return_Statement expansion.
+ -- .
-- Compile_Time_Known_Aggregate (Flag18-Sem)
- -- Present in N_Aggregate nodes. Set for aggregates which can be
- -- fully evaluated at compile time without raising constraint error.
- -- Such aggregates can be passed as is to Gigi without any expansion.
- -- See Sem_Aggr for the specific conditions under which an aggregate
- -- has this flag set. See also the flag Static_Processing_OK.
+ -- Present in N_Aggregate nodes. Set for aggregates which can be fully
+ -- evaluated at compile time without raising constraint error. Such
+ -- aggregates can be passed as is to Gigi without any expansion. See
+ -- Sem_Aggr for the specific conditions under which an aggregate has this
+ -- flag set. See also the flag Static_Processing_OK.
-- Condition_Actions (List3-Sem)
- -- This field appears in else-if nodes and in the iteration scheme
- -- node for while loops. This field is only used during semantic
- -- processing to temporarily hold actions inserted into the tree.
- -- In the tree passed to gigi, the condition actions field is always
- -- set to No_List. For details on how this field is used, see the
- -- routine Insert_Actions in package Exp_Util, and also the expansion
- -- routines for the relevant nodes.
+ -- This field appears in else-if nodes and in the iteration scheme node
+ -- for while loops. This field is only used during semantic processing to
+ -- temporarily hold actions inserted into the tree. In the tree passed
+ -- to gigi, the condition actions field is always set to No_List. For
+ -- details on how this field is used, see the routine Insert_Actions in
+ -- package Exp_Util, and also the expansion routines for the relevant
+ -- nodes.
-- Controlling_Argument (Node1-Sem)
-- This field is set in procedure and function call nodes if the call
- -- is a dispatching call (it is Empty for a non-dispatching call).
- -- It indicates the source of the controlling tag for the call. For
- -- Procedure calls, the Controlling_Argument is one of the actuals.
- -- For a function that has a dispatching result, it is an entity in
- -- the context of the call that can provide a tag, or else it is the
- -- tag of the root type of the class.
+ -- is a dispatching call (it is Empty for a non-dispatching call). It
+ -- indicates the source of the call's controlling tag. For procedure
+ -- calls, the Controlling_Argument is one of the actuals. For function
+ -- that has a dispatching result, it is an entity in the context of the
+ -- call that can provide a tag, or else it is the tag of the root type
+ -- of the class. It can also specify a tag directly rather than being a
+ -- tagged object. The latter is needed by the implementations of AI-239
+ -- and AI-260.
-- Conversion_OK (Flag14-Sem)
-- A flag set on type conversion nodes to indicate that the conversion
-- is to be considered as being valid, even though it is the case that
- -- the conversion is not valid Ada. This is used for the Enum_Rep,
- -- Fixed_Value and Integer_Value attributes, for internal conversions
- -- done for fixed-point operations, and for certain conversions for
- -- calls to initialization procedures. If Conversion_OK is set, then
- -- Etype must be set (the analyzer assumes that Etype has been set).
- -- For the case of fixed-point operands, it also indicates that the
- -- conversion is to be a direct conversion of the underlying integer
- -- result, with no regard to the small operand.
+ -- the conversion is not valid Ada. This is used for attributes Enum_Rep,
+ -- Fixed_Value and Integer_Value, for internal conversions done for
+ -- fixed-point operations, and for certain conversions for calls to
+ -- initialization procedures. If Conversion_OK is set, then Etype must be
+ -- set (the analyzer assumes that Etype has been set). For the case of
+ -- fixed-point operands, it also indicates that the conversion is to be
+ -- direct conversion of the underlying integer result, with no regard to
+ -- the small operand.
-- Corresponding_Body (Node5-Sem)
-- This field is set in subprogram declarations, package declarations,
-- points to the defining entity for the corresponding body (NOT the
-- node for the body itself).
+ -- Corresponding_Formal_Spec (Node3-Sem)
+ -- This field is set in subprogram renaming declarations, where it points
+ -- to the defining entity for a formal subprogram in the case where the
+ -- renaming corresponds to a generic formal subprogram association in an
+ -- instantiation. The field is Empty if the renaming does not correspond
+ -- to such a formal association.
+
-- Corresponding_Generic_Association (Node5-Sem)
-- This field is defined for object declarations and object renaming
-- declarations. It is set for the declarations within an instance that
- -- map generic formals to their actuals. If set, the field points to
+ -- map generic formals to their actuals. If set, the field points to
-- a generic_association which is the original parent of the expression
-- or name appearing in the declaration. This simplifies ASIS queries.
-- Corresponding_Spec (Node5-Sem)
-- This field is set in subprogram, package, task, and protected body
-- nodes, where it points to the defining entity in the corresponding
- -- spec. The attribute is also set in N_With_Clause nodes, where
- -- it points to the defining entity for the with'ed spec, and in
- -- a subprogram renaming declaration when it is a Renaming_As_Body.
- -- The field is Empty if there is no corresponding spec, as in the
- -- case of a subprogram body that serves as its own spec.
+ -- spec. The attribute is also set in N_With_Clause nodes where it points
+ -- to the defining entity for the with'ed spec, and in a subprogram
+ -- renaming declaration when it is a Renaming_As_Body. The field is Empty
+ -- if there is no corresponding spec, as in the case of a subprogram body
+ -- that serves as its own spec.
-- Corresponding_Stub (Node3-Sem)
-- This field is present in an N_Subunit node. It holds the node in
- -- the parent unit that is the stub declaration for the subunit. it is
+ -- the parent unit that is the stub declaration for the subunit. It is
-- set when analysis of the stub forces loading of the proper body. If
-- expansion of the proper body creates new declarative nodes, they are
-- inserted at the point of the corresponding_stub.
-- for the discriminant checking function for the variant.
-- Debug_Statement (Node3)
- -- This field is present in an N_Pragma node. It is used only for
- -- a Debug pragma or pragma Assert with a second parameter. The
- -- parameter is of the form of an expression, as required by the
- -- pragma syntax, but is actually a procedure call. To simplify
+ -- This field is present in an N_Pragma node. It is used only for a Debug
+ -- pragma. The parameter is of the form of an expression, as required by
+ -- the pragma syntax, but is actually a procedure call. To simplify
-- semantic processing, the parser creates a copy of the argument
-- rearranged into a procedure call statement and places it in the
- -- Debug_Statement field. Note that this field is considered a
- -- syntactic field, since it is created by the parser.
+ -- Debug_Statement field. Note that this field is considered syntactic
+ -- field, since it is created by the parser.
-- Default_Expression (Node5-Sem)
- -- This field is Empty if there is no default expression. If there
- -- is a simple default expression (one with no side effects), then
- -- this field simply contains a copy of the Expression field (both
- -- point to the tree for the default expression). Default_Expression
- -- is used for conformance checking.
-
- -- Delay_Finalize_Attach (Flag14-Sem)
- -- This flag is present in an N_Object_Declaration node. If it is set,
- -- then in the case of a controlled type being declared and initialized,
- -- the normal code for attaching the result to the appropriate local
- -- finalization list is suppressed. This is used for functions that
- -- return controlled types without using the secondary stack, where
- -- it is the caller who must do the attachment.
+ -- This field is Empty if there is no default expression. If there is a
+ -- simple default expression (one with no side effects), then this field
+ -- simply contains a copy of the Expression field (both point to the tree
+ -- for the default expression). Default_Expression is used for
+ -- conformance checking.
-- Discr_Check_Funcs_Built (Flag11-Sem)
-- This flag is present in N_Full_Type_Declaration nodes. It is set when
-- is required. It is not determined who deals with this flag (???).
-- Do_Overflow_Check (Flag17-Sem)
- -- This flag is set on an operator where an overflow check is required
- -- on the operation. The actual check is dealt with by the backend
- -- (all the front end does is to set the flag). The other cases where
- -- this flag is used is on a Type_Conversion node and for attribute
- -- reference nodes. For a type conversion, it means that the conversion
- -- is from one base type to another, and the value may not fit in the
- -- target base type. See also the description of Do_Range_Check for
- -- this case. The only attribute references which use this flag are
- -- Pred and Succ, where it means that the result should be checked
- -- for going outside the base range.
+ -- This flag is set on an operator where an overflow check is required on
+ -- the operation. The actual check is dealt with by the backend (all the
+ -- front end does is to set the flag). The other cases where this flag is
+ -- used is on a Type_Conversion node and for attribute reference nodes.
+ -- For a type conversion, it means that the conversion is from one base
+ -- type to another, and the value may not fit in the target base type.
+ -- See also the description of Do_Range_Check for this case. The only
+ -- attribute references which use this flag are Pred and Succ, where it
+ -- means that the result should be checked for going outside the base
+ -- range.
-- Do_Range_Check (Flag9-Sem)
- -- This flag is set on an expression which appears in a context where
- -- a range check is required. The target type is clear from the
- -- context. The contexts in which this flag can appear are limited to
- -- the following.
+ -- This flag is set on an expression which appears in a context where a
+ -- range check is required. The target type is clear from the context.
+ -- The contexts in which this flag can appear are the following:
-- Right side of an assignment. In this case the target type is
-- taken from the left side of the assignment, which is referenced
-- target type is determined from the type of the array, which is
-- referenced by the Prefix of the N_Indexed_Component node.
- -- Argument expression for a parameter, appearing either directly
- -- in the Parameter_Associations list of a call or as the Expression
- -- of an N_Parameter_Association node that appears in this list. In
- -- either case, the check is against the type of the formal. Note
- -- that the flag is relevant only in IN and IN OUT parameters, and
- -- will be ignored for OUT parameters, where no check is required
- -- in the call, and if a check is required on the return, it is
- -- generated explicitly with a type conversion.
+ -- Argument expression for a parameter, appearing either directly in
+ -- the Parameter_Associations list of a call or as the Expression of an
+ -- N_Parameter_Association node that appears in this list. In either
+ -- case, the check is against the type of the formal. Note that the
+ -- flag is relevant only in IN and IN OUT parameters, and will be
+ -- ignored for OUT parameters, where no check is required in the call,
+ -- and if a check is required on the return, it is generated explicitly
+ -- with a type conversion.
-- Initialization expression for the initial value in an object
-- declaration. In this case the Do_Range_Check flag is set on
-- the initialization expression, and the check is against the
-- range of the type of the object being declared.
- -- The expression of a type conversion. In this case the range check
- -- is against the target type of the conversion. See also the use of
- -- Do_Overflow_Check on a type conversion. The distinction is that
- -- the overflow check protects against a value that is outside the
- -- range of the target base type, whereas a range check checks that
- -- the resulting value (which is a value of the base type of the
- -- target type), satisfies the range constraint of the target type.
+ -- The expression of a type conversion. In this case the range check is
+ -- against the target type of the conversion. See also the use of
+ -- Do_Overflow_Check on a type conversion. The distinction is that the
+ -- overflow check protects against a value that is outside the range of
+ -- the target base type, whereas a range check checks that the
+ -- resulting value (which is a value of the base type of the target
+ -- type), satisfies the range constraint of the target type.
-- Note: when a range check is required in contexts other than those
-- listed above (e.g. in a return statement), an additional type
-- Do_Storage_Check (Flag17-Sem)
-- This flag is set in an N_Allocator node to indicate that a storage
- -- check is required for the allocation, or in an N_Subprogram_Body
- -- node to indicate that a stack check is required in the subprogram
- -- prolog. The N_Allocator case is handled by the routine that expands
- -- the call to the runtime routine. The N_Subprogram_Body case is
- -- handled by the backend, and all the semantics does is set the flag.
+ -- check is required for the allocation, or in an N_Subprogram_Body node
+ -- to indicate that a stack check is required in the subprogram prolog.
+ -- The N_Allocator case is handled by the routine that expands the call
+ -- to the runtime routine. The N_Subprogram_Body case is handled by the
+ -- backend, and all the semantics does is set the flag.
-- Do_Tag_Check (Flag13-Sem)
-- This flag is set on an N_Assignment_Statement, N_Function_Call,
- -- N_Procedure_Call_Statement, N_Type_Conversion or N_Return_Statememt
+ -- N_Procedure_Call_Statement, N_Type_Conversion,
+ -- N_Simple_Return_Statement, or N_Extended_Return_Statement
-- node to indicate that the tag check can be suppressed. It is not
-- yet decided how this flag is used (TBD ???).
-- Elaborate_Present (Flag4-Sem)
- -- This flag is set in the N_With_Clause node to indicate that a
- -- pragma Elaborate pragma appears for the with'ed units.
+ -- This flag is set in the N_With_Clause node to indicate that pragma
+ -- Elaborate pragma appears for the with'ed units.
+
+ -- Elaborate_All_Desirable (Flag9-Sem)
+ -- This flag is set in the N_With_Clause mode to indicate that the static
+ -- elaboration processing has determined that an Elaborate_All pragma is
+ -- desirable for correct elaboration for this unit.
-- Elaborate_All_Present (Flag14-Sem)
-- This flag is set in the N_With_Clause node to indicate that a
-- pragma Elaborate_All pragma appears for the with'ed units.
+ -- Elaborate_Desirable (Flag11-Sem)
+ -- This flag is set in the N_With_Clause mode to indicate that the static
+ -- elaboration processing has determined that an Elaborate pragma is
+ -- desirable for correct elaboration for this unit.
+
-- Elaboration_Boolean (Node2-Sem)
- -- This field is present in function and procedure specification
- -- nodes. If set, it points to the entity for a Boolean flag that
- -- must be tested for certain calls to check for access before
- -- elaboration. See body of Sem_Elab for further details. This
- -- field is Empty if no elaboration boolean is required.
+ -- This field is present in function and procedure specification nodes.
+ -- If set, it points to the entity for a Boolean flag that must be tested
+ -- for certain calls to check for access before elaboration. See body of
+ -- Sem_Elab for further details. This field is Empty if no elaboration
+ -- boolean is required.
-- Else_Actions (List3-Sem)
-- This field is present in conditional expression nodes. During code
-- actions at an appropriate place in the tree to get elaborated at the
-- right time. For conditional expressions, we have to be sure that the
-- actions for the Else branch are only elaborated if the condition is
- -- False. The Else_Actions field is used as a temporary parking place
- -- for these actions. The final tree is always rewritten to eliminate
- -- the need for this field, so in the tree passed to Gigi, this field
- -- is always set to No_List.
+ -- False. The Else_Actions field is used as a temporary parking place for
+ -- these actions. The final tree is always rewritten to eliminate the
+ -- need for this field, so in the tree passed to Gigi, this field is
+ -- always set to No_List.
-- Enclosing_Variant (Node2-Sem)
- -- This field is present in the N_Variant node and identifies the
- -- Node_Id corresponding to the immediately enclosing variant when
- -- the variant is nested, and N_Empty otherwise. Set during semantic
- -- processing of the variant part of a record type.
+ -- This field is present in the N_Variant node and identifies the Node_Id
+ -- corresponding to the immediately enclosing variant when the variant is
+ -- nested, and N_Empty otherwise. Set during semantic processing of the
+ -- variant part of a record type.
-- Entity (Node4-Sem)
- -- Appears in all direct names (identifier, character literal,
- -- operator symbol), as well as expanded names, and attributes that
- -- denote entities, such as 'Class. Points to the entity for the
- -- corresponding defining occurrence. Set after name resolution.
- -- In the case of identifiers in a WITH list, the corresponding
- -- defining occurrence is in a separately compiled file, and this
- -- pointer must be set using the library Load procedure. Note that
- -- during name resolution, the value in Entity may be temporarily
- -- incorrect (e.g. during overload resolution, Entity is initially
- -- set to the first possible correct interpretation, and then later
- -- modified if necessary to contain the correct value after resolution).
- -- Note that this field overlaps Associated_Node, which is used during
+ -- Appears in all direct names (identifiers, character literals, and
+ -- operator symbols), as well as expanded names, and attributes that
+ -- denote entities, such as 'Class. Points to entity for corresponding
+ -- defining occurrence. Set after name resolution. For identifiers in a
+ -- WITH list, the corresponding defining occurrence is in a separately
+ -- compiled file, and Entity must be set by the library Load procedure.
+ --
+ -- Note: During name resolution, the value in Entity may be temporarily
+ -- incorrect (e.g. during overload resolution, Entity is initially set to
+ -- the first possible correct interpretation, and then later modified if
+ -- necessary to contain the correct value after resolution).
+ --
+ -- Note: This field overlaps Associated_Node, which is used during
-- generic processing (see Sem_Ch12 for details). Note also that in
-- generic templates, this means that the Entity field does not always
- -- point to an Entity. Since the back end is expected to ignore
- -- generic templates, this is harmless.
+ -- point to an Entity. Since the back end is expected to ignore generic
+ -- templates, this is harmless.
+ --
+ -- Note: This field also appears in N_Attribute_Definition_Clause nodes.
+ -- It is used only for stream attributes definition clauses. In this
+ -- case, it denotes a (possibly dummy) subprogram entity that is declared
+ -- conceptually at the point of the clause. Thus the visibility of the
+ -- attribute definition clause (in the sense of 8.3(23) as amended by
+ -- AI-195) can be checked by testing the visibility of that subprogram.
+ --
+ -- Note: Normally the Entity field of an identifier points to the entity
+ -- for the corresponding defining identifier, and hence the Chars field
+ -- of an identifier will match the Chars field of the entity. However,
+ -- there is no requirement that these match, and there are obscure cases
+ -- of generated code where they do not match.
-- Entity_Or_Associated_Node (Node4-Sem)
- -- A synonym for both Entity and Associated_Node. Used by convention
- -- in the code when referencing this field in cases where it is not
- -- known whether the field contains an Entity or an Associated_Node.
+ -- A synonym for both Entity and Associated_Node. Used by convention in
+ -- the code when referencing this field in cases where it is not known
+ -- whether the field contains an Entity or an Associated_Node.
-- Etype (Node5-Sem)
- -- Appears in all expression nodes, all direct names, and all
- -- entities. Points to the entity for the related type. Set after
- -- type resolution. Normally this is the actual subtype of the
- -- expression. However, in certain contexts such as the right side
- -- of an assignment, subscripts, arguments to calls, returned value
- -- in a function, initial value etc. it is the desired target type.
- -- In the event that this is different from the actual type, the
- -- Do_Range_Check flag will be set if a range check is required.
- -- Note: if the Is_Overloaded flag is set, then Etype points to
- -- an essentially arbitrary choice from the possible set of types.
-
- -- Exception_Junk (Flag11-Sem)
- -- This flag is set in a various nodes appearing in a statement
- -- sequence to indicate that the corresponding node is an artifact
- -- of the generated code for exception handling, and should be
- -- ignored when analyzing the control flow of the relevant sequence
- -- of statements (e.g. to check that it does not end with a bad
- -- return statement).
+ -- Appears in all expression nodes, all direct names, and all entities.
+ -- Points to the entity for the related type. Set after type resolution.
+ -- Normally this is the actual subtype of the expression. However, in
+ -- certain contexts such as the right side of an assignment, subscripts,
+ -- arguments to calls, returned value in a function, initial value etc.
+ -- it is the desired target type. In the event that this is different
+ -- from the actual type, the Do_Range_Check flag will be set if a range
+ -- check is required. Note: if the Is_Overloaded flag is set, then Etype
+ -- points to an essentially arbitrary choice from the possible set of
+ -- types.
+
+ -- Exception_Junk (Flag8-Sem)
+ -- This flag is set in a various nodes appearing in a statement sequence
+ -- to indicate that the corresponding node is an artifact of the
+ -- generated code for exception handling, and should be ignored when
+ -- analyzing the control flow of the relevant sequence of statements
+ -- (e.g. to check that it does not end with a bad return statement).
+
+ -- Exception_Label (Node5-Sem)
+ -- Appears in N_Push_xxx_Label nodes. Points to the entity of the label
+ -- to be used for transforming the corresponding exception into a goto,
+ -- or contains Empty, if this exception is not to be transformed. Also
+ -- appears in N_Exception_Handler nodes, where, if set, it indicates
+ -- that there may be a local raise for the handler, so that expansion
+ -- to allow a goto is required (and this field contains the label for
+ -- this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details.
-- Expansion_Delayed (Flag11-Sem)
- -- Set on aggregates and extension aggregates that need a top-down
- -- rather than bottom up expansion. Typically aggregate expansion
- -- happens bottom up. For nested aggregates the expansion is delayed
- -- until the enclosing aggregate itself is expanded, e.g. in the context
- -- of a declaration. To delay it we set this flag. This is done to
- -- avoid creating a temporary for each level of a nested aggregates,
- -- and also to prevent the premature generation of constraint checks.
- -- This is also a requirement if we want to generate the proper
- -- attachment to the internal finalization lists (for record with
- -- controlled components). Top down expansion of aggregates is also
- -- used for in-place array aggregate assignment or initialization.
- -- When the full context is known, the target of the assignment or
- -- initialization is used to generate the left-hand side of individual
- -- assignment to each sub-component.
+ -- Set on aggregates and extension aggregates that need a top-down rather
+ -- than bottom up expansion. Typically aggregate expansion happens bottom
+ -- up. For nested aggregates the expansion is delayed until the enclosing
+ -- aggregate itself is expanded, e.g. in the context of a declaration. To
+ -- delay it we set this flag. This is done to avoid creating a temporary
+ -- for each level of a nested aggregates, and also to prevent the
+ -- premature generation of constraint checks. This is also a requirement
+ -- if we want to generate the proper attachment to the internal
+ -- finalization lists (for record with controlled components). Top down
+ -- expansion of aggregates is also used for in-place array aggregate
+ -- assignment or initialization. When the full context is known, the
+ -- target of the assignment or initialization is used to generate the
+ -- left-hand side of individual assignment to each sub-component.
-- First_Inlined_Subprogram (Node3-Sem)
-- Present in the N_Compilation_Unit node for the main program. Points
-- if there are no inlined subprograms or inlining is not active.
-- First_Named_Actual (Node4-Sem)
- -- Present in procedure call statement and function call nodes, and
- -- also in Intrinsic nodes. Set during semantic analysis to point to
- -- the first named parameter where parameters are ordered by declaration
- -- order (as opposed to the actual order in the call which may be
- -- different due to named associations). Note: this field points to the
- -- explicit actual parameter itself, not the N_Parameter_Association
- -- node (its parent).
+ -- Present in procedure call statement and function call nodes, and also
+ -- in Intrinsic nodes. Set during semantic analysis to point to the first
+ -- named parameter where parameters are ordered by declaration order (as
+ -- opposed to the actual order in the call which may be different due to
+ -- named associations). Note: this field points to the explicit actual
+ -- parameter itself, not the N_Parameter_Association node (its parent).
-- First_Real_Statement (Node2-Sem)
-- Present in N_Handled_Sequence_Of_Statements node. Normally set to
- -- Empty. Used only when declarations are moved into the statement
- -- part of a construct as a result of wrapping an AT END handler that
- -- is required to cover the declarations. In this case, this field is
- -- used to remember the location in the statements list of the first
- -- real statement, i.e. the statement that used to be first in the
- -- statement list before the declarations were prepended.
+ -- Empty. Used only when declarations are moved into the statement part
+ -- of a construct as a result of wrapping an AT END handler that is
+ -- required to cover the declarations. In this case, this field is used
+ -- to remember the location in the statements list of the first real
+ -- statement, i.e. the statement that used to be first in the statement
+ -- list before the declarations were prepended.
-- First_Subtype_Link (Node5-Sem)
- -- Present in N_Freeze_Entity node for an anonymous base type that
- -- is implicitly created by the declaration of a first subtype. It
- -- points to the entity for the first subtype.
+ -- Present in N_Freeze_Entity node for an anonymous base type that is
+ -- implicitly created by the declaration of a first subtype. It points
+ -- to the entity for the first subtype.
-- Float_Truncate (Flag11-Sem)
- -- A flag present in type conversion nodes. This is used for float
- -- to integer conversions where truncation is required rather than
- -- rounding. Note that Gigi does not handle type conversions from real
- -- to integer with rounding (see Expand_N_Type_Conversion).
+ -- A flag present in type conversion nodes. This is used for float to
+ -- integer conversions where truncation is required rather than rounding.
+ -- Note that Gigi does not handle type conversions from real to integer
+ -- with rounding (see Expand_N_Type_Conversion).
-- Forwards_OK (Flag5-Sem)
-- A flag present in the N_Assignment_Statement node. It is used only
-- if the type being assigned is an array type, and is set if analysis
-- determines that it is definitely safe to do the copy forwards, i.e.
- -- starting at the lowest addressed element. Note that if neither of
- -- the flags Forwards_OK or Backwards_OK is set, it means that the
- -- front end could not determine that either direction is definitely
- -- safe, and a runtime check is required.
+ -- starting at the lowest addressed element. Note that if neither of the
+ -- flags Forwards_OK or Backwards_OK is set, it means that the front end
+ -- could not determine that either direction is definitely safe, and a
+ -- runtime check is required.
+
+ -- From_At_End (Flag4-Sem)
+ -- This flag is set on an N_Raise_Statement node if it corresponds to
+ -- the reraise statement generated as the last statement of an AT END
+ -- handler when SJLJ exception handling is active. It is used to stop
+ -- a bogus violation of restriction (No_Exception_Propagation), bogus
+ -- because if the restriction is set, the reraise is not generated.
-- From_At_Mod (Flag4-Sem)
-- This flag is set on the attribute definition clause node that is
-- generated by a transformation of an at mod phrase in a record
- -- representation clause. This is used to give slightly different
- -- (Ada 83 compatible) semantics to such a clause, namely it is
- -- used to specify a minimum acceptable alignment for the base type
- -- and all subtypes. In Ada 95 terms, the actual alignment of the
- -- base type and all subtypes must be a multiple of the given value,
- -- and the representation clause is considered to be type specific
- -- instead of subtype specific.
+ -- representation clause. This is used to give slightly different (Ada 83
+ -- compatible) semantics to such a clause, namely it is used to specify a
+ -- minimum acceptable alignment for the base type and all subtypes. In
+ -- Ada 95 terms, the actual alignment of the base type and all subtypes
+ -- must be a multiple of the given value, and the representation clause
+ -- is considered to be type specific instead of subtype specific.
-- From_Default (Flag6-Sem)
- -- This flag is set on the subprogram renaming declaration created in
- -- an instance for a formal subprogram, when the formal is declared
- -- with a box, and there is no explicit actual. If the flag is present,
- -- the declaration is treated as an implicit reference to the formal in
- -- the ali file.
+ -- This flag is set on the subprogram renaming declaration created in an
+ -- instance for a formal subprogram, when the formal is declared with a
+ -- box, and there is no explicit actual. If the flag is present, the
+ -- declaration is treated as an implicit reference to the formal in the
+ -- ali file.
-- Generic_Parent (Node5-Sem)
- -- Generic_parent is defined on declaration nodes that are instances.
- -- The value of Generic_Parent is the generic entity from which the
- -- instance is obtained. Generic_Parent is also defined for the renaming
+ -- Generic_Parent is defined on declaration nodes that are instances. The
+ -- value of Generic_Parent is the generic entity from which the instance
+ -- is obtained. Generic_Parent is also defined for the renaming
-- declarations and object declarations created for the actuals in an
-- instantiation. The generic parent of such a declaration is the
-- corresponding generic association in the Instantiation node.
-- Generic_Parent_Type (Node4-Sem)
- -- Generic_Parent_Type is defined on Subtype_Declaration nodes for
- -- the actuals of formal private and derived types. Within the instance,
- -- the operations on the actual are those inherited from the parent.
- -- For a formal private type, the parent type is the generic type
- -- itself. The Generic_Parent_Type is also used in an instance to
- -- determine whether a private operation overrides an inherited one.
+ -- Generic_Parent_Type is defined on Subtype_Declaration nodes for the
+ -- actuals of formal private and derived types. Within the instance, the
+ -- operations on the actual are those inherited from the parent. For a
+ -- formal private type, the parent type is the generic type itself. The
+ -- Generic_Parent_Type is also used in an instance to determine whether a
+ -- private operation overrides an inherited one.
-- Handler_List_Entry (Node2-Sem)
-- This field is present in N_Object_Declaration nodes. It is set only
-- handler is deleted during optimization. For further details on why
-- this is required, see Exp_Ch11.Remove_Handler_Entries.
- -- Has_Dynamic_Length_Check (Flag10-Sem)
- -- This flag is present on all nodes. It is set to indicate that one
- -- of the routines in unit Checks has generated a length check action
- -- which has been inserted at the flagged node. This is used to avoid
- -- the generation of duplicate checks.
-
- -- Has_Dynamic_Range_Check (Flag12-Sem)
- -- This flag is present on all nodes. It is set to indicate that one
- -- of the routines in unit Checks has generated a range check action
- -- which has been inserted at the flagged node. This is used to avoid
- -- the generation of duplicate checks.
-
-- Has_No_Elaboration_Code (Flag17-Sem)
- -- A flag that appears in the N_Compilation_Unit node to indicate
- -- whether or not elaboration code is present for this unit. It is
- -- initially set true for subprogram specs and bodies and for all
- -- generic units and false for non-generic package specs and bodies.
- -- Gigi may set the flag in the non-generic package case if it
- -- determines that no elaboration code is generated. Note that this
- -- flag is not related to the Is_Preelaborated status, there can be
- -- preelaborated packages that generate elaboration code, and non-
- -- preelaborated packages which do not generate elaboration code.
+ -- A flag that appears in the N_Compilation_Unit node to indicate whether
+ -- or not elaboration code is present for this unit. It is initially set
+ -- true for subprogram specs and bodies and for all generic units and
+ -- false for non-generic package specs and bodies. Gigi may set the flag
+ -- in the non-generic package case if it determines that no elaboration
+ -- code is generated. Note that this flag is not related to the
+ -- Is_Preelaborated status, there can be preelaborated packages that
+ -- generate elaboration code, and non-preelaborated packages which do
+ -- not generate elaboration code.
-- Has_Priority_Pragma (Flag6-Sem)
-- A flag present in N_Subprogram_Body, N_Task_Definition and
- -- N_Protected_Definition nodes to flag the presence of either
- -- a Priority or Interrupt_Priority pragma in the declaration
- -- sequence (public or private in the task and protected cases)
+ -- N_Protected_Definition nodes to flag the presence of either a Priority
+ -- or Interrupt_Priority pragma in the declaration sequence (public or
+ -- private in the task and protected cases)
-- Has_Private_View (Flag11-Sem)
- -- A flag present in generic nodes that have an entity, to indicate
- -- that the node has a private type. Used to exchange private
- -- and full declarations if the visibility at instantiation is
- -- different from the visibility at generic definition.
+ -- A flag present in generic nodes that have an entity, to indicate that
+ -- the node has a private type. Used to exchange private and full
+ -- declarations if the visibility at instantiation is different from the
+ -- visibility at generic definition.
+
+ -- Has_Relative_Deadline_Pragma (Flag9-Sem)
+ -- A flag present in N_Subprogram_Body and N_Task_Definition nodes to
+ -- flag the presence of a pragma Relative_Deadline.
+
+ -- Has_Self_Reference (Flag13-Sem)
+ -- Present in N_Aggregate and N_Extension_Aggregate. Indicates that one
+ -- of the expressions contains an access attribute reference to the
+ -- enclosing type. Such a self-reference can only appear in default-
+ -- initialized aggregate for a record type.
-- Has_Storage_Size_Pragma (Flag5-Sem)
- -- A flag present in an N_Task_Definition node to flag the presence
- -- of a Storage_Size pragma
+ -- A flag present in an N_Task_Definition node to flag the presence of a
+ -- Storage_Size pragma.
-- Has_Task_Info_Pragma (Flag7-Sem)
- -- A flag present in an N_Task_Definition node to flag the presence
- -- of a Task_Info pragma. Used to detect duplicate pragmas.
+ -- A flag present in an N_Task_Definition node to flag the presence of a
+ -- Task_Info pragma. Used to detect duplicate pragmas.
-- Has_Task_Name_Pragma (Flag8-Sem)
- -- A flag present in N_Task_Definition nodes to flag the presence
- -- of a Task_Name pragma in the declaration sequence for the task.
+ -- A flag present in N_Task_Definition nodes to flag the presence of a
+ -- Task_Name pragma in the declaration sequence for the task.
-- Has_Wide_Character (Flag11-Sem)
- -- Present in string literals, set if any wide character (i.e. a
- -- character code outside the Character range) appears in the string.
+ -- Present in string literals, set if any wide character (i.e. character
+ -- code outside the Character range) appears in the string.
-- Hidden_By_Use_Clause (Elist4-Sem)
-- An entity list present in use clauses that appear within
-- instantiations. For the resolution of local entities, entities
- -- introduced by these use clauses have priority over global ones,
- -- and outer entities must be explicitly hidden/restored on exit.
+ -- introduced by these use clauses have priority over global ones, and
+ -- outer entities must be explicitly hidden/restored on exit.
-- Implicit_With (Flag16-Sem)
-- This flag is set in the N_With_Clause node that is implicitly
- -- generated for runtime units that are loaded by the expander, and
- -- also for package System, if it is loaded implicitly by a use of
- -- the 'Address or 'Tag attribute
+ -- generated for runtime units that are loaded by the expander, and also
+ -- for package System, if it is loaded implicitly by a use of the
+ -- 'Address or 'Tag attribute.
-- Includes_Infinities (Flag11-Sem)
- -- This flag is present in N_Range nodes. It is set for the range
- -- of unconstrained float types defined in Standard, which include
- -- not only the given range of values, but also legtitimately can
- -- include infinite values. This flag is false for any float type
- -- for which an explicit range is given by the programmer, even if
- -- that range is identical to the range for float.
+ -- This flag is present in N_Range nodes. It is set for the range of
+ -- unconstrained float types defined in Standard, which include not only
+ -- the given range of values, but also legitimately can include infinite
+ -- values. This flag is false for any float type for which an explicit
+ -- range is given by the programmer, even if that range is identical to
+ -- the range for Float.
-- Instance_Spec (Node5-Sem)
-- This field is present in generic instantiation nodes, and also in
-- formal package declaration nodes (formal package declarations are
- -- treated in a manner very similar to package instantiations). It
- -- points to the node for the spec of the instance, inserted as part
- -- of the semantic processing for instantiations in Sem_Ch12.
+ -- treated in a manner very similar to package instantiations). It points
+ -- to the node for the spec of the instance, inserted as part of the
+ -- semantic processing for instantiations in Sem_Ch12.
-- Is_Asynchronous_Call_Block (Flag7-Sem)
-- A flag set in a Block_Statement node to indicate that it is the
- -- expansion of an asynchronous entry call. Such a block needs a
- -- cleanup handler to assure that the call is cancelled.
+ -- expansion of an asynchronous entry call. Such a block needs cleanup
+ -- handler to assure that the call is cancelled.
-- Is_Component_Left_Opnd (Flag13-Sem)
-- Is_Component_Right_Opnd (Flag14-Sem)
-- concatenation nodes in instances.
-- Is_Controlling_Actual (Flag16-Sem)
- -- This flag is set on in an expression that is a controlling argument
- -- in a dispatching call. It is off in all other cases. See Sem_Disp
- -- for details of its use.
+ -- This flag is set on in an expression that is a controlling argument in
+ -- a dispatching call. It is off in all other cases. See Sem_Disp for
+ -- details of its use.
+
+ -- Is_Dynamic_Coextension (Flag18-Sem)
+ -- Present in allocator nodes, to indicate that this is an allocator
+ -- for an access discriminant of a dynamically allocated object. The
+ -- coextension must be deallocated and finalized at the same time as
+ -- the enclosing object.
+
+ -- Is_Entry_Barrier_Function (Flag8-Sem)
+ -- This flag is set in an N_Subprogram_Body node which is the expansion
+ -- of an entry barrier from a protected entry body. It is used for the
+ -- circuitry checking for incorrect use of Current_Task.
+
+ -- Is_Expanded_Build_In_Place_Call (Flag11-Sem)
+ -- This flag is set in an N_Function_Call node to indicate that the extra
+ -- actuals to support a build-in-place style of call have been added to
+ -- the call.
-- Is_In_Discriminant_Check (Flag11-Sem)
- -- This flag is present in a selected component, and is used to
- -- indicate that the reference occurs within a discriminant check.
- -- The significance is that optimizations based on assuming that
- -- the discriminant check has a correct value cannot be performed
- -- in this case (or the disriminant check may be optimized away!)
+ -- This flag is present in a selected component, and is used to indicate
+ -- that the reference occurs within a discriminant check. The
+ -- significance is that optimizations based on assuming that the
+ -- discriminant check has a correct value cannot be performed in this
+ -- case (or the discriminant check may be optimized away!)
-- Is_Machine_Number (Flag11-Sem)
- -- This flag is set in an N_Real_Literal node to indicate that the
- -- value is a machine number. This avoids some unnecessary cases
- -- of converting real literals to machine numbers.
+ -- This flag is set in an N_Real_Literal node to indicate that the value
+ -- is a machine number. This avoids some unnecessary cases of converting
+ -- real literals to machine numbers.
-- Is_Null_Loop (Flag16-Sem)
- -- This flag is set in an N_Loop_Statement node if the corresponding
- -- loop can be determined to be null at compile time. This is used to
- -- suppress any warnings that would otherwise be issued inside the
- -- loop since they are probably not useful.
+ -- This flag is set in an N_Loop_Statement node if the corresponding loop
+ -- can be determined to be null at compile time. This is used to suppress
+ -- any warnings that would otherwise be issued inside the loop since they
+ -- are probably not useful.
+
+ -- Is_Overloaded (Flag5-Sem)
+ -- A flag present in all expression nodes. Used temporarily during
+ -- overloading determination. The setting of this flag is not relevant
+ -- once overloading analysis is complete.
-- Is_Power_Of_2_For_Shift (Flag13-Sem)
-- A flag present only in N_Op_Expon nodes. It is set when the
- -- exponentiation is of the forma 2 ** N, where the type of N is
- -- an unsigned integral subtype whose size does not exceed the size
- -- of Standard_Integer (i.e. a type that can be safely converted to
- -- Natural), and the exponentiation appears as the right operand of
- -- an integer multiplication or an integer division where the dividend
- -- is unsigned. It is also required that overflow checking is off for
- -- both the exponentiation and the multiply/divide node. If this set
- -- of conditions holds, and the flag is set, then the division or
+ -- exponentiation is of the form 2 ** N, where the type of N is an
+ -- unsigned integral subtype whose size does not exceed the size of
+ -- Standard_Integer (i.e. a type that can be safely converted to
+ -- Natural), and the exponentiation appears as the right operand of an
+ -- integer multiplication or an integer division where the dividend is
+ -- unsigned. It is also required that overflow checking is off for both
+ -- the exponentiation and the multiply/divide node. If this set of
+ -- conditions holds, and the flag is set, then the division or
-- multiplication can be (and is) converted to a shift.
- -- Is_Overloaded (Flag5-Sem)
- -- A flag present in all expression nodes. Used temporarily during
- -- overloading determination. The setting of this flag is not
- -- relevant once overloading analysis is complete.
-
-- Is_Protected_Subprogram_Body (Flag7-Sem)
-- A flag set in a Subprogram_Body block to indicate that it is the
- -- implemenation of a protected subprogram. Such a body needs a
- -- cleanup handler to make sure that the associated protected object
- -- is unlocked when the subprogram completes.
+ -- implementation of a protected subprogram. Such a body needs cleanup
+ -- handler to make sure that the associated protected object is unlocked
+ -- when the subprogram completes.
+
+ -- Is_Static_Coextension (Flag14-Sem)
+ -- Present in N_Allocator nodes. Set if the allocator is a coextension
+ -- of an object allocated on the stack rather than the heap.
-- Is_Static_Expression (Flag6-Sem)
- -- Indicates that an expression is a static expression (RM 4.9). See
- -- spec of package Sem_Eval for full details on the use of this flag.
+ -- Indicates that an expression is a static expression (RM 4.9). See spec
+ -- of package Sem_Eval for full details on the use of this flag.
-- Is_Subprogram_Descriptor (Flag16-Sem)
-- Present in N_Object_Declaration, and set only for the object
-- A flag set in a Block_Statement node to indicate that it is the
-- expansion of a task allocator, or the allocator of an object
-- containing tasks. Such a block requires a cleanup handler to call
- -- Expunge_Unactivted_Tasks to complete any tasks that have been
+ -- Expunge_Unactivated_Tasks to complete any tasks that have been
-- allocated but not activated when the allocator completes abnormally.
-- Is_Task_Master (Flag5-Sem)
- -- A flag set in a Subprogram_Body, Block_Statement or Task_Body node
- -- to indicate that the construct is a task master (i.e. has declared
- -- tasks or declares an access to a task type).
+ -- A flag set in a Subprogram_Body, Block_Statement or Task_Body node to
+ -- indicate that the construct is a task master (i.e. has declared tasks
+ -- or declares an access to a task type).
-- Itype (Node1-Sem)
- -- Used in N_Itype_Reference node to reference an itype for which it
- -- is important to ensure that it is defined. See description of this
- -- node for further details.
+ -- Used in N_Itype_Reference node to reference an itype for which it is
+ -- important to ensure that it is defined. See description of this node
+ -- for further details.
-- Kill_Range_Check (Flag11-Sem)
-- Used in an N_Unchecked_Type_Conversion node to indicate that the
- -- result should not be subjected to range checks. This is used for
- -- the implementation of Normalize_Scalars.
+ -- result should not be subjected to range checks. This is used for the
+ -- implementation of Normalize_Scalars.
-- Label_Construct (Node2-Sem)
-- Used in an N_Implicit_Label_Declaration node. Refers to an N_Label,
-- N_Block_Statement or N_Loop_Statement node to which the label
-- declaration applies. This is not currently used in the compiler
-- itself, but it is useful in the implementation of ASIS queries.
+ -- This field is left empty for the special labels generated as part
+ -- of expanding raise statements with a local exception handler.
-- Library_Unit (Node4-Sem)
- -- In a stub node, the Library_Unit field points to the compilation unit
- -- node of the corresponding subunit.
+ -- In a stub node, Library_Unit points to the compilation unit node of
+ -- the corresponding subunit.
--
- -- In a with clause node, the Library_Unit field points to the spec
- -- of the with'ed unit.
+ -- In a with clause node, Library_Unit points to the spec of the with'ed
+ -- unit.
--
- -- In a compilation unit node, the use of this field depends on
- -- the unit type:
+ -- In a compilation unit node, the usage depends on the unit type:
--
- -- For a subprogram body, the Library_Unit field points to the
- -- compilation unit node of the corresponding spec, unless
- -- Acts_As_Spec is set, in which case it points to itself.
+ -- For a subprogram body, Library_Unit points to the compilation unit
+ -- node of the corresponding spec, unless Acts_As_Spec is set, in which
+ -- case it points to itself.
--
- -- For a package body, the Library_Unit field points to the
- -- compilation unit node of the corresponding spec.
+ -- For a package body, Library_Unit points to the compilation unit of
+ -- the corresponding package spec.
--
- -- For a subprogram spec to which pragma Inline applies, the
- -- Library_Unit field points to the compilation unit node of
- -- the corresponding body, if inlining is active.
+ -- For a subprogram spec to which pragma Inline applies, Library_Unit
+ -- points to the compilation unit node of the corresponding body, if
+ -- inlining is active.
--
- -- For a generic declaration, the Library_Unit field points
- -- to the compilation unit node of the corresponding generic body.
+ -- For a generic declaration, Library_Unit points to the compilation
+ -- unit node of the corresponding generic body.
--
- -- For a subunit, the Library_Unit field points to the compilation
- -- unit node of the parent body.
+ -- For a subunit, Library_Unit points to the compilation unit node of
+ -- the parent body.
--
- -- Note that this field is not used to hold the parent pointer for a
- -- child unit (which might in any case need to use it for some other
- -- purpose as described above). Instead for a child unit, implicit
- -- with's are generated for all parents.
+ -- Note that this field is not used to hold the parent pointer for child
+ -- unit (which might in any case need to use it for some other purpose as
+ -- described above). Instead for a child unit, implicit with's are
+ -- generated for all parents.
+
+ -- Local_Raise_Statements (Elist1)
+ -- This field is present in exception handler nodes. It is set to
+ -- No_Elist in the normal case. If there is at least one raise statement
+ -- which can potentially be handled as a local raise, then this field
+ -- points to a list of raise nodes, which are calls to a routine to raise
+ -- an exception. These are raise nodes which can be optimized into gotos
+ -- if the handler turns out to meet the conditions which permit this
+ -- transformation. Note that this does NOT include instances of the
+ -- N_Raise_xxx_Error nodes since the transformation of these nodes is
+ -- handled by the back end (using the N_Push/N_Pop mechanism).
-- Loop_Actions (List2-Sem)
-- A list present in Component_Association nodes in array aggregates.
-- they may need to be evaluated anew each time through.
-- Limited_View_Installed (Flag18-Sem)
- -- Present in With_Clauses and in package specifications. If set on a
+ -- Present in With_Clauses and in package specifications. If set on
-- with_clause, it indicates that this clause has created the current
- -- limited view of the designated package. On a package specification,
- -- it indicates that the limited view has already been created because
- -- the package is mentioned in a limited_with_clause in the closure of
- -- the unit being compiled.
+ -- limited view of the designated package. On a package specification, it
+ -- indicates that the limited view has already been created because the
+ -- package is mentioned in a limited_with_clause in the closure of the
+ -- unit being compiled.
+
+ -- Local_Raise_Not_OK (Flag7-Sem)
+ -- Present in N_Exception_Handler nodes. Set if the handler contains
+ -- a construct (reraise statement, or call to subprogram in package
+ -- GNAT.Current_Exception) that makes the handler unsuitable as a target
+ -- for a local raise (one that could otherwise be converted to a goto).
-- Must_Be_Byte_Aligned (Flag14-Sem)
-- This flag is present in N_Attribute_Reference nodes. It can be set
-- only for the Address and Unrestricted_Access attributes. If set it
- -- means that the object for which the address/access is given must be
- -- on a byte (more accurately a storage unit) boundary. If necessary,
- -- a copy of the object is to be made before taking the address (this
- -- copy is in the current scope on the stack frame). This is used for
- -- certain cases of code generated by the expander that passes
- -- parameters by address.
+ -- means that the object for which the address/access is given must be on
+ -- a byte (more accurately a storage unit) boundary. If necessary, a copy
+ -- of the object is to be made before taking the address (this copy is in
+ -- the current scope on the stack frame). This is used for certain cases
+ -- of code generated by the expander that passes parameters by address.
--
- -- The reason the copy is not made by the front end is that the back
- -- end has more information about type layout and may be able to (but
- -- is not guaranteed to) prevent making unnecessary copies.
+ -- The reason the copy is not made by the front end is that the back end
+ -- has more information about type layout and may be able to (but is not
+ -- guaranteed to) prevent making unnecessary copies.
-- Must_Not_Freeze (Flag8-Sem)
-- A flag present in all expression nodes. Normally expressions cause
- -- freezing as described in the RM. If this flag is set, then this
- -- is inhibited. This is used by the analyzer and expander to label
- -- nodes that are created by semantic analysis or expansion and which
- -- must not cause freezing even though they normally would. This flag
- -- is also present in an N_Subtype_Indication node, since we also use
- -- these in calls to Freeze_Expression.
+ -- freezing as described in the RM. If this flag is set, then this is
+ -- inhibited. This is used by the analyzer and expander to label nodes
+ -- that are created by semantic analysis or expansion and which must not
+ -- cause freezing even though they normally would. This flag is also
+ -- present in an N_Subtype_Indication node, since we also use these in
+ -- calls to Freeze_Expression.
-- Next_Entity (Node2-Sem)
-- Present in defining identifiers, defining character literals and
- -- defining operator symbols (i.e. in all entities). The entities of
- -- a scope are chained, and this field is used as the forward pointer
- -- for this list. See Einfo for further details.
+ -- defining operator symbols (i.e. in all entities). The entities of a
+ -- scope are chained, and this field is used as the forward pointer for
+ -- this list. See Einfo for further details.
-- Next_Named_Actual (Node4-Sem)
- -- Present in parameter association node. Set during semantic
- -- analysis to point to the next named parameter, where parameters
- -- are ordered by declaration order (as opposed to the actual order
- -- in the call, which may be different due to named associations).
- -- Not that this field points to the explicit actual parameter itself,
- -- not to the N_Parameter_Association node (its parent).
-
- -- Next_Rep_Item (Node4-Sem)
- -- Present in pragma nodes and attribute definition nodes. Used to
- -- link representation items that apply to an entity. See description
- -- of First_Rep_Item field in Einfo for full details.
+ -- Present in parameter association node. Set during semantic analysis to
+ -- point to the next named parameter, where parameters are ordered by
+ -- declaration order (as opposed to the actual order in the call, which
+ -- may be different due to named associations). Not that this field
+ -- points to the explicit actual parameter itself, not to the
+ -- N_Parameter_Association node (its parent).
+
+ -- Next_Pragma (Node1-Sem)
+ -- Present in N_Pragma nodes. Used to create a linked list of pragma
+ -- nodes. Currently used for two purposes:
+ --
+ -- Create a list of linked Check_Policy pragmas. The head of this list
+ -- is stored in Opt.Check_Policy_List (which has further details).
+ --
+ -- Used by processing for Pre/Postcondition pragmas to store a list of
+ -- pragmas associated with the spec of a subprogram (see Sem_Prag for
+ -- details).
+
+ -- Next_Rep_Item (Node5-Sem)
+ -- Present in pragma nodes and attribute definition nodes. Used to link
+ -- representation items that apply to an entity. See description of
+ -- First_Rep_Item field in Einfo for full details.
-- Next_Use_Clause (Node3-Sem)
- -- While use clauses are active during semantic processing, they
- -- are chained from the scope stack entry, using Next_Use_Clause
- -- as a link pointer, with Empty marking the end of the list. The
- -- head pointer is in the scope stack entry (First_Use_Clause). At
- -- the end of semantic processing (i.e. when Gigi sees the tree,
- -- the contents of this field is undefined and should not be read).
+ -- While use clauses are active during semantic processing, they are
+ -- chained from the scope stack entry, using Next_Use_Clause as a link
+ -- pointer, with Empty marking the end of the list. The head pointer is
+ -- in the scope stack entry (First_Use_Clause). At the end of semantic
+ -- processing (i.e. when Gigi sees the tree, the contents of this field
+ -- is undefined and should not be read).
-- No_Ctrl_Actions (Flag7-Sem)
-- Present in N_Assignment_Statement to indicate that no finalize nor
- -- nor adjust should take place on this assignment eventhough the rhs
- -- is controlled. This is used in init procs and aggregate expansions
- -- where the generated assignments are more initialisations than real
+ -- adjust should take place on this assignment even though the rhs is
+ -- controlled. This is used in init procs and aggregate expansions where
+ -- the generated assignments are more initialisations than real
-- assignments.
-- No_Elaboration_Check (Flag14-Sem)
-- Present in N_Function_Call and N_Procedure_Call_Statement. Indicates
- -- that no elaboration check is needed on the call, because it appears
- -- in the context of a local Suppress pragma. This is used on calls
- -- within task bodies, where the actual elaboration checks are applied
- -- after analysis, when the local scope stack is not present.
+ -- that no elaboration check is needed on the call, because it appears in
+ -- the context of a local Suppress pragma. This is used on calls within
+ -- task bodies, where the actual elaboration checks are applied after
+ -- analysis, when the local scope stack is not present.
-- No_Entities_Ref_In_Spec (Flag8-Sem)
-- Present in N_With_Clause nodes. Set if the with clause is on the
-- full details)
-- No_Initialization (Flag13-Sem)
- -- Present in N_Object_Declaration & N_Allocator to indicate
- -- that the object must not be initialized (by Initialize or a
- -- call to an init proc). This is needed for controlled aggregates.
- -- When the Object declaration has an expression, this flag means
- -- that this expression should not be taken into account (needed
- -- for in place initialization with aggregates)
+ -- Present in N_Object_Declaration and N_Allocator to indicate that the
+ -- object must not be initialized (by Initialize or call to an init
+ -- proc). This is needed for controlled aggregates. When the Object
+ -- declaration has an expression, this flag means that this expression
+ -- should not be taken into account (needed for in place initialization
+ -- with aggregates).
-- No_Truncation (Flag17-Sem)
-- Present in N_Unchecked_Type_Conversion node. This flag has an effect
-- target for scalar operands. Normally in such a case we truncate some
-- higher order bits of the source, and then sign/zero extend the result
-- to form the output value. But if this flag is set, then we do not do
- -- any truncation, so for example, if an 8 bit input is converted to a
- -- 5 bit result which is in fact stored in 8 bits, then the high order
+ -- any truncation, so for example, if an 8 bit input is converted to 5
+ -- bit result which is in fact stored in 8 bits, then the high order
-- three bits of the target result will be copied from the source. This
-- is used for properly setting out of range values for use by pragmas
-- Initialize_Scalars and Normalize_Scalars.
- -- OK_For_Stream (Flag4-Sem)
- -- Present in N_Attribute_Definition clauses for stream attributes. If
- -- set, indicates that the attribute is permitted even though the type
- -- involved is a limited type. In the case of a protected type, the
- -- result is to stream all components (including discriminants) in
- -- lexical order. For other limited types, the effect is simply to
- -- use the corresponding stream routine for the full type. This flag
- -- is used for internally generated code, where the streaming of these
- -- types is required, even though not normally allowed by the language.
-
-- Original_Discriminant (Node2-Sem)
-- Present in identifiers. Used in references to discriminants that
- -- appear in generic units. Because the names of the discriminants
- -- may be different in an instance, we use this field to recover the
- -- position of the discriminant in the original type, and replace it
- -- with the discriminant at the same position in the instantiated type.
+ -- appear in generic units. Because the names of the discriminants may be
+ -- different in an instance, we use this field to recover the position of
+ -- the discriminant in the original type, and replace it with the
+ -- discriminant at the same position in the instantiated type.
-- Original_Entity (Node2-Sem)
- -- Present in numeric literals. Used to denote the named number that
- -- has been constant-folded into the given literal. If literal is from
+ -- Present in numeric literals. Used to denote the named number that has
+ -- been constant-folded into the given literal. If literal is from
-- source, or the result of some other constant-folding operation, then
-- Original_Entity is empty. This field is needed to handle properly
-- named numbers in generic units, where the Associated_Node field
- -- interferes with the Entity field, making it impossible to preserve
- -- the original entity at the point of instantiation (ASIS problem).
+ -- interferes with the Entity field, making it impossible to preserve the
+ -- original entity at the point of instantiation (ASIS problem).
-- Others_Discrete_Choices (List1-Sem)
-- When a case statement or variant is analyzed, the semantic checks
-- determine the actual list of choices that correspond to an others
- -- choice. This list is materialized for later use by the expander
- -- and the Others_Discrete_Choices field of an N_Others_Choice node
- -- points to this materialized list of choices, which is in standard
- -- format for a list of discrete choices, except that of course it
- -- cannot contain an N_Others_Choice entry.
+ -- choice. This list is materialized for later use by the expander and
+ -- the Others_Discrete_Choices field of an N_Others_Choice node points to
+ -- this materialized list of choices, which is in standard format for a
+ -- list of discrete choices, except that of course it cannot contain an
+ -- N_Others_Choice entry.
-- Parameter_List_Truncated (Flag17-Sem)
- -- Present in N_Function_Call and N_Procedure_Call_Statement nodes.
- -- Set (for OpenVMS ports of GNAT only) if the parameter list is
- -- truncated as a result of a First_Optional_Parameter specification
- -- in an Import_Function, Import_Procedure, or Import_Valued_Procedure
- -- pragma. The truncation is done by the expander by removing trailing
- -- parameters from the argument list, in accordance with the set of
- -- rules allowing such parameter removal. In particular, parameters
- -- can be removed working from the end of the parameter list backwards
- -- up to and including the entry designated by First_Optional_Parameter
- -- in the Import pragma. Parameters can be removed if they are implicit
- -- and the default value is a known-at-compile-time value, including
- -- the use of the Null_Parameter attribute, or if explicit parameter
- -- values are present that match the corresponding defaults.
+ -- Present in N_Function_Call and N_Procedure_Call_Statement nodes. Set
+ -- (for OpenVMS ports of GNAT only) if the parameter list is truncated as
+ -- a result of a First_Optional_Parameter specification in an
+ -- Import_Function, Import_Procedure, or Import_Valued_Procedure pragma.
+ -- The truncation is done by the expander by removing trailing parameters
+ -- from the argument list, in accordance with the set of rules allowing
+ -- such parameter removal. In particular, parameters can be removed
+ -- working from the end of the parameter list backwards up to and
+ -- including the entry designated by First_Optional_Parameter in the
+ -- Import pragma. Parameters can be removed if they are implicit and the
+ -- default value is a known-at-compile-time value, including the use of
+ -- the Null_Parameter attribute, or if explicit parameter values are
+ -- present that match the corresponding defaults.
-- Parent_Spec (Node4-Sem)
-- For a library unit that is a child unit spec (package or subprogram
-- package specification. This field is Empty for library bodies (the
-- parent spec in this case can be found from the corresponding spec).
+ -- PPC_Enabled (Flag5-Sem)
+ -- Present in N_Pragma nodes. This flag is relevant only for precondition
+ -- and postcondition nodes. It is true if the check corresponding to the
+ -- pragma type is enabled at the point where the pragma appears.
+
-- Present_Expr (Uint3-Sem)
-- Present in an N_Variant node. This has a meaningful value only after
- -- Gigi has back annotated the tree with representation information.
- -- At this point, it contains a reference to a gcc expression that
- -- depends on the values of one or more discriminants. Give a set of
- -- discriminant values, this expression evaluates to False (zero) if
- -- variant is not present, and True (non-zero) if it is present. See
- -- unit Repinfo for further details on gigi back annotation. This
- -- field is used during ASIS processing (data decomposition annex)
- -- to determine if a field is present or not.
+ -- Gigi has back annotated the tree with representation information. At
+ -- this point, it contains a reference to a gcc expression that depends
+ -- on the values of one or more discriminants. Give a set of discriminant
+ -- values, this expression evaluates to False (zero) if variant is not
+ -- present, and True (non-zero) if it is present. See unit Repinfo for
+ -- further details on gigi back annotation. This field is used during
+ -- ASIS processing (data decomposition annex) to determine if a field is
+ -- present or not.
-- Print_In_Hex (Flag13-Sem)
- -- Set on an N_Integer_Literal node to indicate that the value should
- -- be printed in hexadecimal in the sprint listing. Has no effect on
- -- legality or semantics of program, only on the displayed output.
- -- This is used to clarify output from the packed array cases.
-
- -- Procedure_To_Call (Node4-Sem)
- -- Present in N_Allocator. N_Free_Statement, and N_Return_Statement
- -- nodes. References the entity for the declaration of the procedure
- -- to be called to accomplish the required operation (i.e. for the
- -- Allocate procedure in the case of N_Allocator and N_Return_Statement
- -- (for allocating the return value), and for the Deallocate procedure
- -- in the case of N_Free_Statement.
+ -- Set on an N_Integer_Literal node to indicate that the value should be
+ -- printed in hexadecimal in the sprint listing. Has no effect on
+ -- legality or semantics of program, only on the displayed output. This
+ -- is used to clarify output from the packed array cases.
+
+ -- Procedure_To_Call (Node2-Sem)
+ -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
+ -- and N_Extended_Return_Statement nodes. References the entity for the
+ -- declaration of the procedure to be called to accomplish the required
+ -- operation (i.e. for the Allocate procedure in the case of N_Allocator
+ -- and N_Simple_Return_Statement and N_Extended_Return_Statement (for
+ -- allocating the return value), and for the Deallocate procedure in the
+ -- case of N_Free_Statement.
-- Raises_Constraint_Error (Flag7-Sem)
- -- Set on an expression whose evaluation will definitely fail a
- -- constraint error check. In the case of static expressions, this
- -- flag must be set accurately (and if it is set, the expression is
- -- typically illegal unless it appears as a non-elaborated branch of
- -- a short-circuit form). For a non-static expression, this flag may
- -- be set whenever an expression (e.g. an aggregate) is known to raise
- -- constraint error. If set, the expression definitely will raise CE
- -- if elaborated at runtime. If not set, the expression may or may
- -- not raise CE. In other words, on static expressions, the flag is
- -- set accurately, on non-static expressions it is set conservatively.
+ -- Set on an expression whose evaluation will definitely fail constraint
+ -- error check. In the case of static expressions, this flag must be set
+ -- accurately (and if it is set, the expression is typically illegal
+ -- unless it appears as a non-elaborated branch of a short-circuit form).
+ -- For a non-static expression, this flag may be set whenever an
+ -- expression (e.g. an aggregate) is known to raise constraint error. If
+ -- set, the expression definitely will raise CE if elaborated at runtime.
+ -- If not set, the expression may or may not raise CE. In other words, on
+ -- static expressions, the flag is set accurately, on non-static
+ -- expressions it is set conservatively.
-- Redundant_Use (Flag13-Sem)
- -- A flag present in nodes that can appear as an operand in a use
- -- clause or use type clause (identifiers, expanded names, attribute
- -- references). Set to indicate that a use is redundant (and therefore
- -- need not be undone on scope exit).
-
- -- Return_Type (Node2-Sem)
- -- Present in N_Return_Statement node. For a procedure, this is set
- -- to Standard_Void_Type. For a function it references the entity
- -- for the returned type.
+ -- Present in nodes that can appear as an operand in a use clause or use
+ -- type clause (identifiers, expanded names, attribute references). Set
+ -- to indicate that a use is redundant (and therefore need not be undone
+ -- on scope exit).
+
+ -- Renaming_Exception (Node2-Sem)
+ -- Present in N_Exception_Declaration node. Used to point back to the
+ -- exception renaming for an exception declared within a subprogram.
+ -- What happens is that an exception declared in a subprogram is moved
+ -- to the library level with a unique name, and the original exception
+ -- becomes a renaming. This link from the library level exception to the
+ -- renaming declaration allows registering of the proper exception name.
+
+ -- Return_Statement_Entity (Node5-Sem)
+ -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement.
+ -- Points to an E_Return_Statement representing the return statement.
+
+ -- Return_Object_Declarations (List3)
+ -- Present in N_Extended_Return_Statement.
+ -- Points to a list initially containing a single
+ -- N_Object_Declaration representing the return object.
+ -- We use a list (instead of just a pointer to the object decl)
+ -- because Analyze wants to insert extra actions on this list.
-- Rounded_Result (Flag18-Sem)
-- Present in N_Type_Conversion, N_Op_Divide and N_Op_Multiply nodes.
-- Used in the fixed-point cases to indicate that the result must be
- -- rounded as a result of the use of the 'Round attribute. Also used
- -- for integer N_Op_Divide nodes to indicate that the result should
- -- be rounded to the nearest integer (breaking ties away from zero),
- -- rather than truncated towards zero as usual. These rounded integer
- -- operations are the result of expansion of rounded fixed-point
- -- divide, conersion and multiplication operations.
+ -- rounded as a result of the use of the 'Round attribute. Also used for
+ -- integer N_Op_Divide nodes to indicate that the result should be
+ -- rounded to the nearest integer (breaking ties away from zero), rather
+ -- than truncated towards zero as usual. These rounded integer operations
+ -- are the result of expansion of rounded fixed-point divide, conversion
+ -- and multiplication operations.
-- Scope (Node3-Sem)
-- Present in defining identifiers, defining character literals and
- -- defining operator symbols (i.e. in all entities). The entities of
- -- a scope all use this field to reference the corresponding scope
- -- entity. See Einfo for further details.
+ -- defining operator symbols (i.e. in all entities). The entities of a
+ -- scope all use this field to reference the corresponding scope entity.
+ -- See Einfo for further details.
-- Shift_Count_OK (Flag4-Sem)
-- A flag present in shift nodes to indicate that the shift count is
-- flag is set, the full value of the aggregate can be determined at
-- compile time and the aggregate can be passed as is to the back-end.
-- In this event it is irrelevant whether this flag is set or not.
- -- However, if the Compile_Time_Known_Aggregate flag is not set but
+ -- However, if the flag Compile_Time_Known_Aggregate is not set but
-- Static_Processing_OK is set, the aggregate can (but need not) be
- -- converted into a compile time known aggregate by the expander.
- -- See Sem_Aggr for the specific conditions under which an aggregate
- -- has its Static_Processing_OK flag set.
+ -- converted into a compile time known aggregate by the expander. See
+ -- Sem_Aggr for the specific conditions under which an aggregate has its
+ -- Static_Processing_OK flag set.
-- Storage_Pool (Node1-Sem)
- -- Present in N_Allocator, N_Free_Statement and N_Return_Statement
- -- nodes. References the entity for the storage pool to be used for
- -- the allocate or free call or for the allocation of the returned
- -- value from a function. Empty indicates that the global default
- -- default pool is to be used. Note that in the case of a return
- -- statement, this field is set only if the function returns a
+ -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
+ -- and N_Extended_Return_Statement nodes. References the entity for the
+ -- storage pool to be used for the allocate or free call or for the
+ -- allocation of the returned value from function. Empty indicates that
+ -- the global default pool is to be used. Note that in the case
+ -- of a return statement, this field is set only if the function returns
-- value of a type whose size is not known at compile time on the
- -- secondary stack. It is never set on targets for which the target
- -- parameter Targparm.Functions_Return_By_DSP_On_Target is True.
+ -- secondary stack.
-- Target_Type (Node2-Sem)
- -- Used in an N_Validate_Unchecked_Conversion node to point to the
- -- target type entity for the unchecked conversion instantiation
- -- which gigi must do size validation for.
-
- -- Task_Body_Procedure (Node2-Sem)
- -- Present in task type declaration nodes. Points to the entity for
- -- the task body procedure (as further described in Exp_Ch9, task
- -- bodies are expanded into procedures). A convenient function to
- -- retrieve this field is Sem_Util.Get_Task_Body_Procedure.
+ -- Used in an N_Validate_Unchecked_Conversion node to point to the target
+ -- type entity for the unchecked conversion instantiation which gigi must
+ -- do size validation for.
-- Then_Actions (List3-Sem)
-- This field is present in conditional expression nodes. During code
-- actions at an appropriate place in the tree to get elaborated at the
-- right time. For conditional expressions, we have to be sure that the
-- actions for the Then branch are only elaborated if the condition is
- -- True. The Then_Actions field is used as a temporary parking place
- -- for these actions. The final tree is always rewritten to eliminate
- -- the need for this field, so in the tree passed to Gigi, this field
- -- is always set to No_List.
+ -- True. The Then_Actions field is used as a temporary parking place for
+ -- these actions. The final tree is always rewritten to eliminate the
+ -- need for this field, so in the tree passed to Gigi, this field is
+ -- always set to No_List.
-- Treat_Fixed_As_Integer (Flag14-Sem)
- -- This flag appears in operator nodes for divide, multiply, mod and
- -- rem on fixed-point operands. It indicates that the operands are
- -- to be treated as integer values, ignoring small values. This flag
- -- is only set as a result of expansion of fixed-point operations.
- -- Typically a fixed-point multplication in the source generates
- -- subsidiary multiplication and division operations that work with
- -- the underlying integer values and have this flag set. Note that
- -- this flag is not needed on other arithmetic operations (add, neg,
- -- subtract etc) since in these cases it is always the case that fixed
- -- is treated as integer. The Etype field MUST be set if this flag
- -- is set. The analyzer knows to leave such nodes alone, and whoever
- -- makes them must set the correct Etype value.
+ -- This flag appears in operator nodes for divide, multiply, mod and rem
+ -- on fixed-point operands. It indicates that the operands are to be
+ -- treated as integer values, ignoring small values. This flag is only
+ -- set as a result of expansion of fixed-point operations. Typically a
+ -- fixed-point multiplication in the source generates subsidiary
+ -- multiplication and division operations that work with the underlying
+ -- integer values and have this flag set. Note that this flag is not
+ -- needed on other arithmetic operations (add, neg, subtract etc.) since
+ -- in these cases it is always the case that fixed is treated as integer.
+ -- The Etype field MUST be set if this flag is set. The analyzer knows to
+ -- leave such nodes alone, and whoever makes them must set the correct
+ -- Etype value.
-- TSS_Elist (Elist3-Sem)
-- Present in N_Freeze_Entity nodes. Holds an element list containing
-- entries for each TSS (type support subprogram) associated with the
-- frozen type. The elements of the list are the entities for the
- -- subprograms (see package Exp_TSS for further details). Set to
- -- No_Elist if there are no type support subprograms for the type
- -- or if the freeze node is not for a type.
+ -- subprograms (see package Exp_TSS for further details). Set to No_Elist
+ -- if there are no type support subprograms for the type or if the freeze
+ -- node is not for a type.
-- Unreferenced_In_Spec (Flag7-Sem)
-- Present in N_With_Clause nodes. Set if the with clause is on the
-- package or subprogram spec where the main unit is the corresponding
- -- body, and is not referenced by the spec (it may still be referenced
- -- by the body, so this flag is used to generate the proper message
- -- (see Sem_Util.Check_Unused_Withs for details)
+ -- body, and is not referenced by the spec (it may still be referenced by
+ -- the body, so this flag is used to generate the proper message (see
+ -- Sem_Util.Check_Unused_Withs for details)
-- Was_Originally_Stub (Flag13-Sem)
- -- This flag is set in the node for a proper body that replaces a
- -- stub. During the analysis procedure, stubs in some situations
- -- get rewritten by the corresponding bodies, and we set this flag
- -- to remember that this happened. Note that it is not good enough
- -- to rely on the use of Original_Tree here because of the case of
- -- nested instantiations where the substituted node can be copied.
+ -- This flag is set in the node for a proper body that replaces stub.
+ -- During the analysis procedure, stubs in some situations get rewritten
+ -- by the corresponding bodies, and we set this flag to remember that
+ -- this happened. Note that it is not good enough to rely on the use of
+ -- Original_Node here because of the case of nested instantiations where
+ -- the substituted node can be copied.
-- Zero_Cost_Handling (Flag5-Sem)
-- This flag is set in all handled sequence of statement and exception
- -- handler nodes if eceptions are to be handled using the zero-cost
+ -- handler nodes if exceptions are to be handled using the zero-cost
-- mechanism (see Ada.Exceptions and System.Exceptions in files
- -- a-except.ads/adb and s-except.ads for full details). What gigi
- -- needs to do for such a handler is simply to put the code in the
- -- handler somewhere. The front end has generated all necessary labels.
+ -- a-except.ads/adb and s-except.ads for full details). What gigi needs
+ -- to do for such a handler is simply to put the code in the handler
+ -- somewhere. The front end has generated all necessary labels.
--------------------------------------------------
-- Note on Use of End_Label and End_Span Fields --
-- Record Definition end record;
-- Enumeration Definition );
- -- The End_Label and End_Span fields are used to mark the locations
- -- of these lines, and also keep track of the label in the case where
- -- a label is present.
-
- -- For the first group above, the End_Label field of the corresponding
- -- node is used to point to the label identifier. In the case where
- -- there is no label in the source, the parser supplies a dummy
- -- identifier (with Comes_From_Source set to False), and the Sloc
- -- of this dummy identifier marks the location of the token following
- -- the END token.
-
- -- For the second group, the use of End_Label is similar, but the
- -- End_Label is found in the N_Handled_Sequence_Of_Statements node.
- -- This is done simply because in some cases there is no room in
- -- the parent node.
-
- -- For the third group, there is never any label, and instead of
- -- using End_Label, we use the End_Span field which gives the
- -- location of the token following END, relative to the starting
- -- Sloc of the construct, i.e. add Sloc (Node) + End_Span (Node)
- -- to get the Sloc of the IF or CASE following the End_Label.
-
- -- The record definition case is handled specially, we treat it
- -- as though it required an optional label which is never present,
- -- and so the parser always builds a dummy identifier with Comes
- -- From Source set False. The reason we do this, rather than using
- -- End_Span in this case, is that we want to generate a cross-ref
- -- entry for the end of a record, since it represents a scope for
- -- name declaration purposes.
-
- -- The enumeration definition case is handled in an exactly similar
- -- manner, building a dummy identifier to get a cross-reference.
-
- -- Note: the reason we store the difference as a Uint, instead of
- -- storing the Source_Ptr value directly, is that Source_Ptr values
- -- cannot be distinguished from other types of values, and we count
- -- on all general use fields being self describing. To make things
- -- easier for clients, note that we provide function End_Location,
- -- and procedure Set_End_Location to allow access to the logical
- -- value (which is the Source_Ptr value for the end token).
+ -- The End_Label and End_Span fields are used to mark the locations of
+ -- these lines, and also keep track of the label in the case where a label
+ -- is present.
+
+ -- For the first group above, the End_Label field of the corresponding node
+ -- is used to point to the label identifier. In the case where there is no
+ -- label in the source, the parser supplies a dummy identifier (with
+ -- Comes_From_Source set to False), and the Sloc of this dummy identifier
+ -- marks the location of the token following the END token.
+
+ -- For the second group, the use of End_Label is similar, but the End_Label
+ -- is found in the N_Handled_Sequence_Of_Statements node. This is done
+ -- simply because in some cases there is no room in the parent node.
+
+ -- For the third group, there is never any label, and instead of using
+ -- End_Label, we use the End_Span field which gives the location of the
+ -- token following END, relative to the starting Sloc of the construct,
+ -- i.e. add Sloc (Node) + End_Span (Node) to get the Sloc of the IF or CASE
+ -- following the End_Label.
+
+ -- The record definition case is handled specially, we treat it as though
+ -- it required an optional label which is never present, and so the parser
+ -- always builds a dummy identifier with Comes From Source set False. The
+ -- reason we do this, rather than using End_Span in this case, is that we
+ -- want to generate a cross-ref entry for the end of a record, since it
+ -- represents a scope for name declaration purposes.
+
+ -- The enumeration definition case is handled in an exactly similar manner,
+ -- building a dummy identifier to get a cross-reference.
+
+ -- Note: the reason we store the difference as a Uint, instead of storing
+ -- the Source_Ptr value directly, is that Source_Ptr values cannot be
+ -- distinguished from other types of values, and we count on all general
+ -- use fields being self describing. To make things easier for clients,
+ -- note that we provide function End_Location, and procedure
+ -- Set_End_Location to allow access to the logical value (which is the
+ -- Source_Ptr value for the end token).
---------------------
-- Syntactic Nodes --
-- An IDENTIFIER shall not be a reserved word
- -- In the Ada grammar identifiers are the bottom level tokens which
- -- have very few semantics. Actual program identifiers are direct
- -- names. If we were being 100% honest with the grammar, then we would
- -- have a node called N_Direct_Name which would point to an identifier.
- -- However, that's too many extra nodes, so we just use the N_Identifier
- -- node directly as a direct name, and it contains the expression fields
- -- and Entity field that correspond to its use as a direct name. In
- -- those few cases where identifiers appear in contexts where they are
- -- not direct names (pragmas, pragma argument associations, attribute
+ -- In the Ada grammar identifiers are the bottom level tokens which have
+ -- very few semantics. Actual program identifiers are direct names. If
+ -- we were being 100% honest with the grammar, then we would have a node
+ -- called N_Direct_Name which would point to an identifier. However,
+ -- that's too many extra nodes, so we just use the N_Identifier node
+ -- directly as a direct name, and it contains the expression fields and
+ -- Entity field that correspond to its use as a direct name. In those
+ -- few cases where identifiers appear in contexts where they are not
+ -- direct names (pragmas, pragma argument associations, attribute
-- references and attribute definition clauses), the Chars field of the
-- node contains the Name_Id for the identifier name.
- -- Note: in GNAT, a reserved word can be treated as an identifier
- -- in two cases. First, an incorrect use of a reserved word as an
- -- identifier is diagnosed and then treated as a normal identifier.
- -- Second, an attribute designator of the form of a reserved word
- -- (access, delta, digits, range) is treated as an identifier.
+ -- Note: in GNAT, a reserved word can be treated as an identifier in two
+ -- cases. First, an incorrect use of a reserved word as an identifier is
+ -- diagnosed and then treated as a normal identifier. Second, an
+ -- attribute designator of the form of a reserved word (access, delta,
+ -- digits, range) is treated as an identifier.
-- Note: The set of letters that is permitted in an identifier depends
-- on the character set in use. See package Csets for full details.
-- using the standard literal format. Such literals are listed by
-- Sprint using the notation [numerator / denominator].
+ -- Note: the value of an integer literal node created by the front end
+ -- is never outside the range of values of the base type. However, it
+ -- can be the case that the value is outside the range of the
+ -- particular subtype. This happens in the case of integer overflows
+ -- with checks suppressed.
+
-- N_Integer_Literal
-- Sloc points to literal
-- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that
-- N_Character_Literal
-- Sloc points to literal
-- Chars (Name1) contains the Name_Id for the identifier
- -- Char_Literal_Value (Char_Code2) contains the literal value
+ -- Char_Literal_Value (Uint2) contains the literal value
-- Entity (Node4-Sem)
-- Associated_Node (Node4-Sem)
-- Has_Private_View (Flag11-Sem) set in generic units.
-- plus fields for expression
- -- Note: the Entity field will be missing (and set to Empty) for
- -- character literals whose type is Standard.Wide_Character or
- -- Standard.Character or a type derived from one of these two.
- -- In this case the character literal stands for its own coding.
- -- The reason we take this irregular short cut is to avoid the
- -- need to build lots of junk defining character literal nodes.
+ -- Note: the Entity field will be missing (set to Empty) for character
+ -- literals whose type is Standard.Wide_Character or Standard.Character
+ -- or a type derived from one of these two. In this case the character
+ -- literal stands for its own coding. The reason we take this irregular
+ -- short cut is to avoid the need to build lots of junk defining
+ -- character literal nodes.
-------------------------
-- 2.6 String Literal --
-- A STRING_ELEMENT is either a pair of quotation marks ("), or a
-- single GRAPHIC_CHARACTER other than a quotation mark.
+ --
+ -- Is_Folded_In_Parser is True if the parser created this literal by
+ -- folding a sequence of "&" operators. For example, if the source code
+ -- says "aaa" & "bbb" & "ccc", and this produces "aaabbbccc", the flag
+ -- is set. This flag is needed because the parser doesn't know about
+ -- visibility, so the folded result might be wrong, and semantic
+ -- analysis needs to check for that.
-- N_String_Literal
-- Sloc points to literal
-- Strval (Str3) contains Id of string value
-- Has_Wide_Character (Flag11-Sem)
+ -- Is_Folded_In_Parser (Flag4)
-- plus fields for expression
------------------
-- which are explicitly documented.
-- N_Pragma
- -- Sloc points to PRAGMA
- -- Chars (Name1) identifier name from pragma identifier
+ -- Sloc points to pragma identifier
+ -- Next_Pragma (Node1-Sem)
-- Pragma_Argument_Associations (List2) (set to No_List if none)
-- Debug_Statement (Node3) (set to Empty if not Debug, Assert)
- -- Next_Rep_Item (Node4-Sem)
+ -- Pragma_Identifier (Node4)
+ -- Next_Rep_Item (Node5-Sem)
+ -- PPC_Enabled (Flag5-Sem)
+
+ -- Note: we should have a section on what pragmas are passed on to
+ -- the back end to be processed. This section should note that pragma
+ -- Psect_Object is always converted to Common_Object, but there are
+ -- undoubtedly many other similar notes required ???
+
+ -- Note: a utility function Pragma_Name may be applied to pragma nodes
+ -- to conveniently obtain the Chars field of the Pragma_Identifier.
--------------------------------------
-- 2.8 Pragma Argument Association --
-- ENUMERATION_TYPE_DEFINITION | INTEGER_TYPE_DEFINITION
-- | REAL_TYPE_DEFINITION | ARRAY_TYPE_DEFINITION
-- | RECORD_TYPE_DEFINITION | ACCESS_TYPE_DEFINITION
- -- | DERIVED_TYPE_DEFINITION
+ -- | DERIVED_TYPE_DEFINITION | INTERFACE_TYPE_DEFINITION
--------------------------------
-- 3.2.2 Subtype Declaration --
--------------------------------
-- SUBTYPE_DECLARATION ::=
- -- subtype DEFINING_IDENTIFIER is SUBTYPE_INDICATION;
+ -- subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION;
-- The subtype indication field is set to Empty for subtypes
-- declared in package Standard (Positive, Natural).
-- N_Subtype_Declaration
-- Sloc points to SUBTYPE
-- Defining_Identifier (Node1)
+ -- Null_Exclusion_Present (Flag11)
-- Subtype_Indication (Node5)
-- Generic_Parent_Type (Node4-Sem) (set for an actual derived type).
- -- Exception_Junk (Flag11-Sem)
+ -- Exception_Junk (Flag8-Sem)
-------------------------------
-- 3.2.2 Subtype Indication --
-- directly in the tree as a subtype mark. The N_Subtype_Indication
-- node is used only if a constraint is present.
+ -- Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule
+ -- with the null-exclusion part (see AI-231), we had to introduce a new
+ -- attribute in all the parents of subtype_indication nodes to indicate
+ -- if the null-exclusion is present.
+
-- Note: the reason that this node has expression fields is that a
-- subtype indication can appear as an operand of a membership test.
-- OBJECT_DECLARATION ::=
-- DEFINING_IDENTIFIER_LIST : [aliased] [constant]
- -- SUBTYPE_INDICATION [:= EXPRESSION];
+ -- [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION];
+ -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
+ -- ACCESS_DEFINITION [:= EXPRESSION];
-- | DEFINING_IDENTIFIER_LIST : [aliased] [constant]
-- ARRAY_TYPE_DEFINITION [:= EXPRESSION];
-- | SINGLE_TASK_DECLARATION
-- Prev_Ids flags to preserve the original source form as described
-- in the section on "Handling of Defining Identifier Lists".
+ -- The flag Has_Init_Expression is set if an initializing expression
+ -- is present. Normally it is set if and only if Expression contains
+ -- a non-empty value, but there is an exception to this. When the
+ -- initializing expression is an aggregate which requires explicit
+ -- assignments, the Expression field gets set to Empty, but this flag
+ -- is still set, so we don't forget we had an initializing expression.
+
-- Note: if a range check is required for the initialization
-- expression then the Do_Range_Check flag is set in the Expression,
-- with the check being done against the type given by the object
-- the Expression may not have the form of an aggregate (since this
-- might cause the back end to generate separate assignments). It
-- also cannot be a reference to an object marked as a true constant
- -- (Is_True_Constant flag set), where the object is itself initalized
+ -- (Is_True_Constant flag set), where the object is itself initialized
-- with an aggregate. If necessary the front end must generate an
-- extra temporary (with Is_True_Constant set False), and initialize
-- this temporary as required (the temporary itself is not atomic).
+ -- Note: there is not node kind for object definition. Instead, the
+ -- corresponding field holds a subtype indication, an array type
+ -- definition, or (Ada 2005, AI-406) an access definition.
+
-- N_Object_Declaration
-- Sloc points to first identifier
-- Defining_Identifier (Node1)
-- Aliased_Present (Flag4) set if ALIASED appears
-- Constant_Present (Flag17) set if CONSTANT appears
- -- Object_Definition (Node4) subtype indication/array type definition
+ -- Null_Exclusion_Present (Flag11)
+ -- Object_Definition (Node4) subtype indic./array type def./ access def.
-- Expression (Node3) (set to Empty if not present)
-- Handler_List_Entry (Node2-Sem)
-- Corresponding_Generic_Association (Node5-Sem)
-- Prev_Ids (Flag6) (set to False if no previous identifiers in list)
-- No_Initialization (Flag13-Sem)
-- Assignment_OK (Flag15-Sem)
- -- Exception_Junk (Flag11-Sem)
- -- Delay_Finalize_Attach (Flag14-Sem)
+ -- Exception_Junk (Flag8-Sem)
-- Is_Subprogram_Descriptor (Flag16-Sem)
+ -- Has_Init_Expression (Flag14)
-------------------------------------
-- 3.3.1 Defining Identifier List --
----------------------------------
-- DERIVED_TYPE_DEFINITION ::=
- -- [abstract] new parent_SUBTYPE_INDICATION [RECORD_EXTENSION_PART]
+ -- [abstract] [limited] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION
+ -- [[and INTERFACE_LIST] RECORD_EXTENSION_PART]
- -- Note: ABSTRACT, record extension part not permitted in Ada 83 mode
+ -- Note: ABSTRACT, LIMITED and record extension part are not permitted
+ -- in Ada 83 mode
-- Note: a record extension part is required if ABSTRACT is present
-- N_Derived_Type_Definition
-- Sloc points to NEW
-- Abstract_Present (Flag4)
+ -- Null_Exclusion_Present (Flag11) (set to False if not present)
-- Subtype_Indication (Node5)
-- Record_Extension_Part (Node3) (set to Empty if not present)
+ -- Limited_Present (Flag17)
+ -- Task_Present (Flag5) set in task interfaces
+ -- Protected_Present (Flag6) set in protected interfaces
+ -- Synchronized_Present (Flag7) set in interfaces
+ -- Interface_List (List2) (set to No_List if none)
+ -- Interface_Present (Flag16) set in abstract interfaces
+
+ -- Note: Task_Present, Protected_Present, Synchronized_Present,
+ -- Interface_List, and Interface_Present are used for abstract
+ -- interfaces (see comments for INTERFACE_TYPE_DEFINITION).
---------------------------
-- 3.5 Range Constraint --
-- INTEGER_TYPE_DEFINITION ::=
-- SIGNED_INTEGER_TYPE_DEFINITION
- -- MODULAR_TYPE_DEFINITION
+ -- | MODULAR_TYPE_DEFINITION
-------------------------------------------
-- 3.5.4 Signed Integer Type Definition --
-- SIGNED_INTEGER_TYPE_DEFINITION ::=
-- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION
- -- Note: the Low_Bound and High_Bound fields are set to Empty for
- -- integer types defined in package Standard.
+ -- Note: the Low_Bound and High_Bound fields are set to Empty
+ -- for integer types defined in package Standard.
-- N_Signed_Integer_Type_Definition
-- Sloc points to RANGE
-- Low_Bound (Node1)
-- High_Bound (Node2)
- -----------------------------------------
- -- 3.5.4 Unsigned Range Specification --
- -----------------------------------------
+ ------------------------------------
+ -- 3.5.4 Modular Type Definition --
+ ------------------------------------
-- MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION
-- Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION
- -- Note: the Delta_Expression and Real_Range_Specification fields
- -- are set to Empty for fixed point types declared in Standard.
-
-- N_Ordinary_Fixed_Point_Definition
-- Sloc points to DELTA
-- Delta_Expression (Node3)
-------------------------------
-- COMPONENT_DEFINITION ::=
- -- [aliased] SUBTYPE_INDICATION | ACCESS_DEFINITION
+ -- [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION
-- Note: although the syntax does not permit a component definition to
-- be an anonymous array (and the parser will diagnose such an attempt
-- with an appropriate message), it is possible for anonymous arrays
-- to appear as component definitions. The semantics and back end handle
-- this case properly, and the expander in fact generates such cases.
- -- Access_Definition is an optional field that gives support to Ada 0Y
- -- (AI-230). The parser generates nodes that have either the
+ -- Access_Definition is an optional field that gives support to
+ -- Ada 2005 (AI-230). The parser generates nodes that have either the
-- Subtype_Indication field or else the Access_Definition field.
-- N_Component_Definition
-- Sloc points to ALIASED, ACCESS or to first token of subtype mark
-- Aliased_Present (Flag4)
+ -- Null_Exclusion_Present (Flag11)
-- Subtype_Indication (Node5) (set to Empty if not present)
-- Access_Definition (Node3) (set to Empty if not present)
-------------------------------------
-- DISCRIMINANT_SPECIFICATION ::=
- -- DEFINING_IDENTIFIER_LIST : SUBTYPE_MARK
+ -- DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK
-- [:= DEFAULT_EXPRESSION]
-- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
-- [:= DEFAULT_EXPRESSION]
-- N_Discriminant_Specification
-- Sloc points to first identifier
-- Defining_Identifier (Node1)
- -- Discriminant_Type (Node5) subtype mark or
- -- access parameter definition
+ -- Null_Exclusion_Present (Flag11)
+ -- Discriminant_Type (Node5) subtype mark or access parameter definition
-- Expression (Node3) (set to Empty if no default expression)
-- More_Ids (Flag5) (set to False if no more identifiers in list)
-- Prev_Ids (Flag6) (set to False if no previous identifiers in list)
-- Limited_Present (Flag17)
-- Component_List (Node1) empty in null record case
-- Null_Present (Flag13) set in null record case
+ -- Task_Present (Flag5) set in task interfaces
+ -- Protected_Present (Flag6) set in protected interfaces
+ -- Synchronized_Present (Flag7) set in interfaces
+ -- Interface_Present (Flag16) set in abstract interfaces
+ -- Interface_List (List2) (set to No_List if none)
+
+ -- Note: Task_Present, Protected_Present, Synchronized _Present,
+ -- Interface_List and Interface_Present are used for abstract
+ -- interfaces (see comments for INTERFACE_TYPE_DEFINITION).
-------------------------
-- 3.8 Component List --
-- Note: record extension parts are not permitted in Ada 83 mode
+ --------------------------------------
+ -- 3.9.4 Interface Type Definition --
+ --------------------------------------
+
+ -- INTERFACE_TYPE_DEFINITION ::=
+ -- [limited | task | protected | synchronized]
+ -- interface [interface_list]
+
+ -- Note: Interfaces are implemented with N_Record_Definition and
+ -- N_Derived_Type_Definition nodes because most of the support
+ -- for the analysis of abstract types has been reused to
+ -- analyze abstract interfaces.
+
----------------------------------
-- 3.10 Access Type Definition --
----------------------------------
-- ACCESS_TO_OBJECT_DEFINITION
-- | ACCESS_TO_SUBPROGRAM_DEFINITION
+ --------------------------
+ -- 3.10 Null Exclusion --
+ --------------------------
+
+ -- NULL_EXCLUSION ::= not null
+
---------------------------------------
-- 3.10 Access To Object Definition --
---------------------------------------
-- ACCESS_TO_OBJECT_DEFINITION ::=
- -- access [GENERAL_ACCESS_MODIFIER] SUBTYPE_INDICATION
+ -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER]
+ -- SUBTYPE_INDICATION
-- N_Access_To_Object_Definition
-- Sloc points to ACCESS
-- All_Present (Flag15)
+ -- Null_Exclusion_Present (Flag11)
-- Subtype_Indication (Node5)
-- Constant_Present (Flag17)
-------------------------------------------
-- ACCESS_TO_SUBPROGRAM_DEFINITION
- -- access [protected] procedure PARAMETER_PROFILE
- -- | access [protected] function PARAMETER_AND_RESULT_PROFILE
+ -- [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE
+ -- | [NULL_EXCLUSION] access [protected] function
+ -- PARAMETER_AND_RESULT_PROFILE
-- Note: access to subprograms are not permitted in Ada 83 mode
-- N_Access_Function_Definition
-- Sloc points to ACCESS
- -- Protected_Present (Flag15)
+ -- Null_Exclusion_Present (Flag11)
+ -- Protected_Present (Flag6)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
- -- Subtype_Mark (Node4) result subtype
+ -- Result_Definition (Node4) result subtype (subtype mark or access def)
-- N_Access_Procedure_Definition
-- Sloc points to ACCESS
- -- Protected_Present (Flag15)
+ -- Null_Exclusion_Present (Flag11)
+ -- Protected_Present (Flag6)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
-----------------------------
-- 3.10 Access Definition --
-----------------------------
- -- ACCESS_DEFINITION ::= access SUBTYPE_MARK
+ -- ACCESS_DEFINITION ::=
+ -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK
+ -- | ACCESS_TO_SUBPROGRAM_DEFINITION
+
+ -- Note: access to subprograms are an Ada 2005 (AI-254) extension
-- N_Access_Definition
-- Sloc points to ACCESS
+ -- Null_Exclusion_Present (Flag11)
+ -- All_Present (Flag15)
+ -- Constant_Present (Flag17)
-- Subtype_Mark (Node4)
+ -- Access_To_Subprogram_Definition (Node3) (set to Empty if not present)
-----------------------------------------
-- 3.10.1 Incomplete Type Declaration --
-----------------------------------------
-- INCOMPLETE_TYPE_DECLARATION ::=
- -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART];
+ -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED];
-- N_Incomplete_Type_Declaration
-- Sloc points to TYPE
-- discriminant part, or if the discriminant part is an
-- unknown discriminant part)
-- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
+ -- Tagged_Present (Flag15)
----------------------------
-- 3.11 Declarative Part --
-- N_Explicit_Dereference
-- Sloc points to ALL
-- Prefix (Node3)
+ -- Actual_Designated_Subtype (Node4-Sem)
-- plus fields for expression
-------------------------------
-- i.e. digits, access, delta, range, the Attribute_Name field contains
-- the corresponding name, even though no identifier is involved.
- -- The flag OK_For_Stream is used in generated code to indicate that
- -- a stream attribute is permissible for a limited type, and results
- -- in the use of the stream attribute for the underlying full type,
- -- or in the case of a protected type, the components (including any
- -- disriminants) are merely streamed in order.
+ -- Note: the generated code may contain stream attributes applied to
+ -- limited types for which no stream routines exist officially. In such
+ -- case, the result is to use the stream attribute for the underlying
+ -- full type, or in the case of a protected type, the components
+ -- (including any discriminants) are merely streamed in order.
-- See Exp_Attr for a complete description of which attributes are
-- passed onto Gigi, and which are handled entirely by the front end.
-- a non-standard enumeration type or a nonzero/zero semantics
-- boolean type, so the value is simply the stored representation.
+ -- Gigi requirement: For the Mechanism_Code attribute, if the prefix
+ -- references a subprogram that is a renaming, then the front end must
+ -- rewrite the attribute to refer directly to the renamed entity.
+
-- Note: In generated code, the Address and Unrestricted_Access
-- attributes can be applied to any expression, and the meaning is
-- to create an object containing the value (the object is in the
-- Associated_Node (Node4-Sem)
-- Do_Overflow_Check (Flag17-Sem)
-- Redundant_Use (Flag13-Sem)
- -- OK_For_Stream (Flag4-Sem)
-- Must_Be_Byte_Aligned (Flag14)
-- plus fields for expression
-- Static_Processing_OK (Flag4-Sem)
-- Compile_Time_Known_Aggregate (Flag18-Sem)
-- Expansion_Delayed (Flag11-Sem)
+ -- Has_Self_Reference (Flag13-Sem)
-- plus fields for expression
-- Note: this structure is used for both record and array aggregates
-- syntax. In particular, for a record aggregate, the expressions
-- field will be set if there are positional associations.
+ -- Note: N_Aggregate is not used for all aggregates; in particular,
+ -- there is a separate node kind for extension aggregates.
+
-- Note: gigi/gcc can handle array aggregates correctly providing that
-- they are entirely positional, and the array subtype involved has a
-- known at compile time length and is not bit packed, or a convention
-- Fortran array with more than one dimension. If these conditions
-- are not met, then the front end must translate the aggregate into
- -- an appropriate set of assignments into a temporary.
+ -- an appropriate set of assignments into a temporary.
-- Note: for the record aggregate case, gigi/gcc can handle all cases
-- of record aggregates, including those for packed, and rep-claused
-- list of selector names in the record aggregate case, or a list of
-- discrete choices in the array aggregate case or an N_Others_Choice
-- node (which appears as a singleton list). Box_Present gives support
- -- to Ada 0Y (AI-287).
+ -- to Ada 2005 (AI-287).
- ------------------------------------
- -- 4.3.1 Commponent Choice List --
- ------------------------------------
+ ----------------------------------
+ -- 4.3.1 Component Choice List --
+ ----------------------------------
-- COMPONENT_CHOICE_LIST ::=
-- component_SELECTOR_NAME {| component_SELECTOR_NAME}
-- | others
- -- The entries of a component choice list appear in the Choices list
- -- of the associated N_Component_Association, as either selector
- -- names, or as an N_Others_Choice node.
+ -- The entries of a component choice list appear in the Choices list of
+ -- the associated N_Component_Association, as either selector names, or
+ -- as an N_Others_Choice node.
--------------------------------
-- 4.3.2 Extension Aggregate --
-- Component_Associations (List2) (set to No_List if none)
-- Null_Record_Present (Flag17)
-- Expansion_Delayed (Flag11-Sem)
+ -- Has_Self_Reference (Flag13-Sem)
-- plus fields for expression
--------------------------
-- No nodes are generated for any of these constructs. Instead, the
-- node for the operator appears directly. When we refer to an
-- expression in this description, we mean any of the possible
- -- consistuent components of an expression (e.g. identifier is
+ -- constituent components of an expression (e.g. identifier is
-- an example of an expression).
------------------
-- subexpression node (it is actually present in all nodes, but only
-- used in subexpression nodes). This count records the number of
-- levels of parentheses. If the number of levels in the source exceeds
- -- the maximum accomodated by this count, then the count is simply left
- -- at the maximum value. This means that there are some pathalogical
+ -- the maximum accommodated by this count, then the count is simply left
+ -- at the maximum value. This means that there are some pathological
-- cases of failure to detect conformance failures (e.g. an expression
-- with 500 levels of parens will conform with one with 501 levels),
-- but we do not need to lose sleep over this.
--------------------
-- ALLOCATOR ::=
- -- new SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
+ -- new [NULL_EXCLUSION] SUBTYPE_INDICATION | new QUALIFIED_EXPRESSION
-- Sprint syntax (when storage pool present)
-- new xxx (storage_pool = pool)
-- Sloc points to NEW
-- Expression (Node3) subtype indication or qualified expression
-- Storage_Pool (Node1-Sem)
- -- Procedure_To_Call (Node4-Sem)
+ -- Procedure_To_Call (Node2-Sem)
+ -- Coextensions (Elist4-Sem)
+ -- Null_Exclusion_Present (Flag11)
-- No_Initialization (Flag13-Sem)
+ -- Is_Static_Coextension (Flag14-Sem)
-- Do_Storage_Check (Flag17-Sem)
+ -- Is_Dynamic_Coextension (Flag18-Sem)
-- plus fields for expression
---------------------------------
-- Note: Although the parser will not accept a declaration as a
-- statement, the semantic analyzer may insert declarations (e.g.
-- declarations of implicit types needed for execution of other
- -- statements) into a sequence of statements, so the code genmerator
+ -- statements) into a sequence of statements, so the code generator
-- should be prepared to accept a declaration where a statement is
-- expected. Note also that pragmas can appear as statements.
-- 5.1 Simple Statement --
---------------------------
- -- SIMPLE_STATEMENT ::= NULL_STATEMENT
- -- | ASSIGNMENT_STATEMENT | EXIT_STATEMENT
- -- | GOTO_STATEMENT | PROCEDURE_CALL_STATEMENT
- -- | RETURN_STATEMENT | ENTRY_CALL_STATEMENT
- -- | REQUEUE_STATEMENT | DELAY_STATEMENT
- -- | ABORT_STATEMENT | RAISE_STATEMENT
+ -- SIMPLE_STATEMENT ::= NULL_STATEMENT
+ -- | ASSIGNMENT_STATEMENT | EXIT_STATEMENT
+ -- | GOTO_STATEMENT | PROCEDURE_CALL_STATEMENT
+ -- | SIMPLE_RETURN_STATEMENT | ENTRY_CALL_STATEMENT
+ -- | REQUEUE_STATEMENT | DELAY_STATEMENT
+ -- | ABORT_STATEMENT | RAISE_STATEMENT
-- | CODE_STATEMENT
-----------------------------
-----------------------------
-- COMPOUND_STATEMENT ::=
- -- IF_STATEMENT | CASE_STATEMENT
- -- | LOOP_STATEMENT | BLOCK_STATEMENT
- -- | ACCEPT_STATEMENT | SELECT_STATEMENT
+ -- IF_STATEMENT | CASE_STATEMENT
+ -- | LOOP_STATEMENT | BLOCK_STATEMENT
+ -- | EXTENDED_RETURN_STATEMENT
+ -- | ACCEPT_STATEMENT | SELECT_STATEMENT
-------------------------
-- 5.1 Null Statement --
-- N_Label
-- Sloc points to <<
-- Identifier (Node1) direct name of statement identifier
- -- Exception_Junk (Flag11-Sem)
+ -- Exception_Junk (Flag8-Sem)
-------------------------------
-- 5.1 Statement Identifier --
-------------------------------
- -- STATEMENT_INDENTIFIER ::= DIRECT_NAME
+ -- STATEMENT_IDENTIFIER ::= DIRECT_NAME
-- The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier
-- (not an OPERATOR_SYMBOL)
-- the Expression may not have the form of an aggregate (since this
-- might cause the back end to generate separate assignments). It
-- also cannot be a reference to an object marked as a true constant
- -- (Is_True_Constant flag set), where the object is itself initalized
+ -- (Is_True_Constant flag set), where the object is itself initialized
-- with an aggregate. If necessary the front end must generate an
-- extra temporary (with Is_True_Constant set False), and initialize
-- this temporary as required (the temporary itself is not atomic).
-- Note that the occurrence of a block identifier is not a defining
-- identifier, but rather a referencing occurrence. The defining
- -- occurrence is in the implicit label declaration which occurs in
- -- the innermost enclosing block.
+ -- occurrence is an E_Block entity declared by the implicit label
+ -- declaration which occurs in the innermost enclosing block statement
+ -- or body; the block identifier denotes that E_Block.
- -- Note: there is always a block statement identifier present in
- -- the tree, even if none was given in the source. In the case where
- -- no block identifier is given in the source, the parser creates
- -- a name of the form _Block_n, where n is a decimal integer (the
- -- two underlines ensure that the block names created in this manner
- -- do not conflict with any user defined identifiers), and the flag
- -- Has_Created_Identifier is set to True. The only exception to the
- -- rule that all loop statement nodes have identifiers occurs for
- -- blocks constructed by the expander, and the semantic analyzer
- -- creates and supplies dummy names for the blocks).
+ -- For block statements that come from source code, there is always a
+ -- block statement identifier present in the tree, denoting an
+ -- E_Block. In the case where no block identifier is given in the
+ -- source, the parser creates a name of the form B_n, where n is a
+ -- decimal integer, and the flag Has_Created_Identifier is set to
+ -- True. Blocks constructed by the expander usually have no identifier,
+ -- and no corresponding entity.
+
+ -- Note: the block statement created for an extended return statement
+ -- has an entity, and this entity is an E_Return_Statement, rather than
+ -- the usual E_Block.
+
+ -- Note: Exception_Junk is set for the wrapping blocks created during
+ -- local raise optimization (Exp_Ch11.Expand_Local_Exception_Handlers).
-- N_Block_Statement
-- Sloc points to DECLARE or BEGIN
-- Has_Created_Identifier (Flag15)
-- Is_Task_Allocation_Block (Flag6)
-- Is_Asynchronous_Call_Block (Flag7)
+ -- Exception_Junk (Flag8-Sem)
-------------------------
-- 5.7 Exit Statement --
-- N_Goto_Statement
-- Sloc points to GOTO
-- Name (Node2)
- -- Exception_Junk (Flag11-Sem)
+ -- Exception_Junk (Flag8-Sem)
---------------------------------
-- 6.1 Subprogram Declaration --
-----------------------------------
-- SUBPROGRAM_SPECIFICATION ::=
+ -- [[not] overriding]
-- procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE
- -- | function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE
+ -- | [[not] overriding]
+ -- function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE
-- Note: there are no separate nodes for the profiles, instead the
-- information appears directly in the following nodes.
-- Defining_Unit_Name (Node1) (the designator)
-- Elaboration_Boolean (Node2-Sem)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
- -- Subtype_Mark (Node4) for return type
+ -- Null_Exclusion_Present (Flag11)
+ -- Result_Definition (Node4) for result subtype
-- Generic_Parent (Node5-Sem)
+ -- Must_Override (Flag14) set if overriding indicator present
+ -- Must_Not_Override (Flag15) set if not_overriding indicator present
-- N_Procedure_Specification
-- Sloc points to PROCEDURE
-- Elaboration_Boolean (Node2-Sem)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
-- Generic_Parent (Node5-Sem)
+ -- Null_Present (Flag13) set for null procedure case (Ada 2005 feature)
+ -- Must_Override (Flag14) set if overriding indicator present
+ -- Must_Not_Override (Flag15) set if not_overriding indicator present
+
+ -- Note: overriding indicator is an Ada 2005 feature
---------------------
-- 6.1 Designator --
-- parent library unit package name is present.
-- Identifier (Node1)
- -- Note that the identifier can also be an operator symbol here.
+ -- Note that the identifier can also be an operator symbol here
------------------------------
-- 6.1 Defining Designator --
-- 6.1 Parameter and Result Profile --
---------------------------------------
- -- PARAMETER_AND_RESULT_PROFILE ::= [FORMAL_PART] return SUBTYPE_MARK
+ -- PARAMETER_AND_RESULT_PROFILE ::=
+ -- [FORMAL_PART] return [NULL_EXCLUSION] SUBTYPE_MARK
+ -- | [FORMAL_PART] return ACCESS_DEFINITION
-- There is no explicit node in the tree for a parameter and result
-- profile. Instead the information appears directly in the parent.
----------------------------------
-- PARAMETER_SPECIFICATION ::=
- -- DEFINING_IDENTIFIER_LIST : MODE SUBTYPE_MARK
+ -- DEFINING_IDENTIFIER_LIST : MODE [NULL_EXCLUSION] SUBTYPE_MARK
-- [:= DEFAULT_EXPRESSION]
-- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION
-- [:= DEFAULT_EXPRESSION]
-- Defining_Identifier (Node1)
-- In_Present (Flag15)
-- Out_Present (Flag17)
+ -- Null_Exclusion_Present (Flag11)
-- Parameter_Type (Node2) subtype mark or access definition
-- Expression (Node3) (set to Empty if no default expression present)
-- Do_Accessibility_Check (Flag13-Sem)
-- Do_Storage_Check (Flag17-Sem)
-- Has_Priority_Pragma (Flag6-Sem)
-- Is_Protected_Subprogram_Body (Flag7-Sem)
+ -- Is_Entry_Barrier_Function (Flag8-Sem)
-- Is_Task_Master (Flag5-Sem)
-- Was_Originally_Stub (Flag13-Sem)
+ -- Has_Relative_Deadline_Pragma (Flag9-Sem)
-----------------------------------
-- 6.4 Procedure Call Statement --
-- actual parameter part)
-- First_Named_Actual (Node4-Sem)
-- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching)
+ -- Is_Expanded_Build_In_Place_Call (Flag11-Sem)
-- Do_Tag_Check (Flag13-Sem)
-- No_Elaboration_Check (Flag14-Sem)
-- Parameter_List_Truncated (Flag17-Sem)
-- N_Parameter_Association
-- Sloc points to formal parameter
- -- Selector_Name (Node2) (always non-Empty, since this node is
- -- only used if a formal parameter selector name is present)
+ -- Selector_Name (Node2) (always non-Empty)
-- Explicit_Actual_Parameter (Node3)
-- Next_Named_Actual (Node4-Sem)
-- 6.5 Return Statement --
---------------------------
- -- RETURN_STATEMENT ::= return [EXPRESSION];
+ -- RETURN_STATEMENT ::= return [EXPRESSION]; -- Ada 95
+
+ -- In Ada 2005, we have:
+
+ -- SIMPLE_RETURN_STATEMENT ::= return [EXPRESSION];
+
+ -- EXTENDED_RETURN_STATEMENT ::=
+ -- return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION
+ -- [:= EXPRESSION] [do
+ -- HANDLED_SEQUENCE_OF_STATEMENTS
+ -- end return];
+
+ -- RETURN_SUBTYPE_INDICATION ::= SUBTYPE_INDICATION | ACCESS_DEFINITION
+
+ -- So in Ada 2005, RETURN_STATEMENT is no longer a nonterminal, but
+ -- "return statement" is defined in 6.5 to mean a
+ -- SIMPLE_RETURN_STATEMENT or an EXTENDED_RETURN_STATEMENT.
-- N_Return_Statement
-- Sloc points to RETURN
+ -- Return_Statement_Entity (Node5-Sem)
-- Expression (Node3) (set to Empty if no expression present)
-- Storage_Pool (Node1-Sem)
- -- Procedure_To_Call (Node4-Sem)
+ -- Procedure_To_Call (Node2-Sem)
+ -- Do_Tag_Check (Flag13-Sem)
+ -- By_Ref (Flag5-Sem)
+ -- Comes_From_Extended_Return_Statement (Flag18-Sem)
+
+ -- N_Return_Statement represents a simple_return_statement, and is
+ -- renamed to be N_Simple_Return_Statement below. Clients should refer
+ -- to N_Simple_Return_Statement. We retain N_Return_Statement because
+ -- that's how gigi knows it. See also renaming of Make_Return_Statement
+ -- as Make_Simple_Return_Statement in Sem_Util.
+
+ -- Note: Return_Statement_Entity points to an E_Return_Statement
+
+ -- If a range check is required, then Do_Range_Check is set on the
+ -- Expression. The check is against the return subtype of the function.
+
+ -- N_Extended_Return_Statement
+ -- Sloc points to RETURN
+ -- Return_Statement_Entity (Node5-Sem)
+ -- Return_Object_Declarations (List3)
+ -- Handled_Statement_Sequence (Node4) (set to Empty if not present)
+ -- Storage_Pool (Node1-Sem)
+ -- Procedure_To_Call (Node2-Sem)
-- Do_Tag_Check (Flag13-Sem)
- -- Return_Type (Node2-Sem)
-- By_Ref (Flag5-Sem)
- -- Note: if a range check is required, then Do_Range_Check is set
- -- on the Expression. The range check is against Return_Type.
+ -- Note: Return_Statement_Entity points to an E_Return_Statement.
+ -- Note that Return_Object_Declarations is a list containing the
+ -- N_Object_Declaration -- see comment on this field above.
+ -- The declared object will have Is_Return_Object = True.
+ -- There is no such syntactic category as return_object_declaration
+ -- in the RM. Return_Object_Declarations represents this portion of
+ -- the syntax for EXTENDED_RETURN_STATEMENT:
+ -- DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION
+ -- [:= EXPRESSION]
+
+ -- There are two entities associated with an extended_return_statement:
+ -- the Return_Statement_Entity represents the statement itself, and the
+ -- Defining_Identifier of the Object_Declaration in
+ -- Return_Object_Declarations represents the object being
+ -- returned. N_Simple_Return_Statement has only the former.
------------------------------
-- 7.1 Package Declaration --
-- PRIVATE_EXTENSION_DECLARATION ::=
-- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is
- -- [abstract] new ancestor_SUBTYPE_INDICATION with private;
+ -- [abstract] [limited | synchronized]
+ -- new ancestor_SUBTYPE_INDICATION [and INTERFACE_LIST]
+ -- with private;
- -- Note: private extension declarations are not allowed in Ada 83 mode
+ -- Note: LIMITED, and private extension declarations are not allowed
+ -- in Ada 83 mode.
-- N_Private_Extension_Declaration
-- Sloc points to TYPE
-- discriminant part)
-- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant
-- Abstract_Present (Flag4)
+ -- Limited_Present (Flag17)
+ -- Synchronized_Present (Flag7)
-- Subtype_Indication (Node5)
+ -- Interface_List (List2) (set to No_List if none)
---------------------
-- 8.4 Use Clause --
--------------------------------------
-- OBJECT_RENAMING_DECLARATION ::=
- -- DEFINING_IDENTIFIER : SUBTYPE_MARK renames object_NAME;
- -- | DEFINING_IDENTIFIER : ACCESS_DEFINITION renames object_NAME;
+ -- DEFINING_IDENTIFIER :
+ -- [NULL_EXCLUSION] SUBTYPE_MARK renames object_NAME;
+ -- | DEFINING_IDENTIFIER :
+ -- ACCESS_DEFINITION renames object_NAME;
-- Note: Access_Definition is an optional field that gives support to
- -- Ada 0Y (AI-230). The parser generates nodes that have either the
+ -- Ada 2005 (AI-230). The parser generates nodes that have either the
-- Subtype_Indication field or else the Access_Definition field.
-- N_Object_Renaming_Declaration
-- Sloc points to first identifier
-- Defining_Identifier (Node1)
+ -- Null_Exclusion_Present (Flag11) (set to False if not present)
-- Subtype_Mark (Node4) (set to Empty if not present)
-- Access_Definition (Node3) (set to Empty if not present)
-- Name (Node2)
-- Name (Node2)
-- Parent_Spec (Node4-Sem)
-- Corresponding_Spec (Node5-Sem)
+ -- Corresponding_Formal_Spec (Node3-Sem)
-- From_Default (Flag6-Sem)
-----------------------------------------
-- TASK_TYPE_DECLARATION ::=
-- task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
- -- [is TASK_DEFINITITION];
+ -- [is [new INTERFACE_LIST with] TASK_DEFINITION];
-- N_Task_Type_Declaration
-- Sloc points to TASK
-- Defining_Identifier (Node1)
- -- Task_Body_Procedure (Node2-Sem)
-- Discriminant_Specifications (List4) (set to No_List if no
-- discriminant part)
+ -- Interface_List (List2) (set to No_List if none)
-- Task_Definition (Node3) (set to Empty if not present)
-- Corresponding_Body (Node5-Sem)
----------------------------------
-- SINGLE_TASK_DECLARATION ::=
- -- task DEFINING_IDENTIFIER [is TASK_DEFINITION];
+ -- task DEFINING_IDENTIFIER
+ -- [is [new INTERFACE_LIST with] TASK_DEFINITION];
-- N_Single_Task_Declaration
-- Sloc points to TASK
-- Defining_Identifier (Node1)
+ -- Interface_List (List2) (set to No_List if none)
-- Task_Definition (Node3) (set to Empty if not present)
--------------------------
-- Has_Storage_Size_Pragma (Flag5-Sem)
-- Has_Task_Info_Pragma (Flag7-Sem)
-- Has_Task_Name_Pragma (Flag8-Sem)
+ -- Has_Relative_Deadline_Pragma (Flag9-Sem)
--------------------
-- 9.1 Task Item --
-- HANDLED_SEQUENCE_OF_STATEMENTS
-- end [task_IDENTIFIER];
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Task_Body
-- Sloc points to TASK
-- PROTECTED_TYPE_DECLARATION ::=
-- protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART]
- -- is PROTECTED_DEFINITION;
+ -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION;
-- Note: protected type declarations are not permitted in Ada 83 mode
-- Defining_Identifier (Node1)
-- Discriminant_Specifications (List4) (set to No_List if no
-- discriminant part)
+ -- Interface_List (List2) (set to No_List if none)
-- Protected_Definition (Node3)
-- Corresponding_Body (Node5-Sem)
---------------------------------------
-- SINGLE_PROTECTED_DECLARATION ::=
- -- protected DEFINING_IDENTIFIER is PROTECTED_DEFINITION;
+ -- protected DEFINING_IDENTIFIER
+ -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION;
-- Note: single protected declarations are not allowed in Ada 83 mode
-- N_Single_Protected_Declaration
-- Sloc points to PROTECTED
-- Defining_Identifier (Node1)
+ -- Interface_List (List2) (set to No_List if none)
-- Protected_Definition (Node3)
-------------------------------
-- Note: protected bodies are not allowed in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Protected_Body
-- Sloc points to PROTECTED
------------------------------
-- ENTRY_DECLARATION ::=
+ -- [[not] overriding]
-- entry DEFINING_IDENTIFIER
-- [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE;
-- Discrete_Subtype_Definition (Node4) (set to Empty if not present)
-- Parameter_Specifications (List3) (set to No_List if no formal part)
-- Corresponding_Body (Node5-Sem)
+ -- Must_Override (Flag14) set if overriding indicator present
+ -- Must_Not_Override (Flag15) set if not_overriding indicator present
+
+ -- Note: overriding indicator is an Ada 2005 feature
-----------------------------
-- 9.5.2 Accept statement --
-- HANDLED_SEQUENCE_OF_STATEMENTS
-- end [entry_IDENTIFIER]];
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- Note: there are no explicit declarations allowed in an accept
-- statement. However, the implicit declarations for any statement
-- the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting
-- too full (it would otherwise have too many fields)
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Body
-- Sloc points to ENTRY
-- formal part itself. Also this means that the barrier condition
-- always has somewhere to be stored.
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Body_Formal_Part
-- Sloc points to first token
-- ENTRY_INDEX_SPECIFICATION ::=
-- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Index_Specification
-- Sloc points to FOR
-- The parser may generate a procedure call for this construct. The
-- semantic pass must correct this misidentification where needed.
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Call_Statement
-- Sloc points to first token of name
-- Note: requeue statements are not permitted in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Requeue_Statement
-- Sloc points to REQUEUE
-- Note: delay until statements are not permitted in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Delay_Until_Statement
-- Sloc points to DELAY
-- DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Delay_Relative_Statement
-- Sloc points to DELAY
-- SEQUENCE_OF_STATEMENTS]
-- end select;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- Note: the guard expression, if present, appears in the node for
-- the select alternative.
-- GUARD ::= when CONDITION =>
-- As noted above, the CONDITION that is part of a GUARD is included
- -- in the node for the select alernative for convenience.
+ -- in the node for the select alternative for convenience.
-------------------------------
-- 9.7.1 Select Alternative --
-- ACCEPT_ALTERNATIVE ::=
-- ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Accept_Alternative
-- Sloc points to ACCEPT
-- DELAY_ALTERNATIVE ::=
-- DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Delay_Alternative
-- Sloc points to DELAY
-- TERMINATE_ALTERNATIVE ::= terminate;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Terminate_Alternative
-- Sloc points to TERMINATE
-- DELAY_ALTERNATIVE
-- end select;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Timed_Entry_Call
-- Sloc points to SELECT
-----------------------------------
-- ENTRY_CALL_ALTERNATIVE ::=
- -- ENTRY_CALL_STATEMENT [SEQUENCE_OF_STATEMENTS]
+ -- PROCEDURE_OR_ENTRY_CALL [SEQUENCE_OF_STATEMENTS]
+
+ -- PROCEDURE_OR_ENTRY_CALL ::=
+ -- PROCEDURE_CALL_STATEMENT | ENTRY_CALL_STATEMENT
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Entry_Call_Alternative
-- Sloc points to first token of entry call statement
-- SEQUENCE_OF_STATEMENTS
-- end select;
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Conditional_Entry_Call
-- Sloc points to SELECT
-- Note: asynchronous select is not permitted in Ada 83 mode
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Asynchronous_Select
-- Sloc points to SELECT
-- TRIGGERING_ALTERNATIVE ::=
-- TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS]
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Triggering_Alternative
-- Sloc points to first token of triggering statement
-- 9.7.4 Triggering Statement --
---------------------------------
- -- TRIGGERING_STATEMENT ::= ENTRY_CALL_STATEMENT | DELAY_STATEMENT
+ -- TRIGGERING_STATEMENT ::= PROCEDURE_OR_ENTRY_CALL | DELAY_STATEMENT
---------------------------
-- 9.7.4 Abortable Part --
-- ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Abortable_Part
-- Sloc points to ABORT
-- ABORT_STATEMENT ::= abort task_NAME {, task_NAME};
- -- Gigi restriction: This node never appears.
+ -- Gigi restriction: This node never appears
-- N_Abort_Statement
-- Sloc points to ABORT
-- CONTEXT_CLAUSE LIBRARY_ITEM
-- | CONTEXT_CLAUSE SUBUNIT
- -- The N_Compilation_Unit node itself respresents the above syntax.
+ -- The N_Compilation_Unit node itself represents the above syntax.
-- However, there are two additional items not reflected in the above
-- syntax. First we have the global declarations that are added by the
-- code generator. These are outer level declarations (so they cannot
-- the declaration or body, and the flag for private if present,
-- appear in the N_Compilation_Unit clause.
- ----------------------------------------
- -- 10.1.1 Library Unit Declararation --
- ----------------------------------------
+ --------------------------------------
+ -- 10.1.1 Library Unit Declaration --
+ --------------------------------------
-- LIBRARY_UNIT_DECLARATION ::=
-- SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION
-- | GENERIC_DECLARATION | GENERIC_INSTANTIATION
- -------------------------------------------------
- -- 10.1.1 Library Unit Renaming Declararation --
- -------------------------------------------------
+ -----------------------------------------------
+ -- 10.1.1 Library Unit Renaming Declaration --
+ -----------------------------------------------
-- LIBRARY_UNIT_RENAMING_DECLARATION ::=
-- PACKAGE_RENAMING_DECLARATION
-- Context_Installed (Flag13-Sem)
-- Elaborate_Present (Flag4-Sem)
-- Elaborate_All_Present (Flag14-Sem)
+ -- Elaborate_All_Desirable (Flag9-Sem)
+ -- Elaborate_Desirable (Flag11-Sem)
-- Private_Present (Flag15) set if with_clause has private keyword
-- Implicit_With (Flag16-Sem)
-- Limited_Present (Flag17) set if LIMITED is present
-- No_Entities_Ref_In_Spec (Flag8-Sem)
-- Note: Limited_Present and Limited_View_Installed give support to
- -- Ada 0Y (AI-50217).
+ -- Ada 2005 (AI-50217).
-- Similarly, Private_Present gives support to AI-50262.
----------------------
-- This is a GNAT extension, used to implement mutually recursive
-- types declared in different packages.
-
- -- WITH_TYPE_CLAUSE ::=
- -- with type type_NAME is access | with type type_NAME is tagged
-
- -- N_With_Type_Clause
- -- Sloc points to first token of type name
- -- Name (Node2)
- -- Tagged_Present (Flag15)
+ -- Note: this is now obsolete. The functionality of this construct
+ -- is now implemented by the Ada 2005 Limited_with_Clause.
---------------------
-- 10.2 Body stub --
-- EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception;
- -- For consistency with object declarations etc, the parser converts
+ -- For consistency with object declarations etc., the parser converts
-- the case of multiple identifiers being declared to a series of
-- declarations in which the expression is copied, using the More_Ids
- -- and Prev_Ids flags to remember the souce form as described in the
+ -- and Prev_Ids flags to remember the source form as described in the
-- section on "Handling of Defining Identifier Lists".
-- N_Exception_Declaration
-- Sloc points to EXCEPTION
-- Defining_Identifier (Node1)
-- Expression (Node3-Sem)
+ -- Renaming_Exception (Node2-Sem)
-- More_Ids (Flag5) (set to False if no more identifiers in list)
-- Prev_Ids (Flag6) (set to False if no previous identifiers in list)
-- is true even in the case of an accept statement (see description of
-- the N_Accept_Statement node).
- -- End_Label refers to the containing construct.
+ -- End_Label refers to the containing construct
-----------------------------
-- 11.2 Exception Handler --
-- Choice_Parameter (Node2) (set to Empty if not present)
-- Exception_Choices (List4)
-- Statements (List3)
+ -- Exception_Label (Node5-Sem) (set to Empty of not present)
-- Zero_Cost_Handling (Flag5-Sem)
+ -- Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present)
+ -- Local_Raise_Not_OK (Flag7-Sem)
+ -- Has_Local_Raise (Flag8-Sem)
------------------------------------------
-- 11.2 Choice parameter specification --
-- RAISE_STATEMENT ::= raise [exception_NAME];
+ -- In Ada 2005, we have
+
+ -- RAISE_STATEMENT ::= raise; | raise exception_NAME [with EXPRESSION];
+
-- N_Raise_Statement
-- Sloc points to RAISE
-- Name (Node2) (set to Empty if no exception name present)
+ -- Expression (Node3) (set to Empty if no expression present)
+ -- From_At_End (Flag4-Sem)
-------------------------------
-- 12.1 Generic Declaration --
-- GENERIC_INSTANTIATION ::=
-- package DEFINING_PROGRAM_UNIT_NAME is
-- new generic_package_NAME [GENERIC_ACTUAL_PART];
- -- | procedure DEFINING_PROGRAM_UNIT_NAME is
+ -- | [[not] overriding]
+ -- procedure DEFINING_PROGRAM_UNIT_NAME is
-- new generic_procedure_NAME [GENERIC_ACTUAL_PART];
- -- | function DEFINING_DESIGNATOR is
+ -- | [[not] overriding]
+ -- function DEFINING_DESIGNATOR is
-- new generic_function_NAME [GENERIC_ACTUAL_PART];
-- N_Package_Instantiation
-- Generic_Associations (List3) (set to No_List if no
-- generic actual part)
-- Instance_Spec (Node5-Sem)
+ -- Must_Override (Flag14) set if overriding indicator present
+ -- Must_Not_Override (Flag15) set if not_overriding indicator present
-- ABE_Is_Certain (Flag18-Sem)
-- N_Function_Instantiation
-- generic actual part)
-- Parent_Spec (Node4-Sem)
-- Instance_Spec (Node5-Sem)
+ -- Must_Override (Flag14) set if overriding indicator present
+ -- Must_Not_Override (Flag15) set if not_overriding indicator present
-- ABE_Is_Certain (Flag18-Sem)
- ------------------------------
- -- 12.3 Generic Actual Part --
- ------------------------------
+ -- Note: overriding indicator is an Ada 2005 feature
+
+ -------------------------------
+ -- 12.3 Generic Actual Part --
+ -------------------------------
-- GENERIC_ACTUAL_PART ::=
-- (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION})
-- GENERIC_ASSOCIATION ::=
-- [generic_formal_parameter_SELECTOR_NAME =>]
- -- EXPLICIT_GENERIC_ACTUAL_PARAMETER
-- Note: unlike the procedure call case, a generic association node
- -- is generated for every association, even if no formal is present.
- -- In this case the parser will leave the Selector_Name field set
- -- to Empty, to be filled in later by the semantic pass.
+ -- is generated for every association, even if no formal parameter
+ -- selector name is present. In this case the parser will leave the
+ -- Selector_Name field set to Empty, to be filled in later by the
+ -- semantic pass.
+
+ -- In Ada 2005, a formal may be associated with a box, if the
+ -- association is part of the list of actuals for a formal package.
+ -- If the association is given by OTHERS => <>, the association is
+ -- an N_Others_Choice.
-- N_Generic_Association
-- Sloc points to first token of generic association
-- Selector_Name (Node2) (set to Empty if no formal
-- parameter selector name)
- -- Explicit_Generic_Actual_Parameter (Node1)
+ -- Explicit_Generic_Actual_Parameter (Node1) (Empty if box present)
+ -- Box_Present (Flag15) (for formal_package associations with a box)
---------------------------------------------
-- 12.3 Explicit Generic Actual Parameter --
-- FORMAL_OBJECT_DECLARATION ::=
-- DEFINING_IDENTIFIER_LIST :
- -- MODE SUBTYPE_MARK [:= DEFAULT_EXPRESSION];
+ -- MODE [NULL_EXCLUSION] SUBTYPE_MARK [:= DEFAULT_EXPRESSION];
+ -- | DEFINING_IDENTIFIER_LIST :
+ -- MODE ACCESS_DEFINITION [:= DEFAULT_EXPRESSION];
-- Although the syntax allows multiple identifiers in the list, the
-- semantics is as though successive declarations were given with
-- Defining_Identifier (Node1)
-- In_Present (Flag15)
-- Out_Present (Flag17)
- -- Subtype_Mark (Node4)
- -- Expression (Node3) (set to Empty if no default expression)
+ -- Null_Exclusion_Present (Flag11) (set to False if not present)
+ -- Subtype_Mark (Node4) (set to Empty if not present)
+ -- Access_Definition (Node3) (set to Empty if not present)
+ -- Default_Expression (Node5) (set to Empty if no default expression)
-- More_Ids (Flag5) (set to False if no more identifiers in list)
-- Prev_Ids (Flag6) (set to False if no previous identifiers in list)
-- | FORMAL_DECIMAL_FIXED_POINT_DEFINITION
-- | FORMAL_ARRAY_TYPE_DEFINITION
-- | FORMAL_ACCESS_TYPE_DEFINITION
+ -- | FORMAL_INTERFACE_TYPE_DEFINITION
---------------------------------------------
-- 12.5.1 Formal Private Type Definition --
--------------------------------------------
-- FORMAL_DERIVED_TYPE_DEFINITION ::=
- -- [abstract] new SUBTYPE_MARK [with private]
-
+ -- [abstract] [limited | synchronized]
+ -- new SUBTYPE_MARK [[and INTERFACE_LIST] with private]
-- Note: this construct is not allowed in Ada 83 mode
-- N_Formal_Derived_Type_Definition
-- Subtype_Mark (Node4)
-- Private_Present (Flag15)
-- Abstract_Present (Flag4)
+ -- Limited_Present (Flag17)
+ -- Synchronized_Present (Flag7)
+ -- Interface_List (List2) (set to No_List if none)
---------------------------------------------
-- 12.5.2 Formal Discrete Type Definition --
-- FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION
+ ----------------------------------------------
+ -- 12.5.5 Formal Interface Type Definition --
+ ----------------------------------------------
+
+ -- FORMAL_INTERFACE_TYPE_DEFINITION ::= INTERFACE_TYPE_DEFINITION
+
-----------------------------------------
-- 12.6 Formal Subprogram Declaration --
-----------------------------------------
-- FORMAL_SUBPROGRAM_DECLARATION ::=
+ -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION
+ -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION
+
+ --------------------------------------------------
+ -- 12.6 Formal Concrete Subprogram Declaration --
+ --------------------------------------------------
+
+ -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::=
-- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
- -- N_Formal_Subprogram_Declaration
+ -- N_Formal_Concrete_Subprogram_Declaration
+ -- Sloc points to WITH
+ -- Specification (Node1)
+ -- Default_Name (Node2) (set to Empty if no subprogram default)
+ -- Box_Present (Flag15)
+
+ -- Note: if no subprogram default is present, then Name is set
+ -- to Empty, and Box_Present is False.
+
+ --------------------------------------------------
+ -- 12.6 Formal Abstract Subprogram Declaration --
+ --------------------------------------------------
+
+ -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::=
+ -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT];
+
+ -- N_Formal_Abstract_Subprogram_Declaration
-- Sloc points to WITH
-- Specification (Node1)
-- Default_Name (Node2) (set to Empty if no subprogram default)
-- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
-- There is no separate node in the tree for a subprogram default.
- -- Instead the parent (N_Formal_Subprogram_Declaration) node contains
- -- the default name or box indication, as needed.
+ -- Instead the parent (N_Formal_Concrete_Subprogram_Declaration
+ -- or N_Formal_Abstract_Subprogram_Declaration) node contains the
+ -- default name or box indication, as needed.
------------------------
-- 12.6 Default Name --
--------------------------------------
-- FORMAL_PACKAGE_ACTUAL_PART ::=
- -- (<>) | [GENERIC_ACTUAL_PART]
+ -- ([OTHERS] => <>)
+ -- | [GENERIC_ACTUAL_PART]
+ -- (FORMAL_PACKAGE_ASSOCIATION {. FORMAL_PACKAGE_ASSOCIATION}
+
+ -- FORMAL_PACKAGE_ASSOCIATION ::=
+ -- GENERIC_ASSOCIATION
+ -- | GENERIC_FORMAL_PARAMETER_SELECTOR_NAME => <>
- -- There is no explicit node in the tree for a formal package
- -- actual part. Instead the information appears in the parent node
- -- (i.e. the formal package declaration node itself).
+ -- There is no explicit node in the tree for a formal package actual
+ -- part. Instead the information appears in the parent node (i.e. the
+ -- formal package declaration node itself).
+
+ -- There is no explicit node for a formal package association. All of
+ -- them are represented either by a generic association, possibly with
+ -- Box_Present, or by an N_Others_Choice.
---------------------------------
-- 13.1 Representation clause --
-- Name (Node2) the local name
-- Chars (Name1) the identifier name from the attribute designator
-- Expression (Node3) the expression or name
- -- Next_Rep_Item (Node4-Sem)
+ -- Entity (Node4-Sem)
+ -- Next_Rep_Item (Node5-Sem)
-- From_At_Mod (Flag4-Sem)
-- Check_Address_Alignment (Flag11-Sem)
+ -- Address_Warning_Posted (Flag18-Sem)
---------------------------------------------
-- 13.4 Enumeration representation clause --
-- Sloc points to FOR
-- Identifier (Node1) direct name
-- Array_Aggregate (Node3)
- -- Next_Rep_Item (Node4-Sem)
+ -- Next_Rep_Item (Node5-Sem)
---------------------------------
-- 13.4 Enumeration aggregate --
-- Identifier (Node1) direct name
-- Mod_Clause (Node2) (set to Empty if no mod clause present)
-- Component_Clauses (List3)
- -- Next_Rep_Item (Node4-Sem)
+ -- Next_Rep_Item (Node5-Sem)
------------------------------
-- 13.5.1 Component clause --
-- Asm_Insn'(Asm (...));
- -- or
-
- -- Asm_Insn'(Asm_Volatile (...))
-
- -- See package System.Machine_Code in file s-maccod.ads for details
- -- on the allowed parameters to Asm[_Volatile]. There are two ways
- -- this node can arise, as a code statement, in which case the
- -- expression is the qualified expression, or as a result of the
- -- expansion of an intrinsic call to the Asm or Asm_Input procedure.
+ -- See package System.Machine_Code in file s-maccod.ads for details on
+ -- the allowed parameters to Asm. There are two ways this node can
+ -- arise, as a code statement, in which case the expression is the
+ -- qualified expression, or as a result of the expansion of an intrinsic
+ -- call to the Asm or Asm_Input procedure.
-- N_Code_Statement
-- Sloc points to first token of the expression
-- an expanded name node to a selected component node to be done
-- easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name.
- -- There is no special sprint syntax for an expanded name.
+ -- There is no special sprint syntax for an expanded name
-- N_Expanded_Name
-- Sloc points to the period
-- Sloc is copied from the unchecked deallocation call
-- Expression (Node3) argument to unchecked deallocation call
-- Storage_Pool (Node1-Sem)
- -- Procedure_To_Call (Node4-Sem)
+ -- Procedure_To_Call (Node2-Sem)
+ -- Actual_Designated_Subtype (Node4-Sem)
-- Note: in the case where a debug source file is generated, the Sloc
-- for this node points to the FREE keyword in the Sprint file output.
-- the exception to be raised (i.e. it is equivalent to a raise
-- statement that raises the corresponding exception). This use
-- is distinguished by the fact that the Etype in this case is
- -- Standard_Void_Type, In the subexprssion case, the Etype is the
+ -- Standard_Void_Type, In the subexpression case, the Etype is the
-- same as the type of the subexpression which it replaces.
-- If Condition is empty, then the raise is unconditional. If the
-- error. The creation of this node will usually be accompanied by a
-- message (unless it appears within the right operand of a short
-- circuit form whose left argument is static and decisively
- -- eliminates elaboration of the raise operation.
+ -- eliminates elaboration of the raise operation. The condition field
+ -- can ONLY be present when the node is used as a statement form, it
+ -- may NOT be present in the case where the node appears within an
+ -- expression.
-- The exception is generated with a message that contains the
-- file name and line number, and then appended text. The Reason
-- In the case where a debug source file is generated, the Sloc for
-- this node points to the left bracket in the Sprint file output.
+ -- Note: the back end may be required to translate these nodes into
+ -- appropriate goto statements. See description of N_Push/Pop_xxx_Label.
+
+ ---------------------------------------------
+ -- Optimization of Exception Raise to Goto --
+ ---------------------------------------------
+
+ -- In some cases, the front end will determine that any exception raised
+ -- by the back end for a certain exception should be transformed into a
+ -- goto statement.
+
+ -- There are three kinds of exceptions raised by the back end (note that
+ -- for this purpose we consider gigi to be part of the back end in the
+ -- gcc case):
+
+ -- 1. Exceptions resulting from N_Raise_xxx_Error nodes
+ -- 2. Exceptions from checks triggered by Do_xxx_Check flags
+ -- 3. Other cases not specifically marked by the front end
+
+ -- Normally all such exceptions are translated into calls to the proper
+ -- Rcheck_xx procedure, where xx encodes both the exception to be raised
+ -- and the exception message.
+
+ -- The front end may determine that for a particular sequence of code,
+ -- exceptions in any of these three categories for a particular builtin
+ -- exception should result in a goto, rather than a call to Rcheck_xx.
+ -- The exact sequence to be generated is:
+
+ -- Local_Raise (exception'Identity);
+ -- goto Label
+
+ -- The front end marks such a sequence of code by bracketing it with
+ -- push and pop nodes:
+
+ -- N_Push_xxx_Label (referencing the label)
+ -- ...
+ -- (code where transformation is expected for exception xxx)
+ -- ...
+ -- N_Pop_xxx_Label
+
+ -- The use of push/pop reflects the fact that such regions can properly
+ -- nest, and one special case is a subregion in which no transformation
+ -- is allowed. Such a region is marked by a N_Push_xxx_Label node whose
+ -- Exception_Label field is Empty.
+
+ -- N_Push_Constraint_Error_Label
+ -- Sloc references first statement in region covered
+ -- Exception_Label (Node5-Sem)
+
+ -- N_Push_Program_Error_Label
+ -- Sloc references first statement in region covered
+ -- Exception_Label (Node5-Sem)
+
+ -- N_Push_Storage_Error_Label
+ -- Sloc references first statement in region covered
+ -- Exception_Label (Node5-Sem)
+
+ -- N_Pop_Constraint_Error_Label
+ -- Sloc references last statement in region covered
+
+ -- N_Pop_Program_Error_Label
+ -- Sloc references last statement in region covered
+
+ -- N_Pop_Storage_Error_Label
+ -- Sloc references last statement in region covered
+
---------------
-- Reference --
---------------
-- with all checks off, regardless of the current setting of scope
-- suppress flags.
- -- Sprint syntax: `(expression).
+ -- Sprint syntax: `(expression)
-- Note: this node is always removed from the tree (and replaced by
-- its constituent expression) on completion of analysis, so it only
-- clearly a function call to an instantiation of Unchecked_Conversion
-- is not a variable in any case.
- -- Sprint syntax: subtype-mark!(expression).
+ -- Sprint syntax: subtype-mark!(expression)
-- N_Unchecked_Type_Conversion
-- Sloc points to related node in source
-- The following is the definition of the Node_Kind type. As previously
-- discussed, this is separated off to allow rearrangement of the order
- -- to facilitiate definition of subtype ranges. The comments show the
+ -- to facilitate definition of subtype ranges. The comments show the
-- subtype classes which apply to each set of node kinds. The first
-- entry in the comment characterizes the following list of nodes.
N_Unused_At_Start,
-- N_Representation_Clause
+
N_At_Clause,
N_Component_Clause,
N_Enumeration_Representation_Clause,
N_Record_Representation_Clause,
-- N_Representation_Clause, N_Has_Chars
+
N_Attribute_Definition_Clause,
-- N_Has_Chars
+
N_Empty,
- N_Pragma,
N_Pragma_Argument_Association,
-- N_Has_Etype
+
N_Error,
-- N_Entity, N_Has_Etype, N_Has_Chars
+
N_Defining_Character_Literal,
N_Defining_Identifier,
N_Defining_Operator_Symbol,
-- N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity
+
N_Expanded_Name,
-- N_Direct_Name, N_Subexpr, N_Has_Etype,
-- N_Has_Chars, N_Has_Entity
+
N_Identifier,
N_Operator_Symbol,
-- N_Direct_Name, N_Subexpr, N_Has_Etype,
-- N_Has_Chars, N_Has_Entity
+
N_Character_Literal,
-- N_Binary_Op, N_Op, N_Subexpr,
-- N_Has_Etype, N_Has_Chars, N_Has_Entity
+
N_Op_Add,
N_Op_Concat,
N_Op_Expon,
N_Op_Subtract,
-- N_Binary_Op, N_Op, N_Subexpr, N_Has_Treat_Fixed_As_Integer
- -- N_Has_Etype, N_Has_Chars, N_Has_Entity
+ -- N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator
N_Op_Divide,
N_Op_Mod,
-- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
-- N_Has_Entity, N_Has_Chars, N_Op_Boolean
+
N_Op_And,
-- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
- -- N_Has_Entity, N_Has_Chars, N_Op_Boolean,
- -- N_Op_Compare
+ -- N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare
+
N_Op_Eq,
N_Op_Ge,
N_Op_Gt,
-- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype
-- N_Has_Entity, N_Has_Chars, N_Op_Boolean
+
N_Op_Or,
N_Op_Xor,
-- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype,
-- N_Op_Shift, N_Has_Chars, N_Has_Entity
+
N_Op_Rotate_Left,
N_Op_Rotate_Right,
N_Op_Shift_Left,
-- N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype,
-- N_Has_Chars, N_Has_Entity
+
N_Op_Abs,
N_Op_Minus,
N_Op_Not,
N_Op_Plus,
-- N_Subexpr, N_Has_Etype, N_Has_Entity
+
N_Attribute_Reference,
+ -- N_Subexpr, N_Has_Etype, N_Membership_Test
+
+ N_In,
+ N_Not_In,
+
-- N_Subexpr, N_Has_Etype
+
N_And_Then,
N_Conditional_Expression,
N_Explicit_Dereference,
N_Function_Call,
- N_In,
N_Indexed_Component,
N_Integer_Literal,
- N_Not_In,
N_Null,
N_Or_Else,
N_Procedure_Call_Statement,
N_Unchecked_Type_Conversion,
-- N_Has_Etype
+
N_Subtype_Indication,
-- N_Declaration
+
N_Component_Declaration,
N_Entry_Declaration,
N_Formal_Object_Declaration,
N_Subtype_Declaration,
-- N_Subprogram_Specification, N_Declaration
+
N_Function_Specification,
N_Procedure_Specification,
- -- (nothing special)
- N_Entry_Index_Specification,
- N_Freeze_Entity,
-
-- N_Access_To_Subprogram_Definition
+
N_Access_Function_Definition,
N_Access_Procedure_Definition,
- -- N_Later_Decl_Item,
+ -- N_Later_Decl_Item
+
N_Task_Type_Declaration,
-- N_Body_Stub, N_Later_Decl_Item
+
N_Package_Body_Stub,
N_Protected_Body_Stub,
N_Subprogram_Body_Stub,
N_Task_Body_Stub,
-- N_Generic_Instantiation, N_Later_Decl_Item
+ -- N_Subprogram_Instantiation
+
N_Function_Instantiation,
- N_Package_Instantiation,
N_Procedure_Instantiation,
+ -- N_Generic_Instantiation, N_Later_Decl_Item
+
+ N_Package_Instantiation,
+
-- N_Unit_Body, N_Later_Decl_Item, N_Proper_Body
+
N_Package_Body,
N_Subprogram_Body,
-- N_Later_Decl_Item, N_Proper_Body
+
N_Protected_Body,
N_Task_Body,
-- N_Later_Decl_Item
+
N_Implicit_Label_Declaration,
N_Package_Declaration,
N_Single_Task_Declaration,
N_Use_Package_Clause,
-- N_Generic_Declaration, N_Later_Decl_Item
+
N_Generic_Package_Declaration,
N_Generic_Subprogram_Declaration,
-- N_Array_Type_Definition
+
N_Constrained_Array_Definition,
N_Unconstrained_Array_Definition,
-- N_Renaming_Declaration
+
N_Exception_Renaming_Declaration,
N_Object_Renaming_Declaration,
N_Package_Renaming_Declaration,
N_Subprogram_Renaming_Declaration,
- -- N_Generic_Renaming_Declarations, N_Renaming_Declaration
+ -- N_Generic_Renaming_Declaration, N_Renaming_Declaration
+
N_Generic_Function_Renaming_Declaration,
N_Generic_Package_Renaming_Declaration,
N_Generic_Procedure_Renaming_Declaration,
-- N_Statement_Other_Than_Procedure_Call
+
N_Abort_Statement,
N_Accept_Statement,
N_Assignment_Statement,
N_Case_Statement,
N_Code_Statement,
N_Conditional_Entry_Call,
+
+ -- N_Statement_Other_Than_Procedure_Call. N_Delay_Statement
+
N_Delay_Relative_Statement,
N_Delay_Until_Statement,
+
+ -- N_Statement_Other_Than_Procedure_Call
+
N_Entry_Call_Statement,
N_Free_Statement,
N_Goto_Statement,
N_Null_Statement,
N_Raise_Statement,
N_Requeue_Statement,
- N_Return_Statement,
+ N_Return_Statement, -- renamed as N_Simple_Return_Statement below
+ N_Extended_Return_Statement,
N_Selective_Accept,
N_Timed_Entry_Call,
-- N_Statement_Other_Than_Procedure_Call, N_Has_Condition
+
N_Exit_Statement,
N_If_Statement,
-- N_Has_Condition
+
N_Accept_Alternative,
N_Delay_Alternative,
N_Elsif_Part,
N_Iteration_Scheme,
N_Terminate_Alternative,
+ -- N_Formal_Subprogram_Declaration
+
+ N_Formal_Abstract_Subprogram_Declaration,
+ N_Formal_Concrete_Subprogram_Declaration,
+
+ -- N_Push_xxx_Label, N_Push_Pop_xxx_Label
+
+ N_Push_Constraint_Error_Label,
+ N_Push_Program_Error_Label,
+ N_Push_Storage_Error_Label,
+
+ -- N_Pop_xxx_Label, N_Push_Pop_xxx_Label
+
+ N_Pop_Constraint_Error_Label,
+ N_Pop_Program_Error_Label,
+ N_Pop_Storage_Error_Label,
+
-- Other nodes (not part of any subtype class)
+
N_Abortable_Part,
N_Abstract_Subprogram_Declaration,
N_Access_Definition,
N_Enumeration_Type_Definition,
N_Entry_Body,
N_Entry_Call_Alternative,
+ N_Entry_Index_Specification,
N_Exception_Declaration,
N_Exception_Handler,
N_Floating_Point_Definition,
N_Formal_Package_Declaration,
N_Formal_Private_Type_Definition,
N_Formal_Signed_Integer_Type_Definition,
- N_Formal_Subprogram_Declaration,
+ N_Freeze_Entity,
N_Generic_Association,
N_Handled_Sequence_Of_Statements,
N_Index_Or_Discriminant_Constraint,
N_Package_Specification,
N_Parameter_Association,
N_Parameter_Specification,
+ N_Pragma,
N_Protected_Definition,
N_Range_Constraint,
N_Real_Range_Specification,
N_Variant,
N_Variant_Part,
N_With_Clause,
- N_With_Type_Clause,
N_Unused_At_End);
for Node_Kind'Size use 8;
-- Note: this includes all constructs normally thought of as declarations
-- except those which are separately grouped as later declarations.
+ subtype N_Delay_Statement is Node_Kind range
+ N_Delay_Relative_Statement ..
+ N_Delay_Until_Statement;
+
subtype N_Direct_Name is Node_Kind range
N_Identifier ..
N_Character_Literal;
N_Defining_Character_Literal ..
N_Defining_Operator_Symbol;
+ subtype N_Formal_Subprogram_Declaration is Node_Kind range
+ N_Formal_Abstract_Subprogram_Declaration ..
+ N_Formal_Concrete_Subprogram_Declaration;
+
subtype N_Generic_Declaration is Node_Kind range
N_Generic_Package_Declaration ..
N_Generic_Subprogram_Declaration;
subtype N_Generic_Instantiation is Node_Kind range
N_Function_Instantiation ..
- N_Procedure_Instantiation;
+ N_Package_Instantiation;
subtype N_Generic_Renaming_Declaration is Node_Kind range
N_Generic_Function_Renaming_Declaration ..
N_Op_Divide ..
N_Op_Rem;
+ subtype N_Multiplying_Operator is Node_Kind range
+ N_Op_Divide ..
+ N_Op_Rem;
+
subtype N_Later_Decl_Item is Node_Kind range
N_Task_Type_Declaration ..
N_Generic_Subprogram_Declaration;
-- N_Protected_Body, which is a bit peculiar, but harmless since
-- this cannot appear in Ada 83 mode anyway.
+ subtype N_Membership_Test is Node_Kind range
+ N_In ..
+ N_Not_In;
+
subtype N_Op is Node_Kind range
N_Op_Add ..
N_Op_Plus;
N_Package_Body ..
N_Task_Body;
+ subtype N_Push_xxx_Label is Node_Kind range
+ N_Push_Constraint_Error_Label ..
+ N_Push_Storage_Error_Label;
+
+ subtype N_Pop_xxx_Label is Node_Kind range
+ N_Pop_Constraint_Error_Label ..
+ N_Pop_Storage_Error_Label;
+
+ subtype N_Push_Pop_xxx_Label is Node_Kind range
+ N_Push_Constraint_Error_Label ..
+ N_Pop_Storage_Error_Label;
+
subtype N_Raise_xxx_Error is Node_Kind range
N_Raise_Constraint_Error ..
N_Raise_Storage_Error;
-- (since overloading is possible, so it needs to go through the normal
-- overloading resolution for expressions).
+ subtype N_Subprogram_Instantiation is Node_Kind range
+ N_Function_Instantiation ..
+ N_Procedure_Instantiation;
+
subtype N_Has_Condition is Node_Kind range
N_Exit_Statement ..
N_Terminate_Alternative;
subtype N_Unit_Body is Node_Kind range
N_Package_Body ..
- N_Subprogram_Body;
+ N_Subprogram_Body;
---------------------------
-- Node Access Functions --
function Access_Definition
(N : Node_Id) return Node_Id; -- Node3
+ function Access_To_Subprogram_Definition
+ (N : Node_Id) return Node_Id; -- Node3
+
function Access_Types_To_Process
(N : Node_Id) return Elist_Id; -- Elist2
function Acts_As_Spec
(N : Node_Id) return Boolean; -- Flag4
+ function Actual_Designated_Subtype
+ (N : Node_Id) return Node_Id; -- Node4
+
+ function Address_Warning_Posted
+ (N : Node_Id) return Boolean; -- Flag18
+
function Aggregate_Bounds
(N : Node_Id) return Node_Id; -- Node3
(N : Node_Id) return Boolean; -- Flag15
function Char_Literal_Value
- (N : Node_Id) return Char_Code; -- Char_Code2
+ (N : Node_Id) return Uint; -- Uint2
function Chars
(N : Node_Id) return Name_Id; -- Name1
function Choices
(N : Node_Id) return List_Id; -- List1
+ function Coextensions
+ (N : Node_Id) return Elist_Id; -- Elist4
+
+ function Comes_From_Extended_Return_Statement
+ (N : Node_Id) return Boolean; -- Flag18
+
function Compile_Time_Known_Aggregate
(N : Node_Id) return Boolean; -- Flag18
function Corresponding_Body
(N : Node_Id) return Node_Id; -- Node5
+ function Corresponding_Formal_Spec
+ (N : Node_Id) return Node_Id; -- Node3
+
function Corresponding_Generic_Association
(N : Node_Id) return Node_Id; -- Node5
function Delay_Alternative
(N : Node_Id) return Node_Id; -- Node4
- function Delay_Finalize_Attach
- (N : Node_Id) return Boolean; -- Flag14
-
function Delay_Statement
(N : Node_Id) return Node_Id; -- Node2
function Do_Tag_Check
(N : Node_Id) return Boolean; -- Flag13
+ function Elaborate_All_Desirable
+ (N : Node_Id) return Boolean; -- Flag9
+
function Elaborate_All_Present
(N : Node_Id) return Boolean; -- Flag14
+ function Elaborate_Desirable
+ (N : Node_Id) return Boolean; -- Flag11
+
function Elaborate_Present
(N : Node_Id) return Boolean; -- Flag4
(N : Node_Id) return List_Id; -- List5
function Exception_Junk
- (N : Node_Id) return Boolean; -- Flag11
+ (N : Node_Id) return Boolean; -- Flag8
+
+ function Exception_Label
+ (N : Node_Id) return Node_Id; -- Node5
function Explicit_Actual_Parameter
(N : Node_Id) return Node_Id; -- Node3
function Forwards_OK
(N : Node_Id) return Boolean; -- Flag5
+ function From_At_End
+ (N : Node_Id) return Boolean; -- Flag4
+
function From_At_Mod
(N : Node_Id) return Boolean; -- Flag4
function Has_Dynamic_Range_Check
(N : Node_Id) return Boolean; -- Flag12
+ function Has_Init_Expression
+ (N : Node_Id) return Boolean; -- Flag14
+
+ function Has_Local_Raise
+ (N : Node_Id) return Boolean; -- Flag8
+
function Has_No_Elaboration_Code
(N : Node_Id) return Boolean; -- Flag17
function Has_Private_View
(N : Node_Id) return Boolean; -- Flag11
+ function Has_Relative_Deadline_Pragma
+ (N : Node_Id) return Boolean; -- Flag9
+
+ function Has_Self_Reference
+ (N : Node_Id) return Boolean; -- Flag13
+
function Has_Storage_Size_Pragma
(N : Node_Id) return Boolean; -- Flag5
function Identifier
(N : Node_Id) return Node_Id; -- Node1
+ function Interface_List
+ (N : Node_Id) return List_Id; -- List2
+
+ function Interface_Present
+ (N : Node_Id) return Boolean; -- Flag16
+
function Implicit_With
(N : Node_Id) return Boolean; -- Flag16
function Is_Controlling_Actual
(N : Node_Id) return Boolean; -- Flag16
+ function Is_Dynamic_Coextension
+ (N : Node_Id) return Boolean; -- Flag18
+
+ function Is_Entry_Barrier_Function
+ (N : Node_Id) return Boolean; -- Flag8
+
+ function Is_Expanded_Build_In_Place_Call
+ (N : Node_Id) return Boolean; -- Flag11
+
+ function Is_Folded_In_Parser
+ (N : Node_Id) return Boolean; -- Flag4
+
function Is_In_Discriminant_Check
(N : Node_Id) return Boolean; -- Flag11
function Is_Protected_Subprogram_Body
(N : Node_Id) return Boolean; -- Flag7
+ function Is_Static_Coextension
+ (N : Node_Id) return Boolean; -- Flag14
+
function Is_Static_Expression
(N : Node_Id) return Boolean; -- Flag6
function Literals
(N : Node_Id) return List_Id; -- List1
+ function Local_Raise_Not_OK
+ (N : Node_Id) return Boolean; -- Flag7
+
+ function Local_Raise_Statements
+ (N : Node_Id) return Elist_Id; -- Elist1
+
function Loop_Actions
(N : Node_Id) return List_Id; -- List2
function Must_Not_Freeze
(N : Node_Id) return Boolean; -- Flag8
+ function Must_Not_Override
+ (N : Node_Id) return Boolean; -- Flag15
+
+ function Must_Override
+ (N : Node_Id) return Boolean; -- Flag14
+
function Name
(N : Node_Id) return Node_Id; -- Node2
function Next_Named_Actual
(N : Node_Id) return Node_Id; -- Node4
+ function Next_Pragma
+ (N : Node_Id) return Node_Id; -- Node1
+
function Next_Rep_Item
- (N : Node_Id) return Node_Id; -- Node4
+ (N : Node_Id) return Node_Id; -- Node5
function Next_Use_Clause
(N : Node_Id) return Node_Id; -- Node3
function Null_Present
(N : Node_Id) return Boolean; -- Flag13
+ function Null_Exclusion_Present
+ (N : Node_Id) return Boolean; -- Flag11
+
function Null_Record_Present
(N : Node_Id) return Boolean; -- Flag17
function Object_Definition
(N : Node_Id) return Node_Id; -- Node4
- function OK_For_Stream
- (N : Node_Id) return Boolean; -- Flag4
-
function Original_Discriminant
(N : Node_Id) return Node_Id; -- Node2
function Parent_Spec
(N : Node_Id) return Node_Id; -- Node4
+ function PPC_Enabled
+ (N : Node_Id) return Boolean; -- Flag5
+
function Position
(N : Node_Id) return Node_Id; -- Node2
function Pragma_Argument_Associations
(N : Node_Id) return List_Id; -- List2
+ function Pragma_Identifier
+ (N : Node_Id) return Node_Id; -- Node4
+
function Pragmas_After
(N : Node_Id) return List_Id; -- List5
(N : Node_Id) return Boolean; -- Flag15
function Procedure_To_Call
- (N : Node_Id) return Node_Id; -- Node4
+ (N : Node_Id) return Node_Id; -- Node2
function Proper_Body
(N : Node_Id) return Node_Id; -- Node1
(N : Node_Id) return Node_Id; -- Node3
function Protected_Present
- (N : Node_Id) return Boolean; -- Flag15
+ (N : Node_Id) return Boolean; -- Flag6
function Raises_Constraint_Error
(N : Node_Id) return Boolean; -- Flag7
function Redundant_Use
(N : Node_Id) return Boolean; -- Flag13
- function Return_Type
+ function Renaming_Exception
(N : Node_Id) return Node_Id; -- Node2
+ function Result_Definition
+ (N : Node_Id) return Node_Id; -- Node4
+
+ function Return_Object_Declarations
+ (N : Node_Id) return List_Id; -- List3
+
+ function Return_Statement_Entity
+ (N : Node_Id) return Node_Id; -- Node5
+
function Reverse_Present
(N : Node_Id) return Boolean; -- Flag15
function Subtype_Marks
(N : Node_Id) return List_Id; -- List2
+ function Synchronized_Present
+ (N : Node_Id) return Boolean; -- Flag7
+
function Tagged_Present
(N : Node_Id) return Boolean; -- Flag15
function Target_Type
(N : Node_Id) return Entity_Id; -- Node2
- function Task_Body_Procedure
- (N : Node_Id) return Entity_Id; -- Node2
-
function Task_Definition
(N : Node_Id) return Node_Id; -- Node3
+ function Task_Present
+ (N : Node_Id) return Boolean; -- Flag5
+
function Then_Actions
(N : Node_Id) return List_Id; -- List2
procedure Set_Access_Definition
(N : Node_Id; Val : Node_Id); -- Node3
+ procedure Set_Access_To_Subprogram_Definition
+ (N : Node_Id; Val : Node_Id); -- Node3
+
procedure Set_Access_Types_To_Process
(N : Node_Id; Val : Elist_Id); -- Elist2
procedure Set_Acts_As_Spec
(N : Node_Id; Val : Boolean := True); -- Flag4
+ procedure Set_Actual_Designated_Subtype
+ (N : Node_Id; Val : Node_Id); -- Node4
+
+ procedure Set_Address_Warning_Posted
+ (N : Node_Id; Val : Boolean := True); -- Flag18
+
procedure Set_Aggregate_Bounds
(N : Node_Id; Val : Node_Id); -- Node3
(N : Node_Id; Val : Boolean := True); -- Flag5
procedure Set_Char_Literal_Value
- (N : Node_Id; Val : Char_Code); -- Char_Code2
+ (N : Node_Id; Val : Uint); -- Uint2
procedure Set_Chars
(N : Node_Id; Val : Name_Id); -- Name1
procedure Set_Choice_Parameter
(N : Node_Id; Val : Node_Id); -- Node2
+ procedure Set_Coextensions
+ (N : Node_Id; Val : Elist_Id); -- Elist4
+
procedure Set_Choices
(N : Node_Id; Val : List_Id); -- List1
+ procedure Set_Comes_From_Extended_Return_Statement
+ (N : Node_Id; Val : Boolean := True); -- Flag18
+
procedure Set_Compile_Time_Known_Aggregate
(N : Node_Id; Val : Boolean := True); -- Flag18
procedure Set_Corresponding_Body
(N : Node_Id; Val : Node_Id); -- Node5
+ procedure Set_Corresponding_Formal_Spec
+ (N : Node_Id; Val : Node_Id); -- Node3
+
procedure Set_Corresponding_Generic_Association
(N : Node_Id; Val : Node_Id); -- Node5
procedure Set_Delay_Alternative
(N : Node_Id; Val : Node_Id); -- Node4
- procedure Set_Delay_Finalize_Attach
- (N : Node_Id; Val : Boolean := True); -- Flag14
-
procedure Set_Delay_Statement
(N : Node_Id; Val : Node_Id); -- Node2
procedure Set_Do_Tag_Check
(N : Node_Id; Val : Boolean := True); -- Flag13
+ procedure Set_Elaborate_All_Desirable
+ (N : Node_Id; Val : Boolean := True); -- Flag9
+
procedure Set_Elaborate_All_Present
(N : Node_Id; Val : Boolean := True); -- Flag14
+ procedure Set_Elaborate_Desirable
+ (N : Node_Id; Val : Boolean := True); -- Flag11
+
procedure Set_Elaborate_Present
(N : Node_Id; Val : Boolean := True); -- Flag4
(N : Node_Id; Val : List_Id); -- List5
procedure Set_Exception_Junk
- (N : Node_Id; Val : Boolean := True); -- Flag11
+ (N : Node_Id; Val : Boolean := True); -- Flag8
+
+ procedure Set_Exception_Label
+ (N : Node_Id; Val : Node_Id); -- Node5
procedure Set_Expansion_Delayed
(N : Node_Id; Val : Boolean := True); -- Flag11
procedure Set_From_At_Mod
(N : Node_Id; Val : Boolean := True); -- Flag4
+ procedure Set_From_At_End
+ (N : Node_Id; Val : Boolean := True); -- Flag4
+
procedure Set_From_Default
(N : Node_Id; Val : Boolean := True); -- Flag6
procedure Set_Has_Dynamic_Range_Check
(N : Node_Id; Val : Boolean := True); -- Flag12
+ procedure Set_Has_Init_Expression
+ (N : Node_Id; Val : Boolean := True); -- Flag14
+
+ procedure Set_Has_Local_Raise
+ (N : Node_Id; Val : Boolean := True); -- Flag8
+
procedure Set_Has_No_Elaboration_Code
(N : Node_Id; Val : Boolean := True); -- Flag17
procedure Set_Has_Private_View
(N : Node_Id; Val : Boolean := True); -- Flag11
+ procedure Set_Has_Relative_Deadline_Pragma
+ (N : Node_Id; Val : Boolean := True); -- Flag9
+
+ procedure Set_Has_Self_Reference
+ (N : Node_Id; Val : Boolean := True); -- Flag13
+
procedure Set_Has_Storage_Size_Pragma
(N : Node_Id; Val : Boolean := True); -- Flag5
procedure Set_Identifier
(N : Node_Id; Val : Node_Id); -- Node1
+ procedure Set_Interface_List
+ (N : Node_Id; Val : List_Id); -- List2
+
+ procedure Set_Interface_Present
+ (N : Node_Id; Val : Boolean := True); -- Flag16
+
procedure Set_Implicit_With
(N : Node_Id; Val : Boolean := True); -- Flag16
procedure Set_Is_Controlling_Actual
(N : Node_Id; Val : Boolean := True); -- Flag16
+ procedure Set_Is_Dynamic_Coextension
+ (N : Node_Id; Val : Boolean := True); -- Flag18
+
+ procedure Set_Is_Entry_Barrier_Function
+ (N : Node_Id; Val : Boolean := True); -- Flag8
+
+ procedure Set_Is_Expanded_Build_In_Place_Call
+ (N : Node_Id; Val : Boolean := True); -- Flag11
+
+ procedure Set_Is_Folded_In_Parser
+ (N : Node_Id; Val : Boolean := True); -- Flag4
+
procedure Set_Is_In_Discriminant_Check
(N : Node_Id; Val : Boolean := True); -- Flag11
procedure Set_Is_Protected_Subprogram_Body
(N : Node_Id; Val : Boolean := True); -- Flag7
+ procedure Set_Is_Static_Coextension
+ (N : Node_Id; Val : Boolean := True); -- Flag14
+
procedure Set_Is_Static_Expression
(N : Node_Id; Val : Boolean := True); -- Flag6
procedure Set_Literals
(N : Node_Id; Val : List_Id); -- List1
+ procedure Set_Local_Raise_Not_OK
+ (N : Node_Id; Val : Boolean := True); -- Flag7
+
+ procedure Set_Local_Raise_Statements
+ (N : Node_Id; Val : Elist_Id); -- Elist1
+
procedure Set_Loop_Actions
(N : Node_Id; Val : List_Id); -- List2
procedure Set_Must_Not_Freeze
(N : Node_Id; Val : Boolean := True); -- Flag8
+ procedure Set_Must_Not_Override
+ (N : Node_Id; Val : Boolean := True); -- Flag15
+
+ procedure Set_Must_Override
+ (N : Node_Id; Val : Boolean := True); -- Flag14
+
procedure Set_Name
(N : Node_Id; Val : Node_Id); -- Node2
procedure Set_Next_Named_Actual
(N : Node_Id; Val : Node_Id); -- Node4
+ procedure Set_Next_Pragma
+ (N : Node_Id; Val : Node_Id); -- Node1
+
procedure Set_Next_Rep_Item
- (N : Node_Id; Val : Node_Id); -- Node4
+ (N : Node_Id; Val : Node_Id); -- Node5
procedure Set_Next_Use_Clause
(N : Node_Id; Val : Node_Id); -- Node3
procedure Set_Null_Present
(N : Node_Id; Val : Boolean := True); -- Flag13
+ procedure Set_Null_Exclusion_Present
+ (N : Node_Id; Val : Boolean := True); -- Flag11
+
procedure Set_Null_Record_Present
(N : Node_Id; Val : Boolean := True); -- Flag17
procedure Set_Object_Definition
(N : Node_Id; Val : Node_Id); -- Node4
- procedure Set_OK_For_Stream
- (N : Node_Id; Val : Boolean := True); -- Flag4
-
procedure Set_Original_Discriminant
(N : Node_Id; Val : Node_Id); -- Node2
procedure Set_Parent_Spec
(N : Node_Id; Val : Node_Id); -- Node4
+ procedure Set_PPC_Enabled
+ (N : Node_Id; Val : Boolean := True); -- Flag5
+
procedure Set_Position
(N : Node_Id; Val : Node_Id); -- Node2
procedure Set_Pragma_Argument_Associations
(N : Node_Id; Val : List_Id); -- List2
+ procedure Set_Pragma_Identifier
+ (N : Node_Id; Val : Node_Id); -- Node4
+
procedure Set_Pragmas_After
(N : Node_Id; Val : List_Id); -- List5
(N : Node_Id; Val : Boolean := True); -- Flag15
procedure Set_Procedure_To_Call
- (N : Node_Id; Val : Node_Id); -- Node4
+ (N : Node_Id; Val : Node_Id); -- Node2
procedure Set_Proper_Body
(N : Node_Id; Val : Node_Id); -- Node1
(N : Node_Id; Val : Node_Id); -- Node3
procedure Set_Protected_Present
- (N : Node_Id; Val : Boolean := True); -- Flag15
+ (N : Node_Id; Val : Boolean := True); -- Flag6
procedure Set_Raises_Constraint_Error
(N : Node_Id; Val : Boolean := True); -- Flag7
procedure Set_Redundant_Use
(N : Node_Id; Val : Boolean := True); -- Flag13
- procedure Set_Return_Type
+ procedure Set_Renaming_Exception
(N : Node_Id; Val : Node_Id); -- Node2
+ procedure Set_Result_Definition
+ (N : Node_Id; Val : Node_Id); -- Node4
+
+ procedure Set_Return_Object_Declarations
+ (N : Node_Id; Val : List_Id); -- List3
+
+ procedure Set_Return_Statement_Entity
+ (N : Node_Id; Val : Node_Id); -- Node5
+
procedure Set_Reverse_Present
(N : Node_Id; Val : Boolean := True); -- Flag15
procedure Set_Subtype_Marks
(N : Node_Id; Val : List_Id); -- List2
+ procedure Set_Synchronized_Present
+ (N : Node_Id; Val : Boolean := True); -- Flag7
+
procedure Set_Tagged_Present
(N : Node_Id; Val : Boolean := True); -- Flag15
procedure Set_Target_Type
(N : Node_Id; Val : Entity_Id); -- Node2
- procedure Set_Task_Body_Procedure
- (N : Node_Id; Val : Entity_Id); -- Node2
-
procedure Set_Task_Definition
(N : Node_Id; Val : Node_Id); -- Node3
+ procedure Set_Task_Present
+ (N : Node_Id; Val : Boolean := True); -- Flag5
+
procedure Set_Then_Actions
(N : Node_Id; Val : List_Id); -- List2
-- other words, End_Span is set to the difference between S and
-- Sloc (N), the starting location.
+ --------------------------------
+ -- Node_Kind Membership Tests --
+ --------------------------------
+
+ -- The following functions allow a convenient notation for testing whether
+ -- a Node_Kind value matches any one of a list of possible values. In each
+ -- case True is returned if the given T argument is equal to any of the V
+ -- arguments. Note that there is a similar set of functions defined in
+ -- Atree where the first argument is a Node_Id whose Nkind field is tested.
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind) return Boolean;
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind;
+ V3 : Node_Kind) return Boolean;
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind;
+ V3 : Node_Kind;
+ V4 : Node_Kind) return Boolean;
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind;
+ V3 : Node_Kind;
+ V4 : Node_Kind;
+ V5 : Node_Kind) return Boolean;
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind;
+ V3 : Node_Kind;
+ V4 : Node_Kind;
+ V5 : Node_Kind;
+ V6 : Node_Kind) return Boolean;
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind;
+ V3 : Node_Kind;
+ V4 : Node_Kind;
+ V5 : Node_Kind;
+ V6 : Node_Kind;
+ V7 : Node_Kind) return Boolean;
+
+ function Nkind_In
+ (T : Node_Kind;
+ V1 : Node_Kind;
+ V2 : Node_Kind;
+ V3 : Node_Kind;
+ V4 : Node_Kind;
+ V5 : Node_Kind;
+ V6 : Node_Kind;
+ V7 : Node_Kind;
+ V8 : Node_Kind) return Boolean;
+
+ pragma Inline (Nkind_In);
+ -- Inline all above functions
+
+ -----------------------
+ -- Utility Functions --
+ -----------------------
+
+ function Pragma_Name (N : Node_Id) return Name_Id;
+ pragma Inline (Pragma_Name);
+ -- Convenient function to obtain Chars field of Pragma_Identifier
+
+ -----------------------------
+ -- Syntactic Parent Tables --
+ -----------------------------
+
+ -- These tables show for each node, and for each of the five fields,
+ -- whether the corresponding field is syntactic (True) or semantic (False).
+ -- Unused entries are also set to False.
+
+ subtype Field_Num is Natural range 1 .. 5;
+
+ Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := (
+
+ -- Following entries can be built automatically from the sinfo sources
+ -- using the makeisf utility (currently this program is in spitbol).
+
+ N_Identifier =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- Original_Discriminant (Node2-Sem)
+ 3 => False, -- unused
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Integer_Literal =>
+ (1 => False, -- unused
+ 2 => False, -- Original_Entity (Node2-Sem)
+ 3 => True, -- Intval (Uint3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Real_Literal =>
+ (1 => False, -- unused
+ 2 => False, -- Original_Entity (Node2-Sem)
+ 3 => True, -- Realval (Ureal3)
+ 4 => False, -- Corresponding_Integer_Value (Uint4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Character_Literal =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Char_Literal_Value (Uint2)
+ 3 => False, -- unused
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_String_Literal =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Strval (Str3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Pragma =>
+ (1 => False, -- Next_Pragma (Node1-Sem)
+ 2 => True, -- Pragma_Argument_Associations (List2)
+ 3 => True, -- Debug_Statement (Node3)
+ 4 => True, -- Pragma_Identifier (Node4)
+ 5 => False), -- Next_Rep_Item (Node5-Sem)
+
+ N_Pragma_Argument_Association =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Defining_Identifier =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- Next_Entity (Node2-Sem)
+ 3 => False, -- Scope (Node3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Full_Type_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Type_Definition (Node3)
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => False), -- unused
+
+ N_Subtype_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- Generic_Parent_Type (Node4-Sem)
+ 5 => True), -- Subtype_Indication (Node5)
+
+ N_Subtype_Indication =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Constraint (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Object_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- Handler_List_Entry (Node2-Sem)
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Object_Definition (Node4)
+ 5 => False), -- Corresponding_Generic_Association (Node5-Sem)
+
+ N_Number_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Derived_Type_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Interface_List (List2)
+ 3 => True, -- Record_Extension_Part (Node3)
+ 4 => False, -- unused
+ 5 => True), -- Subtype_Indication (Node5)
+
+ N_Range_Constraint =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Range_Expression (Node4)
+ 5 => False), -- unused
+
+ N_Range =>
+ (1 => True, -- Low_Bound (Node1)
+ 2 => True, -- High_Bound (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Enumeration_Type_Definition =>
+ (1 => True, -- Literals (List1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- unused
+
+ N_Defining_Character_Literal =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- Next_Entity (Node2-Sem)
+ 3 => False, -- Scope (Node3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Signed_Integer_Type_Definition =>
+ (1 => True, -- Low_Bound (Node1)
+ 2 => True, -- High_Bound (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Modular_Type_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Floating_Point_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Digits_Expression (Node2)
+ 3 => False, -- unused
+ 4 => True, -- Real_Range_Specification (Node4)
+ 5 => False), -- unused
+
+ N_Real_Range_Specification =>
+ (1 => True, -- Low_Bound (Node1)
+ 2 => True, -- High_Bound (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Ordinary_Fixed_Point_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Delta_Expression (Node3)
+ 4 => True, -- Real_Range_Specification (Node4)
+ 5 => False), -- unused
+
+ N_Decimal_Fixed_Point_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Digits_Expression (Node2)
+ 3 => True, -- Delta_Expression (Node3)
+ 4 => True, -- Real_Range_Specification (Node4)
+ 5 => False), -- unused
+
+ N_Digits_Constraint =>
+ (1 => False, -- unused
+ 2 => True, -- Digits_Expression (Node2)
+ 3 => False, -- unused
+ 4 => True, -- Range_Constraint (Node4)
+ 5 => False), -- unused
+
+ N_Unconstrained_Array_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Subtype_Marks (List2)
+ 3 => False, -- unused
+ 4 => True, -- Component_Definition (Node4)
+ 5 => False), -- unused
+
+ N_Constrained_Array_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Discrete_Subtype_Definitions (List2)
+ 3 => False, -- unused
+ 4 => True, -- Component_Definition (Node4)
+ 5 => False), -- unused
+
+ N_Component_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Access_Definition (Node3)
+ 4 => False, -- unused
+ 5 => True), -- Subtype_Indication (Node5)
+
+ N_Discriminant_Specification =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => True), -- Discriminant_Type (Node5)
+
+ N_Index_Or_Discriminant_Constraint =>
+ (1 => True, -- Constraints (List1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Discriminant_Association =>
+ (1 => True, -- Selector_Names (List1)
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Record_Definition =>
+ (1 => True, -- Component_List (Node1)
+ 2 => True, -- Interface_List (List2)
+ 3 => False, -- unused
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- unused
+
+ N_Component_List =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Component_Items (List3)
+ 4 => True, -- Variant_Part (Node4)
+ 5 => False), -- unused
+
+ N_Component_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Component_Definition (Node4)
+ 5 => False), -- unused
+
+ N_Variant_Part =>
+ (1 => True, -- Variants (List1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Variant =>
+ (1 => True, -- Component_List (Node1)
+ 2 => False, -- Enclosing_Variant (Node2-Sem)
+ 3 => False, -- Present_Expr (Uint3-Sem)
+ 4 => True, -- Discrete_Choices (List4)
+ 5 => False), -- Dcheck_Function (Node5-Sem)
+
+ N_Others_Choice =>
+ (1 => False, -- Others_Discrete_Choices (List1-Sem)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Access_To_Object_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => True), -- Subtype_Indication (Node5)
+
+ N_Access_Function_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => True, -- Result_Definition (Node4)
+ 5 => False), -- unused
+
+ N_Access_Procedure_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Access_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Access_To_Subprogram_Definition (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- unused
+
+ N_Incomplete_Type_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => False), -- unused
+
+ N_Explicit_Dereference =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Prefix (Node3)
+ 4 => False, -- Actual_Designated_Subtype (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Indexed_Component =>
+ (1 => True, -- Expressions (List1)
+ 2 => False, -- unused
+ 3 => True, -- Prefix (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Slice =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Prefix (Node3)
+ 4 => True, -- Discrete_Range (Node4)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Selected_Component =>
+ (1 => False, -- unused
+ 2 => True, -- Selector_Name (Node2)
+ 3 => True, -- Prefix (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Attribute_Reference =>
+ (1 => True, -- Expressions (List1)
+ 2 => True, -- Attribute_Name (Name2)
+ 3 => True, -- Prefix (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Aggregate =>
+ (1 => True, -- Expressions (List1)
+ 2 => True, -- Component_Associations (List2)
+ 3 => False, -- Aggregate_Bounds (Node3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Component_Association =>
+ (1 => True, -- Choices (List1)
+ 2 => False, -- Loop_Actions (List2-Sem)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Extension_Aggregate =>
+ (1 => True, -- Expressions (List1)
+ 2 => True, -- Component_Associations (List2)
+ 3 => True, -- Ancestor_Part (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Null =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_And_Then =>
+ (1 => False, -- Actions (List1-Sem)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Or_Else =>
+ (1 => False, -- Actions (List1-Sem)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_In =>
+ (1 => False, -- unused
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Not_In =>
+ (1 => False, -- unused
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_And =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Or =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Xor =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Eq =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Ne =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Lt =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Le =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Gt =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Ge =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Add =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Subtract =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Concat =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Multiply =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Divide =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Mod =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Rem =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Expon =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Plus =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- unused
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Minus =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- unused
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Abs =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- unused
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Not =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- unused
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Type_Conversion =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Qualified_Expression =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Allocator =>
+ (1 => False, -- Storage_Pool (Node1-Sem)
+ 2 => False, -- Procedure_To_Call (Node2-Sem)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- Coextensions (Elist4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Null_Statement =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Label =>
+ (1 => True, -- Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Assignment_Statement =>
+ (1 => False, -- unused
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_If_Statement =>
+ (1 => True, -- Condition (Node1)
+ 2 => True, -- Then_Statements (List2)
+ 3 => True, -- Elsif_Parts (List3)
+ 4 => True, -- Else_Statements (List4)
+ 5 => True), -- End_Span (Uint5)
+
+ N_Elsif_Part =>
+ (1 => True, -- Condition (Node1)
+ 2 => True, -- Then_Statements (List2)
+ 3 => False, -- Condition_Actions (List3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Case_Statement =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Alternatives (List4)
+ 5 => True), -- End_Span (Uint5)
+
+ N_Case_Statement_Alternative =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Statements (List3)
+ 4 => True, -- Discrete_Choices (List4)
+ 5 => False), -- unused
+
+ N_Loop_Statement =>
+ (1 => True, -- Identifier (Node1)
+ 2 => True, -- Iteration_Scheme (Node2)
+ 3 => True, -- Statements (List3)
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- unused
+
+ N_Iteration_Scheme =>
+ (1 => True, -- Condition (Node1)
+ 2 => False, -- unused
+ 3 => False, -- Condition_Actions (List3-Sem)
+ 4 => True, -- Loop_Parameter_Specification (Node4)
+ 5 => False), -- unused
+
+ N_Loop_Parameter_Specification =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Discrete_Subtype_Definition (Node4)
+ 5 => False), -- unused
+
+ N_Block_Statement =>
+ (1 => True, -- Identifier (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- Activation_Chain_Entity (Node3-Sem)
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => False), -- unused
+
+ N_Exit_Statement =>
+ (1 => True, -- Condition (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Goto_Statement =>
+ (1 => False, -- unused
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Subprogram_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => False, -- unused
+ 3 => False, -- Body_To_Inline (Node3-Sem)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Abstract_Subprogram_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Function_Specification =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => False, -- Elaboration_Boolean (Node2-Sem)
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => True, -- Result_Definition (Node4)
+ 5 => False), -- Generic_Parent (Node5-Sem)
+
+ N_Procedure_Specification =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => False, -- Elaboration_Boolean (Node2-Sem)
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => False, -- unused
+ 5 => False), -- Generic_Parent (Node5-Sem)
+
+ N_Designator =>
+ (1 => True, -- Identifier (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Defining_Program_Unit_Name =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Operator_Symbol =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- unused
+ 3 => True, -- Strval (Str3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Defining_Operator_Symbol =>
+ (1 => True, -- Chars (Name1)
+ 2 => False, -- Next_Entity (Node2-Sem)
+ 3 => False, -- Scope (Node3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Parameter_Specification =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Parameter_Type (Node2)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Default_Expression (Node5-Sem)
+
+ N_Subprogram_Body =>
+ (1 => True, -- Specification (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- Activation_Chain_Entity (Node3-Sem)
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => False), -- Corresponding_Spec (Node5-Sem)
+
+ N_Procedure_Call_Statement =>
+ (1 => False, -- Controlling_Argument (Node1-Sem)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Parameter_Associations (List3)
+ 4 => False, -- First_Named_Actual (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Function_Call =>
+ (1 => False, -- Controlling_Argument (Node1-Sem)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Parameter_Associations (List3)
+ 4 => False, -- First_Named_Actual (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Parameter_Association =>
+ (1 => False, -- unused
+ 2 => True, -- Selector_Name (Node2)
+ 3 => True, -- Explicit_Actual_Parameter (Node3)
+ 4 => False, -- Next_Named_Actual (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Return_Statement =>
+ (1 => False, -- Storage_Pool (Node1-Sem)
+ 2 => False, -- Procedure_To_Call (Node2-Sem)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Return_Statement_Entity (Node5-Sem)
+
+ N_Extended_Return_Statement =>
+ (1 => False, -- Storage_Pool (Node1-Sem)
+ 2 => False, -- Procedure_To_Call (Node2-Sem)
+ 3 => True, -- Return_Object_Declarations (List3)
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => False), -- Return_Statement_Entity (Node5-Sem)
+
+ N_Package_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => False, -- unused
+ 3 => False, -- Activation_Chain_Entity (Node3-Sem)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Package_Specification =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Visible_Declarations (List2)
+ 3 => True, -- Private_Declarations (List3)
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- Generic_Parent (Node5-Sem)
+
+ N_Package_Body =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- unused
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => False), -- Corresponding_Spec (Node5-Sem)
+
+ N_Private_Type_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => False), -- unused
+
+ N_Private_Extension_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Interface_List (List2)
+ 3 => False, -- unused
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => True), -- Subtype_Indication (Node5)
+
+ N_Use_Package_Clause =>
+ (1 => False, -- unused
+ 2 => True, -- Names (List2)
+ 3 => False, -- Next_Use_Clause (Node3-Sem)
+ 4 => False, -- Hidden_By_Use_Clause (Elist4-Sem)
+ 5 => False), -- unused
+
+ N_Use_Type_Clause =>
+ (1 => False, -- unused
+ 2 => True, -- Subtype_Marks (List2)
+ 3 => False, -- Next_Use_Clause (Node3-Sem)
+ 4 => False, -- Hidden_By_Use_Clause (Elist4-Sem)
+ 5 => False), -- unused
+
+ N_Object_Renaming_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Access_Definition (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- Corresponding_Generic_Association (Node5-Sem)
+
+ N_Exception_Renaming_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Package_Renaming_Declaration =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Subprogram_Renaming_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- Corresponding_Formal_Spec (Node3-Sem)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Corresponding_Spec (Node5-Sem)
+
+ N_Generic_Package_Renaming_Declaration =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Generic_Procedure_Renaming_Declaration =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Generic_Function_Renaming_Declaration =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Task_Type_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Interface_List (List2)
+ 3 => True, -- Task_Definition (Node3)
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Single_Task_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Interface_List (List2)
+ 3 => True, -- Task_Definition (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Task_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Visible_Declarations (List2)
+ 3 => True, -- Private_Declarations (List3)
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- unused
+
+ N_Task_Body =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- Activation_Chain_Entity (Node3-Sem)
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => False), -- Corresponding_Spec (Node5-Sem)
+
+ N_Protected_Type_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Interface_List (List2)
+ 3 => True, -- Protected_Definition (Node3)
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Single_Protected_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Interface_List (List2)
+ 3 => True, -- Protected_Definition (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Protected_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Visible_Declarations (List2)
+ 3 => True, -- Private_Declarations (List3)
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- unused
+
+ N_Protected_Body =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- unused
+ 4 => True, -- End_Label (Node4)
+ 5 => False), -- Corresponding_Spec (Node5-Sem)
+
+ N_Entry_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => True, -- Discrete_Subtype_Definition (Node4)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Accept_Statement =>
+ (1 => True, -- Entry_Direct_Name (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => True), -- Entry_Index (Node5)
+
+ N_Entry_Body =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- Activation_Chain_Entity (Node3-Sem)
+ 4 => True, -- Handled_Statement_Sequence (Node4)
+ 5 => True), -- Entry_Body_Formal_Part (Node5)
+
+ N_Entry_Body_Formal_Part =>
+ (1 => True, -- Condition (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Parameter_Specifications (List3)
+ 4 => True, -- Entry_Index_Specification (Node4)
+ 5 => False), -- unused
+
+ N_Entry_Index_Specification =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Discrete_Subtype_Definition (Node4)
+ 5 => False), -- unused
+
+ N_Entry_Call_Statement =>
+ (1 => False, -- unused
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Parameter_Associations (List3)
+ 4 => False, -- First_Named_Actual (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Requeue_Statement =>
+ (1 => False, -- unused
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Delay_Until_Statement =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Delay_Relative_Statement =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Selective_Accept =>
+ (1 => True, -- Select_Alternatives (List1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Else_Statements (List4)
+ 5 => False), -- unused
+
+ N_Accept_Alternative =>
+ (1 => True, -- Condition (Node1)
+ 2 => True, -- Accept_Statement (Node2)
+ 3 => True, -- Statements (List3)
+ 4 => True, -- Pragmas_Before (List4)
+ 5 => False), -- Accept_Handler_Records (List5-Sem)
+
+ N_Delay_Alternative =>
+ (1 => True, -- Condition (Node1)
+ 2 => True, -- Delay_Statement (Node2)
+ 3 => True, -- Statements (List3)
+ 4 => True, -- Pragmas_Before (List4)
+ 5 => False), -- unused
+
+ N_Terminate_Alternative =>
+ (1 => True, -- Condition (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Pragmas_Before (List4)
+ 5 => True), -- Pragmas_After (List5)
+
+ N_Timed_Entry_Call =>
+ (1 => True, -- Entry_Call_Alternative (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Delay_Alternative (Node4)
+ 5 => False), -- unused
+
+ N_Entry_Call_Alternative =>
+ (1 => True, -- Entry_Call_Statement (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Statements (List3)
+ 4 => True, -- Pragmas_Before (List4)
+ 5 => False), -- unused
+
+ N_Conditional_Entry_Call =>
+ (1 => True, -- Entry_Call_Alternative (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => True, -- Else_Statements (List4)
+ 5 => False), -- unused
+
+ N_Asynchronous_Select =>
+ (1 => True, -- Triggering_Alternative (Node1)
+ 2 => True, -- Abortable_Part (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Triggering_Alternative =>
+ (1 => True, -- Triggering_Statement (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Statements (List3)
+ 4 => True, -- Pragmas_Before (List4)
+ 5 => False), -- unused
+
+ N_Abortable_Part =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Statements (List3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Abort_Statement =>
+ (1 => False, -- unused
+ 2 => True, -- Names (List2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Compilation_Unit =>
+ (1 => True, -- Context_Items (List1)
+ 2 => True, -- Unit (Node2)
+ 3 => False, -- First_Inlined_Subprogram (Node3-Sem)
+ 4 => False, -- Library_Unit (Node4-Sem)
+ 5 => True), -- Aux_Decls_Node (Node5)
+
+ N_Compilation_Unit_Aux =>
+ (1 => True, -- Actions (List1)
+ 2 => True, -- Declarations (List2)
+ 3 => False, -- unused
+ 4 => True, -- Config_Pragmas (List4)
+ 5 => True), -- Pragmas_After (List5)
+
+ N_With_Clause =>
+ (1 => False, -- unused
+ 2 => True, -- Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- Library_Unit (Node4-Sem)
+ 5 => False), -- Corresponding_Spec (Node5-Sem)
+
+ N_Subprogram_Body_Stub =>
+ (1 => True, -- Specification (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- Library_Unit (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Package_Body_Stub =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- Library_Unit (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Task_Body_Stub =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- Library_Unit (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Protected_Body_Stub =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- Library_Unit (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Subunit =>
+ (1 => True, -- Proper_Body (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => False, -- Corresponding_Stub (Node3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Exception_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- Expression (Node3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Handled_Sequence_Of_Statements =>
+ (1 => True, -- At_End_Proc (Node1)
+ 2 => False, -- First_Real_Statement (Node2-Sem)
+ 3 => True, -- Statements (List3)
+ 4 => True, -- End_Label (Node4)
+ 5 => True), -- Exception_Handlers (List5)
+
+ N_Exception_Handler =>
+ (1 => False, -- Local_Raise_Statements (Elist1)
+ 2 => True, -- Choice_Parameter (Node2)
+ 3 => True, -- Statements (List3)
+ 4 => True, -- Exception_Choices (List4)
+ 5 => False), -- Exception_Label (Node5)
+
+ N_Raise_Statement =>
+ (1 => False, -- unused
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Generic_Subprogram_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => True, -- Generic_Formal_Declarations (List2)
+ 3 => False, -- unused
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Generic_Package_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => True, -- Generic_Formal_Declarations (List2)
+ 3 => False, -- Activation_Chain_Entity (Node3-Sem)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Corresponding_Body (Node5-Sem)
+
+ N_Package_Instantiation =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Generic_Associations (List3)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Instance_Spec (Node5-Sem)
+
+ N_Procedure_Instantiation =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Generic_Associations (List3)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Instance_Spec (Node5-Sem)
+
+ N_Function_Instantiation =>
+ (1 => True, -- Defining_Unit_Name (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Generic_Associations (List3)
+ 4 => False, -- Parent_Spec (Node4-Sem)
+ 5 => False), -- Instance_Spec (Node5-Sem)
+
+ N_Generic_Association =>
+ (1 => True, -- Explicit_Generic_Actual_Parameter (Node1)
+ 2 => True, -- Selector_Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Object_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Access_Definition (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => True), -- Default_Expression (Node5)
+
+ N_Formal_Type_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Formal_Type_Definition (Node3)
+ 4 => True, -- Discriminant_Specifications (List4)
+ 5 => False), -- unused
+
+ N_Formal_Private_Type_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Derived_Type_Definition =>
+ (1 => False, -- unused
+ 2 => True, -- Interface_List (List2)
+ 3 => False, -- unused
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- unused
+
+ N_Formal_Discrete_Type_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Signed_Integer_Type_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Modular_Type_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Floating_Point_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Ordinary_Fixed_Point_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Decimal_Fixed_Point_Definition =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Concrete_Subprogram_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => True, -- Default_Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Abstract_Subprogram_Declaration =>
+ (1 => True, -- Specification (Node1)
+ 2 => True, -- Default_Name (Node2)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Formal_Package_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Generic_Associations (List3)
+ 4 => False, -- unused
+ 5 => False), -- Instance_Spec (Node5-Sem)
+
+ N_Attribute_Definition_Clause =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Name (Node2)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Next_Rep_Item (Node5-Sem)
+
+ N_Enumeration_Representation_Clause =>
+ (1 => True, -- Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Array_Aggregate (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Next_Rep_Item (Node5-Sem)
+
+ N_Record_Representation_Clause =>
+ (1 => True, -- Identifier (Node1)
+ 2 => True, -- Mod_Clause (Node2)
+ 3 => True, -- Component_Clauses (List3)
+ 4 => False, -- unused
+ 5 => False), -- Next_Rep_Item (Node5-Sem)
+
+ N_Component_Clause =>
+ (1 => True, -- Component_Name (Node1)
+ 2 => True, -- Position (Node2)
+ 3 => True, -- First_Bit (Node3)
+ 4 => True, -- Last_Bit (Node4)
+ 5 => False), -- unused
+
+ N_Code_Statement =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Op_Rotate_Left =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Rotate_Right =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Shift_Left =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Shift_Right_Arithmetic =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Op_Shift_Right =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Left_Opnd (Node2)
+ 3 => True, -- Right_Opnd (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Delta_Constraint =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Delta_Expression (Node3)
+ 4 => True, -- Range_Constraint (Node4)
+ 5 => False), -- unused
+
+ N_At_Clause =>
+ (1 => True, -- Identifier (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Mod_Clause =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Pragmas_Before (List4)
+ 5 => False), -- unused
+
+ N_Conditional_Expression =>
+ (1 => True, -- Expressions (List1)
+ 2 => False, -- Then_Actions (List2-Sem)
+ 3 => False, -- Else_Actions (List3-Sem)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Expanded_Name =>
+ (1 => True, -- Chars (Name1)
+ 2 => True, -- Selector_Name (Node2)
+ 3 => True, -- Prefix (Node3)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Free_Statement =>
+ (1 => False, -- Storage_Pool (Node1-Sem)
+ 2 => False, -- Procedure_To_Call (Node2-Sem)
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- Actual_Designated_Subtype (Node4-Sem)
+ 5 => False), -- unused
+
+ N_Freeze_Entity =>
+ (1 => True, -- Actions (List1)
+ 2 => False, -- Access_Types_To_Process (Elist2-Sem)
+ 3 => False, -- TSS_Elist (Elist3-Sem)
+ 4 => False, -- Entity (Node4-Sem)
+ 5 => False), -- First_Subtype_Link (Node5-Sem)
+
+ N_Implicit_Label_Declaration =>
+ (1 => True, -- Defining_Identifier (Node1)
+ 2 => False, -- Label_Construct (Node2-Sem)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Itype_Reference =>
+ (1 => False, -- Itype (Node1-Sem)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Raise_Constraint_Error =>
+ (1 => True, -- Condition (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Reason (Uint3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Raise_Program_Error =>
+ (1 => True, -- Condition (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Reason (Uint3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Raise_Storage_Error =>
+ (1 => True, -- Condition (Node1)
+ 2 => False, -- unused
+ 3 => True, -- Reason (Uint3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Push_Constraint_Error_Label =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Push_Program_Error_Label =>
+ (1 => False, -- Exception_Label
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- Exception_Label
+
+ N_Push_Storage_Error_Label =>
+ (1 => False, -- Exception_Label
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- Exception_Label
+
+ N_Pop_Constraint_Error_Label =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Pop_Program_Error_Label =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Pop_Storage_Error_Label =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Reference =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Prefix (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Subprogram_Info =>
+ (1 => True, -- Identifier (Node1)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Unchecked_Expression =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => False, -- unused
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Unchecked_Type_Conversion =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => True, -- Expression (Node3)
+ 4 => True, -- Subtype_Mark (Node4)
+ 5 => False), -- Etype (Node5-Sem)
+
+ N_Validate_Unchecked_Conversion =>
+ (1 => False, -- Source_Type (Node1-Sem)
+ 2 => False, -- Target_Type (Node2-Sem)
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ -- End of inserted output from makeisf program
+
+ -- Entries for Empty, Error and Unused. Even thought these have a Chars
+ -- field for debugging purposes, they are not really syntactic fields, so
+ -- we mark all fields as unused.
+
+ N_Empty =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Error =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Unused_At_Start =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False), -- unused
+
+ N_Unused_At_End =>
+ (1 => False, -- unused
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- unused
+ 5 => False)); -- unused
+
--------------------
-- Inline Pragmas --
--------------------
pragma Inline (Accept_Handler_Records);
pragma Inline (Accept_Statement);
pragma Inline (Access_Definition);
+ pragma Inline (Access_To_Subprogram_Definition);
pragma Inline (Access_Types_To_Process);
pragma Inline (Actions);
pragma Inline (Activation_Chain_Entity);
pragma Inline (Acts_As_Spec);
+ pragma Inline (Actual_Designated_Subtype);
+ pragma Inline (Address_Warning_Posted);
pragma Inline (Aggregate_Bounds);
pragma Inline (Aliased_Present);
pragma Inline (All_Others);
pragma Inline (Check_Address_Alignment);
pragma Inline (Choice_Parameter);
pragma Inline (Choices);
+ pragma Inline (Coextensions);
+ pragma Inline (Comes_From_Extended_Return_Statement);
pragma Inline (Compile_Time_Known_Aggregate);
pragma Inline (Component_Associations);
pragma Inline (Component_Clauses);
pragma Inline (Controlling_Argument);
pragma Inline (Conversion_OK);
pragma Inline (Corresponding_Body);
+ pragma Inline (Corresponding_Formal_Spec);
pragma Inline (Corresponding_Generic_Association);
pragma Inline (Corresponding_Integer_Value);
pragma Inline (Corresponding_Spec);
pragma Inline (Defining_Identifier);
pragma Inline (Defining_Unit_Name);
pragma Inline (Delay_Alternative);
- pragma Inline (Delay_Finalize_Attach);
pragma Inline (Delay_Statement);
pragma Inline (Delta_Expression);
pragma Inline (Digits_Expression);
pragma Inline (Do_Storage_Check);
pragma Inline (Do_Tag_Check);
pragma Inline (Elaborate_Present);
+ pragma Inline (Elaborate_All_Desirable);
pragma Inline (Elaborate_All_Present);
+ pragma Inline (Elaborate_Desirable);
pragma Inline (Elaboration_Boolean);
pragma Inline (Else_Actions);
pragma Inline (Else_Statements);
pragma Inline (Entry_Index_Specification);
pragma Inline (Etype);
pragma Inline (Exception_Choices);
- pragma Inline (Exception_Junk);
pragma Inline (Exception_Handlers);
+ pragma Inline (Exception_Junk);
+ pragma Inline (Exception_Label);
pragma Inline (Expansion_Delayed);
pragma Inline (Explicit_Actual_Parameter);
pragma Inline (Explicit_Generic_Actual_Parameter);
pragma Inline (Float_Truncate);
pragma Inline (Formal_Type_Definition);
pragma Inline (Forwards_OK);
+ pragma Inline (From_At_End);
pragma Inline (From_At_Mod);
pragma Inline (From_Default);
pragma Inline (Generic_Associations);
pragma Inline (Has_Created_Identifier);
pragma Inline (Has_Dynamic_Length_Check);
pragma Inline (Has_Dynamic_Range_Check);
+ pragma Inline (Has_Init_Expression);
+ pragma Inline (Has_Local_Raise);
+ pragma Inline (Has_Self_Reference);
pragma Inline (Has_No_Elaboration_Code);
pragma Inline (Has_Priority_Pragma);
pragma Inline (Has_Private_View);
+ pragma Inline (Has_Relative_Deadline_Pragma);
pragma Inline (Has_Storage_Size_Pragma);
pragma Inline (Has_Task_Info_Pragma);
pragma Inline (Has_Task_Name_Pragma);
pragma Inline (High_Bound);
pragma Inline (Identifier);
pragma Inline (Implicit_With);
+ pragma Inline (Interface_List);
+ pragma Inline (Interface_Present);
pragma Inline (Includes_Infinities);
pragma Inline (In_Present);
pragma Inline (Instance_Spec);
pragma Inline (Is_Component_Left_Opnd);
pragma Inline (Is_Component_Right_Opnd);
pragma Inline (Is_Controlling_Actual);
+ pragma Inline (Is_Dynamic_Coextension);
+ pragma Inline (Is_Entry_Barrier_Function);
+ pragma Inline (Is_Expanded_Build_In_Place_Call);
+ pragma Inline (Is_Folded_In_Parser);
pragma Inline (Is_In_Discriminant_Check);
pragma Inline (Is_Machine_Number);
pragma Inline (Is_Null_Loop);
pragma Inline (Is_Overloaded);
pragma Inline (Is_Power_Of_2_For_Shift);
pragma Inline (Is_Protected_Subprogram_Body);
+ pragma Inline (Is_Static_Coextension);
pragma Inline (Is_Static_Expression);
pragma Inline (Is_Subprogram_Descriptor);
pragma Inline (Is_Task_Allocation_Block);
pragma Inline (Limited_View_Installed);
pragma Inline (Limited_Present);
pragma Inline (Literals);
+ pragma Inline (Local_Raise_Not_OK);
+ pragma Inline (Local_Raise_Statements);
pragma Inline (Loop_Actions);
pragma Inline (Loop_Parameter_Specification);
pragma Inline (Low_Bound);
pragma Inline (More_Ids);
pragma Inline (Must_Be_Byte_Aligned);
pragma Inline (Must_Not_Freeze);
+ pragma Inline (Must_Not_Override);
+ pragma Inline (Must_Override);
pragma Inline (Name);
pragma Inline (Names);
pragma Inline (Next_Entity);
pragma Inline (Next_Named_Actual);
+ pragma Inline (Next_Pragma);
pragma Inline (Next_Rep_Item);
pragma Inline (Next_Use_Clause);
pragma Inline (No_Ctrl_Actions);
pragma Inline (No_Initialization);
pragma Inline (No_Truncation);
pragma Inline (Null_Present);
+ pragma Inline (Null_Exclusion_Present);
pragma Inline (Null_Record_Present);
pragma Inline (Object_Definition);
- pragma Inline (OK_For_Stream);
pragma Inline (Original_Discriminant);
pragma Inline (Original_Entity);
pragma Inline (Others_Discrete_Choices);
pragma Inline (Parameter_List_Truncated);
pragma Inline (Parameter_Type);
pragma Inline (Parent_Spec);
+ pragma Inline (PPC_Enabled);
pragma Inline (Position);
pragma Inline (Pragma_Argument_Associations);
+ pragma Inline (Pragma_Identifier);
pragma Inline (Pragmas_After);
pragma Inline (Pragmas_Before);
pragma Inline (Prefix);
pragma Inline (Reason);
pragma Inline (Record_Extension_Part);
pragma Inline (Redundant_Use);
- pragma Inline (Return_Type);
+ pragma Inline (Renaming_Exception);
+ pragma Inline (Result_Definition);
+ pragma Inline (Return_Object_Declarations);
+ pragma Inline (Return_Statement_Entity);
pragma Inline (Reverse_Present);
pragma Inline (Right_Opnd);
pragma Inline (Rounded_Result);
pragma Inline (Subtype_Indication);
pragma Inline (Subtype_Mark);
pragma Inline (Subtype_Marks);
+ pragma Inline (Synchronized_Present);
pragma Inline (Tagged_Present);
pragma Inline (Target_Type);
- pragma Inline (Task_Body_Procedure);
pragma Inline (Task_Definition);
+ pragma Inline (Task_Present);
pragma Inline (Then_Actions);
pragma Inline (Then_Statements);
pragma Inline (Triggering_Alternative);
pragma Inline (Set_Accept_Handler_Records);
pragma Inline (Set_Accept_Statement);
pragma Inline (Set_Access_Definition);
+ pragma Inline (Set_Access_To_Subprogram_Definition);
pragma Inline (Set_Access_Types_To_Process);
pragma Inline (Set_Actions);
pragma Inline (Set_Activation_Chain_Entity);
pragma Inline (Set_Acts_As_Spec);
+ pragma Inline (Set_Actual_Designated_Subtype);
+ pragma Inline (Set_Address_Warning_Posted);
pragma Inline (Set_Aggregate_Bounds);
pragma Inline (Set_Aliased_Present);
pragma Inline (Set_All_Others);
pragma Inline (Set_Check_Address_Alignment);
pragma Inline (Set_Choice_Parameter);
pragma Inline (Set_Choices);
+ pragma Inline (Set_Coextensions);
+ pragma Inline (Set_Comes_From_Extended_Return_Statement);
pragma Inline (Set_Compile_Time_Known_Aggregate);
pragma Inline (Set_Component_Associations);
pragma Inline (Set_Component_Clauses);
pragma Inline (Set_Controlling_Argument);
pragma Inline (Set_Conversion_OK);
pragma Inline (Set_Corresponding_Body);
+ pragma Inline (Set_Corresponding_Formal_Spec);
pragma Inline (Set_Corresponding_Generic_Association);
pragma Inline (Set_Corresponding_Integer_Value);
pragma Inline (Set_Corresponding_Spec);
pragma Inline (Set_Defining_Identifier);
pragma Inline (Set_Defining_Unit_Name);
pragma Inline (Set_Delay_Alternative);
- pragma Inline (Set_Delay_Finalize_Attach);
pragma Inline (Set_Delay_Statement);
pragma Inline (Set_Delta_Expression);
pragma Inline (Set_Digits_Expression);
pragma Inline (Set_Do_Storage_Check);
pragma Inline (Set_Do_Tag_Check);
pragma Inline (Set_Elaborate_Present);
+ pragma Inline (Set_Elaborate_All_Desirable);
pragma Inline (Set_Elaborate_All_Present);
+ pragma Inline (Set_Elaborate_Desirable);
pragma Inline (Set_Elaboration_Boolean);
pragma Inline (Set_Else_Actions);
pragma Inline (Set_Else_Statements);
pragma Inline (Set_Entry_Index_Specification);
pragma Inline (Set_Etype);
pragma Inline (Set_Exception_Choices);
- pragma Inline (Set_Exception_Junk);
pragma Inline (Set_Exception_Handlers);
+ pragma Inline (Set_Exception_Junk);
+ pragma Inline (Set_Exception_Label);
pragma Inline (Set_Expansion_Delayed);
pragma Inline (Set_Explicit_Actual_Parameter);
pragma Inline (Set_Explicit_Generic_Actual_Parameter);
pragma Inline (Set_Float_Truncate);
pragma Inline (Set_Formal_Type_Definition);
pragma Inline (Set_Forwards_OK);
+ pragma Inline (Set_From_At_End);
pragma Inline (Set_From_At_Mod);
pragma Inline (Set_From_Default);
pragma Inline (Set_Generic_Associations);
pragma Inline (Set_Handler_List_Entry);
pragma Inline (Set_Has_Created_Identifier);
pragma Inline (Set_Has_Dynamic_Length_Check);
+ pragma Inline (Set_Has_Init_Expression);
+ pragma Inline (Set_Has_Local_Raise);
pragma Inline (Set_Has_Dynamic_Range_Check);
pragma Inline (Set_Has_No_Elaboration_Code);
pragma Inline (Set_Has_Priority_Pragma);
pragma Inline (Set_Has_Private_View);
+ pragma Inline (Set_Has_Relative_Deadline_Pragma);
pragma Inline (Set_Has_Storage_Size_Pragma);
pragma Inline (Set_Has_Task_Info_Pragma);
pragma Inline (Set_Has_Task_Name_Pragma);
pragma Inline (Set_Identifier);
pragma Inline (Set_Implicit_With);
pragma Inline (Set_Includes_Infinities);
+ pragma Inline (Set_Interface_List);
+ pragma Inline (Set_Interface_Present);
pragma Inline (Set_In_Present);
pragma Inline (Set_Instance_Spec);
pragma Inline (Set_Intval);
pragma Inline (Set_Is_Component_Left_Opnd);
pragma Inline (Set_Is_Component_Right_Opnd);
pragma Inline (Set_Is_Controlling_Actual);
+ pragma Inline (Set_Is_Dynamic_Coextension);
+ pragma Inline (Set_Is_Entry_Barrier_Function);
+ pragma Inline (Set_Is_Expanded_Build_In_Place_Call);
+ pragma Inline (Set_Is_Folded_In_Parser);
pragma Inline (Set_Is_In_Discriminant_Check);
pragma Inline (Set_Is_Machine_Number);
pragma Inline (Set_Is_Null_Loop);
pragma Inline (Set_Is_Overloaded);
pragma Inline (Set_Is_Power_Of_2_For_Shift);
pragma Inline (Set_Is_Protected_Subprogram_Body);
+ pragma Inline (Set_Has_Self_Reference);
+ pragma Inline (Set_Is_Static_Coextension);
pragma Inline (Set_Is_Static_Expression);
pragma Inline (Set_Is_Subprogram_Descriptor);
pragma Inline (Set_Is_Task_Allocation_Block);
pragma Inline (Set_Limited_View_Installed);
pragma Inline (Set_Limited_Present);
pragma Inline (Set_Literals);
+ pragma Inline (Set_Local_Raise_Not_OK);
+ pragma Inline (Set_Local_Raise_Statements);
pragma Inline (Set_Loop_Actions);
pragma Inline (Set_Loop_Parameter_Specification);
pragma Inline (Set_Low_Bound);
pragma Inline (Set_More_Ids);
pragma Inline (Set_Must_Be_Byte_Aligned);
pragma Inline (Set_Must_Not_Freeze);
+ pragma Inline (Set_Must_Not_Override);
+ pragma Inline (Set_Must_Override);
pragma Inline (Set_Name);
pragma Inline (Set_Names);
pragma Inline (Set_Next_Entity);
pragma Inline (Set_Next_Named_Actual);
+ pragma Inline (Set_Next_Pragma);
+ pragma Inline (Set_Next_Rep_Item);
pragma Inline (Set_Next_Use_Clause);
pragma Inline (Set_No_Ctrl_Actions);
pragma Inline (Set_No_Elaboration_Check);
pragma Inline (Set_No_Initialization);
pragma Inline (Set_No_Truncation);
pragma Inline (Set_Null_Present);
+ pragma Inline (Set_Null_Exclusion_Present);
pragma Inline (Set_Null_Record_Present);
pragma Inline (Set_Object_Definition);
- pragma Inline (Set_OK_For_Stream);
pragma Inline (Set_Original_Discriminant);
pragma Inline (Set_Original_Entity);
pragma Inline (Set_Others_Discrete_Choices);
pragma Inline (Set_Parameter_List_Truncated);
pragma Inline (Set_Parameter_Type);
pragma Inline (Set_Parent_Spec);
+ pragma Inline (Set_PPC_Enabled);
pragma Inline (Set_Position);
pragma Inline (Set_Pragma_Argument_Associations);
+ pragma Inline (Set_Pragma_Identifier);
pragma Inline (Set_Pragmas_After);
pragma Inline (Set_Pragmas_Before);
pragma Inline (Set_Prefix);
pragma Inline (Set_Reason);
pragma Inline (Set_Record_Extension_Part);
pragma Inline (Set_Redundant_Use);
- pragma Inline (Set_Return_Type);
+ pragma Inline (Set_Renaming_Exception);
+ pragma Inline (Set_Result_Definition);
+ pragma Inline (Set_Return_Object_Declarations);
pragma Inline (Set_Reverse_Present);
pragma Inline (Set_Right_Opnd);
pragma Inline (Set_Rounded_Result);
pragma Inline (Set_Subtype_Indication);
pragma Inline (Set_Subtype_Mark);
pragma Inline (Set_Subtype_Marks);
+ pragma Inline (Set_Synchronized_Present);
pragma Inline (Set_Tagged_Present);
pragma Inline (Set_Target_Type);
- pragma Inline (Set_Task_Body_Procedure);
pragma Inline (Set_Task_Definition);
+ pragma Inline (Set_Task_Present);
pragma Inline (Set_Then_Actions);
pragma Inline (Set_Then_Statements);
pragma Inline (Set_Triggering_Alternative);
pragma Inline (Set_Was_Originally_Stub);
pragma Inline (Set_Zero_Cost_Handling);
+ N_Simple_Return_Statement : constant Node_Kind := N_Return_Statement;
+ -- Rename N_Return_Statement to be N_Simple_Return_Statement. Clients
+ -- should refer to N_Simple_Return_Statement.
+
end Sinfo;