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

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                E I N F O                                 --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.335 $                            --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. with Types;  use Types;
  27. with Uintp;  use Uintp;
  28. with Urealp; use Urealp;
  29.  
  30. package Einfo is
  31.  
  32. --  This package defines the annotations to the abstract syntax tree that
  33. --  are are needed to support semantic processing of an Ada compilation.
  34.  
  35. --  These annotations are for the most part attributes of declared entities,
  36. --  and they correspond to conventional symbol table information. Other
  37. --  attributes include sets of meanings for overloaded names, possible
  38. --  types for overloaded expressions, flags to indicate deferred constants,
  39. --  incomplete types, etc. These attributes are stored in available fields
  40. --  in tree nodes (i.e. fields not used by the parser, as defined by the
  41. --  Sinfo package specification), and accessed by means of a set of
  42. --  subprograms which define an abstract interface.
  43.  
  44. --  There are two kinds of semantic information
  45.  
  46. --    First, the tree nodes with the following Nkind values:
  47.  
  48. --      N_Defining_Identifier
  49. --      N_Defining_Character_Literal
  50. --      N_Defining_Operator_Symbol
  51.  
  52. --    are called Entities, and constitute the information that would often
  53. --    be stored separately in a symbol table. These nodes are all extended
  54. --    to provide extra space, and contain fields which depend on the entity
  55. --    kind, as defined by the contents of the Ekind field. The use of the
  56. --    Ekind field, and the associated fields in the entity, are defined
  57. --    in this package, as are the access functions to these fields.
  58.  
  59. --    Second, in some cases semantic information is stored directly in other
  60. --    kinds of nodes, e.g. the Etype field, used to indicate the type of an
  61. --    expression. The access functions to these fields are defined in the
  62. --    Sinfo package, but their full documentation is to be found in
  63. --    the Einfo package specification.
  64.  
  65. --  Declaration processing places information in the nodes of their defining
  66. --  identifiers. Name resolution places in all other occurences of an
  67. --  identifier a pointer to the corresponding defining occurrence.
  68.  
  69. --  --------------------------------
  70. --  -- The XEINFO Utility Program --
  71. --  --------------------------------
  72.  
  73. --  XEINFO is a utility program which automatically produces a C header file,
  74. --  a-xeinfo.h from the spec and body of package Einfo. It reads the input
  75. --  files einfo.ads and einfo.adb and produces the output file a-xeinfo.h.
  76.  
  77. --  In order for this utility program to operate correctly, the form of the
  78. --  xeinfo.ads and xeinfo.adb files must meet certain requirements and be layed
  79. --  out in a specific manner.
  80.  
  81. --  The general form of xeinfo.ads is as follows:
  82.  
  83. --     type declaration for type Entity_Kind
  84. --     subtype declarations declaring subranges of Entity_Kind
  85. --     subtype declarations declaring synonyms for some standard types
  86. --     function specs for attributes
  87. --     procedure specs
  88. --     pragma Inline declarations
  89.  
  90. --  This order must be observed. There are no restrictions on the procedures,
  91. --  since the C header file only includes functions (Gigi is not allowed to
  92. --  modify the generated tree). However, functions are required to have headers
  93. --  that fit on a single line.
  94.  
  95. --  XEINFO reads and processes the function specs and the pragma Inlines. For
  96. --  functions that are declared as inlined, XEINFO reads the corresponding body
  97. --  from xeinfo.adb, and processes it into C code. This results in some strict
  98. --  restrictions on which functions can be inlined:
  99.  
  100. --     The function spec must be on a single line
  101.  
  102. --     There can only be a single statement, contained on a single line,
  103. --     not counting any pragma Assert statements.
  104.  
  105. --     This single statement must either by a function call with simple,
  106. --     single token arguments, or it must be a membership test of the form
  107. --     a in b, where a and b are single tokens.
  108.  
  109. --  For functions that are not inlined, there is no restriction on the body,
  110. --  and XEINFO generates a direct reference in the C header file which allows
  111. --  the C code in Gigi to directly call the corresponding Ada body.
  112.  
  113. --  -----------------------
  114. --  -- Entity Attributes --
  115. --  -----------------------
  116.  
  117. --  This section contains a complete list of the attributes that are defined
  118. --  on entities. Some attributes apply to all entities, others only to certain
  119. --  kinds of entities. In the latter case the attribute should only be set or
  120. --  accessed if the Ekind field indicates an appropriate entity.
  121.  
  122. --  There are two kinds of entities, stored and synthesized. Stored attributes
  123. --  correspond to a field or flag in the entity itself. Such attributes are
  124. --  identified in the table below by giving the field or flag in the attribute
  125. --  that is used to hold the attribute value. Synthesized attributes are not
  126. --  stored directly, but are rather computed as needed from other attributes,
  127. --  or from information in the tree. These are marked "synthesized" in the
  128. --  table below. The stored attributes have both access functions and set
  129. --  procedures to set the corresponding values, while synethesized attributes
  130. --  have only access functions.
  131.  
  132. --  Note: in the case of Node, Uint, or Elist fields, there are cases where
  133. --  the same physical field is used for different purposes in different
  134. --  entities, so these access functions should only be referenced for the
  135. --  class of entities in which they are defined as being present. Flags are
  136. --  not overlapped in this way, but nevertheless as a matter of style and
  137. --  abstraction (which may or may not be checked by asertions in the body),
  138. --  this restriction should be observed for flag fields as well.
  139.  
  140. --    Accept_Address (Elist6)
  141. --       Present in entries. If an accept has a statement sequence, then an
  142. --       address variable is created, which is used to hold the address of the
  143. --       parameters, as passed by the runtime. Accept_Address holds an element
  144. --       list which represents a stack of entities for these address variables.
  145. --       The current entry is the top of the stack, which is the last element
  146. --       on the list. A stack is required to handle the case of nested select
  147. --       statements referencing the same entry.
  148.  
  149. --    Actual_Subtype (Node9)
  150. --       Present in variables, constants, and formal parameters. This is the
  151. --       subtype imposed by the value of the object, as opposed to its nominal
  152. --       subtype, which is imposed by the declaration. The actual subtype
  153. --       differs from the nominal one when the latter is indefinite (as in the
  154. --       case of an unconstrained formal parameter,  or a variable declared
  155. --       with an unconstrained type and an initial value). The nominal subtype
  156. --       is the Etype entry for the entity.
  157.  
  158. --    Access_Disp_Table (Node15)
  159. --       Present in record types and subtypes. For a tagged type, points to
  160. --       the dispatch table associated with the tagged type. For a non-tagged
  161. --       record, contains Empty.
  162.  
  163. --    Address_Clause (Node20)
  164. --       Present in entries, objects and subprograms. Set if an address clause
  165. --       is present which references the object or subprogram and points to
  166. --       the N_Attribute_Definition_Clause node. Empty if no Address clause.
  167. --       The expression in the address clause is always a constant that is
  168. --       defined before the entity to which the address clause applies.
  169. --       Note: Gigi references this field in E_Task_Type entities???
  170.  
  171. --    Alias (Node7)
  172. --       Present in enumeration literals, functions, procedures and operators.
  173. --       Points to parent subprogram of a derived subprogram.
  174.  
  175. --    Alignment_Clause (Node8)
  176. --       Present in non-concurrent types, and in constants and variables. If an
  177. --       alignment attribute definition clause is present for the type, then
  178. --       the Alignment_Clause field points to the N_Attribute_Definition
  179. --       clause that specifies the alignment. If no alignment clause applies
  180. --       to the type, then this field is Empty. Note that Alignment_Clause can
  181. --       be set even if Has_Alignment_Clause is not set (happens with subtype
  182. --       and derived type declarations). Note also that a record definition
  183. --       clause with an (obsolescent) mod clause is converted into an attribute
  184. --       definition clause for this purpose.
  185.  
  186. --    Ancestor_Subtype (synthesized)
  187. --       Defined for all type and subtype entities. If the argument is a
  188. --       subtype then it returns the subtype or type from which the subtype
  189. --       was obtained, otherwise it returns Empty.
  190.  
  191. --    Associated_Formal_Package (Node12)
  192. --       Present in packages that are the actuals of formal_packages. Points
  193. --       to the entity in the declaration for the formal package.
  194.  
  195. --    Associated_Storage_Pool (Node13)
  196. --       Present in simple and general access type entities. References the
  197. --       storage pool to be used for the corresponding collection. A value of
  198. --       Empty means that the default pool is to be used.
  199.  
  200. --    Associated_Final_Chain (Node14)
  201. --       Present in simple and general access type entities. References the
  202. --       List_Controller object that holds the finalization chain on which
  203. --       are attached dynamically allocated objects referenced by the access
  204. --       type. Empty when the access type cannot reference a controlled object.
  205.  
  206. --    Barrier_Function (Node12)
  207. --       Defined for protected entries and entry families.  This is the
  208. --       subprogram declaration for the body of the function that returns
  209. --       the value of the entry barrier.
  210.  
  211. --    Base_Type (synthesized)
  212. --       Defined for all type entities. Returns the base type of a type or
  213. --       subtype. The base type of a type is the type itself. The base type
  214. --       of a subtype is the type that it constrains (which is always a type
  215. --       entity, not some other subtype).
  216.  
  217. --    Chars (Name1)
  218. --       Present in all entities. This field contains an entry into the names
  219. --       table that has the character string of the identifier, character
  220. --       literal or operator symbol. See Namet for further details.
  221.  
  222. --    Class_Wide_Type (Field17)
  223. --       Applicable to all type entities. For a tagged type, returns the
  224. --       corresponding implicitly declared class-wide type. Set to Empty
  225. --       for non-tagged types.
  226.  
  227. --    Comes_From_Source
  228. --       This flag appears on all nodes, including entities, and indicates
  229. --       that the node was created by the scanner or parser from the original
  230. --       source. Thus for entities, it indicates that the entity is defined
  231. --       in the original source program.
  232.  
  233. --    Component_Clause (Node13)
  234. --       Present in record components and discriminants. If a record
  235. --       representation clause is present for the corresponding record
  236. --       type a that specifies a position for the component, then the
  237. --       Component_Clause field of the E_Component entity points to the
  238. --       N_Component_Claue node. Set to Empty if no record representation
  239. --       clause was present, or if there was no specification for this
  240. --       component.
  241.  
  242. --    Component_First_Bit (Uint11)
  243. --       Present in record components (E_Component, E_Discriminant) if a
  244. --       component clause applies to the component. First bit position of
  245. --       given component, computed from the first bit and position values
  246. --       given in the component clause. Always non-negative.
  247.  
  248. --    Component_Size_Clause (Node13)
  249. --       Present in array types only (not in array subtypes). Points to the
  250. --       component size attribute definition clause if one is present. Set to
  251. --       Empty if no component size clause is present for the array. Note that
  252. --       this field can be set even if Has_Component_Size_Clause is not set as
  253. --       a result of derived type declarations. Note that this field is present
  254. --       only in the base type.
  255.  
  256. --    Component_Type (Node10)
  257. --       Present in array types and subtypes, and also in the special
  258. --       enumeration table type created for enumeration type. References
  259. --       the entity for the component type.
  260.  
  261. --    Constant_Value (synthesized)
  262. --       Defined for constants, named integers, and named reals. Obtains
  263. --       the initialization expression for the entity. Will return Empty for
  264. --       for a deferred constant whose full view is not available.
  265.  
  266. --    Corresponding_Concurrent_Type (Node7)
  267. --       Present in record types that are constructed by the expander to
  268. --       represent task and protected types (Is_Concurrent_Record_Type flag
  269. --       set True). Points to the entity for the corresponding task type or
  270. --       protected type.
  271.  
  272. --    Corresponding_Discriminant (Node7)
  273. --       Present in discriminants of a derived type, when the discriminant is
  274. --       used to constrain a discriminant of the parent type.
  275.  
  276. --    Corresponding_Record_Type (Node7)
  277. --       Present in task types and subtypes. References the entity for the
  278. --       corresponding record type constructed by the expander (see Exp_Ch9).
  279. --       This type is used to represent values of the task type.
  280.  
  281. --    Declaration_Node (synthesized)
  282. --       Defined for all entities. Returns the tree node for the declaration
  283. --       that declared the entity. Normally this is just the Parent of the
  284. --       entity. One exception arises with child units, where the parent of
  285. --       the entity is a selected component. Another exception is that if
  286. --       the entity is an incomplete type that has been completed, then we
  287. --       obtain the declaration node denoted by the full type, i.e. the full
  288. --       type declaration node.
  289.  
  290. --    Default_Value (Node10)
  291. --       Present in IN parameters. Points to the node representing the
  292. --       expression for the default value for the parameter. Empty if the
  293. --       parameter has no default value.
  294.  
  295. --    Delta_Value (Ureal7)
  296. --       Present in fixed and decimal types. Points to a universal real
  297. --       that holds value of delta for the type, as given in the declaration
  298. --       or as inherited by a subtype or derived type.
  299.  
  300. --    Depends_On_Private_Type (Flag14)
  301. --       Present in all type entities. Set if the type is private or if it
  302. --       depends on a private type.
  303.  
  304. --    Designated_Type (synthesized)
  305. --       Defined for access types. Returns the designated type. Differs
  306. --       from Directly_Designated_Type in that if the access type refers
  307. --       to an incomplete type, and the full type is available, then this
  308. --       full type is returned instead of the incomplete type.
  309.  
  310. --    Digits_Value (Uint9)
  311. --       Present in floating point types and subtypes and decimal types and
  312. --       subtypes. Contains the Digits value specified in the declaration.
  313.  
  314. --    Directly_Designated_Type (Node10)
  315. --       Present in access types. This field points to the type that is
  316. --       directly designated by the access type. In the case of an access
  317. --       type to an incomplete type, this field references the incomplete
  318. --       type. Note that in the semantic processing, what is useful in
  319. --       nearly all cases is the full type designated by the access type.
  320. --       The function Designated_Type obtains this full type in the case of
  321. --       access to an incomplete type.
  322.  
  323. --    Discard_Names (Flag88)
  324. --       Present in types and exception entities. Set if pragma Discard_Names
  325. --       applies to the entity.
  326.  
  327. --    Discriminal (Node9)
  328. --       Present in discriminants (Discriminant formal: GNAT's first
  329. --       coinage). The entity used as a formal parameter that corresponds
  330. --       to a discriminant. See section "Use of Discriminants" for details.
  331.  
  332. --    Discriminant_Checking_Func (Node10)
  333. --       Present in components. Points to the defining identifier of the
  334. --       function built by the expander returns a Boolean indicating whether
  335. --       the given record component exists for the current discriminant
  336. --       values.
  337.  
  338. --    Discriminant_Constraint (Elist6)
  339. --       Present in entities that can have discriminants (concurrent types
  340. --       subtypes, record types and subtypes, private types and subtypes,
  341. --       limited private types and subtypes and incomplete types). Points
  342. --       to an element list containing the discriminant constraint (list
  343. --       of discriminant associations) for a record (sub)type.
  344.  
  345. --    Discriminant_Default_Value (Node10)
  346. --       Present in discriminants. Points to the node representing the
  347. --       expression for the default value of the discriminant. Set to
  348. --       Empty if the discriminant has no default value.
  349.  
  350. --    DTC_Entity (Node16)
  351. --       Present in function and procedure entities. Set to Empty unless
  352. --       the subprogram is dispatching in which case it references the
  353. --       Dispatch Table pointer Component. That is to say the component _tag
  354. --       for regular Ada tagged types, for CPP_Class types and their
  355. --       descendants this field points to the component entity in the record
  356. --       that is the Vtable pointer for the Vtable containing the entry that
  357. --       references the subprogram.
  358.  
  359. --    DT_Entry_Count (Uint15)
  360. --       Present in E_Component entities. Only used for component marked
  361. --       Is_Tag. Store the number of entries in the Vtable (or Dispatch Table)
  362.  
  363. --    DT_Position (Uint15)
  364. --       Present in function and procedure entities which are dispatching
  365. --       (should not be referenced without first checking that Is_Dispatching_
  366. --       Operation is True). Contains the position into the Vtable for the
  367. --       entry that references the subprogram.
  368.  
  369. --    Ekind (Ekind)
  370. --       Present in all entities. Contains a value of the enumeration type
  371. --       Entity_Kind declared in a subsequent section in this spec.
  372.  
  373. --    Entry_Component (Node11)
  374. --       Present in formal parameters (in, in out and out parameters). Used
  375. --       only for formals of entries. References the corresponding component
  376. --       of the entry parameter record for the entry.
  377.  
  378. --    Entry_Bodies_Array (Node15)
  379. --       Present in protected types for which Has_Entries is true.
  380. --       This is the defining identifier for the array of entry body
  381. --       action procedures and barrier functions used by the runtime to
  382. --       execute the user code associated with each entry.
  383.  
  384. --    Entry_Index_Constant (Node7)
  385. --       Applies to an entry index parameter. This is an identifier that
  386. --       eventually becomes the name of a constant representing the index
  387. --       of the entry family member whose entry body is being executed. Used
  388. --       to expand references to the entry index specification identifier.
  389.  
  390. --    Entry_Index_Type (synth)
  391. --       applies to an entry family. Denotes Etype of the subtype indication
  392. --       in the entry declaration. Used to resolve the index expression in an
  393. --       accept statement for a member of the family, and in the prefix of
  394. --       'COUNT when it applies to a family member.
  395.  
  396. --    Entry_Parameters_Type (Node7)
  397. --       Present in entries. Points to the access-to-record type that is
  398. --       constructed by the expander to hold a reference to the parameter
  399. --       values. This reference is manipulated (as an address) by the
  400. --       tasking runtime. The designated record represents a packaging
  401. --       up of the entry parameters (see Exp_Ch9.Expand_N_Entry_Declaration
  402. --       for further details). Entry_Parameters_Type is Empty if the entry
  403. --       has no parameters.
  404.  
  405. --    Enumeration_Pos (Uint11)
  406. --       Present in enumeration literals. Contains the position number
  407. --       corresponding to the value of the enumeration literal.
  408.  
  409. --    Enumeration_Rep (Uint12)
  410. --       Present in enumeration literals. Contains the representation that
  411. --       corresponds to the value of the the enumeration literal. Note that
  412. --       this is normally the same as Enumeration_Pos except in the presence
  413. --       of representation clauses, where Pos will still represent the
  414. --       position of the literal within the type and Rep will have be the
  415. --       value given in the representation clause.
  416.  
  417. --    Enumeration_Rep_Expr (Node8)
  418. --       Present in enumeration literals. Points to the expression in an
  419. --       associated enumeration rep clause that provides the representation
  420. --       value for this literal. Empty if no enumeration rep clause for this
  421. --       literal (or if rep clause does not have an entry for this literal,
  422. --       an error situation). This is also used to catch duplicate entries
  423. --       for the same literal.
  424.  
  425. --    Enum_Pos_To_Rep (Node14)
  426. --       Present in enumeration types (but not enumeration subtypes). Set to
  427. --       Empty unless the enumeration type has a non-standard representation
  428. --       (i.e. at least one literal has a representation value different from
  429. --       its pos value). In this case, Enum_Pos_To_Rep is the entity for an
  430. --       array constructed when the type is frozen that maps Pos values to
  431. --       corresponding Rep values. The index type of this array is Natural,
  432. --       and the component type is a suitable integer type that holds the
  433. --       full range of representation values.
  434.  
  435. --    Equivalent_Type (Node7)
  436. --       Present in class wide tyes and subtypes. For a class wide type, it
  437. --       is always Empty. For a class wide subtype, it points to an entity
  438. --       created by the expander which gives Gigi an easily understandable
  439. --       equivalent of the class subtype with a known size (given by an initial
  440. --       value ). See Exp_Util.Expand_Class_Wide_Subtype for further details.
  441.  
  442. --    Esize (Node12)
  443. --       Present in all types and subtypes, an also for components, constants,
  444. --       and variables. Contains the size of a type or object. A value of zero
  445. --       is used in the case of composite types or objects for which no size
  446. --       clause has been given (i.e. those types for which only Gigi knows the
  447. --       allocated size). In the case of components where a component clause is
  448. --       present, the value is the value from the component clause, which must
  449. --       be non-negative (but may be zero, which is acceptable for the case of
  450. --       a type with only one possible value).
  451.  
  452. --    Etype (Node5)
  453. --       Present in all entities. Represents the type of the entity, which
  454. --       is itself another entity. For a type entity, this pointer is self-
  455. --       referential. For a subtype entity, Etype is the base type.
  456.  
  457. --    Finalization_Chain_Entity (Node13)
  458. --       Present in scopes which can have finalizable entities (blocks,
  459. --       functions, procedures, tasks, entries). This is the entity for
  460. --       the finalization chain object. See Exp_Ch7 for full details.
  461.  
  462. --    First_Component (synthesized)
  463. --       Defined for record types. Returns the first component by following
  464. --       the chain of declared entities for the record until the component
  465. --       is found (one with an Ekind of E_Variable). The discriminants are
  466. --       skipped. If the record is null, then Empty is returned.
  467.  
  468. --    First_Discriminant (synthesized)
  469. --       Defined for types with discriminants. The discriminants are the
  470. --       first entities declared in the type, so normally this is equivalent
  471. --       to First_Entity. The exception arises for tagged types, where the
  472. --       tag itself is prepended to the front of the entity chain, so the
  473. --       First_Discriminant function steps past the tag if it is present.
  474.  
  475. --    First_Entity (Node9)
  476. --       Present in all entities which act as scopes to which a list of
  477. --       associated entities is attached (blocks, class subtypes and types,
  478. --       entries, functions, loops, packages, procedures, protected objects,
  479. --       record types and subtypes, private types, task types and subtypes).
  480. --       Points to a list of associated entities using the Next_Entity field
  481. --       as a chain pointer with Empty marking the end of the list.
  482.  
  483. --    First_Formal (synthesized)
  484. --       Defined for subprograms or subprogram types, and also to entries
  485. --       and entry families. Returns first formal of the subprogram or entry.
  486. --       The formals are the first entities declared in a subprogram or in
  487. --       a subprogram type (the designated type of an Access_To_Subprogram
  488. --       definition) or in an entry..
  489.  
  490. --    First_Index (Node9)
  491. --       Present in array types and subtypes and in string types and subtypes.
  492. --       By introducing implicit subtypes for the index constraints, we have
  493. --       the same structure for constrained and unconstrained arrays, subtype
  494. --       marks and discrete ranges are both represented by a subtype. This
  495. --       function returns the tree node corresonding to an occurrence of the
  496. --       first index (NOT the entity for the type). Subsequent indexes are
  497. --       obtained using Next_Index.
  498.  
  499. --    First_Literal (Node9)
  500. --       Present in all enumeration types, including character and boolean
  501. --       types. This field points to the first enumeration literal entity
  502. --       for the type (i.e. it is set to First (Literals (N)) where N is
  503. --       the enumeration type definition node. A special case occurs with
  504. --       standard character and wide character types, where this field is
  505. --       Empty, since there str no enumeration literal lists in these cases.
  506.  
  507. --    First_Private_Entity (Node11)
  508. --       Present in all entities containing private parts (packages,
  509. --       protected types and subtypes, task types and subtypes). The
  510. --       entities on the entity chain are in order of declaration, so the
  511. --       entries for private entities are at the end of the chain. This
  512. --       field points to the first entity for the private part. It is
  513. --       Empty if there are no entities declared in the private part or
  514. --       if there is no private part.
  515.  
  516. --    First_Subtype (synthesized)
  517. --       Applies to all types and subtypes. For types, yields the first
  518. --       subtype of the type. For subtypes, yields the first subtype of
  519. --       the base type of the subtype.
  520.  
  521. --    Freeze_Node (Node18)
  522. --       Present in all entities. If there is an associated freeze node for
  523. --       the entity, this field references this freeze node. If no freeze
  524. --       node is associated with the entity, then this field is Empty. See
  525. --       package Freeze for further details.
  526.  
  527. --    Full_View (Node11)
  528. --       Present in incomplete types, private types, limited private types,
  529. --       and deferred constants. Points to the entity for the corresponding
  530. --       full type declaration. See also Underlying_Type.
  531.  
  532. --    Has_Alignment_Clause (Flag46)
  533. --       Present in all type entities and objects. Indicates if an alignment
  534. --       clause has been given for the entity. If set, then Alignment_Clause
  535. --       points to the N_Attribute_Definition node for the alignment attribute
  536. --       definition clause. Note that it is possible for this flag to be False
  537. --       even when Alignment_Clause is set (this happens in the case of subtype
  538. --       declarations and derived type declarations).
  539.  
  540. --    Has_All_Calls_Remote (Flag79)
  541. --       Present in all library unit entities. Set true if the library unit
  542. --       has an All_Calls_Remote pragma. Note that such entities must also
  543. --       be RCI entities, so the flag Is_Remote_Call_Interface will always
  544. --       be set if this flag is set.
  545.  
  546. --    Has_Atomic_Components (Flag86)
  547. --       Present in array types. Set if a pragma Atomic_Components applies to
  548. --       the type. Note that it is not set in subtypes, always look at the flag
  549. --       in the base type. Note also that for anonymous array objects, the flag
  550. --       is set in the anonymous type that is created, not the object.
  551.  
  552. --    Has_Completion (Flag26)
  553. --       Present in all entities that require a completion (functions,
  554. --       procedures, private types, limited private types, incomplete types,
  555. --       and packages that require a body). Set if the completion has been
  556. --       encountered and analyzed.
  557.  
  558. --    Has_Completion_In_Body (Flag71)
  559. --       Present in  "Taft amendment types" that is to say private types whose
  560. --       full declaration appears in the package body.
  561.  
  562. --    Has_Component_Size_Clause (Flag68)
  563. --       Present in array types (but not in array subtypes). Set if a component
  564. --       size clause is present for the given type. Note that this flag can be
  565. --       False even if Component_Size_Clause is set (happens in the case of
  566. --       derived types). Note that this flag is only set on the base type.
  567.  
  568. --    Has_Controlling_Result (Flag98)
  569. --       Present in E_Function entities. True if The function is a primitive
  570. --       function of a tagged type which can dispatch on result
  571.  
  572. --    Has_Controlled (Flag43)
  573. --       Present in composite types. Indicates that the type or one of its
  574. --       components has Is_Controlled set, i.e. that there is at least one
  575. --       controlled component in the type somewhere.
  576.  
  577. --    Has_Delayed_Freeze (Flag18)
  578. --       Present in all entities. Set to indicate that freezing of the entity
  579. --       must be delayed. For further details, see spec of package Freeze.
  580.  
  581. --    Has_Discriminants (Flag5)
  582. --       Present in entities for types that can have discriminants (record
  583. --       types and subtypes, task types and subtypes, protected types and
  584. --       subtypes, private types, limited private types, and incomplete types)
  585. --       if the corresponding type or subtypes has a known discriminant part.
  586.  
  587. --    Has_Entries (synthesized)
  588. --       Defined for concurrent types. True if any entries are declared
  589. --       within the task or protected definition for the type.
  590.  
  591. --    Has_Enumeration_Rep_Clause (Flag66)
  592. --       Present in enumeration types. Set if an enumeration representation
  593. --       clause has been given for this enumeration type. Used to prevent more
  594. --       than one enumeration representation clause for a given type. Note
  595. --       that this does not imply a representation with holes, since the rep
  596. --       clause may merely confirm the default 0..N representation.
  597.  
  598. --    Has_Exit (Flag47)
  599. --       Present in loop entities. Set if the loop contains an exit statement.
  600.  
  601. --    Has_Foreign_Convention (synthesized)
  602. --       Defined for all entities. Determines if the Convention for the
  603. --       entity is a foreign convention (i.e. is other than Convention_Ada,
  604. --       Convention_Intrinsic, Convention_Entry or Convention_Protected).
  605.  
  606. --    Has_Homonym (Flag56)
  607. --       Present in all entities. Set if an entity has a homonym in the same
  608. --       scope. Used by Gigi to generate unique names for such entities.
  609.  
  610. --    Has_Machine_Attribute (Flag82)
  611. --       Present in subprograms. Indicates that a pragma Machine_Attribute
  612. --       applies to the subprogram.
  613.  
  614. --    Has_Machine_Radix_Clause (Flag83)
  615. --       Present in decimal types and subtypes, set if a Machine_Radix
  616. --       representation clause is present. This flag is used to detect
  617. --       the error of multiple machine radix clauses for a single type.
  618.  
  619. --    Has_Master_Entity (Flag21)
  620. --       Present in entities that can appear in the scope stack (see spec
  621. --       of Sem). It is set if a task master entity (_master) has been
  622. --       declared and initialized in the corresponding scope.
  623.  
  624. --    Has_Nested_Block_With_Handler (Flag101)
  625. --       Present in scope entities. Set if there is a nested block within the
  626. --       scope that has an exception handler and the two scopes are in the
  627. --       same procedure. This is used by the backend for controlling certain
  628. --       optimizations to ensure that they are consistent with exceptions.
  629. --       See documentation in Gigi for further details.
  630.  
  631. --    Has_Non_Standard_Rep (Flag75)
  632. --       Present in all type entities. Set if a representation clause or
  633. --       pragma causes the representation of the item to be significantly
  634. --       modified. In this category are changes of small or radix for a
  635. --       fixed-point type, change of component size for an array, record
  636. --       representation clause, or enumeration representation clause. All
  637. --       other representation clauses (e.g. Size and Alignment clauses) are
  638. --       not considered significant since they do not affect bit patterns.
  639.  
  640. --    Has_Pragma_Controlled (Flag27)
  641. --       Present in access type entities (but not access subtypes. Set if
  642. --       a pragma Controlled applies to the access type.
  643.  
  644. --    Has_Record_Rep_Clause (Flag65)
  645. --       Present in record types. Set if a record representation clause has
  646. --       been given for this record type. Used to prevent more than one such
  647. --       clause for a given record type. Note that this is initially cleared
  648. --       for a derived type, even though the representation is inherited. See
  649. --       also the flag Has_Specified_Layout.
  650.  
  651. --    Has_Size_Clause (Flag29)
  652. --       Present in entities for types and objects. Set if a size clause is
  653. --       present for the entity. Used to prevent multiple Size clauses for a
  654. --       given entity. Note that it is always initially cleared for a derived
  655. --       type, even though the Size for such a type is inherited from a Size
  656. --       clause given for the parent type.
  657.  
  658. --    Has_Small_Clause (Flag67)
  659. --       Present in ordinary fixed point types (but not subtypes). Indicates
  660. --       that a small clause has been given for the entity. Used to prevent
  661. --       multiple Small clauses for a given entity. Note that it is always
  662. --       initially cleared for a derived type, even though the Small for such
  663. --       a type is inherited from a Small clause given for the parent type.
  664.  
  665. --    Has_Specified_Layout (Flag100)
  666. --       Present in record types. Set if the record layout has been specified
  667. --       by a record representation clause. Note that this differs from the
  668. --       flag Has_Record_Rep_Clause in that it is inherited by a derived type,
  669. --       while Has_Record_Rep_Clause is used to indicate that the type is
  670. --       mentioned explicitly in a record representation clause, and thus is
  671. --       not inherited by a derived type.
  672.  
  673. --    Has_Storage_Size_Clause (Flag23)
  674. --       Present in task types and access types. Set if Storage_Size clause
  675. --       is present for the type. Used to prevent multiple clauses for one
  676. --       type. Note that this flag is initially cleared for a derived type
  677. --       even though the Storage_Size for such a type is inherited from a
  678. --       Storage_Size clause given for the parent type. Note that this flag
  679. --       is only present on the base type.
  680.  
  681. --    Has_Tasks (Flag30)
  682. --       Present in all type entities. Set on task types themselves, and also
  683. --       (recursively) on any composite type which has a component for which
  684. --       Has_Tasks is set. The meaning is that an allocator of such an object
  685. --       must create the required tasks. Note that the flag is not set on
  686. --       access types, even if they designate an object that Has_Tasks.
  687.  
  688. --    Has_U_Nominal_Subtype (flag80)
  689. --       Present in variables and constants. Indicates that object declaration
  690. --       has an unconstrained type, and constraint is obtained from expression.
  691. --       In such a case the Etype of the entity is the actual subtype of the
  692. --       expression in the declaration.
  693.  
  694. --    Has_Unknown_Discriminants (Flag72)
  695. --       Present in all type entities. Types can have unknown discriminants
  696. --       either from their declaration or through type derivation.
  697.  
  698. --    Has_Volatile_Components (Flag87)
  699. --       Present in array types. Set if a pragma Volatile_Components applies to
  700. --       the type. Note that it is not set in subtypes, always look at the flag
  701. --       in the base type. Note also that for anonymous array objects, the flag
  702. --       is set in the anonymous type that is created, not the object.
  703.  
  704. --    Homonym (Node4)
  705. --       Present in all entities. Contains a link to chain entities that are
  706. --       homonyms and that are declared in the same or enclosing scopes.
  707. --       (Homonyms in the same scope are overloaded). Since this field is
  708. --       in the base part of the entity, the access routines for this field
  709. --       are in Sinfo.
  710.  
  711. --    In_Package_Body (Flag48)
  712. --       Set on the entity that denotes the package (the defining occurrence
  713. --       of the package declaration) while analyzing the package body. Reset
  714. --       on completion of the analysis.
  715.  
  716. --    In_Private_Part (Flag45)
  717. --       Present in package entities. Flag is set to indicate that the
  718. --       private part is being analyzed. The flag is reset at the end of the
  719. --       package declaration.
  720.  
  721. --    Interface_Name (Node6)
  722. --       Present in functions, procedures, variables, constants, contains
  723. --       Empty unless a pragma Interface_Name or Import has been given, in
  724. --       which case it points to the N_String_Literal node for the specified
  725. --       link name.
  726.  
  727. --    In_Use (Flag8)
  728. --       Present in packages and types. Set when analyzing a use clause for
  729. --       the corresponding entity. Reset at end of corresponding declarative
  730. --       part. The flag on a type is also used to determine the visibility of
  731. --       the primitive operators of the type.
  732.  
  733. --    Is_Abstract (Flag19)
  734. --       Present in all types, and also for functions and procedures. Set
  735. --       for abstract types and abstract subprograms.
  736.  
  737. --    Is_Access_Constant (Flag69)
  738. --       Present in access types and subtypes. Indicates that the keyword
  739. --       constant was present in the access type definition.
  740.  
  741. --    Is_Access_Type (synthesized)
  742. --       Defined for all entities, true for access types and subtypes
  743.  
  744. --    Is_Aliased (Flag15)
  745. --       Present in objects whose declarations carry the keyword aliased,
  746. --       and on record components that have the keyword. For arrays with an
  747. --       aliased component declaration, the flag is on the array type itself.
  748.  
  749. --    Is_Atomic (Flag85)
  750. --       Present in all type entities, and also in constants, components and
  751. --       variables. Set if a pragma Atomic or Shared applies to the entity.
  752.  
  753. --    Is_Array_Type (synthesized)
  754. --       Defined for all entities, true for array types and subtypes
  755.  
  756. --    Is_Asynchronous (Flag81)
  757. --       Present in all type entities and in procedure entities. Set
  758. --       if a pragma Asynchronous applies to the entity.
  759.  
  760. --    Is_Boolean_Type (synthesized)
  761. --       Defined for all entities, true for boolean types and subtypes,
  762. --       i.e. Standard.Boolean and all types ultimately derived from it.
  763.  
  764. --    Is_By_Copy_Type (synthesized)
  765. --       Defined for all type entities. Returns true if the entity is
  766. --       a by copy type (RM 6.2(3)).
  767.  
  768. --    Is_Called (Flag102)
  769. --       Defined for subprograms. Returns true if the subprogram is called
  770. --       in the unit being compiled or in a unit in the context. Used for
  771. --       inlining.
  772.  
  773. --    Is_Character_Type (Flag63)
  774. --       Present in all entities, true for character types and subtypes,
  775. --       i.e. enumeration types that have at least one character literal.
  776.  
  777. --    Is_Child_Unit (Flag73)
  778. --       Present in defining entities of program units, true if unit is
  779. --       a child unit (not a subunit).
  780.  
  781. --    Is_Class_Wide_Type (synthesized)
  782. --       Defined for all entities, true for class wide types and subtypes
  783.  
  784. --    Is_Composite_Type (synthesized)
  785. --       Defined for all entities, true for all composite types and
  786. --       subtypes. Either Is_Composite_Type or Is_Elementary_Type (but
  787. --       not both) is true of any type.
  788.  
  789. --    Is_Concurrent_Record_Type (Flag20)
  790. --       Present in record types and subtypes. Set if the type was created
  791. --       by the expander to represent a task or protected type. For every
  792. --       concurrent type, such as record type is constructed, and task and
  793. --       protected objects are instances of this record type at runtime
  794. --       (Gigi will replace declarations of the concurrent type using the
  795. --       declarations of the corresponding record type). See package Exp_Ch9
  796. --       for further details.
  797.  
  798. --    Is_Constrained (Flag3)
  799. --       Present in types or subtypes which may have index or discriminant
  800. --       constraints (i.e. array types and subtypes, record types and
  801. --       subtypes, and string types and subtypes). Set if the type or
  802. --       subtype is constrained.
  803.  
  804. --    Is_Constructor (Flag76)
  805. --       Present in function and procedure entities. Set if a pragma
  806. --       CPP_Constructor applies to the subprogram.
  807.  
  808. --    Is_Controlled (Flag42)
  809. --       Present in all type entities. Indicates that this type is controlled,
  810. --       i.e. is is either a descendant of Ada.Finalization.Controlled or
  811. --       Ada.Finalization.Limited_Controlled.
  812.  
  813. --    Is_Controlling_Formal (Flag97)
  814. --       Present in in all Formal_Kind entity. Marks the controlling parameters
  815. --       of dispatching operations.
  816.  
  817. --    Is_CPP_Class (Flag74)
  818. --       Present in all type entities, set only for tagged and untagged
  819. --       record types to which the pragma CPP_Class has been applied.
  820.  
  821. --    Is_Decimal_Fixed_Point_Type (synthesized)
  822. --       Defined for all type entities, true for decimal fixed point
  823. --       types and subtypes.
  824.  
  825. --    Is_Declared_In_Package_Body (Flag93)
  826. --       Set for all entities that are declared in a package body
  827.  
  828. --    Is_Derived_Type (synthesized)
  829. --       Defined for all type entities. Determine if given entity is a
  830. --       derived type
  831.  
  832. --    Is_Destructor (Flag77)
  833. --       Present in function and procedure entities. Set if a pragma
  834. --       CPP_Destructor applies to the subprogram.
  835.  
  836. --    Is_Discrete_Type (synthesized)
  837. --       Defined for all entities, true for all discrete types and subtypes
  838.  
  839. --    Is_Dispatching_Operation (Flag6)
  840. --       Present in procedures, functions, generic procedures and generic
  841. --       functions. Set if the corresponding operation is dispatching.
  842.  
  843. --    Is_Elementary_Type (synthesized)
  844. --       Defined for all entities, true for all elementary types and
  845. --       subtypes. Either Is_Composite_Type or Is_Elementary_Type (but
  846. --       not both) is true of any type.
  847.  
  848. --    Is_Entry_Formal (Flag52)
  849. --       Present in all entities. Set only for entry formals (which can
  850. --       only be in, in-out or out parameters). This flag is used to speed
  851. --       up the test for the need to replace references in Exp_Ch2.
  852.  
  853. --    Is_Enumeration_Type (synthesized)
  854. --       Defined for all entities, true for enumeration types and subtypes
  855.  
  856. --    Is_Exported (Flag99)
  857. --       Present in all entities. Set if the entity is exported. For now we
  858. --       only allow the export of functions, procedures and variables, but
  859. --       that may well change later on.
  860.  
  861. --    Is_First_Subtype (Flag70)
  862. --       Defined for all entities. True for first subtypes (RM 3.2.1(6)),
  863. --       i.e. the entity in the type declaration that introduced the type.
  864. --       This may be the base type itself (e.g. for record declarations and
  865. --       enumeration type declarations), or it may be the first subtype of
  866. --       an anonymous base type (e.g. for integer type declarations or
  867. --       constrained array declarations).
  868.  
  869. --    Is_Fixed_Point_Type (synthesized)
  870. --       Defined for all entities, true for decimal and ordinary fixed
  871. --       point types and subtypes
  872.  
  873. --    Is_Floating_Point_Type (synthesized)
  874. --       Defined for all entities, true for float types and subtypes
  875.  
  876. --    Is_Frozen (Flag4)
  877. --       Present in all type entities. Set if the type has been frozen.
  878.  
  879. --    Is_Generic_Type (Flag1)
  880. --       Present in types which are generic formal types. Such types have an
  881. --       Ekind that corresponds to their classification, so the Ekind cannot
  882. --       be used to identify generic types.
  883.  
  884. --    Is_Generic_Actual_Type (Flag94)
  885. --       Present in the subtype declaration that renames the generic formal
  886. --       as a subtype of the actual. Guarantees that the subtype is not static
  887. --       within the instance.
  888.  
  889. --    Is_Immediately_Visible (Flag7)
  890. --       Present in all entities. Set if entity is immediately visible, i.e.
  891. --       is defined in some currently open scope (RM 8.3(4)).
  892.  
  893. --    Is_Imported (Flag24)
  894. --       Present in all entities. Set if the entity is imported. For now we
  895. --       only allow the import of functions, procedures and variables, but
  896. --       that may well change later on.
  897.  
  898. --    Is_Incomplete_Or_Private_Type (synthesized)
  899. --       Defined for all entities, true for private and incomplete types
  900.  
  901. --    Is_Indefinite_Subtype (synthesized)
  902. --       Defined for all entities for types and subtypes. Determines if given
  903. --       entity is an unconstrained array type or subtype, a discriminated
  904. --       record type or subtype with no initial discriminant values or a
  905. --       class wide type or subtype.
  906.  
  907. --    Is_Inlined (Flag11)
  908. --       Present in functions and procedures. Set if a pragma Inline applies
  909. --       to the subprogram. For subprograms created during expansion, this
  910. --       flag may be set directly by the expander to request inlining.
  911. --       Also used on packages that contain inlined subprograms. If inlining
  912. --       is enabled, the bodies of these packages must be compiled.
  913.  
  914. --    Is_Integer_Type (synthesized)
  915. --       Defined for all entities, true for integer types and subtypes
  916.  
  917. --    Is_Internal (Flag17)
  918. --       Present in all entities. Set to indicate an entity created during
  919. --       semantic processing (e.g. an implicit type). Need more documentation
  920. --       on this one! ???
  921.  
  922. --    Is_Interrupt_Handler (Flag89)
  923. --       Present in protected procedures. Set if a pragma Interrupt_Handler
  924. --       applies to the procedure (which must be parameterless).
  925.  
  926. --    Is_Intrinsic_Subprogram (Flag64)
  927. --       Present in functions and procedures. It is set if a valid pragma
  928. --       Interface or Import is present for this subprogram specifying pragma
  929. --       Intrinsic. Valid means that the name and profile of the subprogram
  930. --       match the requirements of one of the recognized intrinsic subprograms
  931. --       (see package Sem_Intr for details). Note: the value of Convention for
  932. --       such an entity will be set to Convention_Intrinsic, but it is the
  933. --       setting of Is_Instrinsic_Subprogram, NOT simply having convention set
  934. --       to intrinsic, that causes intrinsic code to be generated.
  935.  
  936. --    Is_Itype (Flag91)
  937. --       Present in all entities, set for Itypes (see package Itypes for
  938. --       details on the use of these entities)
  939.  
  940. --    Is_Limited_Record (Flag25)
  941. --       Present in for record (sub)types and set to true if the record
  942. --       is declared to be limited.
  943.  
  944. --    Is_Limited_Type (synthesized)
  945. --       Defined for all type entities. True if the type is a limited type
  946. --       (limited private type, task type, protected type, composite
  947. --       containing a limited component, or subtypes of any of these types).
  948.  
  949. --    Is_Numeric_Type (synthesized)
  950. --       Defined for all entities, true for all numeric types and subtypes
  951. --       (integer, fixed, float).
  952.  
  953. --    Is_Ordinary_Fixed_Point_Type (synthesized)
  954. --       Defined for all entities, true for ordinary fixed point types
  955. --       and subtypes
  956.  
  957. --    Is_Packed (Flag51)
  958. --       Present in all type entities. Set if a pragma Pack is present
  959. --       referring to this type.
  960.  
  961. --    Is_Potentially_Use_Visible (Flag9)
  962. --       Present in all entities. Set if entity is potentially use visible,
  963. --       i.e. it is defined in a package that appears in a currently active
  964. --       use clause (RM 8.4(8)). Note that potentially use visible entities
  965. --       are not necessarily use visible (RM 8.4(9-11)).
  966.  
  967. --    Is_Preelaborated (Field59)
  968. --       Present in E_Package and E_Generic_Package entities, set if a
  969. --       pragma Preelaborate applies to the package. Note that this does
  970. --       not necessarily mean that no elaboration code is generated.
  971.  
  972. --    Is_Private (Flag57)
  973. --       Present in all entities. Indicates whether entity is directly
  974. --       declared within the private part of a package.
  975.  
  976. --    Is_Private_Descendant (Flag53)
  977. --       Present in entities that can represent library units (packages,
  978. --       functions, procedures). Set if the library unit is itself a private
  979. --       child unit, or if it is the descendent of a private child unit.
  980.  
  981. --    Is_Private_Type (synthesized)
  982. --       Defined for all entities, true for private types and subtypes,
  983. --       as well as for record with private types a subtypes
  984.  
  985. --    Is_Protected_Type (synthesized)
  986. --       Defined for all entities, true for protected types and subtypes
  987.  
  988. --    Is_Public (Flag10)
  989. --       Present in all entities. Set to indicate that an entity defined in
  990. --       one compilation unit can be referenced from other compilation units.
  991. --       If this reference causes a reference in the generated variable, for
  992. --       example in the case of a variable name, then Gigi will generate an
  993. --       appropriate external name for use by the linker.
  994.  
  995. --    Is_Protected_Private (synthesized)
  996. --       Defined for a record component. Returns true if this component
  997. --       is used to represent a private declaration of a protected type.
  998.  
  999. --    Is_Protected_Record_Type (synthesized)
  1000. --       Defined for all entities, true if Is_Concurrent_Record_Type
  1001. --       Corresponding_Concurrent_Type is a protected type.
  1002.  
  1003. --    Is_Pure (Flag44)
  1004. --       Present in all entities. Set in all entities of a unit to which a
  1005. --       pragma Pure is applied, and also set for the entity of the unit
  1006. --       itself. In addition, this flag may be set for any other functions
  1007. --       or procedures that are known to be side effect free, so in the case
  1008. --       of subprograms, the Is_Pure flag may be used by the optimizer to
  1009. --       imply that it can assume freedom from side effects (other than those
  1010. --       resulting from assignmnt to out parameters, or to objects designated
  1011. --       by access parameters).
  1012.  
  1013. --    Is_Real_Type (synthesized)
  1014. --       Defined for all entities, true for real types and subtypes
  1015.  
  1016. --    Is_Record_Type (synthesized)
  1017. --       Defined for all entities, true for record types and subtypes,
  1018. --       includes class-wide types and subtypes (which are also records)
  1019.  
  1020. --    Is_Remote_Call_Interface (Flag62)
  1021. --       Present in E_Package and E_Generic_Package entities, in subprograms
  1022. --       and in E_Access_Subprogram entities. In the first two cases, set if
  1023. --       a pragma Remote_Call_Interface applies to the package, in the
  1024. --       others cases, set if the entity is declared within an RCI package.
  1025.  
  1026. --    Is_Remote_Types (Flag61)
  1027. --       Present in E_Package and E_Generic_Package entities, set
  1028. --       if a pragma Remote_Types applies to the package. Also present in
  1029. --       entity of subprogram, set if the entity is declared in such unit.
  1030.  
  1031. --    Is_Return_By_Reference_Type (synthesized)
  1032. --       Defined for all type entities, True if all views af the type are
  1033. --       limited as well as all views of components types.
  1034.  
  1035. --    Is_Scalar_Type (synthesized)
  1036. --       Defined for all entities, true for scalar types and subtypes
  1037.  
  1038. --    Is_Shared_Passive (Flag60)
  1039. --       Present in E_Package and E_Generic_Package entities, set
  1040. --       if a pragma Shared_Passive applies to the package.
  1041.  
  1042. --    Is_String_Type (synthesized)
  1043. --       Defined for all type entities. Determines if the given type is a
  1044. --       string type, i.e. it is directly a string type or string subtype,
  1045. --       or a string slice type, or an array type with one dimension and a
  1046. --       component type that is a character type.
  1047.  
  1048. --    Is_Tag (Flag78)
  1049. --       Present in E_Component. For regular tagged type this flag is set on
  1050. --       the tag component (whose name is Name_uTag) and for CPP_Class tagged
  1051. --       types, this flag marks the pointer to the main vtable (i.e. the one
  1052. --       to be extended by derivation)
  1053.  
  1054. --    Is_Tagged_Type (Flag55)
  1055. --       Present in all entities, true for an entity for a tagged type.
  1056.  
  1057. --    Is_Task_Record_Type (synthesized)
  1058. --       Defined for all entities, true if Is_Concurrent_Record_Type
  1059. --       Corresponding_Concurrent_Type is a task type.
  1060.  
  1061. --    Is_Task_Type (synthesized)
  1062. --       Defined for all entities, true for task types and subtypes
  1063.  
  1064. --    Is_Type (synthesized)
  1065. --       Defined for all entities, true for a type entity
  1066.  
  1067. --    Is_Volatile (Flag16)
  1068. --       Present in all type entities, and also in constants, components and
  1069. --       variables. Set if a pragma Volatile applies to the entity. Also set
  1070. --       if pragma Shared or pragma Atomic applies to entity.
  1071.  
  1072. --    Last_Entity (Node10)
  1073. --       Present in all entities which act as scopes to which a list of
  1074. --       associated entities is attached (blocks, class subtypes and types,
  1075. --       entries, functions, loops, packages, procedures, protected objects,
  1076. --       record types and subtypes, private types, task types and subtypes).
  1077. --       Points to a the last entry in the list of associated entities chained
  1078. --       through the Next_Entity field. Empty if no entities are chained.
  1079.  
  1080. --    Lit_Name_Table (Node7)
  1081. --       Present in enumeration types and subtypes. Points to the entity
  1082. --       (which is of the special type E_Enum_Table_Type) for a table of
  1083. --       accesses to strings, generated by Gigi for each enumeration type.
  1084. --       The table is an array whose index values are 'Pos values and whose
  1085. --       entries are access to string, where each string is the 'Image value.
  1086.  
  1087. --    Machine_Attribute (Node17)
  1088. --       Present in subprograms. Used only if Has_Machine_Attribute is set.
  1089. --       Points to the N_Pragma node for the Machine_Attribute pragma.
  1090.  
  1091. --    Machine_Radix_10 (Flag84)
  1092. --       Present in decimal types and subtypes, set if the Machine_Radix
  1093. --       is 10, as the result of the specification of a machine radix
  1094. --       representation clause. Note that it is possible for this flag
  1095. --       to be set without having Has_Machine_Radix_Clause True. This
  1096. --       happens when a type is derived from a type with a clause present.
  1097.  
  1098. --    Master_Id (Node9)
  1099. --       Present in access types and subtypes. . Empty unless Has_Tasks is
  1100. --       set for the designated type, in which case it points to the entity
  1101. --       for the Master_Id for the access type master.
  1102.  
  1103. --    Modulus (Uint9)
  1104. --       Present in modular types. Contains the modulus (a power of 2).
  1105.  
  1106. --    Needs_Discr_Check (Flag50)
  1107. --       Present in components. Set if references to this component
  1108. --       require a discriminant check.
  1109.  
  1110. --    Needs_No_Actuals (Flag22)
  1111. --       Applies to callable entities (subprograms, entries, access to
  1112. --       subprograms)  which can be called without actuals because all of
  1113. --       their formals (if any) have default values. This flag simplifies the
  1114. --       resolution of the syntactic ambiguity involving a call to these
  1115. --       entities when the return type is an array type, and a call can be
  1116. --       interpreted as an indexing of the result of the call. It is also
  1117. --       used to resolve various cases of entry calls.
  1118.  
  1119. --    Next_Component (synthesized)
  1120. --       Defined for a record component. Returns the next component by
  1121. --       following the chain of declared entities until one is found which
  1122. --       corresponds to a component (Ekind is E_Variable). Any internal types
  1123. --       generated from the subtype indications of the record components are
  1124. --       skipped. Returns Empty if no more components.
  1125.  
  1126. --    Next_Discriminant (synthesized)
  1127. --       Defined for a discriminant. Returns the next discriminant by
  1128. --       following the chain of declared entities as long as the kind of
  1129. --       the entity corresponds to a discriminant. Note that the discriminants
  1130. --       might be the only components of the record. Returns Empty if there
  1131. --       are no more discriminants.
  1132.  
  1133. --    Next_Entity (Node2)
  1134. --       Present in all entities. The entities of a scope are chained, with
  1135. --       the head of the list being in the First_Entity field of the scope
  1136. --       entity. All entities use the Next_Entity field as a forward pointer
  1137. --       for this list, with Empty indicating the end of the list. Since this
  1138. --       field is in the base part of the entity, the access routines for this
  1139. --       field are in Sinfo.
  1140.  
  1141. --    Next_Formal (synthesized)
  1142. --       Defined for the entity for a formal parameter. Returns the next
  1143. --       formal parameter of the subprogram or subprogram type. Returns
  1144. --       Empty if there are no more formals.
  1145.  
  1146. --    Next_Index (synthesized, applies to index nodes, not entities)
  1147. --       Defined for array types and subtypes and to string types and
  1148. --       subtypes. Yields the next index. The first index is obtained by
  1149. --       using the First_Index attribute, and then subsequent indexes are
  1150. --       obtained by applying Next_Index to the previous index. Empty is
  1151. --       returned to indicate that there are no more indexes.
  1152.  
  1153. --    Next_Inlined_Subprogram (Node12)
  1154. --       Defined for subprograms. Used to chain inlined subprograms used in
  1155. --       the current compilation, in the order in which they must be compiled
  1156. --       by Gigi to insure that all inlinings are performed.
  1157.  
  1158. --    Next_Itype (Node16)
  1159. --       Present in all entities for types. Used as a forward link for a
  1160. --       chain of implicit Itypes (See spec of package itypes for details)
  1161.  
  1162. --    Next_Literal (synthesized)
  1163. --       Defined for enumeration literals, returns the next literal, or
  1164. --       Empty if applied to the last literal. This is actually a synonym
  1165. --       for Next, but its use is preferred in this context.
  1166.  
  1167. --    Next_Overloads (synthesized)
  1168. --       Defined for all entities. This is a synonym for Homonym used in
  1169. --       conjunction with overloading resolution
  1170.  
  1171. --    Number_Dimensions (synthesized)
  1172. --       Defined for array entities. Returns the number of dimensions of
  1173. --       the array entity as a value of type Pos.
  1174.  
  1175. --    Number_Discriminants (synthesized)
  1176. --       Defined for all types with discriminants.
  1177.  
  1178. --    Object_Ref (Node9)
  1179. --       Applies to protected bodies. This is an implicit prival for the
  1180. --       Protection object associated with a protected object. See Prival
  1181. --       for further details on the use of privals.
  1182.  
  1183. --    Original_Record_Component (Node8)
  1184. --       Present in components, including discriminants. When the component is
  1185. --       inherited in a record extension, it points to the original component
  1186. --       (the entity of the ancestor component which is not itself inherited)
  1187. --       otherwise it points to itself. Gigi uses this attribute to implement
  1188. --       the automatic dereference in the extension and to apply the
  1189. --       transformation:
  1190. --
  1191. --         Rec_Ext.Comp -> Rec_Ext.Parent. ... .Parent.Comp
  1192.  
  1193. --    Packed_Array_Type (Node14)
  1194. --       Present in array types and subtypes if the corresponding type is
  1195. --       packed. Represents the type used to represent the packed array,
  1196. --       which is either a modular type for short static arrays, or an
  1197. --       array of System.Unsigned. Note that in some situations (internal
  1198. --       types, and references to fields of variant records), it is not
  1199. --       always possible to construct this type in advance of its use. If
  1200. --       Packed_Array_Type is empty, then the necessary type is declared
  1201. --       on the fly for each reference to the array.
  1202.  
  1203. --    Parameter_Mode (synthesized)
  1204. --       Defined for formal parameter entities. This is a synonym for Ekind,
  1205. --       used when obtaining the formal kind of a formal parameter (the result
  1206. --       is one of E_[In/Out/In_Out]_Paramter)
  1207.  
  1208. --    Primitive_Operations (Elist13)
  1209. --       Present in tagged record types and subtypes and in tagged private
  1210. --       types. Points to an element list of entities for primitive operations
  1211. --       for the tagged type. Not present (and not set) in untagged types (it
  1212. --       is an error to reference the primitive operations field of a type
  1213. --       that is not tagged).
  1214.  
  1215. --    Private_Dependents (Elist7)
  1216. --       Present in private (sub)types. Records the subtypes of the
  1217. --       private type, derivations from it, and records and arrays
  1218. --       with components dependent on the type.
  1219. --       The subtypes are traversed when installing and deinstalling
  1220. --       (the full view of) a private type in order to ensure correct
  1221. --       view of the subtypes.
  1222.  
  1223. --    Prival (Node9)
  1224. --       Present in components. Used for representing private declarations
  1225. --       of protected objects (private formal: by analogy to discriminal).
  1226. --       Empty unless the synthesized Is_Protected_Private attribute is
  1227. --       true. The entity used as a formal parameter that corresponds to
  1228. --       the to the private declaration in protected operations. See
  1229. --       "Private data in protected objects" for details.
  1230.  
  1231. --    Protected_Formal (Node8)
  1232. --       Present in formal parameters (in, in out and out parameters). Used
  1233. --       only for formals of protected operations. References corresponding
  1234. --       formal parameter in the unprotected version of the operation that
  1235. --       is created during expansion.
  1236.  
  1237. --    Protected_Body_Subprogram (Node11)
  1238. --       Present in protected operations. References the
  1239. --       entity for the subprogram which implements the body of the
  1240. --       operation.
  1241.  
  1242. --    Protected_Operation (Node14)
  1243. --       Present in components. Used for representing private declarations
  1244. --       of protected objects. Empty unless the synthesized attribute
  1245. --       Is_Protected_Private is true. This is the entity corresponding
  1246. --       to the body of the protected operation currently being analyzed,
  1247. --       and which will eventually use the current Prival associated with
  1248. --       this component to refer to the renaming of a private object
  1249. --       component. As soon as the expander generates this renaming, this
  1250. --       attribute is changed to refer to the next protected subprogram.
  1251. --       See "Private data in protected objects" for details.
  1252.  
  1253. --    Reachable (Flag49)
  1254. --       Present in labels. The flag is set over the range of statements in
  1255. --       which a goto to that label is legal.
  1256.  
  1257. --    Renamed_Entity (Node7)
  1258. --       Present in exceptions, packages and generic units that are defined
  1259. --       by a renaming declaration. Denotes the renamed entity, or transit-
  1260. --       itively the ultimate renamed entity if there is a chain of renaming
  1261. --       declarations.
  1262.  
  1263. --    Renamed_Object (Node7)
  1264. --       Present in constants and variables. Non-Empty only if the variable
  1265. --       or constant was declared by a renaming declaration, in which case
  1266. --       it references the tree node for the name of the renamed object.
  1267.  
  1268. --    Return_Present (Flag54)
  1269. --       Present in function and generic function entities. Set if the
  1270. --       function contains a return statement (used for error checking).
  1271.  
  1272. --    Returns_By_Ref (Flag90)
  1273. --       Present in function entities, to indicate that the function
  1274. --       returns the result by reference, either because its return typ is a
  1275. --       by-reference-type or because it uses explicitly the secondary stack.
  1276.  
  1277. --    Root_Type (synthesized)
  1278. --       Defined for all entity types. Returns the root type (i.e. the
  1279. --       ultimate derivation ancestor) of the given type. For a predefined
  1280. --       type, this is the type itself.
  1281.  
  1282. --    Scalar_Range (Node10)
  1283. --       Present in all scalar types (including modular types, where the
  1284. --       bounds are 0 .. modulus - 1). References a node in the tree that
  1285. --       contains the bounds for the range. Note that this information
  1286. --       could be obtained by rummaging around the tree, but it is more
  1287. --       convenient to have it immediately at hand in the entity.
  1288.  
  1289. --    Scale_Value (Uint15)
  1290. --       Present in decimal fixed-point types and subtypes. Contains the scale
  1291. --       for the type (i.e. the value of type'Scale = the number of decimal
  1292. --       digits after the decimal point).
  1293.  
  1294. --    Scope (Node3)
  1295. --       Present in all entities. Points to the entity for the scope (block,
  1296. --       loop, subprogram, package etc.) in which the entity is declared.
  1297. --       Since this field is in the base part of the entity node, the access
  1298. --       routines for this field are in Sinfo.
  1299.  
  1300. --    Scope_Depth (Uint8)
  1301. --       Present in program units, blocks, and concurrent types. Indicates the
  1302. --       number of scopes that statically enclose the declaration of the unit
  1303. --       or type. Library units have a depth of zero.
  1304.  
  1305. --    Size_Known_At_Compile_Time (Flag92)
  1306. --       Present in all entities for types and subtypes. Indicates that the
  1307. --       Esize value is known at compile time. This flag is used to optimize
  1308. --       some generated code sequences. It is set conservatively (i.e. if it
  1309. --       is set, the size is certainly known at compile time, if it is clear,
  1310. --       then the size may or may not be known at compile time, but the code
  1311. --       will assume that it is not known).
  1312.  
  1313. --    Small_Value (Ureal6)
  1314. --       Present in fixed point types. Points to the universal real for the
  1315. --       Small of the type, either as given in a representation clause, or
  1316. --       as computed (as a power of two) by the compiler.
  1317.  
  1318. --    Storage_Size_Variable (Node15)
  1319. --       Present in access kind entities and task type entities. Points to the
  1320. --       entity for a variable that is created to hold the value given in a
  1321. --       Storage_Size pragma for an access collection or a task type.
  1322.  
  1323. --    String_Literal_Length (Uint11)
  1324. --       Present in string literal subtypes (which are created to correspond
  1325. --       to string literals in the program). Contains the length of the string
  1326. --       literal.
  1327.  
  1328. --    Suppress_Access_Checks (Flag31)
  1329. --       Present in all entities. Set if access checks associated with this
  1330. --       entity are to be suppressed (see separate section on "Handling of
  1331. --       Check Suppression")
  1332.  
  1333. --    Suppress_Accessibility_Checks (Flag32)
  1334. --       Present in all entities. Set if accessibility checks associated with
  1335. --       this entity are to be suppressed (see separate section on "Handling
  1336. --       of Check Suppression")
  1337.  
  1338. --    Suppress_Discriminant_Checks (Flag33)
  1339. --       Present in all entities. Set if discriminant checks associated with
  1340. --       this entity are to be suppressed (see separate section on "Handling
  1341. --       of Check Suppression")
  1342.  
  1343. --    Suppress_Division_Checks (Flag34)
  1344. --       Present in all entities. Set if division checks associated with
  1345. --       this entity are to be suppressed (see separate section on "Handling
  1346. --       of Check Suppression")
  1347.  
  1348. --    Suppress_Elaboration_Checks (Flag35)
  1349. --       Present in all entities. Set if elaboration checks associated with
  1350. --       this entity are to be suppressed (see separate section on "Handling
  1351. --       of Check Suppression")
  1352.  
  1353. --    Suppress_Index_Checks (Flag36)
  1354. --       Present in all entities. Set if index checks associated with this
  1355. --       entity are to be suppressed (see separate section on "Handling of
  1356. --       Check Suppression")
  1357.  
  1358. --    Suppress_Length_Checks (Flag37)
  1359. --       Present in all entities. Set if length checks associated with this
  1360. --       entity are to be suppressed (see separate section on "Handling of
  1361. --       Check Suppression")
  1362.  
  1363. --    Suppress_Overflow_Checks (Flag38)
  1364. --       Present in all entities. Set if overflow checks associated with
  1365. --       this entity are to be suppressed (see separate section on "Handling
  1366. --       of Check Suppression")
  1367.  
  1368. --    Suppress_Range_Checks (Flag39)
  1369. --       Present in all entities. Set if range checks associated with this
  1370. --       entity are to be suppressed (see separate section on "Handling of
  1371. --       Check Suppression")
  1372.  
  1373. --    Suppress_Storage_Checks (Flag40)
  1374. --       Present in all entities. Set if storage checks associated with
  1375. --       this entity are to be suppressed (see separate section on "Handling
  1376. --       of Check Suppression")
  1377.  
  1378. --    Suppress_Tag_Checks (Flag41)
  1379. --       Present in all entities. Set if tag checks associated with this
  1380. --       entity are to be suppressed (see separate section on "Handling of
  1381. --       Check Suppression")
  1382.  
  1383. --    Table_High_Bound (Node11)
  1384. --       Present in the special Enum_Table_Type entities created to
  1385. --       represent the Lit_Name_Table created by Gigi. Contains the high
  1386. --       bound (i.e. number of entries minus one) of the created table.
  1387. --       Equal to Enum_Type'Pos (Enum_Type'Last).
  1388.  
  1389. --    Tag_Component (synthesized)
  1390. --       Defined for tagged record types, returns the entity for the _Tag
  1391. --       field in this record, which must be present.
  1392.  
  1393. --    Task_Activation_Chain_Entity (Node14)
  1394. --       Present in scopes which can have an associated task activation chain
  1395. --       (blocks, functions, procedures, task types, entries, packages). It
  1396. --       holds the entity associated with this activation chain. Empty if no
  1397. --       chain is currently established. See Exp_Ch9 for details.
  1398.  
  1399. --    Task_Body_Procedure (Node19)
  1400. --       Present in task types and subtypes. Points to the entity for the
  1401. --       task body procedure (as further described in Exp_Ch9, task bodies
  1402. --       are expanded into procedures).
  1403.  
  1404. --    Type_High_Bound (synthesized)
  1405. --       Defined for scalar types. Returns the tree node (Node_Id) that
  1406. --       contains the high bound of a scalar type. The returned value is a
  1407. --       literal for a base type, but may be an expression in the case of a
  1408. --       scalar type with dynamic bounds. Note that in the case of a fixed
  1409. --       point type, the high bound is in units of small, and is an integer.
  1410.  
  1411. --    Type_Low_Bound (synthesized)
  1412. --       Defined for scalar types. Returns the tree node (Node_Id) that
  1413. --       contains the low bound of a scalar type. The returned value is a
  1414. --       literal for a base type, but may be an expression in the case of a
  1415. --       scalar type with dynamic bounds. Note that in the case of a fixed
  1416. --       point type, the low bound is in units of small, and is an integer.
  1417.  
  1418. --    Underlying_Type (synthesized)
  1419. --       Defined for all type entities. Gives the entity of the underlying
  1420. --       type. For types other than private and incomplete types, this is
  1421. --       the type itself. For incomplete and private types, it is the
  1422. --       underlying type of the type declared by the completion, or Empty
  1423. --       if the completion has not yet been encountered and analyzed.
  1424.  
  1425. --    Uses_Sec_Stack (Flag95)
  1426. --       Present in scope entities (blocks,functions, procedures, tasks,
  1427. --       entries). Set to True when secondary stack is used in this scope and
  1428. --       must be released on exit.
  1429.  
  1430.    ------------------
  1431.    -- Access Kinds --
  1432.    ------------------
  1433.  
  1434.    --  The following three entity kinds are introduced by the corresponding
  1435.    --  type definitions:
  1436.  
  1437.    --    E_Access_Type,  E_General_Access_Type,  E_Anonymous_Access_Type.
  1438.  
  1439.    --  In addition, we define the kind E_Allocator_Type to label
  1440.    --  allocators.  This is because special resolution rules apply to this
  1441.    --  construct. Eventually the constructs are labelled with the access
  1442.    --  type imposed by the context. Gigi should never see the type
  1443.    --  E_Allocator.
  1444.  
  1445.    --  Finally, the type Any_Access is used to label -null- during type
  1446.    --  resolution. Any_Access is also replaced by the context type after
  1447.    --  resolution.
  1448.  
  1449.    --------------------------------
  1450.    -- Classification of Entities --
  1451.    --------------------------------
  1452.  
  1453.    --  The classification of program entities which follows is a refinement of
  1454.    --  the list given in RM 3.1(1). E.g., separate entities denote subtypes of
  1455.    --  different type classes. Ada 95 entities include class wide types,
  1456.    --  protected types, subprogram types, generalized access types,  generic
  1457.    --  formal derived types and generic formal packages.
  1458.  
  1459.    --  The order chosen for these kinds allows us to classify related entities
  1460.    --  sp that they are contiguous. As a result, they do not appear in the
  1461.    --  exact same order as their order of first appearance in the LRM (For
  1462.    --  example, private types are listed before packages). The contiguity
  1463.    --  allows us to define useful subtypes (see below) such as type entities,
  1464.    --  overloaded entities, etc.
  1465.  
  1466.    --  Each entity (explicitly or implicitly declared) has a kind, which is
  1467.    --  a value of the following type:
  1468.  
  1469.    type Entity_Kind is (
  1470.  
  1471.       E_Void,
  1472.       --  The initial Ekind value for a newly created entity. Also used as
  1473.       --  the Ekind for Standard_Void_Type, a type entity in Standard used
  1474.       --  as a dummy type for the return type of a procedure (the reason we
  1475.       --  create this type is to share the circuits for performing overload
  1476.       --  resolution on calls).
  1477.  
  1478.       -------------
  1479.       -- Objects --
  1480.       -------------
  1481.  
  1482.       E_Variable,
  1483.       --  Variables created by an object declaration with no constant keyword
  1484.  
  1485.       E_Component,
  1486.       --  Components of a record declaration, private declarations of
  1487.       --  protected objects.
  1488.  
  1489.       E_Constant,
  1490.       --  Constants created by an object declaration with a constant keyword
  1491.  
  1492.       E_Discriminant,
  1493.       --  A discriminant, created by the use of a discriminant in a type
  1494.       --  declaration.
  1495.  
  1496.       ------------------------
  1497.       -- Parameter Entities --
  1498.       ------------------------
  1499.  
  1500.       --  Parameters are also objects
  1501.  
  1502.       E_In_Parameter,
  1503.       --  An in parameter of a subprogram or entry
  1504.  
  1505.       E_Out_Parameter,
  1506.       --  An out parameter of a subprogram or entry
  1507.  
  1508.       E_In_Out_Parameter,
  1509.       --  An in-out parameter of a subprogram or entry
  1510.  
  1511.       -------------------
  1512.       -- Named Numbers --
  1513.       -------------------
  1514.  
  1515.       E_Named_Integer,
  1516.       --  Named numbers created by a number declaration with an integer value
  1517.  
  1518.       E_Named_Real,
  1519.       --  Named numbers created by a number declaration with a real value
  1520.  
  1521.       -----------------------
  1522.       -- Enumeration Types --
  1523.       -----------------------
  1524.  
  1525.       E_Enumeration_Type,
  1526.       --  Enumeration types, created by an enumeration type declaration
  1527.  
  1528.       E_Enumeration_Subtype,
  1529.       --  Enumeration subtypes, created by an explicit or implicit subtype
  1530.       --  declaration applied to an enumeration type or subtype.
  1531.  
  1532.       -------------------
  1533.       -- Numeric Types --
  1534.       -------------------
  1535.  
  1536.       E_Signed_Integer_Type,
  1537.       --  Signed integer type, used for the anonymous base type of the
  1538.       --  integer subtype created by an integer type declaration.
  1539.  
  1540.       E_Signed_Integer_Subtype,
  1541.       --  Signed integer subtype, created by either an integer subtype or
  1542.       --  integer type declaration (in the latter case an integer type is
  1543.       --  created for the base type, and this is the first named subtype).
  1544.  
  1545.       E_Modular_Integer_Type,
  1546.       --  Modular integer type, used for the anonymous base type of the
  1547.       --  integer subtype created by a modular integer type declaration.
  1548.  
  1549.       E_Modular_Integer_Subtype,
  1550.       --  Modular integer subtype, created by either an modular subtype
  1551.       --  or modular type declaration (in the latter case a modular type
  1552.       --  is created for the base type, and this is the first named subtype).
  1553.  
  1554.       E_Ordinary_Fixed_Point_Type,
  1555.       --  Ordinary fixed type, used for the anonymous base type of the
  1556.       --  fixed subtype created by an ordinary fixed point type declaration.
  1557.  
  1558.       E_Ordinary_Fixed_Point_Subtype,
  1559.       --  Ordinary fixed point subtype, created by either an ordinary fixed
  1560.       --  point subtype or ordinary fixed point type declaration (in the
  1561.       --  latter case a fixed point type is created for the base type, and
  1562.       --  this is the first named subtype).
  1563.  
  1564.       E_Decimal_Fixed_Point_Type,
  1565.       --  Decimal fixed type, used for the anonymous base type of the decimal
  1566.       --  fixed subtype created by an ordinary fixed point type declaration.
  1567.  
  1568.       E_Decimal_Fixed_Point_Subtype,
  1569.       --  Decimal fixed point subtype, created by either a decimal fixed point
  1570.       --  subtype or decimal fixed point type declaration (in the latter case
  1571.       --  a fixed point type is created for the base type, and this is the
  1572.       --  first named subtype).
  1573.  
  1574.       E_Floating_Point_Type,
  1575.       --  Floating point type, used for the anonymous base type of the
  1576.       --  floating point subtype created by a floating point type declaration.
  1577.  
  1578.       E_Floating_Point_Subtype,
  1579.       --  Floating point subtype, created by either a floating point subtype
  1580.       --  or floating point type declaration (in the latter case a floating
  1581.       --  point type is created for the base type, and this is the first
  1582.       --  named subtype).
  1583.  
  1584.       ------------------
  1585.       -- Access Types --
  1586.       ------------------
  1587.  
  1588.       E_Access_Type,
  1589.       --  An access type created by an access type declaration with no all
  1590.       --  keyword present. Note that the predefined type Any_Access, which
  1591.       --  has E_Access_Type Ekind, is used to label NULL in the upwards pass
  1592.       --  of type analysis, to be replaced by the true access type in the
  1593.       --  downwards resolution pass.
  1594.  
  1595.       E_Access_Subtype,
  1596.       --  An access subtype created by a subtype declaration for any access
  1597.       --  type (whether or not it is a general access type).
  1598.  
  1599.       E_Allocator_Type,
  1600.       --  A special internal type used to label allocators and attribute
  1601.       --  references using 'Access. This is needed because special resolution
  1602.       --  rules apply to these constructs. On the resolution pass, this type
  1603.       --  is always replaced by the actual access type, so Gigi should never
  1604.       --  see types with this Ekind.
  1605.  
  1606.       E_General_Access_Type,
  1607.       --  An access type created by an access type declaration with the all
  1608.       --  keyword present.
  1609.  
  1610.       E_Access_Subprogram_Type,
  1611.       --  An access to subprogram type, created by an access to subprogram
  1612.       --  declaration.
  1613.  
  1614.       E_Anonymous_Access_Type,
  1615.       --  An anonymous access type created by an access parameter, access
  1616.       --  discriminant or access attributes (such as 'Access,
  1617.       --  'Unrestricted_Access and Unchecked_Access)
  1618.  
  1619.       ---------------------
  1620.       -- Composite Types --
  1621.       ---------------------
  1622.  
  1623.       E_Array_Type,
  1624.       --  An array type created by an array type declaration. Includes all
  1625.       --  cases of arrays, except for string types.
  1626.  
  1627.       E_Array_Subtype,
  1628.       --  An array subtype, created by an explicit array subtype declaration,
  1629.       --  or the use of an anonymous array subtype.
  1630.  
  1631.       E_String_Type,
  1632.       --  A string type, i.e. an array type whose component type is a character
  1633.       --  type, and for which string literals can thus be written.
  1634.  
  1635.       E_String_Subtype,
  1636.       --  A string subtype, created by an explicit subtype declaration for a
  1637.       --  string type, or the use of an anonymous subtype of a string type,
  1638.  
  1639.       E_String_Literal_Subtype,
  1640.       --  A special string subtype, used only to describe the type of a string
  1641.       --  literal (will always be one dimensional, with literal bounds).
  1642.  
  1643.       E_Enum_Table_Type,
  1644.       --  A special type used to describe the table built for an enumeration
  1645.       --  type containing the literal strings. This is a one dimensional
  1646.       --  array whose index type is the enumeration type in question, and
  1647.       --  whose component type is access to string. The actual string values
  1648.       --  for the table are filled in by Gigi.
  1649.  
  1650.       E_Class_Wide_Type,
  1651.       --  A class wide type, created by any tagged type declaration (i.e. if
  1652.       --  a tagged type is declared, the corresponding class type is always
  1653.       --  created, using this Ekind value).
  1654.  
  1655.       E_Class_Wide_Subtype,
  1656.       --  A subtype of a class wide type, created by a subtype declaration
  1657.       --  used to declare a subtype of a class type.
  1658.  
  1659.       E_Record_Type,
  1660.       --  A record type, created by a record type declaration
  1661.  
  1662.       E_Record_Subtype,
  1663.       --  A record subtype, created by a record subtype declaration.
  1664.  
  1665.       E_Record_Type_With_Private,
  1666.       --  Used for types defined by a private extension declaration. Includes
  1667.       --  the fields for both private types and for record types (with the
  1668.       --  sole exception of Corresponding_Concurrent_Type which is obviously
  1669.       --  not needed). This entity is considered to be both a record type and
  1670.       --  a private type.
  1671.  
  1672.       E_Record_Subtype_With_Private,
  1673.       --  A subtype of a type defined by a private extension declaration.
  1674.  
  1675.       E_Private_Type,
  1676.       --  A private type, created by a private type declaration that does
  1677.       --  not have the keyword limited.
  1678.  
  1679.       E_Private_Subtype,
  1680.       --  A subtype of a private type, created by a subtype declaration used
  1681.       --  to declare a subtype of a private type.
  1682.  
  1683.       E_Limited_Private_Type,
  1684.       --  A limited private type, created by a private type declaration that
  1685.       --  has the keyword limited.
  1686.  
  1687.       E_Limited_Private_Subtype,
  1688.       --  A subtype of a limited private type, created by a subtype declaration
  1689.       --  used to declare a subtype of a limited private type.
  1690.  
  1691.       E_Limited_Type,
  1692.       --  A limited type, ???
  1693.  
  1694.       E_Incomplete_Type,
  1695.       --  An incomplete type, created by an incomplete type declaration
  1696.  
  1697.       E_Task_Type,
  1698.       --  A task type, created by a task type declaration. An entity with this
  1699.       --  Ekind is also created to describe the anonymous type of a task that
  1700.       --  is created by a single task declaration.
  1701.  
  1702.       E_Task_Subtype,
  1703.       --  A subtype of a task type, created by a subtype declaration used to
  1704.       --  declare a subtype of a task type.
  1705.  
  1706.       E_Protected_Type,
  1707.       --  A protected type, created by a protected type declaration. An entity
  1708.       --  with this Ekind is also created to describe the anonymous type of
  1709.       --  a protected object created by a single protected declaration.
  1710.  
  1711.       E_Protected_Subtype,
  1712.       --  A subtype of a protected type, created by a subtype declaration used
  1713.       --  to declare a subtype of a protected type.
  1714.  
  1715.       -----------------
  1716.       -- Other Types --
  1717.       -----------------
  1718.  
  1719.       E_Exception_Type,
  1720.       --  The type of an exception created by an exception declaration
  1721.  
  1722.       E_Subprogram_Type,
  1723.       --  This is the designated type of an Access_To_Subprogram. Has type
  1724.       --  and signature like a subprogram entity, so can appear in calls,
  1725.       --  which are resolved like regular calls, except that such an entity
  1726.       --  is not overloadable.
  1727.  
  1728.       ---------------------------
  1729.       -- Overloadable Entities --
  1730.       ---------------------------
  1731.  
  1732.       E_Enumeration_Literal,
  1733.       --  An enumeration literal, created by the use of the literal in an
  1734.       --  enumeration type definition.
  1735.  
  1736.       E_Function,
  1737.       --  A function, created by a function declaration or a function body
  1738.       --  that acts as its own declaration.
  1739.  
  1740.       E_Operator,
  1741.       --  A predefined operator, appearing in Standard, or an implicitly
  1742.       --  defined concatenation operator created whenever an array is
  1743.       --  declared. We do not make normal derived operators explicit in
  1744.       --  the tree, but the concatenation operators are made explicit.
  1745.  
  1746.       E_Procedure,
  1747.       --  A procedure, created by a procedure declaration or a procedure
  1748.       --  body that acts as its own declaration.
  1749.  
  1750.       E_Entry,
  1751.       --  An entry, created by an entry declaration in a task or protected
  1752.       --  object.
  1753.  
  1754.       --------------------
  1755.       -- Other Entities --
  1756.       --------------------
  1757.  
  1758.       E_Block,
  1759.       --  A block identifier, created by an explicit or implicit label on
  1760.       --  a block or declare statement.
  1761.  
  1762.       E_Entry_Family,
  1763.       --  An entry family, created by an entry family declaration in a
  1764.       --  task or protected type definition.
  1765.  
  1766.       E_Entry_Index_Parameter,
  1767.       --  An entry index parameter created by an entry index specification
  1768.       --  for the body of a protected entry family.
  1769.  
  1770.       E_Exception,
  1771.       --  An exception created by an exception declaration. The exception
  1772.       --  itself uses E_Exception for the Ekind, the implicit type that is
  1773.       --  created to represent its type uses the Ekind E_Exception_Type.
  1774.  
  1775.       E_Generic_Function,
  1776.       --  A generic function. This is the entity for a generic function
  1777.       --  created by a generic subprogram declaration.
  1778.  
  1779.       E_Generic_In_Out_Parameter,
  1780.       --  A generic in out parameter, created by the use of a generic in out
  1781.       --  parameter in a generic declaration.
  1782.  
  1783.       E_Generic_In_Parameter,
  1784.       --  A generic in parameter, created by the use of a generic in
  1785.       --  parameter in a generic declaration.
  1786.  
  1787.       E_Generic_Package,
  1788.       --  A generic package, this is the entity for a generic package created
  1789.       --  by a generic package declaration.
  1790.  
  1791.       E_Generic_Procedure,
  1792.       --  A generic function. This is the entity for a generic procedure
  1793.       --  created by a generic subprogramh declaration.
  1794.  
  1795.       E_Label,
  1796.       --  The defining entity for a label. Note that this is created by the
  1797.       --  implicit label declaration, not the occurrence of the label itself,
  1798.       --  which is simply a direct name referring to the label.
  1799.  
  1800.       E_Loop,
  1801.       --  A loop identifier, created by an explicit or implicit label on a
  1802.       --  loop statement.
  1803.  
  1804.       E_Loop_Parameter,
  1805.       --  A loop parameter created by a for loop
  1806.  
  1807.       E_Package,
  1808.       --  A package, created by a package declaration
  1809.  
  1810.       E_Package_Body,
  1811.       --  A package body. This entity serves almost no function, since all
  1812.       --  semantic analysis uses the package entity (E_Package).
  1813.  
  1814.       E_Protected_Object,
  1815.       --  A protected object, created by an object declaration that declares
  1816.       --  an object of a protected type.
  1817.  
  1818.       E_Protected_Body,
  1819.       --  A protected body. This entity serves almost no function, since all
  1820.       --  semantic analysis uses the protected entity (E_Protected_Type)
  1821.  
  1822.       E_Task_Body,
  1823.       --  A task body. This entity serves almost no function, since all
  1824.       --  semantic analysis uses the protected entity (E_Task_Type).
  1825.  
  1826.       E_Subprogram_Body
  1827.       --  A subprogram body. Used when a subprogram has a separate declaration
  1828.       --  to represent the entity for the body. This entity serves almost no
  1829.       --  function, since all semantic analysis uses the subprogram entity
  1830.       --  for the declaration (E_Function or E_Procedure).
  1831.    );
  1832.  
  1833.    --------------------------
  1834.    -- Subtype Declarations --
  1835.    --------------------------
  1836.  
  1837.    --  The above entities are arranged so that they can be conveniently
  1838.    --  grouped into subtype ranges. Note that for each of the xxx_KInd
  1839.    --  ranges defined below, there is a corresponding Is_xxx.. predicate
  1840.    --  which is to be used in preference to direct range tests using the
  1841.    --  subtype name. However, the subtype names are available for direct
  1842.    --  use, e.g. as choices in case statements.
  1843.  
  1844.    subtype Access_Kind                 is Entity_Kind range
  1845.        E_Access_Type ..
  1846.    --  E_Access_Subtype
  1847.    --  E_Allocator_Type
  1848.    --  E_General_Access_Type
  1849.    --  E_Access_Subprogram_Type
  1850.        E_Anonymous_Access_Type;
  1851.  
  1852.    subtype Array_Kind                  is Entity_Kind range
  1853.        E_Array_Type ..
  1854.    --  E_Array_Subtype
  1855.    --  E_String_Type
  1856.    --  E_String_Subtype
  1857.    --  E_String_Literal_Subtype
  1858.        E_Enum_Table_Type;
  1859.  
  1860.    subtype Class_Wide_Kind             is Entity_Kind range
  1861.        E_Class_Wide_Type ..
  1862.        E_Class_Wide_Subtype;
  1863.  
  1864.    subtype Composite_Kind              is Entity_Kind range
  1865.        E_Array_Type ..
  1866.    --  E_Array_Subtype
  1867.    --  E_String_Type
  1868.    --  E_String_Subtype
  1869.    --  E_String_Literal_Subtype
  1870.    --  E_Class_Wide_Type
  1871.    --  E_Class_Wide_Subtype
  1872.    --  E_Record_Type
  1873.    --  E_Record_Subtype
  1874.    --  E_Record_Type_With_Private
  1875.    --  E_Record_Subtype_With_Private
  1876.    --  E_Private_Type
  1877.    --  E_Private_Subtype
  1878.    --  E_Limited_Private_Type
  1879.    --  E_Limited_Private_Subtype
  1880.    --  E_Limited_Type
  1881.    --  E_Incomplete_Type
  1882.    --  E_Task_Type
  1883.    --  E_Task_Subtype,
  1884.    --  E_Protected_Type,
  1885.        E_Protected_Subtype;
  1886.  
  1887.    subtype Concurrent_Kind             is Entity_Kind range
  1888.        E_Task_Type ..
  1889.    --  E_Task_Subtype,
  1890.    --  E_Protected_Type,
  1891.        E_Protected_Subtype;
  1892.  
  1893.    subtype Concurrent_Body_Kind        is Entity_Kind range
  1894.        E_Protected_Body ..
  1895.        E_Task_Body;
  1896.  
  1897.    subtype Decimal_Fixed_Point_Kind    is Entity_Kind range
  1898.        E_Decimal_Fixed_Point_Type ..
  1899.        E_Decimal_Fixed_Point_Subtype;
  1900.  
  1901.    subtype Digits_Kind                 is Entity_Kind range
  1902.        E_Decimal_Fixed_Point_Type ..
  1903.    --  E_Decimal_Fixed_Point_Subtype
  1904.    --  E_Floating_Point_Type
  1905.        E_Floating_Point_Subtype;
  1906.  
  1907.    subtype Discrete_Kind               is Entity_Kind range
  1908.        E_Enumeration_Type ..
  1909.    --  E_Enumeration_Subtype
  1910.    --  E_Signed_Integer_Type
  1911.    --  E_Signed_Integer_Subtype
  1912.    --  E_Modular_Integer_Type
  1913.        E_Modular_Integer_Subtype;
  1914.  
  1915.    subtype Elementary_Kind             is Entity_Kind range
  1916.        E_Enumeration_Type ..
  1917.    --  E_Enumeration_Subtype
  1918.    --  E_Signed_Integer_Type
  1919.    --  E_Signed_Integer_Subtype
  1920.    --  E_Modular_Integer_Type
  1921.    --  E_Modular_Integer_Subtype
  1922.    --  E_Ordinary_Fixed_Point_Type
  1923.    --  E_Ordinary_Fixed_Point_Subtype
  1924.    --  E_Decimal_Fixed_Point_Type
  1925.    --  E_Decimal_Fixed_Point_Subtype
  1926.    --  E_Floating_Point_Type
  1927.    --  E_Floating_Point_Subtype
  1928.    --  E_Access_Type
  1929.    --  E_Access_Subtype
  1930.    --  E_Allocator_Type
  1931.    --  E_General_Access_Type
  1932.    --  E_Access_Subprogram_Type
  1933.        E_Anonymous_Access_Type;
  1934.  
  1935.    subtype Enumeration_Kind            is Entity_Kind range
  1936.        E_Enumeration_Type ..
  1937.        E_Enumeration_Subtype;
  1938.  
  1939.    subtype Fixed_Point_Kind            is Entity_Kind range
  1940.        E_Ordinary_Fixed_Point_Type ..
  1941.    --  E_Ordinary_Fixed_Point_Subtype
  1942.    --  E_Decimal_Fixed_Point_Type
  1943.        E_Decimal_Fixed_Point_Subtype;
  1944.  
  1945.    subtype Float_Kind                  is Entity_Kind range
  1946.        E_Floating_Point_Type ..
  1947.        E_Floating_Point_Subtype;
  1948.  
  1949.    subtype Formal_Kind                 is Entity_Kind range
  1950.        E_In_Parameter ..
  1951.    --  E_Out_Parameter
  1952.        E_In_Out_Parameter;
  1953.  
  1954.    subtype Incomplete_Or_Private_Kind  is Entity_Kind range
  1955.        E_Record_Type_With_Private ..
  1956.    --  E_Record_Subtype_With_Private
  1957.    --  E_Private_Type
  1958.    --  E_Private_Subtype
  1959.    --  E_Limited_Private_Type
  1960.    --  E_Limited_Private_Subtype
  1961.    --  E_Limited_Type
  1962.        E_Incomplete_Type;
  1963.  
  1964.    subtype Integer_Kind                is Entity_Kind range
  1965.        E_Signed_Integer_Type ..
  1966.    --  E_Signed_Integer_Subtype
  1967.    --  E_Modular_Integer_Type
  1968.        E_Modular_Integer_Subtype;
  1969.  
  1970.    subtype Modular_Integer_Kind        is Entity_Kind range
  1971.        E_Modular_Integer_Type ..
  1972.        E_Modular_Integer_Subtype;
  1973.  
  1974.    subtype Named_Kind                  is Entity_Kind range
  1975.        E_Named_Integer ..
  1976.        E_Named_Real;
  1977.  
  1978.    subtype Numeric_Kind                is Entity_Kind range
  1979.        E_Signed_Integer_Type ..
  1980.    --  E_Signed_Integer_Subtype
  1981.    --  E_Modular_Integer_Type
  1982.    --  E_Modular_Integer_Subtype
  1983.    --  E_Ordinary_Fixed_Point_Type
  1984.    --  E_Ordinary_Fixed_Point_Subtype
  1985.    --  E_Decimal_Fixed_Point_Type
  1986.    --  E_Decimal_Fixed_Point_Subtype
  1987.    --  E_Floating_Point_Type
  1988.        E_Floating_Point_Subtype;
  1989.  
  1990.    subtype Object_Kind                is Entity_Kind range
  1991.        E_Variable ..
  1992.    --  E_Component
  1993.    --  E_Constant
  1994.    --  E_Discriminant
  1995.    --  E_In_Parameter
  1996.    --  E_Out_Parameter
  1997.        E_In_Out_Parameter;
  1998.  
  1999.    subtype Ordinary_Fixed_Point_Kind   is Entity_Kind range
  2000.        E_Ordinary_Fixed_Point_Type ..
  2001.        E_Ordinary_Fixed_Point_Subtype;
  2002.  
  2003.    subtype Overloadable_Kind           is Entity_Kind range
  2004.        E_Enumeration_Literal ..
  2005.    --  E_Function
  2006.    --  E_Procedure
  2007.        E_Entry;
  2008.  
  2009.    subtype Private_Kind                is Entity_Kind range
  2010.        E_Record_Type_With_Private ..
  2011.    --  E_Record_Subtype_With_Private
  2012.    --  E_Private_Type
  2013.    --  E_Private_Subtype
  2014.    --  E_Limited_Private_Type
  2015.        E_Limited_Private_Subtype;
  2016.  
  2017.    subtype Protected_Kind              is Entity_Kind range
  2018.        E_Protected_Type ..
  2019.        E_Protected_Subtype;
  2020.  
  2021.    subtype Real_Kind                   is Entity_Kind range
  2022.        E_Ordinary_Fixed_Point_Type ..
  2023.    --  E_Ordinary_Fixed_Point_Subtype
  2024.    --  E_Decimal_Fixed_Point_Type
  2025.    --  E_Decimal_Fixed_Point_Subtype
  2026.    --  E_Floating_Point_Type
  2027.        E_Floating_Point_Subtype;
  2028.  
  2029.    subtype Record_Kind                 is Entity_Kind range
  2030.        E_Class_Wide_Type ..
  2031.    --  E_Class_Wide_Subtype
  2032.    --  E_Record_Type
  2033.    --  E_Record_Subtype
  2034.    --  E_Record_Type_With_Private
  2035.        E_Record_Subtype_With_Private;
  2036.  
  2037.    subtype Scalar_Kind                 is Entity_Kind range
  2038.        E_Enumeration_Type ..
  2039.    --  E_Enumeration_Subtype
  2040.    --  E_Signed_Integer_Type
  2041.    --  E_Signed_Integer_Subtype
  2042.    --  E_Modular_Integer_Type
  2043.    --  E_Modular_Integer_Subtype
  2044.    --  E_Ordinary_Fixed_Point_Type
  2045.    --  E_Ordinary_Fixed_Point_Subtype
  2046.    --  E_Decimal_Fixed_Point_Type
  2047.    --  E_Decimal_Fixed_Point_Subtype
  2048.    --  E_Floating_Point_Type
  2049.        E_Floating_Point_Subtype;
  2050.  
  2051.    subtype String_Kind                 is Entity_Kind range
  2052.        E_String_Type ..
  2053.    --  E_String_Subtype
  2054.        E_String_Literal_Subtype;
  2055.  
  2056.    subtype Subprogram_Kind             is Entity_Kind range
  2057.        E_Function ..
  2058.        E_Procedure;
  2059.  
  2060.    subtype Signed_Integer_Kind         is Entity_Kind range
  2061.        E_Signed_Integer_Type ..
  2062.        E_Signed_Integer_Subtype;
  2063.  
  2064.    subtype Task_Kind                   is Entity_Kind range
  2065.        E_Task_Type ..
  2066.        E_Task_Subtype;
  2067.  
  2068.    subtype Type_Kind                   is Entity_Kind range
  2069.        E_Enumeration_Type ..
  2070.    --  E_Enumeration_Subtype
  2071.    --  E_Signed_Integer_Type
  2072.    --  E_Signed_Integer_Subtype
  2073.    --  E_Modular_Integer_Type
  2074.    --  E_Modular_Integer_Subtype
  2075.    --  E_Ordinary_Fixed_Point_Type
  2076.    --  E_Ordinary_Fixed_Point_Subtype
  2077.    --  E_Decimal_Fixed_Point_Type
  2078.    --  E_Decimal_Fixed_Point_Subtype
  2079.    --  E_Floating_Point_Type
  2080.    --  E_Floating_Point_Subtype
  2081.    --  E_Access_Type
  2082.    --  E_Access_Subprogram_Type,
  2083.    --  E_Allocator_Type,
  2084.    --  E_General_Access_Type
  2085.    --  E_Anonymous_Access_Type
  2086.    --  E_Array_Type
  2087.    --  E_Array_Subtype
  2088.    --  E_Class_Wide_Subtype
  2089.    --  E_Class_Wide_Type
  2090.    --  E_Record_Type
  2091.    --  E_Record_Subtype
  2092.    --  E_Record_Type_With_Private
  2093.    --  E_Record_Subtype_With_Private
  2094.    --  E_Private_Type
  2095.    --  E_Private_Subtype
  2096.    --  E_Limited_Private_Type
  2097.    --  E_Limited_Private_Subtype
  2098.    --  E_Limited_Type
  2099.    --  E_Incomplete_Type
  2100.    --  E_Task_Type
  2101.    --  E_Task_Subtype
  2102.    --  E_Protected_Type
  2103.    --  E_Protected_Subtype
  2104.    --  E_Exception_Type
  2105.        E_Subprogram_Type;
  2106.  
  2107.    --------------------------------------------------------------
  2108.    -- Description of Defined Access Functions for Entity_Kinds --
  2109.    --------------------------------------------------------------
  2110.  
  2111.    --  For each enumeration value defined in Entity_Kind we list all the
  2112.    --  attributes defined in Einfo which can legallybe applied to an entity
  2113.    --  of that kind. The implementation of the attribute functions (and for
  2114.    --  non-synthesized attributes, or the corresponding set procedures) are
  2115.    --  in the Einfo body.
  2116.  
  2117.    --  The following attributes apply to all entities
  2118.  
  2119.    --    Ekind                         (Ekind)
  2120.  
  2121.    --    Chars                         (Name1)
  2122.    --    Next_Entity                   (Node2)
  2123.    --    Scope                         (Node3)
  2124.    --    Homonym                       (Node4)
  2125.    --    Etype                         (Node5)
  2126.    --    Freeze_Node                   (Node18)
  2127.  
  2128.    --    Has_Delayed_Freeze            (Flag18)
  2129.    --    Has_Homonym                   (Flag56)
  2130.    --    Is_Exported                   (Flag99)
  2131.    --    Is_First_Subtype              (Flag70)
  2132.    --    Is_Immediately_Visible        (Flag7)
  2133.    --    Is_Imported                   (Flag24)
  2134.    --    Is_Internal                   (Flag17)
  2135.    --    Is_Itype                      (Flag91)
  2136.    --    Is_Potentially_Use_Visible    (Flag9)
  2137.    --    Is_Private                    (Flag57)
  2138.    --    Is_Public                     (Flag10)
  2139.    --    Is_Pure                       (Flag44)
  2140.    --    Suppress_Access_Checks        (Flag31)
  2141.    --    Suppress_Accessibility_Checks (Flag32)
  2142.    --    Suppress_Discriminant_Checks  (Flag33)
  2143.    --    Suppress_Division_Checks      (Flag34)
  2144.    --    Suppress_Elaboration_Checks   (Flag35)
  2145.    --    Suppress_Index_Checks         (Flag36)
  2146.    --    Suppress_Length_Checks        (Flag37)
  2147.    --    Suppress_Overflow_Checks      (Flag38)
  2148.    --    Suppress_Range_Checks         (Flag39)
  2149.    --    Suppress_Storage_Checks       (Flag40)
  2150.    --    Suppress_Tag_Checks           (Flag41)
  2151.  
  2152.    --    Declaration_Node              (synth)
  2153.    --    Next_Overloads                (synth)
  2154.    --    Is_xxx_Type                   (synth)
  2155.    --    Is_Type                       (synth)
  2156.  
  2157.    --  The following list of access functions applies to all entities for
  2158.    --  types and subtypes. References to this list appear subsequently as
  2159.    --  as "(plus type attributes)" for each appropriate Entity_Kind.
  2160.  
  2161.    --    Esize                         (Uint12)
  2162.    --    Next_Itype                    (Node16)
  2163.    --    Class_Wide_Type               (Node17)
  2164.  
  2165.    --    Discard_Names                 (Flag88)
  2166.    --    Has_Alignment_Clause          (Flag46)
  2167.    --    Has_Size_Clause               (Flag29)
  2168.    --    In_Use                        (Flag8)
  2169.    --    Is_Abstract                   (Flag19)
  2170.    --    Is_Asynchronous               (Flag81)
  2171.    --    Is_Atomic                     (Flag85)
  2172.    --    Is_Controlled                 (Flag42)
  2173.    --    Is_Declared_In_Package_Body   (Flag93)
  2174.    --    Is_Frozen                     (Flag4)
  2175.    --    Is_Generic_Actual_Type        (Flag94)
  2176.    --    Is_Generic_Type               (Flag1)
  2177.    --    Is_Internal                   (Flag17)
  2178.    --    Is_Packed                     (Flag51)
  2179.    --    Is_Tagged_Type                (Flag55)
  2180.    --    Is_Volatile                   (Flag16)
  2181.    --    Size_Known_At_Compile_Time    (Flag92)
  2182.  
  2183.    --    Ancestor_Subtype              (synth)
  2184.    --    Base_Type                     (synth)
  2185.    --    First_Subtype                 (synth)
  2186.    --    Is_By_Copy_Type               (synth)
  2187.    --    Is_First_Named_Subtype        (synth)
  2188.    --    Is_Limited_Type               (synth)
  2189.    --    Is_Return_By_Reference_Type   (synth)
  2190.    --    Root_Type                     (synth)
  2191.    --    Underlying_Type               (synth)
  2192.  
  2193.    --  Applicable attributes by entity kind
  2194.  
  2195.    --  E_Access_Subprogram_Type
  2196.    --    Alignment_Clause              (Node8)
  2197.    --    Directly_Designated_Type      (Node10)
  2198.    --    Needs_No_Actuals (Flag22)
  2199.    --    (plus type attributes)
  2200.  
  2201.    --  E_Access_Type
  2202.    --  E_Access_Subtype
  2203.    --    Alignment_Clause              (Node8)
  2204.    --    Master_Id                     (Node9)
  2205.    --    Directly_Designated_Type      (Node10)
  2206.    --    Associated_Storage_Pool       (Node13)
  2207.    --    Associated_Final_Chain        (Node14)
  2208.    --    Storage_Size_Variable         (Node15)   (type only, not subtype)
  2209.    --    Has_Pragma_Controlled         (Flag27)   (type only, not subtype)
  2210.    --    Has_Storage_Size_Clause       (Flag23)   (type only, not subtype)
  2211.    --    Is_Access_Constant            (Flag69)
  2212.    --    (plus type attributes)
  2213.  
  2214.    --  E_Allocator_Type
  2215.    --    Alignment_Clause              (Node8)
  2216.    --    Directly_Designated_Type      (Node10)
  2217.    --    (plus type attributes)
  2218.  
  2219.    --  E_Anonymous_Access_Type
  2220.    --    Alignment_Clause              (Node8)
  2221.    --    Directly_Designated_Type      (Node10)
  2222.    --    Storage_Size_Variable         (Node15)  ??? is this needed ???
  2223.    --    (plus type attributes)
  2224.  
  2225.    --  E_Array_Type
  2226.    --  E_Array_Subtype
  2227.    --    Alignment_Clause              (Node8)
  2228.    --    First_Index                   (Node9)
  2229.    --    Component_Type                (Node10)
  2230.    --    Component_Size_Clause         (Node13)   (type only, not subtype)
  2231.    --    Packed_Array_Type             (Node14)
  2232.    --    Is_Constrained                (Flag3)
  2233.    --    Is_Aliased                    (Flag15)
  2234.    --    Has_Tasks                     (Flag30)
  2235.    --    Has_Controlled                (Flag43)
  2236.    --    Has_Component_Size_Clause     (Flag68)   (type only, not subtype)
  2237.    --    Has_Atomic_Components         (Flag86)   (type only, not subtype)
  2238.    --    Has_Volatile_Components       (Flag87)   (type only, not subtype)
  2239.    --    Next_Index                    (synth)
  2240.    --    Number_Dimensions             (synth)
  2241.    --    (plus type attributes)
  2242.  
  2243.    --  E_Block
  2244.    --    Scope_Depth                   (Uint8)
  2245.    --    First_Entity                  (Node9)
  2246.    --    Last_Entity                   (Node10)
  2247.    --    Finalization_Chain_Entity     (Node13)
  2248.    --    Task_Activation_Chain_Entity  (Node14)
  2249.    --    Has_Master_Entity             (Flag21)
  2250.    --    Has_Nested_Block_With_Handler (Flag101)
  2251.    --    Uses_Sec_Stack                (Flag95)
  2252.  
  2253.  
  2254.    --  E_Class_Wide_Type
  2255.    --  E_Class_Wide_Subtype
  2256.    --    Equivalent_Type               (Node7)    (always Empty in type case)
  2257.    --    Alignment_Clause              (Node8)
  2258.    --    First_Entity                  (Node9)
  2259.    --    Last_Entity                   (Node10)
  2260.    --    Has_Controlled                (Flag43)
  2261.    --    Has_Tasks                     (Flag30)
  2262.    --    First_Component               (synth)
  2263.    --    (plus type attributes)
  2264.  
  2265.    --  E_Component
  2266.    --    Original_Record_Component     (Node8)
  2267.    --    Prival                        (Node9)
  2268.    --    Discriminant_Checking_Func    (Node10)
  2269.    --    Component_First_Bit           (Uint11)   (type only, not subtype)
  2270.    --    Esize                         (Uint12)
  2271.    --    Component_Clause              (Node13)
  2272.    --    Protected_Operation           (Node14)
  2273.    --    DT_Entry_Count                (Uint15)
  2274.    --    Is_Volatile                   (Flag16)
  2275.    --    Needs_Discr_Check             (Flag50)
  2276.    --    Is_Tag                        (Flag78)
  2277.    --    Is_Atomic                     (Flag85)
  2278.    --    Next_Component                (synth)
  2279.    --    Is_Protected_Private          (synth)
  2280.  
  2281.    --  E_Constant
  2282.    --    Interface_Name                (Node6)
  2283.    --    Renamed_Object                (Node7)
  2284.    --    Alignment_Clause              (Node8)
  2285.    --    Actual_Subtype                (Node9)
  2286.    --    Full_View                     (Node11)
  2287.    --    Esize                         (Uint12)
  2288.    --    Address_Clause                (Node20)
  2289.    --    Has_Alignment_Clause          (Flag46)
  2290.    --    Has_Size_Clause               (Flag29)
  2291.    --    Has_U_Nominal_Subtype         (Flag80)
  2292.    --    Is_Atomic                     (Flag85)
  2293.    --    Is_Volatile                   (Flag16)
  2294.  
  2295.    --  E_Decimal_Fixed_Point_Type
  2296.    --  E_Decimal_Fixed_Subtype
  2297.    --    Small_Value                   (Ureal6)
  2298.    --    Delta_Value                   (Ureal7)
  2299.    --    Alignment_Clause              (Node8)
  2300.    --    Digits_Value                  (Uint9)
  2301.    --    Scalar_Range                  (Node10)
  2302.    --    Scale_Value                   (Uint15)
  2303.    --    Has_Machine_Radix_Clause      (Flag83)
  2304.    --    Machine_Radix_10              (Flag84)
  2305.    --    Type_Low_Bound                (synth)
  2306.    --    Type_High_Bound               (synth)
  2307.    --    (plus type attributes)
  2308.  
  2309.    --  E_Discriminant
  2310.    --    Corresponding_Discriminant    (Node7)
  2311.    --    Original_Record_Component     (Node8)
  2312.    --    Discriminal                   (Node9)
  2313.    --    Discriminant_Default_Value    (Node10)
  2314.    --    Component_First_Bit           (Uint11)
  2315.    --    Next_Discriminant             (synth)
  2316.    --    Component_Clause              (Node13)
  2317.  
  2318.    --  E_Entry
  2319.    --  E_Entry_Family
  2320.    --    Accept_Address                (Elist6)
  2321.    --    Entry_Parameters_Type         (Node7)
  2322.    --    First_Entity                  (Node9)
  2323.    --    Last_Entity                   (Node10)
  2324.    --    Protected_Body_Subprogram     (Node11)
  2325.    --    Barrier_Function              (Node12)
  2326.    --    Finalization_Chain_Entity     (Node13)
  2327.    --    Task_Activation_Chain_Entity  (Node14)
  2328.    --    Address_Clause                (Node20)
  2329.    --    Needs_No_Actuals              (Flag22)
  2330.    --    First_Formal                  (synth)
  2331.    --    Entry_Index_Type              (synth)
  2332.    --    Uses_Sec_Stack                (Flag95)
  2333.  
  2334.    --  E_Entry_Index_Parameter
  2335.    --    Entry_Index_Constant          (Node7)
  2336.  
  2337.    --  E_Enumeration_Literal
  2338.    --    Alias                         (Node7)
  2339.    --    Enumeration_Rep_Expr          (Node8)
  2340.    --    Enumeration_Pos               (Uint11)
  2341.    --    Enumeration_Rep               (Uint12)
  2342.    --    Next_Literal                  (synth)
  2343.  
  2344.    --  E_Enumeration_Type
  2345.    --  E_Enumeration_Subtype
  2346.    --    Lit_Name_Table                (Node7)
  2347.    --    Alignment_Clause              (Node8)
  2348.    --    First_Literal                 (Node9)
  2349.    --    Scalar_Range                  (Node10)
  2350.    --    Enum_Pos_To_Rep               (Node14)   (type only, not subtype)
  2351.    --    Has_Enumeration_Rep_Clause    (Flag66)
  2352.    --    Type_Low_Bound                (synth)
  2353.    --    Type_High_Bound               (synth)
  2354.    --    (plus type attributes)
  2355.  
  2356.    --  E_Enum_Table_Type
  2357.    --    Alignment_Clause              (Node8)
  2358.    --    Component_Type                (Node10)
  2359.    --    Table_High_Bound              (Node11)
  2360.  
  2361.    --  E_Exception
  2362.    --    Renamed_Entity                (Node7)
  2363.    --    Discard_Names                 (Flag88)
  2364.  
  2365.    --  E_Exception_Type
  2366.    --    (no additional fields)
  2367.  
  2368.    --  E_Floating_Point_Type
  2369.    --  E_Floating_Point_Subtype
  2370.    --    Alignment_Clause              (Node8)
  2371.    --    Digits_Value                  (Uint9)
  2372.    --    Scalar_Range                  (Node10)
  2373.    --    Type_Low_Bound                (synth)
  2374.    --    Type_High_Bound               (synth)
  2375.    --    (plus type attributes)
  2376.  
  2377.    --  E_Function
  2378.    --  E_Generic_Function
  2379.    --    Interface_Name                (Node6)
  2380.    --    Alias                         (Node7)   (for a function)
  2381.    --    Renamed_Entity                (Node7)   (for a generic function)
  2382.    --    Scope_Depth                   (Uint8)
  2383.    --    First_Entity                  (Node9)
  2384.    --    Last_Entity                   (Node10)
  2385.    --    Protected_Body_Subprogram     (Node11)
  2386.    --    Next_Inlined_Subprogram       (Node12)
  2387.    --    Finalization_Chain_Entity     (Node13)
  2388.    --    Task_Activation_Chain_Entity  (Node14)
  2389.    --    DT_Position                   (Uint15)
  2390.    --    DTC_Entity                    (Node16)
  2391.    --    Machine_Attribute             (Node17)
  2392.    --    Address_Clause                (Node20)
  2393.    --    First_Formal                  (synth)
  2394.    --    Has_Completion                (Flag26)
  2395.    --    Has_Controlling_Resukt        (Flag98)
  2396.    --    Has_Machine_Attribute         (Flag82)
  2397.    --    Has_Master_Entity             (Flag21)
  2398.    --    Has_Nested_Block_With_Handler (Flag101)
  2399.    --    Is_Abstract                   (Flag19)
  2400.    --    Is_Constructor                (Flag76)
  2401.    --    Is_Destructor                 (Flag77)
  2402.    --    Is_Dispatching_Operation      (Flag6)
  2403.    --    Is_Inlined                    (Flag11)
  2404.    --    Is_Intrinsic_Subprogram       (Flag64)
  2405.    --    Is_Private_Descendant         (Flag53)
  2406.    --    Is_Pure                       (Flag44)
  2407.    --    Needs_No_Actuals              (Flag22)
  2408.    --    Return_Present                (Flag54)
  2409.    --    Returns_By_Ref                (Flag90)
  2410.    --    Uses_Sec_Stack                (Flag95)
  2411.    --    Is_Called                     (Flag102)  (non-generic subprogram)
  2412.  
  2413.    --  E_General_Access_Type
  2414.    --    Alignment_Clause              (Node8)
  2415.    --    Master_Id                     (Node9)
  2416.    --    Directly_Designated_Type      (Node10)
  2417.    --    Associated_Storage_Pool       (Node13)
  2418.    --    Associated_Final_Chain        (Node14)
  2419.    --    Storage_Size_Variable         (Node15)
  2420.    --    (plus type attributes)
  2421.  
  2422.    --  E_Incomplete_Type
  2423.    --    Discriminant_Constraint       (Elist6)
  2424.    --    Alignment_Clause              (Node8)
  2425.    --    Full_View                     (Node11)
  2426.    --    Has_Discriminants             (Flag5)
  2427.    --    First_Discriminant            (synth)
  2428.    --    (plus type attributes)
  2429.  
  2430.    --  E_In_Parameter
  2431.    --  E_Generic_In_Parameter
  2432.    --    Protected_Formal              (Node8)
  2433.    --    Actual_Subtype                (Node9)
  2434.    --    Default_Value                 (Node10)
  2435.    --    Entry_Component               (Node11)
  2436.    --    Is_Controlling_Formal         (Flag97)
  2437.    --    Is_Entry_Formal               (Flag52)
  2438.    --    Parameter_Mode                (synth)
  2439.  
  2440.    --  E_In_Out_Parameter
  2441.    --  E_Generic_In_Out_Parameter
  2442.    --    Protected_Formal              (Node8)
  2443.    --    Actual_Subtype                (Node9)
  2444.    --    Entry_Component               (Node11)
  2445.    --    Is_Controlling_Formal         (Flag97)
  2446.    --    Is_Entry_Formal               (Flag52)
  2447.    --    Parameter_Mode                (synth)
  2448.  
  2449.    --  E_Label
  2450.    --    Reachable                     (Flag49)
  2451.  
  2452.    --  E_Limited_Private_Type
  2453.    --  E_Limited_Private_Subtype
  2454.    --    Discriminant_Constraint       (Elist6)
  2455.    --    Private_Dependents            (Elist7)
  2456.    --    Alignment_Clause              (Node8)
  2457.    --    First_Entity                  (Node9)
  2458.    --    Last_Entity                   (Node10)
  2459.    --    Full_View                     (Node11)
  2460.    --    Has_Completion                (Flag26)
  2461.    --    Has_Completion_In_Body        (Flag71)
  2462.    --    First_Discriminant            (synth)
  2463.    --    Has_Discriminants             (Flag5)
  2464.    --    (plus type attributes)
  2465.  
  2466.    --  E_Limited_Type
  2467.  
  2468.    --  E_Loop
  2469.    --    Has_Exit                      (Flag47)
  2470.    --    Has_Master_Entity             (Flag21)
  2471.    --    Has_Nested_Block_With_Handler (Flag101)
  2472.  
  2473.    --  E_Modular_Integer_Type
  2474.    --  E_Modular_Integer_Subtype
  2475.    --    Alignment_Clause              (Node8)
  2476.    --    Modulus                       (Uint9)
  2477.    --    Scalar_Range                  (Node10)
  2478.    --    Non_Binary_Modulus            (Flag58)
  2479.    --    Type_Low_Bound                (synth)
  2480.    --    Type_High_Bound               (synth)
  2481.    --    (plus type attributes)
  2482.  
  2483.    --  E_Named_Integer
  2484.    --    (no additional fields)
  2485.  
  2486.    --  E_Named_Real
  2487.    --    (no additional fields)
  2488.  
  2489.    --  E_Operator
  2490.    --    Alias                         (Node7)
  2491.    --    First_Entity                  (Node9)
  2492.    --    Last_Entity                   (Node10)
  2493.    --    Is_Pure                       (Flag44)
  2494.    --    Is_Intrinsic_Subprogram       (Flag64)
  2495.  
  2496.    --  E_Ordinary_Fixed_Point_Type
  2497.    --  E_Ordinary_Fixed_Point_Subtype
  2498.    --    Small_Value                   (Ureal6)
  2499.    --    Delta_Value                   (Ureal7)
  2500.    --    Alignment_Clause              (Node8)
  2501.    --    Scalar_Range                  (Node10)
  2502.    --    Has_Small_Clause              (Flag67)
  2503.    --    Type_Low_Bound                (synth)
  2504.    --    Type_High_Bound               (synth)
  2505.    --    (plus type attributes)
  2506.  
  2507.    --  E_Out_Parameter
  2508.    --    Protected_Formal              (Node8)
  2509.    --    Actual_Subtype                (Node9)
  2510.    --    Entry_Component               (Node11)
  2511.    --    Is_Entry_Formal               (Flag52)
  2512.    --    Parameter_Mode                (synth)
  2513.    --    Is_Controlling_Formal         (Flag97)
  2514.  
  2515.    --  E_Package
  2516.    --  E_Generic_Package
  2517.    --    Renamed_Entity                (Node7)
  2518.    --    Scope_Depth                   (Uint8)
  2519.    --    First_Entity                  (Node9)
  2520.    --    Last_Entity                   (Node10)
  2521.    --    First_Private_Entity          (Node11)
  2522.    --    Associated_Formal_Package     (Node_12)
  2523.    --    Task_Activation_Chain_Entity  (Node14)
  2524.    --    Has_All_Calls_Remote          (Flag79)
  2525.    --    Has_Completion                (Flag26)
  2526.    --    Has_Master_Entity             (Flag21)
  2527.    --    In_Package_Body               (Flag48)
  2528.    --    In_Private_Part               (Flag45)
  2529.    --    In_Use                        (Flag8)
  2530.    --    Is_Preelaborated              (Flag59)
  2531.    --    Is_Private_Descendant         (Flag53)
  2532.    --    Is_Remote_Call_Interface      (Flag62)
  2533.    --    Is_Remote_Types               (Flag61)
  2534.    --    Is_Shared_Passive             (Flag60)
  2535.  
  2536.    --  E_Package_Body
  2537.    --    (no additional fields)
  2538.  
  2539.    --  E_Private_Type
  2540.    --  E_Private_Subtype
  2541.    --    Discriminant_Constraint       (Elist6)
  2542.    --    Private_Dependents            (Elist7)
  2543.    --    Alignment_Clause              (Node8)
  2544.    --    First_Entity                  (Node9)
  2545.    --    Last_Entity                   (Node10)
  2546.    --    Full_View                     (Node11)
  2547.    --    Primitive_Operations          (Elist13)
  2548.    --    Has_Completion                (Flag26)
  2549.    --    Has_Completion_In_Body        (Flag71)
  2550.    --    Has_Discriminants             (Flag5)
  2551.    --    Is_Controlled                 (Flag42)
  2552.    --    First_Discriminant            (synth)
  2553.    --    (plus type attributes)
  2554.  
  2555.    --  E_Procedure
  2556.    --  E_Generic_Procedure
  2557.    --    Interface_Name                (Node6)
  2558.    --    Alias                         (Node7)   (for a procedure)
  2559.    --    Renamed_Entity                (Node7)   (for a generic procedure)
  2560.    --    Scope_Depth                   (Uint8)
  2561.    --    First_Entity                  (Node9)
  2562.    --    Last_Entity                   (Node10)
  2563.    --    Protected_Body_Subprogram     (Node11)
  2564.    --    Next_Inlined_Subprogram       (Node12)
  2565.    --    Finalization_Chain_Entity     (Node13)
  2566.    --    Task_Activation_Chain_Entity  (Node14)
  2567.    --    DT_Position                   (Uint15)
  2568.    --    DTC_Entity                    (Node16)
  2569.    --    Machine_Attribute             (Node17)
  2570.    --    Address_Clause                (Node20)
  2571.    --    Has_Completion                (Flag26)
  2572.    --    Has_Machine_Attribute         (Flag82)
  2573.    --    Has_Master_Entity             (Flag21)
  2574.    --    Has_Nested_Block_With_Handler (Flag101)
  2575.    --    Is_Abstract                   (Flag19)
  2576.    --    Is_Asynchronous               (Flag81)
  2577.    --    Is_Constructor                (Flag76)
  2578.    --    Is_Destructor                 (Flag77)
  2579.    --    Is_Dispatching_Operation      (Flag6)
  2580.    --    Is_Inlined                    (Flag11)
  2581.    --    Is_Interrupt_Handler          (Flag89)
  2582.    --    Is_Intrinsic_Subprogram       (Flag64)
  2583.    --    Is_Private_Descendant         (Flag53)
  2584.    --    Is_Pure                       (Flag44)
  2585.    --    Needs_No_Actuals              (Flag22)
  2586.    --    Uses_Sec_Stack                (Flag95)
  2587.    --    Is_Called                     (Flag102)  (non-generic subprogram)
  2588.    --    First_Formal                  (synth)
  2589.  
  2590.    --  E_Protected_Body
  2591.    --    Object_Ref                    (Node9)
  2592.  
  2593.    --  E_Protected_Object
  2594.  
  2595.    --  E_Protected_Type
  2596.    --  E_Protected_Subtype
  2597.    --    Discriminant_Constraint       (Elist6)
  2598.    --    Corresponding_Record_Type     (Node7)
  2599.    --    Scope_Depth                   (Uint8)
  2600.    --    First_Entity                  (Node9)
  2601.    --    Last_Entity                   (Node10)
  2602.    --    First_Private_Entity          (Node11)
  2603.    --    Finalization_Chain_Entity     (Node13) ???
  2604.    --    Entry_Bodies_Array            (Node15)
  2605.    --    Has_Discriminants             (Flag5)
  2606.    --    Has_Controlled                (Flag43)
  2607.    --    Has_Entries                   (synthesized)
  2608.    --    Uses_Sec_Stack                (Flag95) ???
  2609.  
  2610.    --  E_Record_Type
  2611.    --  E_Record_Subtype
  2612.    --    Discriminant_Constraint       (Elist6)
  2613.    --    Corresponding_Concurrent_Type (Node7)
  2614.    --    Alignment_Clause              (Node8)
  2615.    --    First_Entity                  (Node9)
  2616.    --    Last_Entity                   (Node10)
  2617.    --    Primitive_Operations          (Elist13)
  2618.    --    Access_Disp_Table             (Node15)
  2619.    --    Has_Controlled                (Flag43)
  2620.    --    Has_Discriminants             (Flag5)
  2621.    --    Has_Record_Rep_Clause         (Flag65)
  2622.    --    Has_Specified_Layout          (Flag100)
  2623.    --    Has_Tasks                     (Flag30)
  2624.    --    Is_Concurrent_Record_Type     (Flag20)
  2625.    --    Is_Constrained                (Flag3)
  2626.    --    Is_Controlled                 (Flag42)
  2627.    --    Is_Limited_Record             (Flag25)
  2628.    --    First_Component               (synth)
  2629.    --    First_Discriminant            (synth)
  2630.    --    First_Discriminant            (synth)
  2631.    --    Tag_Component                 (synth)
  2632.    --    (plus type attributes)
  2633.  
  2634.    --  E_Record_Type_With_Private
  2635.    --  E_Record_Subtype_With_Private
  2636.    --    Discriminant_Constraint       (Elist6)
  2637.    --    Private_Dependents            (Elist7)
  2638.    --    Alignment_Clause              (Node8)
  2639.    --    First_Entity                  (Node9)
  2640.    --    Last_Entity                   (Node10)
  2641.    --    Full_View                     (Node11)
  2642.    --    Primitive_Operations          (Elist13)
  2643.    --    Access_Disp_Table             (Node15)
  2644.    --    Has_Completion                (Flag26)
  2645.    --    Has_Completion_In_Body        (Flag71)
  2646.    --    Has_Controlled                (Flag43)
  2647.    --    Has_Discriminants             (Flag5)
  2648.    --    Has_Record_Rep_Clause         (Flag65)
  2649.    --    Has_Tasks                     (Flag30)
  2650.    --    Is_Concurrent_Record_Type     (Flag20)
  2651.    --    Is_Constrained                (Flag3)
  2652.    --    Is_Controlled                 (Flag42)
  2653.    --    First_Component               (synth)
  2654.    --    First_Discriminant            (synth)
  2655.    --    Tag_Component                 (synth)
  2656.    --    (plus type attributes)
  2657.  
  2658.    --  E_Signed_Integer_Type
  2659.    --  E_Signed_Integer_Subtype
  2660.    --    Alignment_Clause              (Node8)
  2661.    --    Scalar_Range                  (Node10)
  2662.    --    Type_Low_Bound                (synth)
  2663.    --    Type_High_Bound               (synth)
  2664.    --    (plus type attributes)
  2665.  
  2666.    --  E_String_Type
  2667.    --  E_String_Subtype
  2668.    --    Alignment_Clause              (Node8)
  2669.    --    First_Index                   (Node9)
  2670.    --    Component_Type                (Node10)
  2671.    --    Is_Constrained                (Flag3)
  2672.    --    Next_Index                    (synth)
  2673.    --    Number_Dimensions             (synth)
  2674.    --    (plus type attributes)
  2675.  
  2676.    --  E_String_Literal_Subtype
  2677.    --    Alignment_Clause              (Node8)
  2678.    --    Component_Type                (Node10)
  2679.    --    String_Literal_Length         (Uint11)
  2680.    --    (plus type attributes)
  2681.  
  2682.    --  E_Subprogram_Body
  2683.    --    (no additional fields)
  2684.  
  2685.    --  E_Subprogram_Type
  2686.    --    Alignment_Clause              (Node8)
  2687.    --    Directly_Designated_Type      (Node10)
  2688.    --    First_Formal                  (synth)
  2689.    --    (plus type attributes)
  2690.  
  2691.    --  E_Task_Body
  2692.  
  2693.    --  E_Task_Type
  2694.    --  E_Task_Subtype
  2695.    --    Discriminant_Constraint       (Elist6)
  2696.    --    Corresponding_Record_Type     (Node7)
  2697.    --    Scope_Depth                   (Uint8)
  2698.    --    First_Entity                  (Node9)
  2699.    --    Last_Entity                   (Node10)
  2700.    --    First_Private_Entity          (Node11)
  2701.    --    Finalization_Chain_Entity     (Node13) ???
  2702.    --    Task_Activation_Chain_Entity  (Node14)
  2703.    --    Storage_Size_Variable         (Node15)   (type only, not subtype)
  2704.    --    Task_Body_Procedure           (Node19)
  2705.    --    Has_Discriminants             (Flag5)
  2706.    --    Has_Master_Entity             (Flag21)
  2707.    --    Has_Storage_Size_Clause       (Flag23)   (type only, not subtype)
  2708.    --    Uses_Sec_Stack                (Flag95)  ???
  2709.    --    Has_Entries                   (synthesized)
  2710.    --    (plus type attributes)
  2711.  
  2712.    --  E_Variable
  2713.    --    Interface_Name                (Node6)
  2714.    --    Renamed_Object                (Node7)
  2715.    --    Alignment_Clause              (Node8)
  2716.    --    Actual_Subtype                (Node9)
  2717.    --    Esize                         (Uint12)
  2718.    --    Address_Clause                (Node20)
  2719.    --    Has_Alignment_Clause          (Flag46)
  2720.    --    Has_Size_Clause               (Flag29)
  2721.    --    Has_U_Nominal_Subtype         (Flag80)
  2722.    --    Is_Atomic                     (Flag85)
  2723.    --    Is_Volatile                   (Flag16)
  2724.  
  2725.    --  E_Void
  2726.    --    Since E_Void is the initial Ekind value of an entity when it is first
  2727.    --    created, one might expect that no attributes would be defined on such
  2728.    --    an entity until its Ekind field is set. However, in practice, there
  2729.    --    are many instances in which fields of an E_Void entity are set in the
  2730.    --    code prior to setting the Ekind field. This is not well documented or
  2731.    --    well controlled, and needs cleaning up later. Meanwhile, the access
  2732.    --    procedures in the body of Einfo permit many, but not all, attributes
  2733.    --    to be applied to an E_Void entity, precisely so that this kind of
  2734.    --    pre-setting of attributes works. This is really a hole in the dynamic
  2735.    --    type checking, since there is no assurance that the eventual Ekind
  2736.    --    value will be appropriate for the attributes set, and the consequence
  2737.    --    is that the dynamic type checking in the Einfo body is unnecessarily
  2738.    --    weak. To be looked at systematically some time ???
  2739.  
  2740.    ---------------
  2741.    -- Iterators --
  2742.    ---------------
  2743.  
  2744.    --  In addition to attributes that are stored as plain data, other
  2745.    --  attributes are procedural, and require some small amount of
  2746.    --  computation. Of course, from the point of view of a user of this
  2747.    --  package, the distinction is not visible (even the field information
  2748.    --  provided below should be disregarded, as it is subject to  change
  2749.    --  without notice!). A number of  attributes appear as lists: lists of
  2750.    --  formals,  lists of actuals, of discriminants, etc. For these, pairs
  2751.    --  of functions are defined, which take the form:
  2752.  
  2753.    --      function First_Thing (E : Enclosing_Construct) return Thing;
  2754.    --      function Next_Thing (T : Thing) return Thing;
  2755.  
  2756.    --  The end of iteration is always signalled by a value of Empty, so that
  2757.    --  loops over these chains invariably have the form:
  2758.  
  2759.    --      This : Thing;
  2760.    --      ...
  2761.    --      This := First_Thing (E);
  2762.  
  2763.    --      while Present (This) loop
  2764.    --         Do_Something_With (This);
  2765.    --        ...
  2766.    --        This := Next_Thing (This);
  2767.    --      end loop;
  2768.  
  2769.    -----------------------------------
  2770.    -- Handling of Check Suppression --
  2771.    -----------------------------------
  2772.  
  2773.    --  There are three ways that checks can be suppressed:
  2774.  
  2775.    --    1.  At the command line level. Package Opt contains global Boolean
  2776.    --        flags with names Suppress_Options.xxx_Checks, where xxx is the
  2777.    --        name of one of the checks that can be suppressed (excluding
  2778.    --        All_Checks, which is simply reflected by setting all the
  2779.    --        individual flags)
  2780.  
  2781.    --    2.  At the scope level. The body of Sem contains flags with names
  2782.    --        Suppress.xxx_Checks which are set to indicate that the given
  2783.    --        check is suppressed for the current scope. These flags are
  2784.    --        saved in the scope stack on entry to a scope and restored on
  2785.    --        exit from the scope.
  2786.  
  2787.    --    3.  At the entity level. Each entity contains a set of flags named
  2788.    --        Suppress_xxx_Checks which suppress the given check for that
  2789.    --        particularly entity (of course not all flags are meaningful for
  2790.    --        all entities).
  2791.  
  2792.    -------------------------------
  2793.    -- Handling of Discriminants --
  2794.    -------------------------------
  2795.  
  2796.    --  During semantic processing, discriminants are separate entities which
  2797.    --  reflect the semantic properties and allowed usage of discriminants in
  2798.    --  the language.
  2799.  
  2800.    --  In the case of discriminants used as bounds, the references are handled
  2801.    --  directly, since special processing is needed in any case. However, there
  2802.    --  are two circumstances in which discriminants are referenced in a quite
  2803.    --  general manner, like any other variables:
  2804.  
  2805.    --     In initialization expressions for records. Note that the expressions
  2806.    --     used in Priority and Storage_Size pragmas are effectively in this
  2807.    --     category, since these pragmas are converted to initialized record
  2808.    --     fields in the Corresponding_Record_Type.
  2809.  
  2810.    --     In task and protected bodies, where the discriminant values may be
  2811.    --     referenced freely within these bodies.
  2812.  
  2813.    --  In both these cases, the discriminants must be treated essentially as
  2814.    --  objects. The following approach is used to simplify and minimize the
  2815.    --  special processing that is required.
  2816.  
  2817.    --  When a record type with discriminants is processed, the semantic
  2818.    --  processing creates the entities for the discriminants. It also creates
  2819.    --  an additional set of entities, called discriminals, one for each of
  2820.    --  the discriminants, and the Discriminal field of the discriminant entity
  2821.    --  points to this additional entity, which is initially created as an
  2822.    --  uninitialized (E_Void) entity.
  2823.  
  2824.    --  During expansion of expressions, any discriminant reference is replaced
  2825.    --  by a reference to the corresponding discriminal. When the initialization
  2826.    --  procedure for the record is created (there will always be one, since
  2827.    --  discriminants are present, see Exp_Ch3 for further details), the
  2828.    --  discriminals are used as the entities for the formal parameters of
  2829.    --  this initialization procedure. The references to these discriminants
  2830.    --  have already been replaced by references to these discriminals, which
  2831.    --  are now the formal parameters corresponding to the required objects.
  2832.  
  2833.    --  In the case of a task or protected body, the semantics similarly
  2834.    --  creates a set of discriminals for the discriminants of the task or
  2835.    --  protected type. When the procedure is created for the task body,
  2836.    --  the parameter passed in is a reference to the task value type, which
  2837.    --  contains the required discriminant values. The expander creates a
  2838.    --  set of declarations of the form:
  2839.  
  2840.    --      discriminal : constant dtype renames _Task.discriminant;
  2841.  
  2842.    --  where disriminal is the discriminal entity referenced by the task
  2843.    --  discriminant, and _Task is the task value passed in as the parameter.
  2844.    --  Again, any references to discriminants in the task body have been
  2845.    --  replaced by the discriminal reference, which is now an object that
  2846.    --  contains the required value.
  2847.  
  2848.    --  This approach for tasks means that two sets of discriminals are needed
  2849.    --  for a task type, one for the initialization procedure, and one for the
  2850.    --  task body. This works out nicely, since the semantics allocates one set
  2851.    --  for the task itself, and one set for the corresponding record.
  2852.  
  2853.    --  The one bit of trickiness arises in making sure that the right set of
  2854.    --  discriminals is used at the right time. First the task definition is
  2855.    --  processed. Any references to discriminants here are replaced by the
  2856.    --  the corresponding *task* discriminals (the record type doesn't even
  2857.    --  exist yet, since it is constructed as part of the expansion of the
  2858.    --  task declaration, which happens after the semantic processing of the
  2859.    --  task definition).
  2860.  
  2861.    --  Just before the record initialization routine is constructed, the
  2862.    --  expander exchanges the task and record discriminals. This has two
  2863.    --  effects. First the generation of the record initialization routine
  2864.    --  uses the discriminals that are now on the record, which is the set
  2865.    --  that used to be on the task, which is what we want.
  2866.  
  2867.    --  Second, a new set of (so far unused) discriminals is now on the task
  2868.    --  discriminants, and it is this set that will be used for expanding the
  2869.    --  task body, and also for the discriminal declarations at the start of
  2870.    --  the task body.
  2871.  
  2872.    ---------------------------------------
  2873.    -- Private data in protected objects --
  2874.    ---------------------------------------
  2875.  
  2876.    --  Private object declarations in protected types pose problems
  2877.    --  similar to those of discriminants. They are expanded to components
  2878.    --  of a record which is passed as the parameter "_object" to expanded
  2879.    --  forms of all protected operations. As with discriminants, timing
  2880.    --  of this expansion is a problem. The sequence of statements for a
  2881.    --  protected operation is expanded before the operation itself, so the
  2882.    --  formal parameter for the record object containing the private data
  2883.    --  does not exist when the references to that data are expanded.
  2884.  
  2885.    --  For this reason, private data is handled in the same way as
  2886.    --  discriminants, expanding references to private data in protected
  2887.    --  operations (which appear as components) to placeholders which will
  2888.    --  eventually become renamings of the private selected compenents
  2889.    --  of the "_object" formal parameter. These placeholders are called
  2890.    --  "privals", by analogy to the "discriminals" used to implement
  2891.    --  discriminants. They are attached to the component declaration nodes
  2892.    --  representing the private object declarations of the protected type.
  2893.  
  2894.    --  As with discriminals, each protected subprogram needs a unique set
  2895.    --  of privals, since they must refer to renamings of components of a
  2896.    --  formal parameter of that operation. Entry bodies need another set,
  2897.    --  which they all share and which is associated with renamings in the
  2898.    --  Service_Entries procedure for the protected type (this is not yet
  2899.    --  implemented???). This means that we must associate a new set of
  2900.    --  privals (and discriminals) with the private declarations after
  2901.    --  the body of a protected subprogram is processed.
  2902.  
  2903.    -------------------
  2904.    -- Type Synonyms --
  2905.    -------------------
  2906.  
  2907.    --  The following type synonyms are used to tidy up the function and
  2908.    --  procedure declarations that follow, and also to make it possible
  2909.    --  to meet the requirement for the XEINFO utility that all function
  2910.    --  specs must fit on a single source line.
  2911.  
  2912.    subtype B is Boolean;
  2913.    subtype E is Entity_Id;
  2914.    subtype N is Node_Id;
  2915.    subtype U is Uint;
  2916.    subtype R is Ureal;
  2917.    subtype L is Elist_Id;
  2918.  
  2919.    ---------------------------------
  2920.    --  Attribute Access Functions --
  2921.    ---------------------------------
  2922.  
  2923.    --  All attributes are manipulated through a procedural interface. This
  2924.    --  section contains the functions used to obtain attribute values which
  2925.    --  correspond to values in fields or flags in the entity itself.
  2926.  
  2927.    function Accept_Address                     (Id : E) return L;
  2928.    function Access_Disp_Table                  (Id : E) return E;
  2929.    function Actual_Subtype                     (Id : E) return E;
  2930.    function Address_Clause                     (Id : E) return N;
  2931.    function Alias                              (Id : E) return E;
  2932.    function Alignment_Clause                   (Id : E) return N;
  2933.    function Associated_Formal_Package          (Id : E) return E;
  2934.    function Associated_Storage_Pool            (Id : E) return E;
  2935.    function Associated_Final_Chain             (Id : E) return E;
  2936.    function Barrier_Function                   (Id : E) return N;
  2937.    function Class_Wide_Type                    (Id : E) return E;
  2938.    function Component_Clause                   (Id : E) return N;
  2939.    function Component_Size_Clause              (Id : E) return N;
  2940.    function Component_Type                     (Id : E) return E;
  2941.    function Component_First_Bit                (Id : E) return U;
  2942.    function Corresponding_Concurrent_Type      (Id : E) return E;
  2943.    function Corresponding_Discriminant         (Id : E) return E;
  2944.    function Corresponding_Record_Type          (Id : E) return E;
  2945.    function Default_Value                      (Id : E) return N;
  2946.    function Delta_Value                        (Id : E) return R;
  2947.    function Digits_Value                       (Id : E) return U;
  2948.    function Directly_Designated_Type           (Id : E) return E;
  2949.    function Discard_Names                      (Id : E) return B;
  2950.    function Discriminal                        (Id : E) return N;
  2951.    function Discriminant_Checking_Func         (Id : E) return E;
  2952.    function Discriminant_Constraint            (Id : E) return L;
  2953.    function Discriminant_Default_Value         (Id : E) return N;
  2954.    function DTC_Entity                         (Id : E) return E;
  2955.    function DT_Entry_Count                     (Id : E) return U;
  2956.    function DT_Position                        (Id : E) return U;
  2957.    function Entry_Bodies_Array                 (Id : E) return E;
  2958.    function Entry_Component                    (Id : E) return E;
  2959.    function Entry_Index_Constant               (Id : E) return E;
  2960.    function Entry_Index_Type                   (Id : E) return E;
  2961.    function Entry_Parameters_Type              (Id : E) return E;
  2962.    function Enumeration_Pos                    (Id : E) return U;
  2963.    function Enumeration_Rep                    (Id : E) return U;
  2964.    function Enumeration_Rep_Expr               (Id : E) return N;
  2965.    function Enum_Pos_To_Rep                    (Id : E) return E;
  2966.    function Equivalent_Type                    (Id : E) return E;
  2967.    function Esize                              (Id : E) return U;
  2968.    function Finalization_Chain_Entity          (Id : E) return E;
  2969.    function First_Entity                       (Id : E) return E;
  2970.    function First_Index                        (Id : E) return N;
  2971.    function First_Literal                      (Id : E) return E;
  2972.    function First_Private_Entity               (Id : E) return E;
  2973.    function Freeze_Node                        (Id : E) return N;
  2974.    function Full_View                          (Id : E) return E;
  2975.    function Has_Alignment_Clause               (Id : E) return B;
  2976.    function Has_All_Calls_Remote               (Id : E) return B;
  2977.    function Has_Atomic_Components              (Id : E) return B;
  2978.    function Has_Completion                     (Id : E) return B;
  2979.    function Has_Completion_In_Body             (Id : E) return B;
  2980.    function Has_Component_Size_Clause          (Id : E) return B;
  2981.    function Has_Controlled                     (Id : E) return B;
  2982.    function Has_Controlling_Result             (Id : E) return B;
  2983.    function Has_Delayed_Freeze                 (Id : E) return B;
  2984.    function Has_Discriminants                  (Id : E) return B;
  2985.    function Has_Enumeration_Rep_Clause         (Id : E) return B;
  2986.    function Has_Exit                           (Id : E) return B;
  2987.    function Has_Homonym                        (Id : E) return B;
  2988.    function Has_Master_Entity                  (Id : E) return B;
  2989.    function Has_Machine_Attribute              (Id : E) return B;
  2990.    function Has_Machine_Radix_Clause           (Id : E) return B;
  2991.    function Has_Nested_Block_With_Handler      (Id : E) return B;
  2992.    function Has_Non_Standard_Rep               (Id : E) return B;
  2993.    function Has_Pragma_Controlled              (Id : E) return B;
  2994.    function Has_Record_Rep_Clause              (Id : E) return B;
  2995.    function Has_Size_Clause                    (Id : E) return B;
  2996.    function Has_Small_Clause                   (Id : E) return B;
  2997.    function Has_Specified_Layout               (Id : E) return B;
  2998.    function Has_Storage_Size_Clause            (Id : E) return B;
  2999.    function Has_Tasks                          (Id : E) return B;
  3000.    function Has_Unknown_Discriminants          (Id : E) return B;
  3001.    function Has_U_Nominal_Subtype              (Id : E) return B;
  3002.    function Has_Volatile_Components            (Id : E) return B;
  3003.    function In_Package_Body                    (Id : E) return B;
  3004.    function In_Private_Part                    (Id : E) return B;
  3005.    function In_Use                             (Id : E) return B;
  3006.    function Interface_Name                     (Id : E) return N;
  3007.    function Is_Abstract                        (Id : E) return B;
  3008.    function Is_Access_Constant                 (Id : E) return B;
  3009.    function Is_Aliased                         (Id : E) return B;
  3010.    function Is_Asynchronous                    (Id : E) return B;
  3011.    function Is_Atomic                          (Id : E) return B;
  3012.    function Is_Called                          (Id : E) return B;
  3013.    function Is_Character_Type                  (Id : E) return B;
  3014.    function Is_Constrained                     (Id : E) return B;
  3015.    function Is_Constructor                     (Id : E) return B;
  3016.    function Is_Controlled                      (Id : E) return B;
  3017.    function Is_Controlling_Formal              (Id : E) return B;
  3018.    function Is_CPP_Class                       (Id : E) return B;
  3019.    function Is_Declared_In_Package_Body        (Id : E) return B;
  3020.    function Is_Destructor                      (Id : E) return B;
  3021.    function Is_Dispatching_Operation           (Id : E) return B;
  3022.    function Is_Entry_Formal                    (Id : E) return B;
  3023.    function Is_Exported                        (Id : E) return B;
  3024.    function Is_First_Subtype                   (Id : E) return B;
  3025.    function Is_Frozen                          (Id : E) return B;
  3026.    function Is_Immediately_Visible             (Id : E) return B;
  3027.    function Is_Imported                        (Id : E) return B;
  3028.    function Is_Inlined                         (Id : E) return B;
  3029.    function Is_Internal                        (Id : E) return B;
  3030.    function Is_Interrupt_Handler               (Id : E) return B;
  3031.    function Is_Intrinsic_Subprogram            (Id : E) return B;
  3032.    function Is_Itype                           (Id : E) return B;
  3033.    function Is_Named_Number                    (Id : E) return B;
  3034.    function Is_Overloadable                    (Id : E) return B;
  3035.    function Is_Packed                          (Id : E) return B;
  3036.    function Is_Potentially_Use_Visible         (Id : E) return B;
  3037.    function Is_Preelaborated                   (Id : E) return B;
  3038.    function Is_Private                         (Id : E) return B;
  3039.    function Is_Private_Descendant              (Id : E) return B;
  3040.    function Is_Public                          (Id : E) return B;
  3041.    function Is_Pure                            (Id : E) return B;
  3042.    function Is_Remote_Call_Interface           (Id : E) return B;
  3043.    function Is_Remote_Types                    (Id : E) return B;
  3044.    function Is_Shared_Passive                  (Id : E) return B;
  3045.    function Is_Subprogram                      (Id : E) return B;
  3046.    function Is_Tag                             (Id : E) return B;
  3047.    function Is_Volatile                        (Id : E) return B;
  3048.    function Last_Entity                        (Id : E) return E;
  3049.    function Lit_Name_Table                     (Id : E) return E;
  3050.    function Machine_Attribute                  (Id : E) return N;
  3051.    function Machine_Radix_10                   (Id : E) return B;
  3052.    function Master_Id                          (Id : E) return E;
  3053.    function Modulus                            (Id : E) return U;
  3054.    function Needs_Discr_Check                  (Id : E) return B;
  3055.    function Needs_No_Actuals                   (Id : E) return B;
  3056.    function Next_Inlined_Subprogram            (Id : E) return E;
  3057.    function Next_Itype                         (Id : E) return E;
  3058.    function Non_Binary_Modulus                 (Id : E) return B;
  3059.    function Object_Ref                         (Id : E) return E;
  3060.    function Original_Record_Component          (Id : E) return E;
  3061.    function Packed_Array_Type                  (Id : E) return E;
  3062.    function Primitive_Operations               (Id : E) return L;
  3063.    function Private_Dependents                 (Id : E) return L;
  3064.    function Prival                             (Id : E) return E;
  3065.    function Protected_Body_Subprogram          (Id : E) return E;
  3066.    function Protected_Formal                   (Id : E) return E;
  3067.    function Protected_Operation                (Id : E) return E;
  3068.    function Reachable                          (Id : E) return B;
  3069.    function Renamed_Entity                     (Id : E) return N;
  3070.    function Renamed_Object                     (Id : E) return N;
  3071.    function Return_Present                     (Id : E) return B;
  3072.    function Returns_By_Ref                     (Id : E) return B;
  3073.    function Scalar_Range                       (Id : E) return N;
  3074.    function Scale_Value                        (Id : E) return U;
  3075.    function Scope_Depth                        (Id : E) return U;
  3076.    function Size_Known_At_Compile_Time         (Id : E) return B;
  3077.    function Small_Value                        (Id : E) return R;
  3078.    function Storage_Size_Variable              (Id : E) return E;
  3079.    function String_Literal_Length              (Id : E) return U;
  3080.    function Suppress_Access_Checks             (Id : E) return B;
  3081.    function Suppress_Accessibility_Checks      (Id : E) return B;
  3082.    function Suppress_Discriminant_Checks       (Id : E) return B;
  3083.    function Suppress_Division_Checks           (Id : E) return B;
  3084.    function Suppress_Elaboration_Checks        (Id : E) return B;
  3085.    function Suppress_Index_Checks              (Id : E) return B;
  3086.    function Suppress_Length_Checks             (Id : E) return B;
  3087.    function Suppress_Overflow_Checks           (Id : E) return B;
  3088.    function Suppress_Range_Checks              (Id : E) return B;
  3089.    function Suppress_Storage_Checks            (Id : E) return B;
  3090.    function Suppress_Tag_Checks                (Id : E) return B;
  3091.    function Table_High_Bound                   (Id : E) return N;
  3092.    function Task_Activation_Chain_Entity       (Id : E) return E;
  3093.    function Task_Body_Procedure                (Id : E) return E;
  3094.    function Uses_Sec_Stack                     (Id : E) return B;
  3095.  
  3096.    -------------------------------
  3097.    -- Classification Attributes --
  3098.    -------------------------------
  3099.  
  3100.    --  These functions provide a convenient functional notation for testing
  3101.    --  whether an Ekind value belongs to a specified kind, for example the
  3102.    --  function Is_Elementary_Type tests if its argument is in Elementary_Kind.
  3103.    --  In some cases, the test is of an entity attribute (e.g. in the case of
  3104.    --  Is_Generic_Type where the Ekind does not provide the needed information)
  3105.  
  3106.    function Is_Access_Type                     (Id : E) return B;
  3107.    function Is_Array_Type                      (Id : E) return B;
  3108.    function Is_Child_Unit                      (Id : E) return B;
  3109.    function Is_Class_Wide_Type                 (Id : E) return B;
  3110.    function Is_Composite_Type                  (Id : E) return B;
  3111.    function Is_Concurrent_Body                 (Id : E) return B;
  3112.    function Is_Concurrent_Record_Type          (Id : E) return B;
  3113.    function Is_Concurrent_Type                 (Id : E) return B;
  3114.    function Is_Decimal_Fixed_Point_Type        (Id : E) return B;
  3115.    function Is_Digits_Type                     (Id : E) return B;
  3116.    function Is_Discrete_Type                   (Id : E) return B;
  3117.    function Is_Elementary_Type                 (Id : E) return B;
  3118.    function Is_Enumeration_Type                (Id : E) return B;
  3119.    function Is_Fixed_Point_Type                (Id : E) return B;
  3120.    function Is_Floating_Point_Type             (Id : E) return B;
  3121.    function Is_Generic_Type                    (Id : E) return B;
  3122.    function Is_Generic_Actual_Type             (Id : E) return B;
  3123.    function Is_Incomplete_Or_Private_Type      (Id : E) return B;
  3124.    function Is_Integer_Type                    (Id : E) return B;
  3125.    function Is_Limited_Record                  (Id : E) return B;
  3126.    function Is_Modular_Integer_Type            (Id : E) return B;
  3127.    function Is_Numeric_Type                    (Id : E) return B;
  3128.    function Is_Object                          (Id : E) return B;
  3129.    function Is_Ordinary_Fixed_Point_Type       (Id : E) return B;
  3130.    function Is_Private_Type                    (Id : E) return B;
  3131.    function Is_Protected_Type                  (Id : E) return B;
  3132.    function Is_Real_Type                       (Id : E) return B;
  3133.    function Is_Record_Type                     (Id : E) return B;
  3134.    function Is_Scalar_Type                     (Id : E) return B;
  3135.    function Is_Signed_Integer_Type             (Id : E) return B;
  3136.    function Is_Tagged_Type                     (Id : E) return B;
  3137.    function Is_Task_Type                       (Id : E) return B;
  3138.    function Is_Type                            (Id : E) return B;
  3139.  
  3140.    -------------------------------------
  3141.    -- Synthesized Attribute Functions --
  3142.    -------------------------------------
  3143.  
  3144.    --  The functions in this section synthesize attributes from the tree,
  3145.    --  so they do not correspond to defined fields in the entity itself.
  3146.  
  3147.    function Ancestor_Subtype                   (Id : E) return E;
  3148.    function Base_Type                          (Id : E) return E;
  3149.    function Constant_Value                     (Id : E) return N;
  3150.    function Declaration_Node                   (Id : E) return N;
  3151.    function Depends_On_Private                 (Id : E) return B;
  3152.    function Designated_Type                    (Id : E) return E;
  3153.    function First_Component                    (Id : E) return E;
  3154.    function First_Discriminant                 (Id : E) return E;
  3155.    function First_Formal                       (Id : E) return E;
  3156.    function First_Subtype                      (Id : E) return E;
  3157.    function Has_Entries                        (Id : E) return B;
  3158.    function Has_Foreign_Convention             (Id : E) return B;
  3159.    function Is_Boolean_Type                    (Id : E) return B;
  3160.    function Is_By_Copy_Type                    (Id : E) return B;
  3161.    function Is_Derived_Type                    (Id : E) return B;
  3162.    function Is_Indefinite_Subtype              (Id : E) return B;
  3163.    function Is_Limited_Type                    (Id : E) return B;
  3164.    function Is_Protected_Private               (Id : E) return B;
  3165.    function Is_Protected_Record_Type           (Id : E) return B;
  3166.    function Is_Return_By_Reference_Type        (Id : E) return B;
  3167.    function Is_String_Type                     (Id : E) return B;
  3168.    function Is_Task_Record_Type                (Id : E) return B;
  3169.    function Next_Component                     (Id : E) return E;
  3170.    function Next_Discriminant                  (Id : E) return E;
  3171.    function Next_Formal                        (Id : E) return E;
  3172.    function Next_Literal                       (Id : E) return E;
  3173.    function Next_Overloads                     (Id : E) return E;
  3174.    function Number_Dimensions                  (Id : E) return Pos;
  3175.    function Number_Discriminants               (Id : E) return Pos;
  3176.    function Parameter_Mode                     (Id : E) return Formal_Kind;
  3177.    function Root_Type                          (Id : E) return E;
  3178.    function Tag_Component                      (Id : E) return E;
  3179.    function Type_High_Bound                    (Id : E) return N;
  3180.    function Type_Low_Bound                     (Id : E) return N;
  3181.    function Underlying_Type                    (Id : E) return E;
  3182.  
  3183.    ------------------------------
  3184.    -- Attribute Set Procedures --
  3185.    ------------------------------
  3186.  
  3187.    procedure Set_Accept_Address                (Id : E; V : L);
  3188.    procedure Set_Access_Disp_Table             (Id : E; V : E);
  3189.    procedure Set_Actual_Subtype                (Id : E; V : E);
  3190.    procedure Set_Address_Clause                (Id : E; V : N);
  3191.    procedure Set_Alias                         (Id : E; V : E);
  3192.    procedure Set_Alignment_Clause              (Id : E; V : N);
  3193.    procedure Set_Associated_Storage_Pool       (Id : E; V : E);
  3194.    procedure Set_Associated_Formal_Package     (Id : E; V : E);
  3195.    procedure Set_Associated_Final_Chain        (Id : E; V : E);
  3196.    procedure Set_Barrier_Function              (Id : E; V : N);
  3197.    procedure Set_Class_Wide_Type               (Id : E; V : E);
  3198.    procedure Set_Component_Clause              (Id : E; V : N);
  3199.    procedure Set_Component_Size_Clause         (Id : E; V : N);
  3200.    procedure Set_Component_Type                (Id : E; V : E);
  3201.    procedure Set_Component_First_Bit           (Id : E; V : U);
  3202.    procedure Set_Corresponding_Concurrent_Type (Id : E; V : E);
  3203.    procedure Set_Corresponding_Discriminant    (Id : E; V : E);
  3204.    procedure Set_Corresponding_Record_Type     (Id : E; V : E);
  3205.    procedure Set_Default_Value                 (Id : E; V : N);
  3206.    procedure Set_Delta_Value                   (Id : E; V : R);
  3207.    procedure Set_Depends_On_Private            (Id : E; V : B := True);
  3208.    procedure Set_Digits_Value                  (Id : E; V : U);
  3209.    procedure Set_Directly_Designated_Type      (Id : E; V : E);
  3210.    procedure Set_Discard_Names                 (Id : E; V : B := True);
  3211.    procedure Set_Discriminal                   (Id : E; V : E);
  3212.    procedure Set_Discriminant_Checking_Func    (Id : E; V : E);
  3213.    procedure Set_Discriminant_Constraint       (Id : E; V : L);
  3214.    procedure Set_Discriminant_Default_Value    (Id : E; V : N);
  3215.    procedure Set_DTC_Entity                    (Id : E; V : E);
  3216.    procedure Set_DT_Entry_Count                (Id : E; V : U);
  3217.    procedure Set_DT_Position                   (Id : E; V : U);
  3218.    procedure Set_Entry_Bodies_Array            (Id : E; V : E);
  3219.    procedure Set_Entry_Component               (Id : E; V : E);
  3220.    procedure Set_Entry_Index_Constant          (Id : E; V : E);
  3221.    procedure Set_Entry_Parameters_Type         (Id : E; V : E);
  3222.    procedure Set_Enumeration_Pos               (Id : E; V : U);
  3223.    procedure Set_Enumeration_Rep               (Id : E; V : U);
  3224.    procedure Set_Enumeration_Rep_Expr          (Id : E; V : N);
  3225.    procedure Set_Enum_Pos_To_Rep               (Id : E; V : E);
  3226.    procedure Set_Equivalent_Type               (Id : E; V : E);
  3227.    procedure Set_Esize                         (Id : E; V : U);
  3228.    procedure Set_Finalization_Chain_Entity     (Id : E; V : E);
  3229.    procedure Set_First_Entity                  (Id : E; V : E);
  3230.    procedure Set_First_Index                   (Id : E; V : N);
  3231.    procedure Set_First_Literal                 (Id : E; V : E);
  3232.    procedure Set_First_Private_Entity          (Id : E; V : E);
  3233.    procedure Set_Freeze_Node                   (Id : E; V : N);
  3234.    procedure Set_Full_View                     (Id : E; V : E);
  3235.    procedure Set_Has_Alignment_Clause          (Id : E; V : B := True);
  3236.    procedure Set_Has_All_Calls_Remote          (Id : E; V : B := True);
  3237.    procedure Set_Has_Atomic_Components         (Id : E; V : B := True);
  3238.    procedure Set_Has_Completion                (Id : E; V : B := True);
  3239.    procedure Set_Has_Completion_In_Body        (Id : E; V : B := True);
  3240.    procedure Set_Has_Component_Size_Clause     (Id : E; V : B := True);
  3241.    procedure Set_Has_Controlled                (Id : E; V : B := True);
  3242.    procedure Set_Has_Controlling_Result        (Id : E; V : B := True);
  3243.    procedure Set_Has_Delayed_Freeze            (Id : E; V : B := True);
  3244.    procedure Set_Has_Discriminants             (Id : E; V : B := True);
  3245.    procedure Set_Has_Enumeration_Rep_Clause    (Id : E; V : B := True);
  3246.    procedure Set_Has_Exit                      (Id : E; V : B := True);
  3247.    procedure Set_Has_Homonym                   (Id : E; V : B := True);
  3248.    procedure Set_Has_Master_Entity             (Id : E; V : B := True);
  3249.    procedure Set_Has_Machine_Attribute         (Id : E; V : B := True);
  3250.    procedure Set_Has_Machine_Radix_Clause      (Id : E; V : B := True);
  3251.    procedure Set_Has_Nested_Block_With_Handler (Id : E; V : B := True);
  3252.    procedure Set_Has_Non_Standard_Rep          (Id : E; V : B := True);
  3253.    procedure Set_Has_Pragma_Controlled         (Id : E; V : B := True);
  3254.    procedure Set_Has_Record_Rep_Clause         (Id : E; V : B := True);
  3255.    procedure Set_Has_Size_Clause               (Id : E; V : B := True);
  3256.    procedure Set_Has_Small_Clause              (Id : E; V : B := True);
  3257.    procedure Set_Has_Specified_Layout          (Id : E; V : B := True);
  3258.    procedure Set_Has_Storage_Size_Clause       (Id : E; V : B := True);
  3259.    procedure Set_Has_Tasks                     (Id : E; V : B := True);
  3260.    procedure Set_Has_Unknown_Discriminants     (Id : E; V : B := True);
  3261.    procedure Set_Has_U_Nominal_Subtype         (Id : E; V : B := True);
  3262.    procedure Set_Has_Volatile_Components       (Id : E; V : B := True);
  3263.    procedure Set_In_Package_Body               (Id : E; V : B := True);
  3264.    procedure Set_In_Private_Part               (Id : E; V : B := True);
  3265.    procedure Set_In_Use                        (Id : E; V : B := True);
  3266.    procedure Set_Interface_Name                (Id : E; V : N);
  3267.    procedure Set_Is_Abstract                   (Id : E; V : B := True);
  3268.    procedure Set_Is_Asynchronous               (Id : E; V : B := True);
  3269.    procedure Set_Is_Access_Constant            (Id : E; V : B := True);
  3270.    procedure Set_Is_Aliased                    (Id : E; V : B := True);
  3271.    procedure Set_Is_Atomic                     (Id : E; V : B := True);
  3272.    procedure Set_Is_Called                     (Id : E; V : B := True);
  3273.    procedure Set_Is_Character_Type             (Id : E; V : B := True);
  3274.    procedure Set_Is_Child_Unit                 (Id : E; V : B := True);
  3275.    procedure Set_Is_Constrained                (Id : E; V : B := True);
  3276.    procedure Set_Is_Constructor                (Id : E; V : B := True);
  3277.    procedure Set_Is_Controlled                 (Id : E; V : B := True);
  3278.    procedure Set_Is_Controlling_Formal         (Id : E; V : B := True);
  3279.    procedure Set_Is_CPP_Class                  (Id : E; V : B := True);
  3280.    procedure Set_Is_Declared_In_Package_Body   (Id : E; V : B := True);
  3281.    procedure Set_Is_Destructor                 (Id : E; V : B := True);
  3282.    procedure Set_Is_Dispatching_Operation      (Id : E; V : B := True);
  3283.    procedure Set_Is_Entry_Formal               (Id : E; V : B := True);
  3284.    procedure Set_Is_Exported                   (Id : E; V : B := True);
  3285.    procedure Set_Is_First_Subtype              (Id : E; V : B := True);
  3286.    procedure Set_Is_Frozen                     (Id : E; V : B := True);
  3287.    procedure Set_Is_Generic_Type               (Id : E; V : B := True);
  3288.    procedure Set_Is_Generic_Actual_Type        (Id : E; V : B := True);
  3289.    procedure Set_Is_Immediately_Visible        (Id : E; V : B := True);
  3290.    procedure Set_Is_Imported                   (Id : E; V : B := True);
  3291.    procedure Set_Is_Inlined                    (Id : E; V : B := True);
  3292.    procedure Set_Is_Internal                   (Id : E; V : B := True);
  3293.    procedure Set_Is_Interrupt_Handler          (Id : E; V : B := True);
  3294.    procedure Set_Is_Intrinsic_Subprogram       (Id : E; V : B := True);
  3295.    procedure Set_Is_Itype                      (Id : E; V : B := True);
  3296.    procedure Set_Is_Limited_Record             (Id : E; V : B := True);
  3297.    procedure Set_Is_Packed                     (Id : E; V : B := True);
  3298.    procedure Set_Is_Potentially_Use_Visible    (Id : E; V : B := True);
  3299.    procedure Set_Is_Preelaborated              (Id : E; V : B := True);
  3300.    procedure Set_Is_Private                    (Id : E; V : B := True);
  3301.    procedure Set_Is_Private_Descendant         (Id : E; V : B := True);
  3302.    procedure Set_Is_Public                     (Id : E; V : B := True);
  3303.    procedure Set_Is_Pure                       (Id : E; V : B := True);
  3304.    procedure Set_Is_Remote_Call_Interface      (Id : E; V : B := True);
  3305.    procedure Set_Is_Remote_Types               (Id : E; V : B := True);
  3306.    procedure Set_Is_Shared_Passive             (Id : E; V : B := True);
  3307.    procedure Set_Is_Tagged_Type                (Id : E; V : B := True);
  3308.    procedure Set_Is_Concurrent_Record_Type     (Id : E; V : B := True);
  3309.    procedure Set_Is_Tag                        (Id : E; V : B := True);
  3310.    procedure Set_Is_Volatile                   (Id : E; V : B := True);
  3311.    procedure Set_Last_Entity                   (Id : E; V : E);
  3312.    procedure Set_Lit_Name_Table                (Id : E; V : E);
  3313.    procedure Set_Machine_Attribute             (Id : E; V : N);
  3314.    procedure Set_Machine_Radix_10              (Id : E; V : B := True);
  3315.    procedure Set_Master_Id                     (Id : E; V : E);
  3316.    procedure Set_Modulus                       (Id : E; V : U);
  3317.    procedure Set_Needs_Discr_Check             (Id : E; V : B := True);
  3318.    procedure Set_Needs_No_Actuals              (Id : E; V : B := True);
  3319.    procedure Set_Next_Inlined_Subprogram       (Id : E; V : E);
  3320.    procedure Set_Next_Itype                    (Id : E; V : E);
  3321.    procedure Set_Non_Binary_Modulus            (Id : E; V : B := True);
  3322.    procedure Set_Object_Ref                    (Id : E; V : E);
  3323.    procedure Set_Original_Record_Component     (Id : E; V : E);
  3324.    procedure Set_Packed_Array_Type             (Id : E; V : E);
  3325.    procedure Set_Primitive_Operations          (Id : E; V : L);
  3326.    procedure Set_Prival                        (Id : E; V : E);
  3327.    procedure Set_Protected_Body_Subprogram     (Id : E; V : E);
  3328.    procedure Set_Protected_Formal              (Id : E; V : E);
  3329.    procedure Set_Protected_Operation           (Id : E; V : N);
  3330.    procedure Set_Private_Dependents            (Id : E; V : L);
  3331.    procedure Set_Reachable                     (Id : E; V : B := True);
  3332.    procedure Set_Renamed_Entity                (Id : E; V : N);
  3333.    procedure Set_Renamed_Object                (Id : E; V : N);
  3334.    procedure Set_Return_Present                (Id : E; V : B := True);
  3335.    procedure Set_Returns_By_Ref                (Id : E; V : B := True);
  3336.    procedure Set_Scalar_Range                  (Id : E; V : N);
  3337.    procedure Set_Scale_Value                   (Id : E; V : U);
  3338.    procedure Set_Scope_Depth                   (Id : E; V : U);
  3339.    procedure Set_Size_Known_At_Compile_Time    (Id : E; V : B := True);
  3340.    procedure Set_Small_Value                   (Id : E; V : R);
  3341.    procedure Set_Storage_Size_Variable         (Id : E; V : E);
  3342.    procedure Set_String_Literal_Length         (Id : E; V : U);
  3343.    procedure Set_Suppress_Access_Checks        (Id : E; V : B := True);
  3344.    procedure Set_Suppress_Accessibility_Checks (Id : E; V : B := True);
  3345.    procedure Set_Suppress_Discriminant_Checks  (Id : E; V : B := True);
  3346.    procedure Set_Suppress_Division_Checks      (Id : E; V : B := True);
  3347.    procedure Set_Suppress_Elaboration_Checks   (Id : E; V : B := True);
  3348.    procedure Set_Suppress_Index_Checks         (Id : E; V : B := True);
  3349.    procedure Set_Suppress_Length_Checks        (Id : E; V : B := True);
  3350.    procedure Set_Suppress_Overflow_Checks      (Id : E; V : B := True);
  3351.    procedure Set_Suppress_Range_Checks         (Id : E; V : B := True);
  3352.    procedure Set_Suppress_Storage_Checks       (Id : E; V : B := True);
  3353.    procedure Set_Suppress_Tag_Checks           (Id : E; V : B := True);
  3354.    procedure Set_Table_High_Bound              (Id : E; V : N);
  3355.    procedure Set_Task_Activation_Chain_Entity  (Id : E; V : E);
  3356.    procedure Set_Task_Body_Procedure           (Id : E; V : E);
  3357.    procedure Set_Uses_Sec_Stack                (Id : E; V : B := True);
  3358.  
  3359.    -------------------------------
  3360.    -- Miscellaneous Subprograms --
  3361.    -------------------------------
  3362.  
  3363.    procedure Append_Entity (Id : Entity_Id; V : Entity_Id);
  3364.    --  Add an entity to the list of entities declared in the scope E
  3365.  
  3366.    function Next_Index (Id : Node_Id) return Node_Id;
  3367.    --  Given an index from a previous call to First_Index or Next_Index,
  3368.    --  returns a node representing the occurrence of the next index subtype,
  3369.    --  or Empty if there are no more index subtypes.
  3370.  
  3371.    function Subtype_Kind (K : Entity_Kind) return Entity_Kind;
  3372.    --  Given an entity_kind K this function returns the entity_kind
  3373.    --  corresponding to subtype kind of the type represented by K. For
  3374.    --  example if K is E_Signed_Integer_Type then E_Siggned_Integer_Subtype
  3375.    --  is returned. If K is already a subtype kind it itself is returned. An
  3376.    --  internal error is generated if no such correspondence exists for K.
  3377.  
  3378.    ----------------------------------
  3379.    -- Debugging Output Subprograms --
  3380.    ----------------------------------
  3381.  
  3382.    procedure Write_Entity_Flags (Id : Entity_Id; Prefix : String);
  3383.    --  Writes a series of entries giving a line for each flag that is
  3384.    --  set to True. Each line is prefixed by the given string
  3385.  
  3386.    procedure Write_Entity_Info (Id : Entity_Id; Prefix : String);
  3387.    --  A debugging procedure to write out information about an entity
  3388.  
  3389.    procedure Write_Field6_Name  (Id : Entity_Id);
  3390.    procedure Write_Field7_Name  (Id : Entity_Id);
  3391.    procedure Write_Field8_Name  (Id : Entity_Id);
  3392.    procedure Write_Field9_Name  (Id : Entity_Id);
  3393.    procedure Write_Field10_Name (Id : Entity_Id);
  3394.    procedure Write_Field11_Name (Id : Entity_Id);
  3395.    procedure Write_Field12_Name (Id : Entity_Id);
  3396.    procedure Write_Field13_Name (Id : Entity_Id);
  3397.    procedure Write_Field14_Name (Id : Entity_Id);
  3398.    procedure Write_Field15_Name (Id : Entity_Id);
  3399.    procedure Write_Field16_Name (Id : Entity_Id);
  3400.    procedure Write_Field17_Name (Id : Entity_Id);
  3401.    procedure Write_Field18_Name (Id : Entity_Id);
  3402.    procedure Write_Field19_Name (Id : Entity_Id);
  3403.    procedure Write_Field20_Name (Id : Entity_Id);
  3404.    procedure Write_Field21_Name (Id : Entity_Id);
  3405.    procedure Write_Field22_Name (Id : Entity_Id);
  3406.    --  These routines are used to output a nice symbolic name for the given
  3407.    --  field, depending on the Ekind. No blanks or end of lines are output,
  3408.    --  just the characters of the field name.
  3409.  
  3410.    --------------------
  3411.    -- Inline Pragmas --
  3412.    --------------------
  3413.  
  3414.    --  Note that these inline pragmas are referenced by the XEINFO utility
  3415.    --  program in preparing the corresponding C header, and only those
  3416.    --  subprograms meeting the requiremens documented in the section on
  3417.    --  XEINFO may be referenced in this section.
  3418.  
  3419.    pragma Inline (Accept_Address);
  3420.    pragma Inline (Access_Disp_Table);
  3421.    pragma Inline (Actual_Subtype);
  3422.    pragma Inline (Address_Clause);
  3423.    pragma Inline (Alias);
  3424.    pragma Inline (Alignment_Clause);
  3425.    pragma Inline (Associated_Final_Chain);
  3426.    pragma Inline (Associated_Formal_Package);
  3427.    pragma Inline (Associated_Storage_Pool);
  3428.    pragma Inline (Barrier_Function);
  3429.    pragma Inline (Class_Wide_Type);
  3430.    pragma Inline (Component_Clause);
  3431.    pragma Inline (Component_First_Bit);
  3432.    pragma Inline (Component_Size_Clause);
  3433.    pragma Inline (Component_Type);
  3434.    pragma Inline (Corresponding_Concurrent_Type);
  3435.    pragma Inline (Corresponding_Discriminant);
  3436.    pragma Inline (Corresponding_Record_Type);
  3437.    pragma Inline (DTC_Entity);
  3438.    pragma Inline (DT_Entry_Count);
  3439.    pragma Inline (DT_Position);
  3440.    pragma Inline (Default_Value);
  3441.    pragma Inline (Delta_Value);
  3442.    pragma Inline (Depends_On_Private);
  3443.    pragma Inline (Digits_Value);
  3444.    pragma Inline (Directly_Designated_Type);
  3445.    pragma Inline (Discard_Names);
  3446.    pragma Inline (Discriminal);
  3447.    pragma Inline (Discriminant_Checking_Func);
  3448.    pragma Inline (Discriminant_Constraint);
  3449.    pragma Inline (Discriminant_Default_Value);
  3450.    pragma Inline (Entry_Bodies_Array);
  3451.    pragma Inline (Entry_Component);
  3452.    pragma Inline (Entry_Index_Constant);
  3453.    pragma Inline (Entry_Index_Type);
  3454.    pragma Inline (Entry_Parameters_Type);
  3455.    pragma Inline (Enum_Pos_To_Rep);
  3456.    pragma Inline (Enumeration_Pos);
  3457.    pragma Inline (Enumeration_Rep);
  3458.    pragma Inline (Enumeration_Rep_Expr);
  3459.    pragma Inline (Equivalent_Type);
  3460.    pragma Inline (Esize);
  3461.    pragma Inline (Finalization_Chain_Entity);
  3462.    pragma Inline (First_Entity);
  3463.    pragma Inline (First_Index);
  3464.    pragma Inline (First_Literal);
  3465.    pragma Inline (First_Private_Entity);
  3466.    pragma Inline (Freeze_Node);
  3467.    pragma Inline (Full_View);
  3468.    pragma Inline (Has_Alignment_Clause);
  3469.    pragma Inline (Has_All_Calls_Remote);
  3470.    pragma Inline (Has_Atomic_Components);
  3471.    pragma Inline (Has_Completion);
  3472.    pragma Inline (Has_Completion_In_Body);
  3473.    pragma Inline (Has_Component_Size_Clause);
  3474.    pragma Inline (Has_Controlled);
  3475.    pragma Inline (Has_Controlling_Result);
  3476.    pragma Inline (Has_Delayed_Freeze);
  3477.    pragma Inline (Has_Discriminants);
  3478.    pragma Inline (Has_Enumeration_Rep_Clause);
  3479.    pragma Inline (Has_Exit);
  3480.    pragma Inline (Has_Homonym);
  3481.    pragma Inline (Has_Machine_Attribute);
  3482.    pragma Inline (Has_Machine_Radix_Clause);
  3483.    pragma Inline (Has_Master_Entity);
  3484.    pragma Inline (Has_Nested_Block_With_Handler);
  3485.    pragma Inline (Has_Non_Standard_Rep);
  3486.    pragma Inline (Has_Pragma_Controlled);
  3487.    pragma Inline (Has_Record_Rep_Clause);
  3488.    pragma Inline (Has_Size_Clause);
  3489.    pragma Inline (Has_Small_Clause);
  3490.    pragma Inline (Has_Specified_Layout);
  3491.    pragma Inline (Has_Storage_Size_Clause);
  3492.    pragma Inline (Has_Tasks);
  3493.    pragma Inline (Has_U_Nominal_Subtype);
  3494.    pragma Inline (Has_Unknown_Discriminants);
  3495.    pragma Inline (Has_Volatile_Components);
  3496.    pragma Inline (In_Package_Body);
  3497.    pragma Inline (In_Private_Part);
  3498.    pragma Inline (In_Use);
  3499.    pragma Inline (Interface_Name);
  3500.    pragma Inline (Is_Abstract);
  3501.    pragma Inline (Is_Access_Constant);
  3502.    pragma Inline (Is_Access_Type);
  3503.    pragma Inline (Is_Aliased);
  3504.    pragma Inline (Is_Array_Type);
  3505.    pragma Inline (Is_Asynchronous);
  3506.    pragma Inline (Is_Atomic);
  3507.    pragma Inline (Is_CPP_Class);
  3508.    pragma Inline (Is_Called);
  3509.    pragma Inline (Is_Character_Type);
  3510.    pragma Inline (Is_Child_Unit);
  3511.    pragma Inline (Is_Class_Wide_Type);
  3512.    pragma Inline (Is_Composite_Type);
  3513.    pragma Inline (Is_Concurrent_Body);
  3514.    pragma Inline (Is_Concurrent_Record_Type);
  3515.    pragma Inline (Is_Concurrent_Type);
  3516.    pragma Inline (Is_Constrained);
  3517.    pragma Inline (Is_Constructor);
  3518.    pragma Inline (Is_Controlled);
  3519.    pragma Inline (Is_Controlling_Formal);
  3520.    pragma Inline (Is_Decimal_Fixed_Point_Type);
  3521.    pragma Inline (Is_Declared_In_Package_Body);
  3522.    pragma Inline (Is_Destructor);
  3523.    pragma Inline (Is_Digits_Type);
  3524.    pragma Inline (Is_Discrete_Type);
  3525.    pragma Inline (Is_Dispatching_Operation);
  3526.    pragma Inline (Is_Elementary_Type);
  3527.    pragma Inline (Is_Entry_Formal);
  3528.    pragma Inline (Is_Enumeration_Type);
  3529.    pragma Inline (Is_Exported);
  3530.    pragma Inline (Is_First_Subtype);
  3531.    pragma Inline (Is_Fixed_Point_Type);
  3532.    pragma Inline (Is_Floating_Point_Type);
  3533.    pragma Inline (Is_Frozen);
  3534.    pragma Inline (Is_Generic_Actual_Type);
  3535.    pragma Inline (Is_Generic_Type);
  3536.    pragma Inline (Is_Immediately_Visible);
  3537.    pragma Inline (Is_Imported);
  3538.    pragma Inline (Is_Incomplete_Or_Private_Type);
  3539.    pragma Inline (Is_Inlined);
  3540.    pragma Inline (Is_Integer_Type);
  3541.    pragma Inline (Is_Internal);
  3542.    pragma Inline (Is_Interrupt_Handler);
  3543.    pragma Inline (Is_Intrinsic_Subprogram);
  3544.    pragma Inline (Is_Itype);
  3545.    pragma Inline (Is_Limited_Record);
  3546.    pragma Inline (Is_Modular_Integer_Type);
  3547.    pragma Inline (Is_Named_Number);
  3548.    pragma Inline (Is_Numeric_Type);
  3549.    pragma Inline (Is_Object);
  3550.    pragma Inline (Is_Ordinary_Fixed_Point_Type);
  3551.    pragma Inline (Is_Overloadable);
  3552.    pragma Inline (Is_Packed);
  3553.    pragma Inline (Is_Potentially_Use_Visible);
  3554.    pragma Inline (Is_Preelaborated);
  3555.    pragma Inline (Is_Private);
  3556.    pragma Inline (Is_Private_Descendant);
  3557.    pragma Inline (Is_Private_Type);
  3558.    pragma Inline (Is_Protected_Type);
  3559.    pragma Inline (Is_Public);
  3560.    pragma Inline (Is_Pure);
  3561.    pragma Inline (Is_Real_Type);
  3562.    pragma Inline (Is_Record_Type);
  3563.    pragma Inline (Is_Remote_Call_Interface);
  3564.    pragma Inline (Is_Remote_Types);
  3565.    pragma Inline (Is_Scalar_Type);
  3566.    pragma Inline (Is_Shared_Passive);
  3567.    pragma Inline (Is_Signed_Integer_Type);
  3568.    pragma Inline (Is_Subprogram);
  3569.    pragma Inline (Is_Tag);
  3570.    pragma Inline (Is_Tagged_Type);
  3571.    pragma Inline (Is_Task_Type);
  3572.    pragma Inline (Is_Type);
  3573.    pragma Inline (Is_Volatile);
  3574.    pragma Inline (Last_Entity);
  3575.    pragma Inline (Lit_Name_Table);
  3576.    pragma Inline (Machine_Attribute);
  3577.    pragma Inline (Machine_Radix_10);
  3578.    pragma Inline (Master_Id);
  3579.    pragma Inline (Modulus);
  3580.    pragma Inline (Needs_Discr_Check);
  3581.    pragma Inline (Needs_No_Actuals);
  3582.    pragma Inline (Next_Index);
  3583.    pragma Inline (Next_Inlined_Subprogram);
  3584.    pragma Inline (Next_Itype);
  3585.    pragma Inline (Next_Literal);
  3586.    pragma Inline (Next_Overloads);
  3587.    pragma Inline (Non_Binary_Modulus);
  3588.    pragma Inline (Object_Ref);
  3589.    pragma Inline (Original_Record_Component);
  3590.    pragma Inline (Packed_Array_Type);
  3591.    pragma Inline (Parameter_Mode);
  3592.    pragma Inline (Primitive_Operations);
  3593.    pragma Inline (Prival);
  3594.    pragma Inline (Private_Dependents);
  3595.    pragma Inline (Protected_Body_Subprogram);
  3596.    pragma Inline (Protected_Formal);
  3597.    pragma Inline (Protected_Operation);
  3598.    pragma Inline (Reachable);
  3599.    pragma Inline (Renamed_Entity);
  3600.    pragma Inline (Renamed_Object);
  3601.    pragma Inline (Return_Present);
  3602.    pragma Inline (Returns_By_Ref);
  3603.    pragma Inline (Scalar_Range);
  3604.    pragma Inline (Scale_Value);
  3605.    pragma Inline (Scope_Depth);
  3606.    pragma Inline (Size_Known_At_Compile_Time);
  3607.    pragma Inline (Small_Value);
  3608.    pragma Inline (Storage_Size_Variable);
  3609.    pragma Inline (String_Literal_Length);
  3610.    pragma Inline (Suppress_Access_Checks);
  3611.    pragma Inline (Suppress_Accessibility_Checks);
  3612.    pragma Inline (Suppress_Discriminant_Checks);
  3613.    pragma Inline (Suppress_Division_Checks);
  3614.    pragma Inline (Suppress_Elaboration_Checks);
  3615.    pragma Inline (Suppress_Index_Checks);
  3616.    pragma Inline (Suppress_Length_Checks);
  3617.    pragma Inline (Suppress_Overflow_Checks);
  3618.    pragma Inline (Suppress_Range_Checks);
  3619.    pragma Inline (Suppress_Storage_Checks);
  3620.    pragma Inline (Suppress_Tag_Checks);
  3621.    pragma Inline (Table_High_Bound);
  3622.    pragma Inline (Task_Activation_Chain_Entity);
  3623.    pragma Inline (Task_Body_Procedure);
  3624.    pragma Inline (Type_High_Bound);
  3625.    pragma Inline (Type_Low_Bound);
  3626.    pragma Inline (Uses_Sec_Stack);
  3627.  
  3628.    pragma Inline (Set_Accept_Address);
  3629.    pragma Inline (Set_Access_Disp_Table);
  3630.    pragma Inline (Set_Actual_Subtype);
  3631.    pragma Inline (Set_Address_Clause);
  3632.    pragma Inline (Set_Alias);
  3633.    pragma Inline (Set_Alignment_Clause);
  3634.    pragma Inline (Set_Associated_Final_Chain);
  3635.    pragma Inline (Set_Associated_Formal_Package);
  3636.    pragma Inline (Set_Associated_Storage_Pool);
  3637.    pragma Inline (Set_Barrier_Function);
  3638.    pragma Inline (Set_Class_Wide_Type);
  3639.    pragma Inline (Set_Component_Clause);
  3640.    pragma Inline (Set_Component_First_Bit);
  3641.    pragma Inline (Set_Component_Size_Clause);
  3642.    pragma Inline (Set_Component_Type);
  3643.    pragma Inline (Set_Corresponding_Concurrent_Type);
  3644.    pragma Inline (Set_Corresponding_Discriminant);
  3645.    pragma Inline (Set_Corresponding_Record_Type);
  3646.    pragma Inline (Set_DTC_Entity);
  3647.    pragma Inline (Set_DT_Position);
  3648.    pragma Inline (Set_Default_Value);
  3649.    pragma Inline (Set_Delta_Value);
  3650.    pragma Inline (Set_Depends_On_Private);
  3651.    pragma Inline (Set_Digits_Value);
  3652.    pragma Inline (Set_Directly_Designated_Type);
  3653.    pragma Inline (Set_Discard_Names);
  3654.    pragma Inline (Set_Discriminal);
  3655.    pragma Inline (Set_Discriminant_Checking_Func);
  3656.    pragma Inline (Set_Discriminant_Constraint);
  3657.    pragma Inline (Set_Discriminant_Default_Value);
  3658.    pragma Inline (Set_Entry_Bodies_Array);
  3659.    pragma Inline (Set_Entry_Parameters_Type);
  3660.    pragma Inline (Set_Enum_Pos_To_Rep);
  3661.    pragma Inline (Set_Enumeration_Pos);
  3662.    pragma Inline (Set_Enumeration_Rep);
  3663.    pragma Inline (Set_Enumeration_Rep_Expr);
  3664.    pragma Inline (Set_Equivalent_Type);
  3665.    pragma Inline (Set_Esize);
  3666.    pragma Inline (Set_Finalization_Chain_Entity);
  3667.    pragma Inline (Set_First_Entity);
  3668.    pragma Inline (Set_First_Index);
  3669.    pragma Inline (Set_First_Literal);
  3670.    pragma Inline (Set_First_Private_Entity);
  3671.    pragma Inline (Set_Freeze_Node);
  3672.    pragma Inline (Set_Full_View);
  3673.    pragma Inline (Set_Has_Alignment_Clause);
  3674.    pragma Inline (Set_Has_All_Calls_Remote);
  3675.    pragma Inline (Set_Has_Atomic_Components);
  3676.    pragma Inline (Set_Has_Completion);
  3677.    pragma Inline (Set_Has_Component_Size_Clause);
  3678.    pragma Inline (Set_Has_Controlled);
  3679.    pragma Inline (Set_Has_Controlling_Result);
  3680.    pragma Inline (Set_Has_Delayed_Freeze);
  3681.    pragma Inline (Set_Has_Discriminants);
  3682.    pragma Inline (Set_Has_Enumeration_Rep_Clause);
  3683.    pragma Inline (Set_Has_Exit);
  3684.    pragma Inline (Set_Has_Homonym);
  3685.    pragma Inline (Set_Has_Machine_Attribute);
  3686.    pragma Inline (Set_Has_Machine_Radix_Clause);
  3687.    pragma Inline (Set_Has_Master_Entity);
  3688.    pragma Inline (Set_Has_Nested_Block_With_Handler);
  3689.    pragma Inline (Set_Has_Non_Standard_Rep);
  3690.    pragma Inline (Set_Has_Pragma_Controlled);
  3691.    pragma Inline (Set_Has_Record_Rep_Clause);
  3692.    pragma Inline (Set_Has_Size_Clause);
  3693.    pragma Inline (Set_Has_Small_Clause);
  3694.    pragma Inline (Set_Has_Specified_Layout);
  3695.    pragma Inline (Set_Has_Storage_Size_Clause);
  3696.    pragma Inline (Set_Has_Tasks);
  3697.    pragma Inline (Set_Has_U_Nominal_Subtype);
  3698.    pragma Inline (Set_Has_Unknown_Discriminants);
  3699.    pragma Inline (Set_Has_Volatile_Components);
  3700.    pragma Inline (Set_In_Package_Body);
  3701.    pragma Inline (Set_In_Private_Part);
  3702.    pragma Inline (Set_In_Use);
  3703.    pragma Inline (Set_Interface_Name);
  3704.    pragma Inline (Set_Is_Abstract);
  3705.    pragma Inline (Set_Is_Access_Constant);
  3706.    pragma Inline (Set_Is_Aliased);
  3707.    pragma Inline (Set_Is_Asynchronous);
  3708.    pragma Inline (Set_Is_Atomic);
  3709.    pragma Inline (Set_Is_CPP_Class);
  3710.    pragma Inline (Set_Is_Called);
  3711.    pragma Inline (Set_Is_Character_Type);
  3712.    pragma Inline (Set_Is_Concurrent_Record_Type);
  3713.    pragma Inline (Set_Is_Constrained);
  3714.    pragma Inline (Set_Is_Constructor);
  3715.    pragma Inline (Set_Is_Controlled);
  3716.    pragma Inline (Set_Is_Controlling_Formal);
  3717.    pragma Inline (Set_Is_Declared_In_Package_Body);
  3718.    pragma Inline (Set_Is_Destructor);
  3719.    pragma Inline (Set_Is_Dispatching_Operation);
  3720.    pragma Inline (Set_Is_Entry_Formal);
  3721.    pragma Inline (Set_Is_Exported);
  3722.    pragma Inline (Set_Is_First_Subtype);
  3723.    pragma Inline (Set_Is_Frozen);
  3724.    pragma Inline (Set_Is_Generic_Actual_Type);
  3725.    pragma Inline (Set_Is_Generic_Type);
  3726.    pragma Inline (Set_Is_Immediately_Visible);
  3727.    pragma Inline (Set_Is_Imported);
  3728.    pragma Inline (Set_Is_Inlined);
  3729.    pragma Inline (Set_Is_Internal);
  3730.    pragma Inline (Set_Is_Interrupt_Handler);
  3731.    pragma Inline (Set_Is_Intrinsic_Subprogram);
  3732.    pragma Inline (Set_Is_Itype);
  3733.    pragma Inline (Set_Is_Limited_Record);
  3734.    pragma Inline (Set_Is_Packed);
  3735.    pragma Inline (Set_Is_Potentially_Use_Visible);
  3736.    pragma Inline (Set_Is_Preelaborated);
  3737.    pragma Inline (Set_Is_Private);
  3738.    pragma Inline (Set_Is_Private_Descendant);
  3739.    pragma Inline (Set_Is_Public);
  3740.    pragma Inline (Set_Is_Pure);
  3741.    pragma Inline (Set_Is_Remote_Call_Interface);
  3742.    pragma Inline (Set_Is_Remote_Types);
  3743.    pragma Inline (Set_Is_Shared_Passive);
  3744.    pragma Inline (Set_Is_Tag);
  3745.    pragma Inline (Set_Is_Tagged_Type);
  3746.    pragma Inline (Set_Is_Volatile);
  3747.    pragma Inline (Set_Last_Entity);
  3748.    pragma Inline (Set_Lit_Name_Table);
  3749.    pragma Inline (Set_Machine_Attribute);
  3750.    pragma Inline (Set_Machine_Radix_10);
  3751.    pragma Inline (Set_Master_Id);
  3752.    pragma Inline (Set_Modulus);
  3753.    pragma Inline (Set_Needs_Discr_Check);
  3754.    pragma Inline (Set_Needs_No_Actuals);
  3755.    pragma Inline (Set_Next_Inlined_Subprogram);
  3756.    pragma Inline (Set_Next_Itype);
  3757.    pragma Inline (Set_Non_Binary_Modulus);
  3758.    pragma Inline (Set_Object_Ref);
  3759.    pragma Inline (Set_Original_Record_Component);
  3760.    pragma Inline (Set_Packed_Array_Type);
  3761.    pragma Inline (Set_Primitive_Operations);
  3762.    pragma Inline (Set_Prival);
  3763.    pragma Inline (Set_Private_Dependents);
  3764.    pragma Inline (Set_Protected_Body_Subprogram);
  3765.    pragma Inline (Set_Protected_Formal);
  3766.    pragma Inline (Set_Protected_Operation);
  3767.    pragma Inline (Set_Reachable);
  3768.    pragma Inline (Set_Renamed_Entity);
  3769.    pragma Inline (Set_Renamed_Object);
  3770.    pragma Inline (Set_Return_Present);
  3771.    pragma Inline (Set_Returns_By_Ref);
  3772.    pragma Inline (Set_Scalar_Range);
  3773.    pragma Inline (Set_Scale_Value);
  3774.    pragma Inline (Set_Scope_Depth);
  3775.    pragma Inline (Set_Size_Known_At_Compile_Time);
  3776.    pragma Inline (Set_Small_Value);
  3777.    pragma Inline (Set_Storage_Size_Variable);
  3778.    pragma Inline (Set_String_Literal_Length);
  3779.    pragma Inline (Set_Suppress_Access_Checks);
  3780.    pragma Inline (Set_Suppress_Accessibility_Checks);
  3781.    pragma Inline (Set_Suppress_Discriminant_Checks);
  3782.    pragma Inline (Set_Suppress_Division_Checks);
  3783.    pragma Inline (Set_Suppress_Elaboration_Checks);
  3784.    pragma Inline (Set_Suppress_Index_Checks);
  3785.    pragma Inline (Set_Suppress_Length_Checks);
  3786.    pragma Inline (Set_Suppress_Overflow_Checks);
  3787.    pragma Inline (Set_Suppress_Range_Checks);
  3788.    pragma Inline (Set_Suppress_Storage_Checks);
  3789.    pragma Inline (Set_Suppress_Tag_Checks);
  3790.    pragma Inline (Set_Table_High_Bound);
  3791.    pragma Inline (Set_Task_Activation_Chain_Entity);
  3792.    pragma Inline (Set_Task_Body_Procedure);
  3793.    pragma Inline (Set_Uses_Sec_Stack);
  3794.  
  3795. end Einfo;
  3796.