[Ada] Variable-sized node types -- cleanup
authorBob Duff <duff@adacore.com>
Wed, 24 Feb 2021 13:13:36 +0000 (08:13 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 7 May 2021 09:29:23 +0000 (05:29 -0400)
gcc/ada/

* atree.ads, atree.adb, gen_il-gen.ads: Fix comments and clean
up ???  marks.  Rename Set_Ekind to be Mutate_Ekind.
* einfo.ads, sinfo.ads: Likewise.  Change "definitive
definition" to "official definition", because the former sounds
redundant.  Rename Set_Ekind to be Mutate_Ekind.
* checks.adb, contracts.adb, cstand.adb, exp_aggr.adb,
exp_attr.adb, exp_ch11.adb, exp_ch3.adb, exp_ch5.adb,
exp_ch6.adb, exp_ch7.adb, exp_ch9.adb, exp_disp.adb,
exp_dist.adb, exp_imgv.adb, exp_intr.adb, exp_prag.adb,
exp_unst.adb, exp_util.adb, gen_il-gen.adb, inline.adb,
lib-writ.adb, lib-xref-spark_specific.adb, sem_aggr.adb,
sem_ch10.adb, sem_ch11.adb, sem_ch12.adb, sem_ch13.adb,
sem_ch3.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb,
sem_ch9.adb, sem_dist.adb, sem_elab.adb, sem_prag.adb,
sem_util.adb: Rename Set_Ekind to be Mutate_Ekind.

42 files changed:
gcc/ada/atree.adb
gcc/ada/atree.ads
gcc/ada/checks.adb
gcc/ada/contracts.adb
gcc/ada/cstand.adb
gcc/ada/einfo.ads
gcc/ada/exp_aggr.adb
gcc/ada/exp_attr.adb
gcc/ada/exp_ch11.adb
gcc/ada/exp_ch3.adb
gcc/ada/exp_ch5.adb
gcc/ada/exp_ch6.adb
gcc/ada/exp_ch7.adb
gcc/ada/exp_ch9.adb
gcc/ada/exp_disp.adb
gcc/ada/exp_dist.adb
gcc/ada/exp_imgv.adb
gcc/ada/exp_intr.adb
gcc/ada/exp_prag.adb
gcc/ada/exp_unst.adb
gcc/ada/exp_util.adb
gcc/ada/gen_il-gen.adb
gcc/ada/gen_il-gen.ads
gcc/ada/inline.adb
gcc/ada/lib-writ.adb
gcc/ada/lib-xref-spark_specific.adb
gcc/ada/sem_aggr.adb
gcc/ada/sem_ch10.adb
gcc/ada/sem_ch11.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch5.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_ch7.adb
gcc/ada/sem_ch8.adb
gcc/ada/sem_ch9.adb
gcc/ada/sem_dist.adb
gcc/ada/sem_elab.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_util.adb
gcc/ada/sinfo.ads

index 06bf8d2..a725d87 100644 (file)
@@ -83,14 +83,15 @@ package body Atree is
    -- Implementation of Tree Substitution Routines --
    --------------------------------------------------
 
-   --  A separate table keeps track of the mapping between rewritten nodes
-   --  and their corresponding original tree nodes. Rewrite makes an entry
-   --  in this table for use by Original_Node. By default, if no call is
-   --  Rewrite, the entry in this table points to the original unwritten node.
+   --  A separate table keeps track of the mapping between rewritten nodes and
+   --  their corresponding original tree nodes. Rewrite makes an entry in this
+   --  table for use by Original_Node. By default the entry in this table
+   --  points to the original unwritten node. Note that if a node is rewritten
+   --  more than once, there is no easy way to get to the intermediate
+   --  rewrites; the node itself is the latest version, and the entry in this
+   --  table is the original.
 
-   --  Note: eventually, this should be a field in the Node directly, but
-   --  for now we do not want to disturb the efficiency of a power of 2
-   --  for the node size. ????We are getting rid of power-of-2.
+   --  Note: This could be a node field.
 
    package Orig_Nodes is new Table.Table (
       Table_Component_Type => Node_Id,
@@ -825,9 +826,9 @@ package body Atree is
       Old_Kind : constant Entity_Kind := Ekind (Old_N);
 
       --  If this fails, it means you need to call Reinit_Field_To_Zero before
-      --  calling Set_Ekind. But we have many cases where vanishing fields are
-      --  expected to reappear after converting to/from E_Void. Other cases are
-      --  more problematic; set a breakpoint on "(non-E_Void case)" below.
+      --  calling Mutate_Ekind. But we have many cases where vanishing fields
+      --  are expected to reappear after converting to/from E_Void. Other cases
+      --  are more problematic; set a breakpoint on "(non-E_Void case)" below.
 
    begin
       for J in Entity_Field_Table (Old_Kind)'Range loop
@@ -909,7 +910,7 @@ package body Atree is
 
    procedure Set_Ekind_Type is new Set_8_Bit_Field (Entity_Kind) with Inline;
 
-   procedure Set_Ekind
+   procedure Mutate_Ekind
      (N : Entity_Id; Val : Entity_Kind)
    is
    begin
@@ -926,7 +927,7 @@ package body Atree is
 
       Set_Ekind_Type (N, Ekind_Offset, Val);
       pragma Debug (Validate_Node_Write (N));
-   end Set_Ekind;
+   end Mutate_Ekind;
 
    -----------------------
    -- Allocate_New_Node --
index d0184c7..c470ac3 100644 (file)
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Alloc;
-with Sinfo.Nodes; use Sinfo.Nodes;
-with Einfo.Entities; use Einfo.Entities;
-with Types;  use Types;
-with System; use System;
-with Table;
-with Unchecked_Conversion;
-
-package Atree is
-
 --  This package defines the low-level representation of the tree used to
 --  represent the Ada program internally. Syntactic and semantic information
 --  is combined in this tree. There is no separate symbol table structure.
@@ -54,81 +44,23 @@ package Atree is
 --  syntax tree format. Subsequent processing in the front end traverses the
 --  tree, transforming it in various ways and adding semantic information.
 
-   --  ????The following comments should be moved elsewhere.
-
-   ----------------------------------------
-   -- Definitions of fields in tree node --
-   ----------------------------------------
-
-   --  The representation of the tree is completely hidden, using a functional
-   --  interface for accessing and modifying the contents of nodes. Logically
-   --  a node contains a number of fields, much as though the nodes were
-   --  defined as a record type. The fields in a node are as follows:
-
-   --   Nkind         Indicates the kind of the node. This field is present
-   --                 in all nodes. The type is Node_Kind, which is declared
-   --                 in the package Sinfo.
-
-   --   Sloc          Location (Source_Ptr) of the corresponding token
-   --                 in the Source buffer. The individual node definitions
-   --                 show which token is referenced by this pointer.
-
-   --   In_List       A flag used to indicate if the node is a member
-   --                 of a node list (see package Nlists).
-
-   --   Rewrite_Ins   A flag set if a node is marked as a rewrite inserted
-   --                 node as a result of a call to Mark_Rewrite_Insertion.
-
-   --   Paren_Count   A 2-bit count used in sub-expression nodes to indicate
-   --                 the level of parentheses. The settings are 0,1,2 and
-   --                 3 for many. If the value is 3, then an auxiliary table
-   --                 is used to indicate the real value. Set to zero for
-   --                 non-subexpression nodes.
-
-   --                 Note: the required parentheses surrounding conditional
-   --                 and quantified expressions count as a level of parens
-   --                 for this purpose, so e.g. in X := (if A then B else C);
-   --                 Paren_Count for the right side will be 1.
-
-   --   Comes_From_Source
-   --                 This flag is present in all nodes. It is set if the
-   --                 node is built by the scanner or parser, and clear if
-   --                 the node is built by the analyzer or expander. It
-   --                 indicates that the node corresponds to a construct
-   --                 that appears in the original source program.
-
-   --   Analyzed      This flag is present in all nodes. It is set when
-   --                 a node is analyzed, and is used to avoid analyzing
-   --                 the same node twice. Analysis includes expansion if
-   --                 expansion is active, so in this case if the flag is
-   --                 set it means the node has been analyzed and expanded.
-
-   --   Error_Posted  This flag is present in all nodes. It is set when
-   --                 an error message is posted which is associated with
-   --                 the flagged node. This is used to avoid posting more
-   --                 than one message on the same node.
-
-   --   Link          For a node, points to the Parent. For a list, points
-   --                 to the list header. Note that in the latter case, a
-   --                 client cannot modify the link field. This field is
-   --                 private to the Atree package (but is also modified
-   --                 by the Nlists package).
-
-   --  The following additional fields are present in extended nodes used
-   --  for entities (Nkind in N_Entity).
-
-   --   Ekind         Entity type. This field indicates the type of the
-   --                 entity, it is of type Entity_Kind which is defined
-   --                 in package Einfo.
-
-   --   Convention    Entity convention (Convention_Id value)
-
-   --  Access to fields is generally done through the getters and setters in
-   --  packages Sinfo.Nodes and Einfo.Entities.  However, in specialized
-   --  circumstances (examples are the circuit in generic instantiation to copy
-   --  trees, and in the tree dump routine), it is useful to be able to do
-   --  untyped traversals, and an internal package in Atree allows for direct
-   --  untyped accesses in such cases.
+with Alloc;
+with Sinfo.Nodes; use Sinfo.Nodes;
+with Einfo.Entities; use Einfo.Entities;
+with Types;  use Types;
+with System; use System;
+with Table;
+with Unchecked_Conversion;
+
+package Atree is
+
+   --  Access to node fields is generally done through the getters and setters
+   --  in packages Sinfo.Nodes and Einfo.Entities, which are automatically
+   --  generated (see Gen_IL.Gen). However, in specialized circumstances
+   --  (examples are the circuit in generic instantiation to copy trees, and in
+   --  the tree dump routine), it is useful to be able to do untyped
+   --  traversals, and an internal package in Atree allows for direct untyped
+   --  accesses in such cases.
 
    function Last_Node_Id return Node_Id;
    --  Returns Id of last allocated node Id
@@ -334,12 +266,9 @@ package Atree is
    --  of Comes_From_Source from OldN to NewN.
 
    procedure Change_Node (N : Node_Id; New_Kind : Node_Kind);
-   --  This procedure replaces the given node by setting its Nkind field to
-   --  the indicated value and resetting all other fields to their default
-   --  values except for Sloc, which is unchanged, and the Parent pointer
-   --  and list links, which are also unchanged. All other information in
-   --  the original node is lost. The new node has an extension if the
-   --  original node had an extension.????somewhat wrong.
+   --  This procedure replaces the given node by setting its Nkind field to the
+   --  indicated value and resetting all other fields to their default values
+   --  except for certain fields that are preserved (see body for details).
 
    procedure Copy_Node (Source, Destination : Node_Or_Entity_Id);
    --  Copy the entire contents of the source node to the destination node.
@@ -579,19 +508,15 @@ package Atree is
    --  original node, i.e. the old contents of Old_Node.
 
    procedure Replace (Old_Node, New_Node : Node_Id);
-   --  This is similar to Rewrite, except that the old value of Old_Node is
-   --  not saved, and the New_Node is deleted after the replace, since it
-   --     In what sense is it "deleted"????
-   --  is assumed that it can no longer be legitimately needed. The flag
+   --  This is similar to Rewrite, except that the old value of Old_Node
+   --  is not saved. New_Node should not be used after Replace.  The flag
    --  Is_Rewrite_Substitution will be False for the resulting node, unless
    --  it was already true on entry, and Original_Node will not return the
-   --  original contents of the Old_Node, but rather the New_Node value (unless
-   --     How is this "unless" true????
-   --  Old_Node had already been rewritten using Rewrite). Replace also
-   --  preserves the setting of Comes_From_Source.
+   --  original contents of the Old_Node, but rather the New_Node value.
+   --  Replace also preserves the setting of Comes_From_Source.
    --
-   --  Note, New_Node must not contain references to Old_Node, for example as
-   --  descendants, since the rewrite would make such references invalid. If
+   --  Note that New_Node must not contain references to Old_Node, for example
+   --  as descendants, since the rewrite would make such references invalid. If
    --  New_Node does need to reference Old_Node, then these references should
    --  be to a relocated copy of Old_Node (see Relocate_Node procedure).
    --
@@ -614,7 +539,7 @@ package Atree is
    --
    --  Note: Parents are not preserved in original tree nodes that are
    --  retrieved in this way (i.e. their children may have children whose
-   --  pointers which reference some other node). This needs more details???
+   --  Parent pointers reference some other node).
    --
    --  Note: there is no direct mechanism for deleting an original node (in
    --  a manner that can be reversed later). One possible approach is to use
@@ -660,10 +585,8 @@ package Atree is
    --  vanishing fields might be used for totally unrelated fields in the new
    --  node. See Reinit_Field_To_Zero.
 
-   procedure Set_Ekind
+   procedure Mutate_Ekind
      (N : Entity_Id; Val : Entity_Kind) with Inline;
-   --  ????Perhaps should be called Mutate_Ekind.
-   --
    --  Ekind is also like a discriminant, and is mostly treated as above (see
    --  Mutate_Nkind). However, there are a few cases where we set the Ekind
    --  from its initial E_Void value to something else, then set it back to
index 22b2b69..faf5326 100644 (file)
@@ -8158,7 +8158,7 @@ package body Checks is
             --  cause our object declaration to remain unanalyzed we must do
             --  some manual decoration.
 
-            Set_Ekind (Var_Id, E_Variable);
+            Mutate_Ekind (Var_Id, E_Variable);
             Set_Etype (Var_Id, Typ);
 
             Insert_Action (Exp,
index 61345ea..59b53de 100644 (file)
@@ -1580,7 +1580,7 @@ package body Contracts is
       --  in its visible declarations.
 
       if Nkind (Templ) = N_Generic_Package_Declaration then
-         Set_Ekind (Templ_Id, E_Generic_Package);
+         Mutate_Ekind (Templ_Id, E_Generic_Package);
 
          if Present (Visible_Declarations (Specification (Templ))) then
             Decl := First (Visible_Declarations (Specification (Templ)));
@@ -1590,7 +1590,7 @@ package body Contracts is
       --  declarations.
 
       elsif Nkind (Templ) = N_Package_Body then
-         Set_Ekind (Templ_Id, E_Package_Body);
+         Mutate_Ekind (Templ_Id, E_Package_Body);
 
          if Present (Declarations (Templ)) then
             Decl := First (Declarations (Templ));
@@ -1600,9 +1600,9 @@ package body Contracts is
 
       elsif Nkind (Templ) = N_Generic_Subprogram_Declaration then
          if Nkind (Specification (Templ)) = N_Function_Specification then
-            Set_Ekind (Templ_Id, E_Generic_Function);
+            Mutate_Ekind (Templ_Id, E_Generic_Function);
          else
-            Set_Ekind (Templ_Id, E_Generic_Procedure);
+            Mutate_Ekind (Templ_Id, E_Generic_Procedure);
          end if;
 
          --  When the generic subprogram acts as a compilation unit, inspect
@@ -1626,7 +1626,7 @@ package body Contracts is
       --  its declarations.
 
       elsif Nkind (Templ) = N_Subprogram_Body then
-         Set_Ekind (Templ_Id, E_Subprogram_Body);
+         Mutate_Ekind (Templ_Id, E_Subprogram_Body);
 
          if Present (Declarations (Templ)) then
             Decl := First (Declarations (Templ));
index 5229153..d087ce2 100644 (file)
@@ -203,7 +203,7 @@ package body CStand is
         Make_Floating_Point_Definition (Stloc,
           Digits_Expression => Make_Integer (UI_From_Int (Digs))));
 
-      Set_Ekind                      (E, E_Floating_Point_Type);
+      Mutate_Ekind                   (E, E_Floating_Point_Type);
       Set_Etype                      (E, E);
       Init_Digits_Value              (E, Digs);
       Set_Float_Rep                  (E, Rep);
@@ -247,7 +247,7 @@ package body CStand is
           Low_Bound  => Make_Integer (Lbound),
           High_Bound => Make_Integer (Ubound)));
 
-      Set_Ekind                      (E, E_Signed_Integer_Type);
+      Mutate_Ekind                   (E, E_Signed_Integer_Type);
       Set_Etype                      (E, E);
       Init_Size                      (E, Siz);
       Set_Elem_Alignment             (E);
@@ -272,7 +272,7 @@ package body CStand is
    begin
       Set_Defining_Identifier (Decl, Uns);
 
-      Set_Ekind                      (Uns, E_Modular_Integer_Type);
+      Mutate_Ekind                   (Uns, E_Modular_Integer_Type);
       Set_Scope                      (Uns, Standard_Standard);
       Set_Etype                      (Uns, Uns);
       Init_Size                      (Uns, Siz);
@@ -467,7 +467,7 @@ package body CStand is
 
       procedure Build_Exception (S : Standard_Entity_Type) is
       begin
-         Set_Ekind     (Standard_Entity (S), E_Exception);
+         Mutate_Ekind  (Standard_Entity (S), E_Exception);
          Set_Etype     (Standard_Entity (S), Standard_Exception_Type);
          Set_Is_Public (Standard_Entity (S), True);
 
@@ -607,7 +607,7 @@ package body CStand is
       Set_Defining_Unit_Name (Pspec, Standard_Standard);
       Set_Visible_Declarations (Pspec, Decl_S);
 
-      Set_Ekind (Standard_Standard, E_Package);
+      Mutate_Ekind (Standard_Standard, E_Package);
       Set_Is_Pure (Standard_Standard);
       Set_Is_Compilation_Unit (Standard_Standard);
 
@@ -649,7 +649,7 @@ package body CStand is
       Append (Standard_True, Literals (Tdef_Node));
       Set_Type_Definition (Parent (Standard_Boolean), Tdef_Node);
 
-      Set_Ekind          (Standard_Boolean, E_Enumeration_Type);
+      Mutate_Ekind       (Standard_Boolean, E_Enumeration_Type);
       Set_First_Literal  (Standard_Boolean, Standard_False);
       Set_Etype          (Standard_Boolean, Standard_Boolean);
       Init_Esize         (Standard_Boolean, Standard_Character_Size);
@@ -660,13 +660,13 @@ package body CStand is
       Set_Size_Known_At_Compile_Time (Standard_Boolean);
       Set_Has_Pragma_Ordered         (Standard_Boolean);
 
-      Set_Ekind           (Standard_True, E_Enumeration_Literal);
+      Mutate_Ekind        (Standard_True, E_Enumeration_Literal);
       Set_Etype           (Standard_True, Standard_Boolean);
       Set_Enumeration_Pos (Standard_True, Uint_1);
       Set_Enumeration_Rep (Standard_True, Uint_1);
       Set_Is_Known_Valid  (Standard_True, True);
 
-      Set_Ekind           (Standard_False, E_Enumeration_Literal);
+      Mutate_Ekind        (Standard_False, E_Enumeration_Literal);
       Set_Etype           (Standard_False, Standard_Boolean);
       Set_Enumeration_Pos (Standard_False, Uint_0);
       Set_Enumeration_Rep (Standard_False, Uint_0);
@@ -755,7 +755,7 @@ package body CStand is
       Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
       Set_Type_Definition (Parent (Standard_Character), Tdef_Node);
 
-      Set_Ekind          (Standard_Character, E_Enumeration_Type);
+      Mutate_Ekind       (Standard_Character, E_Enumeration_Type);
       Set_Etype          (Standard_Character, Standard_Character);
       Init_Esize         (Standard_Character, Standard_Character_Size);
       Init_RM_Size       (Standard_Character, 8);
@@ -802,7 +802,7 @@ package body CStand is
       Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
       Set_Type_Definition (Parent (Standard_Wide_Character), Tdef_Node);
 
-      Set_Ekind      (Standard_Wide_Character, E_Enumeration_Type);
+      Mutate_Ekind   (Standard_Wide_Character, E_Enumeration_Type);
       Set_Etype      (Standard_Wide_Character, Standard_Wide_Character);
       Init_Size      (Standard_Wide_Character, Standard_Wide_Character_Size);
 
@@ -848,7 +848,7 @@ package body CStand is
       Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
       Set_Type_Definition (Parent (Standard_Wide_Wide_Character), Tdef_Node);
 
-      Set_Ekind (Standard_Wide_Wide_Character, E_Enumeration_Type);
+      Mutate_Ekind (Standard_Wide_Wide_Character, E_Enumeration_Type);
       Set_Etype (Standard_Wide_Wide_Character,
                  Standard_Wide_Wide_Character);
       Init_Size (Standard_Wide_Wide_Character,
@@ -908,7 +908,7 @@ package body CStand is
       Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
       Set_Type_Definition (Parent (Standard_String), Tdef_Node);
 
-      Set_Ekind           (Standard_String, E_Array_Type);
+      Mutate_Ekind        (Standard_String, E_Array_Type);
       Set_Etype           (Standard_String, Standard_String);
       Set_Component_Type  (Standard_String, Standard_Character);
       Set_Component_Size  (Standard_String, Uint_8);
@@ -952,7 +952,7 @@ package body CStand is
       Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
       Set_Type_Definition (Parent (Standard_Wide_String), Tdef_Node);
 
-      Set_Ekind           (Standard_Wide_String, E_Array_Type);
+      Mutate_Ekind        (Standard_Wide_String, E_Array_Type);
       Set_Etype           (Standard_Wide_String, Standard_Wide_String);
       Set_Component_Type  (Standard_Wide_String, Standard_Wide_Character);
       Set_Component_Size  (Standard_Wide_String, Uint_16);
@@ -987,7 +987,7 @@ package body CStand is
       Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
       Set_Type_Definition (Parent (Standard_Wide_Wide_String), Tdef_Node);
 
-      Set_Ekind            (Standard_Wide_Wide_String, E_Array_Type);
+      Mutate_Ekind         (Standard_Wide_Wide_String, E_Array_Type);
       Set_Etype            (Standard_Wide_Wide_String,
                             Standard_Wide_Wide_String);
       Set_Component_Type   (Standard_Wide_Wide_String,
@@ -1009,7 +1009,7 @@ package body CStand is
 
       --  Setup entity for Natural
 
-      Set_Ekind          (Standard_Natural, E_Signed_Integer_Subtype);
+      Mutate_Ekind       (Standard_Natural, E_Signed_Integer_Subtype);
       Set_Etype          (Standard_Natural, Base_Type (Standard_Integer));
       Init_Esize         (Standard_Natural, Standard_Integer_Size);
       Init_RM_Size       (Standard_Natural, Standard_Integer_Size - 1);
@@ -1024,7 +1024,7 @@ package body CStand is
 
       --  Setup entity for Positive
 
-      Set_Ekind          (Standard_Positive, E_Signed_Integer_Subtype);
+      Mutate_Ekind       (Standard_Positive, E_Signed_Integer_Subtype);
       Set_Etype          (Standard_Positive, Base_Type (Standard_Integer));
       Init_Esize         (Standard_Positive, Standard_Integer_Size);
       Init_RM_Size       (Standard_Positive, Standard_Integer_Size - 1);
@@ -1047,7 +1047,7 @@ package body CStand is
       Set_Specification (Decl, Pspec);
 
       Set_Defining_Unit_Name (Pspec, Standard_Entity (S_ASCII));
-      Set_Ekind (Standard_Entity (S_ASCII), E_Package);
+      Mutate_Ekind (Standard_Entity (S_ASCII), E_Package);
       Set_Visible_Declarations (Pspec, Decl_A);
 
       --  Create control character definitions in package ASCII. Note that
@@ -1067,7 +1067,7 @@ package body CStand is
 
          begin
             Set_Sloc                   (A_Char, Staloc);
-            Set_Ekind                  (A_Char, E_Constant);
+            Mutate_Ekind               (A_Char, E_Constant);
             Set_Never_Set_In_Source    (A_Char, True);
             Set_Is_True_Constant       (A_Char, True);
             Set_Etype                  (A_Char, Standard_Character);
@@ -1122,7 +1122,7 @@ package body CStand is
       --  type name that is reasonable, but does not overlap any Ada name.
 
       Standard_A_String := New_Standard_Entity ("access_string");
-      Set_Ekind      (Standard_A_String, E_Access_Type);
+      Mutate_Ekind   (Standard_A_String, E_Access_Type);
       Set_Scope      (Standard_A_String, Standard_Standard);
       Set_Etype      (Standard_A_String, Standard_A_String);
 
@@ -1138,7 +1138,7 @@ package body CStand is
                      (Standard_A_String, Standard_String);
 
       Standard_A_Char := New_Standard_Entity ("access_character");
-      Set_Ekind          (Standard_A_Char, E_Access_Type);
+      Mutate_Ekind       (Standard_A_Char, E_Access_Type);
       Set_Scope          (Standard_A_Char, Standard_Standard);
       Set_Etype          (Standard_A_Char, Standard_A_String);
       Init_Size          (Standard_A_Char, System_Address_Size);
@@ -1153,7 +1153,7 @@ package body CStand is
 
       Standard_Debug_Renaming_Type := New_Standard_Entity ("_renaming_type");
 
-      Set_Ekind (Standard_Debug_Renaming_Type, E_Signed_Integer_Subtype);
+      Mutate_Ekind (Standard_Debug_Renaming_Type, E_Signed_Integer_Subtype);
       Set_Scope (Standard_Debug_Renaming_Type, Standard_Standard);
       Set_Etype (Standard_Debug_Renaming_Type, Base_Type (Standard_Integer));
       Init_Esize          (Standard_Debug_Renaming_Type, 0);
@@ -1183,14 +1183,14 @@ package body CStand is
       Build_Signed_Integer_Type (Any_Type, Standard_Integer_Size);
 
       Any_Id := New_Standard_Entity ("any id");
-      Set_Ekind             (Any_Id, E_Variable);
+      Mutate_Ekind          (Any_Id, E_Variable);
       Set_Scope             (Any_Id, Standard_Standard);
       Set_Etype             (Any_Id, Any_Type);
       Init_Esize            (Any_Id);
       Init_Alignment        (Any_Id);
 
       Any_Access := New_Standard_Entity ("an access type");
-      Set_Ekind             (Any_Access, E_Access_Type);
+      Mutate_Ekind          (Any_Access, E_Access_Type);
       Set_Scope             (Any_Access, Standard_Standard);
       Set_Etype             (Any_Access, Any_Access);
       Init_Size             (Any_Access, System_Address_Size);
@@ -1199,7 +1199,7 @@ package body CStand is
                             (Any_Access, Any_Type);
 
       Any_Character := New_Standard_Entity ("a character type");
-      Set_Ekind             (Any_Character, E_Enumeration_Type);
+      Mutate_Ekind          (Any_Character, E_Enumeration_Type);
       Set_Scope             (Any_Character, Standard_Standard);
       Set_Etype             (Any_Character, Any_Character);
       Set_Is_Unsigned_Type  (Any_Character);
@@ -1210,7 +1210,7 @@ package body CStand is
       Set_Scalar_Range      (Any_Character, Scalar_Range (Standard_Character));
 
       Any_Array := New_Standard_Entity ("an array type");
-      Set_Ekind             (Any_Array, E_Array_Type);
+      Mutate_Ekind          (Any_Array, E_Array_Type);
       Set_Scope             (Any_Array, Standard_Standard);
       Set_Etype             (Any_Array, Any_Array);
       Set_Component_Type    (Any_Array, Any_Character);
@@ -1218,7 +1218,7 @@ package body CStand is
       Make_Dummy_Index      (Any_Array);
 
       Any_Boolean := New_Standard_Entity ("a boolean type");
-      Set_Ekind             (Any_Boolean, E_Enumeration_Type);
+      Mutate_Ekind          (Any_Boolean, E_Enumeration_Type);
       Set_Scope             (Any_Boolean, Standard_Standard);
       Set_Etype             (Any_Boolean, Standard_Boolean);
       Init_Esize            (Any_Boolean, Standard_Character_Size);
@@ -1228,7 +1228,7 @@ package body CStand is
       Set_Scalar_Range      (Any_Boolean, Scalar_Range (Standard_Boolean));
 
       Any_Composite := New_Standard_Entity ("a composite type");
-      Set_Ekind             (Any_Composite, E_Array_Type);
+      Mutate_Ekind          (Any_Composite, E_Array_Type);
       Set_Scope             (Any_Composite, Standard_Standard);
       Set_Etype             (Any_Composite, Any_Composite);
       Set_Component_Size    (Any_Composite, Uint_0);
@@ -1236,21 +1236,21 @@ package body CStand is
       Init_Size_Align       (Any_Composite);
 
       Any_Discrete := New_Standard_Entity ("a discrete type");
-      Set_Ekind             (Any_Discrete, E_Signed_Integer_Type);
+      Mutate_Ekind          (Any_Discrete, E_Signed_Integer_Type);
       Set_Scope             (Any_Discrete, Standard_Standard);
       Set_Etype             (Any_Discrete, Any_Discrete);
       Init_Size             (Any_Discrete, Standard_Integer_Size);
       Set_Elem_Alignment    (Any_Discrete);
 
       Any_Fixed := New_Standard_Entity ("a fixed-point type");
-      Set_Ekind             (Any_Fixed, E_Ordinary_Fixed_Point_Type);
+      Mutate_Ekind          (Any_Fixed, E_Ordinary_Fixed_Point_Type);
       Set_Scope             (Any_Fixed, Standard_Standard);
       Set_Etype             (Any_Fixed, Any_Fixed);
       Init_Size             (Any_Fixed, Standard_Integer_Size);
       Set_Elem_Alignment    (Any_Fixed);
 
       Any_Integer := New_Standard_Entity ("an integer type");
-      Set_Ekind            (Any_Integer, E_Signed_Integer_Type);
+      Mutate_Ekind         (Any_Integer, E_Signed_Integer_Type);
       Set_Scope            (Any_Integer, Standard_Standard);
       Set_Etype            (Any_Integer, Standard_Long_Long_Long_Integer);
       Init_Size            (Any_Integer, Standard_Long_Long_Long_Integer_Size);
@@ -1263,7 +1263,7 @@ package body CStand is
          Hb  => Intval (High_Bound (Scalar_Range (Standard_Integer))));
 
       Any_Modular := New_Standard_Entity ("a modular type");
-      Set_Ekind            (Any_Modular, E_Modular_Integer_Type);
+      Mutate_Ekind         (Any_Modular, E_Modular_Integer_Type);
       Set_Scope            (Any_Modular, Standard_Standard);
       Set_Etype            (Any_Modular, Standard_Long_Long_Long_Integer);
       Init_Size            (Any_Modular, Standard_Long_Long_Long_Integer_Size);
@@ -1271,14 +1271,14 @@ package body CStand is
       Set_Is_Unsigned_Type (Any_Modular);
 
       Any_Numeric := New_Standard_Entity ("a numeric type");
-      Set_Ekind            (Any_Numeric, E_Signed_Integer_Type);
+      Mutate_Ekind         (Any_Numeric, E_Signed_Integer_Type);
       Set_Scope            (Any_Numeric, Standard_Standard);
       Set_Etype            (Any_Numeric, Standard_Long_Long_Long_Integer);
       Init_Size            (Any_Numeric, Standard_Long_Long_Long_Integer_Size);
       Set_Elem_Alignment   (Any_Numeric);
 
       Any_Real := New_Standard_Entity ("a real type");
-      Set_Ekind             (Any_Real, E_Floating_Point_Type);
+      Mutate_Ekind          (Any_Real, E_Floating_Point_Type);
       Set_Scope             (Any_Real, Standard_Standard);
       Set_Etype             (Any_Real, Standard_Long_Long_Float);
       Init_Size             (Any_Real,
@@ -1286,14 +1286,14 @@ package body CStand is
       Set_Elem_Alignment    (Any_Real);
 
       Any_Scalar := New_Standard_Entity ("a scalar type");
-      Set_Ekind             (Any_Scalar, E_Signed_Integer_Type);
+      Mutate_Ekind          (Any_Scalar, E_Signed_Integer_Type);
       Set_Scope             (Any_Scalar, Standard_Standard);
       Set_Etype             (Any_Scalar, Any_Scalar);
       Init_Size             (Any_Scalar, Standard_Integer_Size);
       Set_Elem_Alignment    (Any_Scalar);
 
       Any_String := New_Standard_Entity ("a string type");
-      Set_Ekind             (Any_String, E_Array_Type);
+      Mutate_Ekind          (Any_String, E_Array_Type);
       Set_Scope             (Any_String, Standard_Standard);
       Set_Etype             (Any_String, Any_String);
       Set_Component_Type    (Any_String, Any_Character);
@@ -1405,7 +1405,7 @@ package body CStand is
       Universal_Fixed := New_Standard_Entity ("universal_fixed");
       Decl := New_Node (N_Full_Type_Declaration, Stloc);
       Set_Defining_Identifier (Decl, Universal_Fixed);
-      Set_Ekind            (Universal_Fixed, E_Ordinary_Fixed_Point_Type);
+      Mutate_Ekind         (Universal_Fixed, E_Ordinary_Fixed_Point_Type);
       Set_Etype            (Universal_Fixed, Universal_Fixed);
       Set_Scope            (Universal_Fixed, Standard_Standard);
       Init_Size            (Universal_Fixed, Standard_Long_Long_Integer_Size);
@@ -1450,7 +1450,7 @@ package body CStand is
 
          Set_Type_Definition (Parent (Standard_Duration), Tdef_Node);
 
-         Set_Ekind (Standard_Duration, E_Ordinary_Fixed_Point_Type);
+         Mutate_Ekind (Standard_Duration, E_Ordinary_Fixed_Point_Type);
          Set_Etype (Standard_Duration, Standard_Duration);
 
          if Duration_32_Bits_On_Target then
@@ -1501,7 +1501,7 @@ package body CStand is
 
       begin
          Standard_Exception_Type := New_Standard_Entity ("exception");
-         Set_Ekind       (Standard_Exception_Type, E_Record_Type);
+         Mutate_Ekind    (Standard_Exception_Type, E_Record_Type);
          Set_Etype       (Standard_Exception_Type, Standard_Exception_Type);
          Set_Scope       (Standard_Exception_Type, Standard_Standard);
          Set_Stored_Constraint
@@ -1576,7 +1576,7 @@ package body CStand is
          Decl := New_Node (N_Exception_Renaming_Declaration, Stloc);
          E_Id := Standard_Entity (S_Numeric_Error);
 
-         Set_Ekind          (E_Id, E_Exception);
+         Mutate_Ekind       (E_Id, E_Exception);
          Set_Etype          (E_Id, Standard_Exception_Type);
          Set_Is_Public      (E_Id);
          Set_Renamed_Entity (E_Id, Standard_Entity (S_Constraint_Error));
@@ -1594,7 +1594,7 @@ package body CStand is
 
       Abort_Signal := New_Standard_Entity;
       Set_Chars     (Abort_Signal, Name_uAbort_Signal);
-      Set_Ekind     (Abort_Signal, E_Exception);
+      Mutate_Ekind  (Abort_Signal, E_Exception);
       Set_Etype     (Abort_Signal, Standard_Exception_Type);
       Set_Scope     (Abort_Signal, Standard_Standard);
       Set_Is_Public (Abort_Signal, True);
@@ -1609,24 +1609,24 @@ package body CStand is
 
       Standard_Op_Rotate_Left := New_Standard_Entity;
       Set_Chars (Standard_Op_Rotate_Left, Name_Rotate_Left);
-      Set_Ekind (Standard_Op_Rotate_Left, E_Operator);
+      Mutate_Ekind (Standard_Op_Rotate_Left, E_Operator);
 
       Standard_Op_Rotate_Right := New_Standard_Entity;
       Set_Chars (Standard_Op_Rotate_Right, Name_Rotate_Right);
-      Set_Ekind (Standard_Op_Rotate_Right, E_Operator);
+      Mutate_Ekind (Standard_Op_Rotate_Right, E_Operator);
 
       Standard_Op_Shift_Left := New_Standard_Entity;
       Set_Chars (Standard_Op_Shift_Left, Name_Shift_Left);
-      Set_Ekind (Standard_Op_Shift_Left, E_Operator);
+      Mutate_Ekind (Standard_Op_Shift_Left, E_Operator);
 
       Standard_Op_Shift_Right := New_Standard_Entity;
       Set_Chars (Standard_Op_Shift_Right, Name_Shift_Right);
-      Set_Ekind (Standard_Op_Shift_Right, E_Operator);
+      Mutate_Ekind (Standard_Op_Shift_Right, E_Operator);
 
       Standard_Op_Shift_Right_Arithmetic := New_Standard_Entity;
       Set_Chars (Standard_Op_Shift_Right_Arithmetic,
                                           Name_Shift_Right_Arithmetic);
-      Set_Ekind (Standard_Op_Shift_Right_Arithmetic,
+      Mutate_Ekind (Standard_Op_Shift_Right_Arithmetic,
                                           E_Operator);
 
       --  Create standard operator declarations
@@ -1681,7 +1681,7 @@ package body CStand is
       New_Ent : constant Entity_Id := New_Copy (E);
 
    begin
-      Set_Ekind            (E, K);
+      Mutate_Ekind         (E, K);
       Set_Is_Constrained   (E, True);
       Set_Is_First_Subtype (E, True);
       Set_Etype            (E, New_Ent);
@@ -1723,7 +1723,7 @@ package body CStand is
       Id : constant Entity_Id := New_Standard_Entity (Nam);
 
    begin
-      Set_Ekind                     (Id, E_Component);
+      Mutate_Ekind                  (Id, E_Component);
       Set_Etype                     (Id, Typ);
       Set_Scope                     (Id, Rec);
       Init_Component_Location       (Id);
@@ -1741,7 +1741,7 @@ package body CStand is
       Formal : constant Entity_Id := New_Standard_Entity (Nam);
 
    begin
-      Set_Ekind     (Formal, E_In_Parameter);
+      Mutate_Ekind  (Formal, E_In_Parameter);
       Set_Mechanism (Formal, Default_Mechanism);
       Set_Scope     (Formal, Standard_Standard);
       Set_Etype     (Formal, Typ);
@@ -1771,7 +1771,7 @@ package body CStand is
 
    begin
       Set_Is_Pure    (Ident_Node, True);
-      Set_Ekind      (Ident_Node, E_Operator);
+      Mutate_Ekind   (Ident_Node, E_Operator);
       Set_Etype      (Ident_Node, Typ);
       Set_Scope      (Ident_Node, Standard_Standard);
       Set_Homonym    (Ident_Node, Get_Name_Entity_Id (Op));
index 7428ead..bd4998f 100644 (file)
@@ -34,23 +34,25 @@ pragma Warnings (On);
 
 package Einfo is
 
---  ????Comments below are partly obsolete
+--  This package documents the annotations to the abstract syntax tree that are
+--  needed to support semantic processing of an Ada compilation.
 
---  This package defines the annotations to the abstract syntax tree that
---  are needed to support semantic processing of an Ada compilation.
-
---  Note that after editing this spec and the corresponding body it is
---  required to run ceinfo to check the consistentcy of spec and body.
---  See ceinfo.adb for more information about the checks made.
+--  See the spec of Gen_IL.Gen for instructions on making changes to this file.
+--  Note that the official definition of what entities have what fields is in
+--  Gen_IL.Gen.Gen_Entities; if there is a discrepancy between that and the
+--  comments here, Gen_IL.Gen.Gen_Entities wins.
+--
+--  Offsets of each field are given in parentheses below, but this information
+--  is obsolete, and should be completely ignored. The actual field offsets are
+--  determined by the Gen_IL program. We might want to remove these comments at
+--  some point.
 
 --  These annotations are for the most part attributes of declared entities,
 --  and they correspond to conventional symbol table information. Other
 --  attributes include sets of meanings for overloaded names, possible
 --  types for overloaded expressions, flags to indicate deferred constants,
---  incomplete types, etc. These attributes are stored in available fields in
---  tree nodes (i.e. fields not used by the parser, as defined by the Sinfo
---  package specification), and accessed by means of a set of subprograms
---  which define an abstract interface.
+--  incomplete types, etc. These attributes are stored in fields in
+--  tree nodes.
 
 --  There are two kinds of semantic information
 
@@ -69,61 +71,13 @@ package Einfo is
 
 --    Second, in some cases semantic information is stored directly in other
 --    kinds of nodes, e.g. the Etype field, used to indicate the type of an
---    expression. The access functions to these fields are defined in the
---    Sinfo package, but their full documentation is to be found in
---    the Einfo package specification.
+--    expression. These fields are defined in the Sinfo package, but their
+--    full documentation is in the Einfo package specification.
 
 --  Declaration processing places information in the nodes of their defining
 --  identifiers. Name resolution places in all other occurrences of an
 --  identifier a pointer to the corresponding defining occurrence.
 
---------------------------------
--- The XEINFO Utility Program --
---------------------------------
-
---  XEINFO is a utility program which automatically produces a C header file,
---  einfo.h from the spec and body of package Einfo. It reads the input files
---  einfo.ads and einfo.adb and produces the output file einfo.h. XEINFO is run
---  automatically by the build scripts when you do a full bootstrap.
-
---  In order for this utility program to operate correctly, the form of the
---  einfo.ads and einfo.adb files must meet certain requirements and be laid
---  out in a specific manner.
-
---  The general form of einfo.ads is as follows:
-
---     type declaration for type Entity_Kind
---     subtype declarations declaring subranges of Entity_Kind
---     subtype declarations declaring synonyms for some standard types
---     function specs for attributes
---     procedure specs
---     pragma Inline declarations
-
---  This order must be observed. There are no restrictions on the procedures,
---  since the C header file only includes functions (The back end is not
---  allowed to modify the generated tree). However, functions are required to
---  have headers that fit on a single line.
-
---  XEINFO reads and processes the function specs and the pragma Inlines. For
---  functions that are declared as inlined, XEINFO reads the corresponding body
---  from einfo.adb, and processes it into C code. This results in some strict
---  restrictions on which functions can be inlined:
-
---     The function spec must be on a single line
-
---     There can only be a single return statement, not counting any pragma
---     Assert statements, possibly followed by a comment.
-
---     This single statement must either contain a function call with simple,
---     single token arguments, or it must contain a membership test of the form
---     a in b, where a and b are single tokens, or it must contain an equality
---     or inequality test of single tokens, or it must contain a disjunction of
---     the preceding constructs.
-
---  For functions that are not inlined, there is no restriction on the body,
---  and XEINFO generates a direct reference in the C header file which allows
---  the C code in the backend to directly call the corresponding Ada body.
-
 ----------------------------------
 -- Handling of Type'Size Values --
 ----------------------------------
index 5314837..f6bd342 100644 (file)
@@ -6652,7 +6652,7 @@ package body Exp_Aggr is
          --  aggregate. If the declaration has a subtype mark, use it,
          --  otherwise use the itype of the aggregate.
 
-         Set_Ekind (Tmp, E_Variable);
+         Mutate_Ekind (Tmp, E_Variable);
 
          if not Is_Constrained (Typ) then
             Build_Constrained_Type (Positional => False);
@@ -9476,7 +9476,7 @@ package body Exp_Aggr is
       --    type Res_Typ is access all Comp_Typ;
 
       Res_Typ := Make_Temporary (Loc, 'A');
-      Set_Ekind (Res_Typ, E_General_Access_Type);
+      Mutate_Ekind (Res_Typ, E_General_Access_Type);
       Set_Directly_Designated_Type (Res_Typ, Comp_Typ);
 
       Add_Item
@@ -9496,7 +9496,7 @@ package body Exp_Aggr is
       --  its lifetime is bounded by the current array or record component.
 
       Res_Id := Make_Temporary (Loc, 'R');
-      Set_Ekind (Res_Id, E_Constant);
+      Mutate_Ekind (Res_Id, E_Constant);
       Set_Etype (Res_Id, Res_Typ);
 
       --  Mark the transient object as successfully processed to avoid double
index 9aecf6d..da9d61a 100644 (file)
@@ -389,7 +389,7 @@ package body Exp_Attr is
       --       Stmts
       --    end Func_Id;
 
-      Set_Ekind       (Func_Id, E_Function);
+      Mutate_Ekind    (Func_Id, E_Function);
       Set_Is_Internal (Func_Id);
       Set_Is_Pure     (Func_Id);
 
@@ -832,7 +832,7 @@ package body Exp_Attr is
       --       Stmts
       --    end Func_Id;
 
-      Set_Ekind       (Func_Id, E_Function);
+      Mutate_Ekind    (Func_Id, E_Function);
       Set_Is_Internal (Func_Id);
       Set_Is_Pure     (Func_Id);
 
@@ -4838,7 +4838,7 @@ package body Exp_Attr is
          --  Set the entity kind now in order to mark the temporary as a
          --  handler of attribute 'Old's prefix.
 
-         Set_Ekind (Temp, E_Constant);
+         Mutate_Ekind (Temp, E_Constant);
          Set_Stores_Attribute_Old_Prefix (Temp);
 
          --  Push the scope of the related subprogram where _Postcondition
index 7c24da1..529eae4 100644 (file)
@@ -1701,7 +1701,7 @@ package body Exp_Ch11 is
          if No (Choice_Parameter (Ehand)) then
             E := Make_Temporary (Loc, 'E');
             Set_Choice_Parameter (Ehand, E);
-            Set_Ekind (E, E_Variable);
+            Mutate_Ekind (E, E_Variable);
             Set_Etype (E, RTE (RE_Exception_Occurrence));
             Set_Scope (E, Current_Scope);
          end if;
index 6843069..d0446ff 100644 (file)
@@ -885,7 +885,7 @@ package body Exp_Ch3 is
                Make_Handled_Sequence_Of_Statements (Loc,
                  Statements => Body_Stmts)));
 
-         Set_Ekind          (Proc_Id, E_Procedure);
+         Mutate_Ekind       (Proc_Id, E_Procedure);
          Set_Is_Public      (Proc_Id, Is_Public (A_Type));
          Set_Is_Internal    (Proc_Id);
          Set_Has_Completion (Proc_Id);
@@ -1080,7 +1080,7 @@ package body Exp_Ch3 is
              Statements => New_List (
                Build_Case_Statement (Case_Id, Variant))));
 
-         Set_Ekind       (Func_Id, E_Function);
+         Mutate_Ekind    (Func_Id, E_Function);
          Set_Mechanism   (Func_Id, Default_Mechanism);
          Set_Is_Inlined  (Func_Id, True);
          Set_Is_Pure     (Func_Id, True);
@@ -2376,7 +2376,7 @@ package body Exp_Ch3 is
                                 New_Occurrence_Of (Iface_Comp, Loc)),
                           Attribute_Name => Name_Position))))));
 
-            Set_Ekind       (Func_Id, E_Function);
+            Mutate_Ekind    (Func_Id, E_Function);
             Set_Mechanism   (Func_Id, Default_Mechanism);
             Set_Is_Internal (Func_Id, True);
 
@@ -2491,7 +2491,7 @@ package body Exp_Ch3 is
            Make_Defining_Identifier (Loc,
              Chars => Make_TSS_Name (Rec_Type, TSS_CPP_Init_Proc));
 
-         Set_Ekind       (Proc_Id, E_Procedure);
+         Mutate_Ekind    (Proc_Id, E_Procedure);
          Set_Is_Internal (Proc_Id);
 
          Set_Defining_Unit_Name (Proc_Spec_Node, Proc_Id);
@@ -2545,7 +2545,7 @@ package body Exp_Ch3 is
       begin
          Body_Stmts := New_List;
          Body_Node := New_Node (N_Subprogram_Body, Loc);
-         Set_Ekind (Proc_Id, E_Procedure);
+         Mutate_Ekind (Proc_Id, E_Procedure);
 
          Proc_Spec_Node := New_Node (N_Procedure_Specification, Loc);
          Set_Defining_Unit_Name (Proc_Spec_Node, Proc_Id);
@@ -7276,10 +7276,10 @@ package body Exp_Ch3 is
                      Link_Entities (New_Id, Next_Entity (Def_Id));
                      Link_Entities (Def_Id, Next_Temp);
 
-                     Set_Chars   (Defining_Identifier (N), Chars   (Def_Id));
+                     Set_Chars (Defining_Identifier (N), Chars (Def_Id));
                      Set_Homonym (Defining_Identifier (N), Homonym (Def_Id));
-                     Set_Ekind   (Defining_Identifier (N), Ekind   (Def_Id));
-                     Set_Sloc    (Defining_Identifier (N), Sloc    (Def_Id));
+                     Mutate_Ekind (Defining_Identifier (N), Ekind (Def_Id));
+                     Set_Sloc (Defining_Identifier (N), Sloc (Def_Id));
 
                      Set_Comes_From_Source (Def_Id, False);
 
@@ -7536,7 +7536,7 @@ package body Exp_Ch3 is
             Level_Expr : Node_Id;
 
          begin
-            Set_Ekind (Level, Ekind (Def_Id));
+            Mutate_Ekind (Level, Ekind (Def_Id));
             Set_Etype (Level, Standard_Natural);
             Set_Scope (Level, Scope (Def_Id));
 
@@ -9706,7 +9706,7 @@ package body Exp_Ch3 is
             --  primitive operations list. We add the minimum decoration needed
             --  to override interface primitives.
 
-            Set_Ekind (Defining_Unit_Name (Func_Spec), E_Function);
+            Mutate_Ekind (Defining_Unit_Name (Func_Spec), E_Function);
 
             Override_Dispatching_Operation
               (Tag_Typ, Subp, New_Op => Defining_Unit_Name (Func_Spec),
index 9b403af..7a51afd 100644 (file)
@@ -3407,7 +3407,7 @@ package body Exp_Ch5 is
 
       Analyze (Init_Decl);
       Init_Name := Defining_Identifier (Init_Decl);
-      Set_Ekind (Init_Name, E_Loop_Parameter);
+      Mutate_Ekind (Init_Name, E_Loop_Parameter);
 
       --  The cursor was marked as a loop parameter to prevent user assignments
       --  to it, however this renders the advancement step illegal as it is not
@@ -3483,7 +3483,7 @@ package body Exp_Ch5 is
         (N, Container, Cursor, Init, Advance, New_Loop);
       Append_To (Stats, Advance);
 
-      Set_Ekind (Cursor, E_Variable);
+      Mutate_Ekind (Cursor, E_Variable);
       Insert_Action (N, Init);
 
       --  The loop parameter is declared by an object declaration, but within
@@ -4484,7 +4484,7 @@ package body Exp_Ch5 is
                      (Container_Typ, Aspect_Variable_Indexing))
               or else not Is_Variable (Original_Node (Container))
             then
-               Set_Ekind (Id, E_Constant);
+               Mutate_Ekind (Id, E_Constant);
             end if;
 
             Prepend_To (Stats, Decl);
@@ -4620,7 +4620,7 @@ package body Exp_Ch5 is
          Set_Assignment_OK (Cursor_Decl);
 
          Insert_Action (N, Cursor_Decl);
-         Set_Ekind (Cursor, Id_Kind);
+         Mutate_Ekind (Cursor, Id_Kind);
       end;
 
       --  If the range of iteration is given by a function call that returns
@@ -5081,7 +5081,7 @@ package body Exp_Ch5 is
             --  identifier, since there may be references in the loop body.
 
             Set_Analyzed (Loop_Id, False);
-            Set_Ekind    (Loop_Id, E_Variable);
+            Mutate_Ekind (Loop_Id, E_Variable);
 
             --  In most loops the loop variable is assigned in various
             --  alternatives in the body. However, in the rare case when
index 4471f35..ab07224 100644 (file)
@@ -5127,7 +5127,7 @@ package body Exp_Ch6 is
                --  Perform minor decoration in order to set the master and the
                --  storage pool attributes.
 
-               Set_Ekind                   (Ptr_Typ, E_Access_Type);
+               Mutate_Ekind                (Ptr_Typ, E_Access_Type);
                Set_Finalization_Master     (Ptr_Typ, Fin_Mas_Id);
                Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
 
@@ -7345,7 +7345,7 @@ package body Exp_Ch6 is
                Temp       : Entity_Id;
 
             begin
-               Set_Ekind (Acc_Typ, E_Access_Type);
+               Mutate_Ekind (Acc_Typ, E_Access_Type);
 
                Set_Associated_Storage_Pool (Acc_Typ, RTE (RE_SS_Pool));
 
index 2e06169..f21341a 100644 (file)
@@ -2810,7 +2810,7 @@ package body Exp_Ch7 is
             --  Perform minor decoration in order to set the master and the
             --  storage pool attributes.
 
-            Set_Ekind (Ptr_Typ, E_Access_Type);
+            Mutate_Ekind (Ptr_Typ, E_Access_Type);
             Set_Finalization_Master     (Ptr_Typ, Fin_Mas_Id);
             Set_Associated_Storage_Pool (Ptr_Typ, Pool_Id);
 
index 8d17db8..a80355f 100644 (file)
@@ -739,9 +739,9 @@ package body Exp_Ch9 is
          Set_Debug_Info_Needed (New_F);
 
          if Ekind (Formal) = E_In_Parameter then
-            Set_Ekind (New_F, E_Constant);
+            Mutate_Ekind (New_F, E_Constant);
          else
-            Set_Ekind (New_F, E_Variable);
+            Mutate_Ekind (New_F, E_Variable);
             Set_Extra_Constrained (New_F, Extra_Constrained (Formal));
          end if;
 
@@ -1593,7 +1593,7 @@ package body Exp_Ch9 is
 
    begin
       Set_Corresponding_Record_Type     (Ctyp, Rec_Ent);
-      Set_Ekind                         (Rec_Ent, E_Record_Type);
+      Mutate_Ekind                      (Rec_Ent, E_Record_Type);
       Set_Has_Delayed_Freeze            (Rec_Ent, Has_Delayed_Freeze (Ctyp));
       Set_Is_Concurrent_Record_Type     (Rec_Ent, True);
       Set_Corresponding_Concurrent_Type (Rec_Ent, Ctyp);
@@ -2453,9 +2453,9 @@ package body Exp_Ch9 is
          --  Sem_Ch6.Override_Dispatching_Operation.
 
          if Ekind (Subp_Id) = E_Function then
-            Set_Ekind (Wrapper_Id, E_Function);
+            Mutate_Ekind (Wrapper_Id, E_Function);
          else
-            Set_Ekind (Wrapper_Id, E_Procedure);
+            Mutate_Ekind (Wrapper_Id, E_Procedure);
          end if;
 
          Set_Is_Primitive_Wrapper (Wrapper_Id);
@@ -3893,7 +3893,7 @@ package body Exp_Ch9 is
 
          if Unprotected then
             Set_Protected_Formal (Formal, Defining_Identifier (New_Param));
-            Set_Ekind (Defining_Identifier (New_Param), Ekind (Formal));
+            Mutate_Ekind (Defining_Identifier (New_Param), Ekind (Formal));
          end if;
 
          Append (New_Param, New_Plist);
@@ -3964,14 +3964,14 @@ package body Exp_Ch9 is
       --  Sem_Ch4.Names_Match).
 
       if Mode = Dispatching_Mode then
-         Set_Ekind (New_Id, Ekind (Def_Id));
+         Mutate_Ekind (New_Id, Ekind (Def_Id));
          Set_Original_Protected_Subprogram (New_Id, Def_Id);
       end if;
 
       --  Link the protected or unprotected version to the original subprogram
       --  it emulates.
 
-      Set_Ekind (New_Id, Ekind (Def_Id));
+      Mutate_Ekind (New_Id, Ekind (Def_Id));
       Set_Protected_Subprogram (New_Id, Def_Id);
 
       --  The unprotected operation carries the user code, and debugging
@@ -6007,9 +6007,9 @@ package body Exp_Ch9 is
                   Set_Debug_Info_Needed (New_F);
 
                   if Ekind (Formal) = E_In_Parameter then
-                     Set_Ekind (New_F, E_Constant);
+                     Mutate_Ekind (New_F, E_Constant);
                   else
-                     Set_Ekind (New_F, E_Variable);
+                     Mutate_Ekind (New_F, E_Variable);
                      Set_Extra_Constrained (New_F, Extra_Constrained (Formal));
                   end if;
 
@@ -6693,7 +6693,7 @@ package body Exp_Ch9 is
          --  statement if any to initialize the declarations of the block.
 
          Blkent := Make_Temporary (Loc, 'A');
-         Set_Ekind (Blkent, E_Block);
+         Mutate_Ekind (Blkent, E_Block);
          Set_Etype (Blkent, Standard_Void_Type);
          Set_Scope (Blkent, Current_Scope);
 
@@ -10885,7 +10885,7 @@ package body Exp_Ch9 is
 
             --  Link the acceptor to the original receiving entry
 
-            Set_Ekind           (PB_Ent, E_Procedure);
+            Mutate_Ekind        (PB_Ent, E_Procedure);
             Set_Receiving_Entry (PB_Ent, Eent);
 
             if Comes_From_Source (Alt) then
@@ -13820,9 +13820,9 @@ package body Exp_Ch9 is
                      --  Minimal decoration
 
                      if Ekind (Spec_Id) = E_Function then
-                        Set_Ekind (Decl_Id, E_Constant);
+                        Mutate_Ekind (Decl_Id, E_Constant);
                      else
-                        Set_Ekind (Decl_Id, E_Variable);
+                        Mutate_Ekind (Decl_Id, E_Variable);
                      end if;
 
                      Set_Prival         (Comp_Id, Decl_Id);
@@ -13872,7 +13872,7 @@ package body Exp_Ch9 is
          begin
             --  Minimal decoration
 
-            Set_Ekind                (Index_Con, E_Constant);
+            Mutate_Ekind             (Index_Con, E_Constant);
             Set_Entry_Index_Constant (Index, Index_Con);
             Set_Discriminal_Link     (Index_Con, Index);
 
@@ -15144,7 +15144,7 @@ package body Exp_Ch9 is
               Make_Defining_Identifier (Sloc (D),
                 Chars => New_External_Name (Chars (D), 'D'));
 
-            Set_Ekind (D_Minal, E_Constant);
+            Mutate_Ekind (D_Minal, E_Constant);
             Set_Etype (D_Minal, Etype (D));
             Set_Scope (D_Minal, Pdef);
             Set_Discriminal (D, D_Minal);
index d7102f6..f41eaf4 100644 (file)
@@ -2247,7 +2247,7 @@ package body Exp_Disp is
       --  with GNATcoverage, as that tool relies on it to identify
       --  thunks and exclude them from source coverage analysis.
 
-      Set_Ekind (Thunk_Id, Ekind (Prim));
+      Mutate_Ekind (Thunk_Id, Ekind (Prim));
       Set_Is_Thunk (Thunk_Id);
       Set_Convention (Thunk_Id, Convention (Prim));
       Set_Needs_Debug_Info (Thunk_Id, Needs_Debug_Info (Target));
@@ -4150,18 +4150,18 @@ package body Exp_Disp is
          --  dispatch tables.
 
          if not Building_Static_DT (Typ) then
-            Set_Ekind (Predef_Prims, E_Variable);
-            Set_Ekind (Iface_DT, E_Variable);
+            Mutate_Ekind (Predef_Prims, E_Variable);
+            Mutate_Ekind (Iface_DT, E_Variable);
 
          --  Statically allocated dispatch tables and related entities are
          --  constants.
 
          else
-            Set_Ekind (Predef_Prims, E_Constant);
+            Mutate_Ekind (Predef_Prims, E_Constant);
             Set_Is_Statically_Allocated (Predef_Prims);
             Set_Is_True_Constant (Predef_Prims);
 
-            Set_Ekind (Iface_DT, E_Constant);
+            Mutate_Ekind (Iface_DT, E_Constant);
             Set_Is_Statically_Allocated (Iface_DT);
             Set_Is_True_Constant (Iface_DT);
          end if;
@@ -4898,7 +4898,7 @@ package body Exp_Disp is
             --  objects by making them volatile.
 
             Set_Is_Imported      (Dummy_Object);
-            Set_Ekind            (Dummy_Object, E_Constant);
+            Mutate_Ekind         (Dummy_Object, E_Constant);
             Set_Is_True_Constant (Dummy_Object);
             Set_Related_Type     (Dummy_Object, Typ);
 
@@ -6898,7 +6898,7 @@ package body Exp_Disp is
 
       begin
          Set_Is_Imported  (DT);
-         Set_Ekind        (DT, E_Constant);
+         Mutate_Ekind     (DT, E_Constant);
          Set_Related_Type (DT, Typ);
 
          --  The scope must be set now to call Get_External_Name
@@ -7009,7 +7009,7 @@ package body Exp_Disp is
 
       --  Minimum decoration
 
-      Set_Ekind        (DT_Ptr, E_Variable);
+      Mutate_Ekind     (DT_Ptr, E_Variable);
       Set_Related_Type (DT_Ptr, Typ);
 
       --  Notify back end that the types are associated with a dispatch table
@@ -7163,7 +7163,7 @@ package body Exp_Disp is
                  Make_Defining_Identifier (Loc,
                    Chars => New_External_Name (Typ_Name, 'P'));
                Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
-               Set_Ekind (Iface_DT_Ptr, E_Variable);
+               Mutate_Ekind (Iface_DT_Ptr, E_Variable);
                Set_Is_Tag (Iface_DT_Ptr);
 
                Set_Has_Thunks (Iface_DT_Ptr);
@@ -7212,7 +7212,7 @@ package body Exp_Disp is
                  Make_Defining_Identifier (Loc,
                    Chars => New_External_Name (Typ_Name, 'P'));
                Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
-               Set_Ekind (Iface_DT_Ptr, E_Constant);
+               Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                Set_Is_Tag (Iface_DT_Ptr);
                Set_Has_Thunks (Iface_DT_Ptr);
                Set_Is_Statically_Allocated (Iface_DT_Ptr,
@@ -7250,7 +7250,7 @@ package body Exp_Disp is
                  Make_Defining_Identifier (Loc,
                    Chars => New_External_Name (Typ_Name, 'Y'));
                Set_Etype (Iface_DT_Ptr, RTE (RE_Address));
-               Set_Ekind (Iface_DT_Ptr, E_Constant);
+               Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                Set_Is_Tag (Iface_DT_Ptr);
                Set_Has_Thunks (Iface_DT_Ptr);
                Set_Is_Statically_Allocated (Iface_DT_Ptr,
@@ -7267,7 +7267,7 @@ package body Exp_Disp is
                  Make_Defining_Identifier (Loc,
                    Chars => New_External_Name (Typ_Name, 'D'));
                Set_Etype (Iface_DT_Ptr, RTE (RE_Interface_Tag));
-               Set_Ekind (Iface_DT_Ptr, E_Constant);
+               Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                Set_Is_Tag (Iface_DT_Ptr);
                Set_Is_Statically_Allocated (Iface_DT_Ptr,
                  Is_Library_Level_Tagged_Type (Typ));
@@ -7282,7 +7282,7 @@ package body Exp_Disp is
                  Make_Defining_Identifier (Loc,
                    Chars => New_External_Name (Typ_Name, 'Z'));
                Set_Etype (Iface_DT_Ptr, RTE (RE_Address));
-               Set_Ekind (Iface_DT_Ptr, E_Constant);
+               Mutate_Ekind (Iface_DT_Ptr, E_Constant);
                Set_Is_Tag (Iface_DT_Ptr);
                Set_Is_Statically_Allocated (Iface_DT_Ptr,
                  Is_Library_Level_Tagged_Type (Typ));
@@ -7392,9 +7392,9 @@ package body Exp_Disp is
       end if;
 
       if Is_CPP_Class (Root_Type (Typ)) then
-         Set_Ekind (DT_Ptr, E_Variable);
+         Mutate_Ekind (DT_Ptr, E_Variable);
       else
-         Set_Ekind (DT_Ptr, E_Constant);
+         Mutate_Ekind (DT_Ptr, E_Constant);
       end if;
 
       Set_Is_Tag       (DT_Ptr);
index 1d1cd4c..6af66f3 100644 (file)
@@ -1732,7 +1732,7 @@ package body Exp_Dist is
                New_Occurrence_Of (
                  Entity (Result_Definition (Spec)), Loc));
 
-         Set_Ekind (Proc, E_Function);
+         Mutate_Ekind (Proc, E_Function);
          Set_Etype (Proc,
            New_Occurrence_Of (Entity (Result_Definition (Spec)), Loc));
 
@@ -1742,7 +1742,7 @@ package body Exp_Dist is
              Defining_Unit_Name       => Proc,
              Parameter_Specifications => Param_Specs);
 
-         Set_Ekind (Proc, E_Procedure);
+         Mutate_Ekind (Proc, E_Procedure);
          Set_Etype (Proc, Standard_Void_Type);
       end if;
 
@@ -1979,7 +1979,7 @@ package body Exp_Dist is
 
       Existing := False;
       Stub_Type := Make_Temporary (Loc, 'S');
-      Set_Ekind (Stub_Type, E_Record_Type);
+      Mutate_Ekind (Stub_Type, E_Record_Type);
       Set_Is_RACW_Stub_Type (Stub_Type);
       Stub_Type_Access :=
         Make_Defining_Identifier (Loc,
@@ -2169,7 +2169,7 @@ package body Exp_Dist is
                    Object_Definition   =>
                      New_Occurrence_Of
                        (Defining_Identifier (Last (Decls)), Loc)));
-               Set_Ekind (Object, E_Variable);
+               Mutate_Ekind (Object, E_Variable);
 
                --  Suppress default initialization:
                --  pragma Import (Ada, Object);
@@ -2213,9 +2213,9 @@ package body Exp_Dist is
              Expression          => Expr));
 
          if Constant_Present (Last (Decls)) then
-            Set_Ekind (Object, E_Constant);
+            Mutate_Ekind (Object, E_Constant);
          else
-            Set_Ekind (Object, E_Variable);
+            Mutate_Ekind (Object, E_Variable);
          end if;
       end if;
    end Build_Actual_Object_Declaration;
@@ -3727,7 +3727,7 @@ package body Exp_Dist is
          --  Set the kind and return type of the function to prevent
          --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
 
-         Set_Ekind (Proc, E_Function);
+         Mutate_Ekind (Proc, E_Function);
          Set_Etype (Proc, Fat_Type);
 
          Discard_Node (
@@ -6472,7 +6472,7 @@ package body Exp_Dist is
          --  Set the kind and return type of the function to prevent
          --  ambiguities between Ras_Type and Fat_Type in subsequent analysis.
 
-         Set_Ekind (Proc, E_Function);
+         Mutate_Ekind (Proc, E_Function);
          Set_Etype (Proc, Fat_Type);
 
          Discard_Node (
@@ -11348,10 +11348,10 @@ package body Exp_Dist is
 
    begin
       if Nkind (Spec) = N_Function_Specification then
-         Set_Ekind (Snam, E_Function);
+         Mutate_Ekind (Snam, E_Function);
          Set_Etype (Snam, Entity (Result_Definition (Spec)));
       else
-         Set_Ekind (Snam, E_Procedure);
+         Mutate_Ekind (Snam, E_Procedure);
          Set_Etype (Snam, Standard_Void_Type);
       end if;
 
index b7ae3cd..4e5e1b6 100644 (file)
@@ -260,7 +260,7 @@ package body Exp_Imgv is
          H_Id :=
            Make_Defining_Identifier (Loc,
              Chars => New_External_Name (Chars (E), 'H'));
-         Set_Ekind       (H_Id, E_Function);
+         Mutate_Ekind    (H_Id, E_Function);
          Set_Is_Internal (H_Id);
 
          if not Debug_Generated_Code then
index 66f3f2c..0cfe258 100644 (file)
@@ -521,7 +521,7 @@ package body Exp_Intr is
             if No (Choice_Parameter (P)) then
                E := Make_Temporary (Loc, 'E');
                Set_Choice_Parameter (P, E);
-               Set_Ekind (E, E_Variable);
+               Mutate_Ekind (E, E_Variable);
                Set_Etype (E, RTE (RE_Exception_Occurrence));
                Set_Scope (E, Current_Scope);
             end if;
index e503f6d..d7c301d 100644 (file)
@@ -1570,7 +1570,7 @@ package body Exp_Prag is
                   --  effects). Assign prefix value to temp on Eval_Statement
                   --  list, so assignment will be executed conditionally.
 
-                  Set_Ekind (Temp, E_Variable);
+                  Mutate_Ekind (Temp, E_Variable);
                   Set_Suppress_Initialization (Temp);
                   Analyze (Decl);
 
@@ -2272,7 +2272,7 @@ package body Exp_Prag is
         Make_Defining_Identifier (Loc,
           Chars => New_External_Name (Chars (Pack_Id), "Initial_Condition"));
 
-      Set_Ekind                          (Proc_Id, E_Procedure);
+      Mutate_Ekind                       (Proc_Id, E_Procedure);
       Set_Is_Initial_Condition_Procedure (Proc_Id);
 
       --  Generate:
index f19a591..6e5d74e 100644 (file)
@@ -191,7 +191,7 @@ package body Exp_Unst is
 
    begin
       Typ := Make_Temporary (Loc, 'S');
-      Set_Ekind (Typ, E_General_Access_Type);
+      Mutate_Ekind (Typ, E_General_Access_Type);
       Set_Etype (Typ, Typ);
       Set_Scope (Typ, Scop);
       Set_Directly_Designated_Type (Typ, Etype (E));
@@ -1792,7 +1792,7 @@ package body Exp_Unst is
                      --  Decorate the new formal entity
 
                      Set_Scope                (Form, STJ.Ent);
-                     Set_Ekind                (Form, E_In_Parameter);
+                     Mutate_Ekind             (Form, E_In_Parameter);
                      Set_Etype                (Form, STJE.ARECnPT);
                      Set_Mechanism            (Form, By_Copy);
                      Set_Never_Set_In_Source  (Form, True);
index 8137afb..38eadef 100644 (file)
@@ -2190,7 +2190,7 @@ package body Exp_Util is
 
       --  Perform minor decoration in case the body is not analyzed
 
-      Set_Ekind        (Proc_Body_Id, E_Subprogram_Body);
+      Mutate_Ekind     (Proc_Body_Id, E_Subprogram_Body);
       Set_Etype        (Proc_Body_Id, Standard_Void_Type);
       Set_Scope        (Proc_Body_Id, Current_Scope);
       Set_SPARK_Pragma (Proc_Body_Id, SPARK_Pragma (Proc_Id));
@@ -2357,7 +2357,7 @@ package body Exp_Util is
 
       --  Perform minor decoration in case the declaration is not analyzed
 
-      Set_Ekind                  (Proc_Id, E_Procedure);
+      Mutate_Ekind               (Proc_Id, E_Procedure);
       Set_Etype                  (Proc_Id, Standard_Void_Type);
       Set_Is_DIC_Procedure       (Proc_Id);
       Set_Scope                  (Proc_Id, Current_Scope);
@@ -2409,7 +2409,7 @@ package body Exp_Util is
 
       --  Perform minor decoration in case the declaration is not analyzed
 
-      Set_Ekind (Obj_Id, E_In_Parameter);
+      Mutate_Ekind (Obj_Id, E_In_Parameter);
       Set_Etype (Obj_Id, Work_Typ);
       Set_Scope (Obj_Id, Proc_Id);
 
@@ -3679,7 +3679,7 @@ package body Exp_Util is
 
       --  Perform minor decoration in case the body is not analyzed
 
-      Set_Ekind (Proc_Body_Id, E_Subprogram_Body);
+      Mutate_Ekind (Proc_Body_Id, E_Subprogram_Body);
       Set_Etype (Proc_Body_Id, Standard_Void_Type);
       Set_Scope (Proc_Body_Id, Current_Scope);
 
@@ -3817,7 +3817,7 @@ package body Exp_Util is
 
       --  Perform minor decoration in case the declaration is not analyzed
 
-      Set_Ekind (Proc_Id, E_Procedure);
+      Mutate_Ekind (Proc_Id, E_Procedure);
       Set_Etype (Proc_Id, Standard_Void_Type);
       Set_Scope (Proc_Id, Current_Scope);
 
@@ -3903,7 +3903,7 @@ package body Exp_Util is
 
       --  Perform minor decoration in case the declaration is not analyzed
 
-      Set_Ekind (Obj_Id, E_In_Parameter);
+      Mutate_Ekind (Obj_Id, E_In_Parameter);
       Set_Etype (Obj_Id, Obj_Typ);
       Set_Scope (Obj_Id, Proc_Id);
 
@@ -4707,7 +4707,7 @@ package body Exp_Util is
       --    type Ptr_Typ is access all Desig_Typ;
 
       Ptr_Typ := Make_Temporary (Loc, 'A');
-      Set_Ekind (Ptr_Typ, E_General_Access_Type);
+      Mutate_Ekind (Ptr_Typ, E_General_Access_Type);
       Set_Directly_Designated_Type (Ptr_Typ, Desig_Typ);
 
       Ptr_Decl :=
@@ -4724,7 +4724,7 @@ package body Exp_Util is
       --    Hook : Ptr_Typ := null;
 
       Hook_Id := Make_Temporary (Loc, 'T');
-      Set_Ekind (Hook_Id, E_Variable);
+      Mutate_Ekind (Hook_Id, E_Variable);
       Set_Etype (Hook_Id, Ptr_Typ);
 
       Hook_Decl :=
@@ -9495,7 +9495,7 @@ package body Exp_Util is
       --  end Equiv_T;
 
       Equiv_Type := Make_Temporary (Loc, 'T');
-      Set_Ekind (Equiv_Type, E_Record_Type);
+      Mutate_Ekind (Equiv_Type, E_Record_Type);
       Set_Parent_Subtype (Equiv_Type, Constr_Root);
 
       --  Set Is_Class_Wide_Equivalent_Type very early to trigger the special
@@ -9987,7 +9987,7 @@ package body Exp_Util is
 
          --  Define the dummy private subtype
 
-         Set_Ekind          (Priv_Subtyp, Subtype_Kind (Ekind (Unc_Typ)));
+         Mutate_Ekind       (Priv_Subtyp, Subtype_Kind (Ekind (Unc_Typ)));
          Set_Etype          (Priv_Subtyp, Base_Type (Unc_Typ));
          Set_Scope          (Priv_Subtyp, Full_Subtyp);
          Set_Is_Constrained (Priv_Subtyp);
@@ -10913,7 +10913,7 @@ package body Exp_Util is
 
       Set_Associated_Node_For_Itype (Res, N);
       Set_Comes_From_Source         (Res, False);
-      Set_Ekind                     (Res, E_Class_Wide_Subtype);
+      Mutate_Ekind                  (Res, E_Class_Wide_Subtype);
       Set_Etype                     (Res, Base_Type (CW_Typ));
       Set_Freeze_Node               (Res, Empty);
       Set_Is_Frozen                 (Res, False);
index 137338c..5b2a17b 100644 (file)
@@ -1322,8 +1322,8 @@ package body Gen_IL.Gen is
                Put_Getter_Decl (S, Ekind);
                Put (S, "function K (N : Entity_Id) return Entity_Kind renames Ekind;\n");
                Put (S, "--  Shorthand for use in predicates and preconditions below\n");
-               Put (S, "--  ????There is no procedure Set_Ekind here.\n");
-               Put (S, "--  See Atree.\n\n");
+               Put (S, "--  There is no procedure Set_Ekind here.\n");
+               Put (S, "--  See Mutate_Ekind in Atree.\n\n");
 
             when others => raise Program_Error;
          end case;
index 13f8c59..2319086 100644 (file)
@@ -143,14 +143,24 @@ package Gen_IL.Gen is
    --  (The matching Default_Value requirement is a simplification from the
    --  earlier hand-written version.)
 
+   --  When adding new node or entity kinds, or adding new fields, all back
+   --  ends must be made aware of the changes. In addition, the documentation
+   --  in Sinfo or Einfo needs to be updated.
+
    --  To add a new node or entity type, add it to the enumeration type in
    --  Gen_IL.Types, taking care that it is in the approprate range
    --  (Abstract_Node, Abstract_Entity, Concrete_Node, or Concrete_Entity).
    --  Then add a call to one of the above type-creation procedures to
-   --  Sinfo.Nodes or Einfo.Entities.
+   --  Gen_IL.Gen.Gen_Nodes or Gen_IL.Gen.Gen_Entities.
+   --
+   --  To add a new field to a type, add it to the enumeration type in
+   --  Gen_IL.Fields in the appropriate range. Then add a call to one of
+   --  the above field-creation procedures to Gen_IL.Gen.Gen_Nodes or
+   --  Gen_IL.Gen.Gen_Entities.
    --
-   --  To add a new field to a type, add a call to one of the above field
-   --  creation procedures to Sinfo.Nodes or Einfo.Entities.
+   --  If a type or field name does not follow the usual Mixed_Case convention,
+   --  such as "SPARK_Pragma", then you have to add a special case to one of
+   --  the Image functions in Gen_IL.Utils.
 
    --  Forward references are not allowed. So if you say:
    --
index 4bd7ea1..1c50787 100644 (file)
@@ -1473,7 +1473,7 @@ package body Inline is
       end if;
 
       Set_Body_To_Inline (Decl, Original_Body);
-      Set_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
+      Mutate_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
       Set_Is_Inlined (Spec_Id);
    end Build_Body_To_Inline;
 
@@ -2251,7 +2251,7 @@ package body Inline is
 
          pragma Assert (No (Body_To_Inline (Decl)));
          Set_Body_To_Inline (Decl, Original_Body);
-         Set_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
+         Mutate_Ekind (Defining_Entity (Original_Body), Ekind (Spec_Id));
       end Build_Body_To_Inline;
 
       --------------------------------
index 38c9fd6..2f0b0ff 100644 (file)
@@ -207,7 +207,7 @@ package body Lib.Writ is
          Style_Check := False;
          Initialize_Scanner (Units.Last, System_Source_File_Index);
          Discard_List (Par (Configuration_Pragmas => False));
-         Set_Ekind (Cunit_Entity (Units.Last), E_Package);
+         Mutate_Ekind (Cunit_Entity (Units.Last), E_Package);
          Set_Scope (Cunit_Entity (Units.Last), Standard_Standard);
          Style_Check := Save_Style;
          Multiple_Unit_Index := Save_Mindex;
index a56e005..fc05e16 100644 (file)
@@ -296,7 +296,7 @@ package body SPARK_Specific is
              (Standard_Location,
               Name_Enter (Name_Of_Heap_Variable));
 
-         Set_Ekind       (Heap, E_Variable);
+         Mutate_Ekind    (Heap, E_Variable);
          Set_Is_Internal (Heap, True);
          Set_Etype       (Heap, Standard_Void_Type);
          Set_Scope       (Heap, Standard_Standard);
index 123f9db..4fbaee7 100644 (file)
@@ -1681,7 +1681,7 @@ package body Sem_Aggr is
 
          Enter_Name (Id);
          Set_Etype (Id, Index_Typ);
-         Set_Ekind (Id, E_Variable);
+         Mutate_Ekind (Id, E_Variable);
          Set_Scope (Id, Ent);
 
          --  Analyze  expression without expansion, to verify legality.
@@ -2863,7 +2863,7 @@ package body Sem_Aggr is
             Set_Etype (Id, Key_Type);
          end if;
 
-         Set_Ekind (Id, E_Variable);
+         Mutate_Ekind (Id, E_Variable);
          Set_Scope (Id, Ent);
          Set_Referenced (Id);
 
@@ -3203,7 +3203,7 @@ package body Sem_Aggr is
 
                if No (Scope (Id)) then
                   Set_Etype (Id, Index_Type);
-                  Set_Ekind (Id, E_Variable);
+                  Mutate_Ekind (Id, E_Variable);
                   Set_Scope (Id, Ent);
                end if;
                Enter_Name (Id);
index c1b9253..ccfecf4 100644 (file)
@@ -1647,7 +1647,7 @@ package body Sem_Ch10 is
          --  when we load the proper body.
 
          Set_Scope (Id, Current_Scope);
-         Set_Ekind (Id, E_Package_Body);
+         Mutate_Ekind (Id, E_Package_Body);
          Set_Etype (Id, Standard_Void_Type);
 
          if Has_Aspects (N) then
@@ -1989,7 +1989,7 @@ package body Sem_Ch10 is
          Opts := Save_Config_Switches;
 
          Set_Scope (Id, Current_Scope);
-         Set_Ekind (Id, E_Protected_Body);
+         Mutate_Ekind (Id, E_Protected_Body);
          Set_Etype (Id, Standard_Void_Type);
 
          if Has_Aspects (N) then
@@ -2500,7 +2500,7 @@ package body Sem_Ch10 is
 
       else
          Set_Scope (Id, Current_Scope);
-         Set_Ekind (Id, E_Task_Body);
+         Mutate_Ekind (Id, E_Task_Body);
          Set_Etype (Id, Standard_Void_Type);
 
          if Has_Aspects (N) then
@@ -4120,7 +4120,8 @@ package body Sem_Ch10 is
                      Set_Subtype_Indication (Decl,
                        New_Occurrence_Of (Non_Lim_View, Sloc (Def_Id)));
                      Set_Etype (Def_Id, Non_Lim_View);
-                     Set_Ekind (Def_Id, Subtype_Kind (Ekind (Non_Lim_View)));
+                     Mutate_Ekind
+                       (Def_Id, Subtype_Kind (Ekind (Non_Lim_View)));
                      Set_Analyzed (Decl, False);
 
                      --  Reanalyze the declaration, suppressing the call to
@@ -4986,7 +4987,7 @@ package body Sem_Ch10 is
 
             --  Minimum decoration
 
-            Set_Ekind (P, E_Package);
+            Mutate_Ekind (P, E_Package);
             Set_Etype (P, Standard_Void_Type);
             Set_Scope (P, Standard_Standard);
             Set_Is_Visible_Lib_Unit (P);
@@ -5738,9 +5739,9 @@ package body Sem_Ch10 is
          --  The abstract view of a variable is a state, not another variable
 
          if Ekind (Ent) = E_Variable then
-            Set_Ekind (Shadow, E_Abstract_State);
+            Mutate_Ekind (Shadow, E_Abstract_State);
          else
-            Set_Ekind (Shadow, Ekind (Ent));
+            Mutate_Ekind (Shadow, Ekind (Ent));
          end if;
 
          Set_Is_Internal       (Shadow);
@@ -5785,7 +5786,7 @@ package body Sem_Ch10 is
 
       procedure Decorate_Package (Ent : Entity_Id; Scop : Entity_Id) is
       begin
-         Set_Ekind (Ent, E_Package);
+         Mutate_Ekind (Ent, E_Package);
          Set_Etype (Ent, Standard_Void_Type);
          Set_Scope (Ent, Scop);
       end Decorate_Package;
@@ -5796,7 +5797,7 @@ package body Sem_Ch10 is
 
       procedure Decorate_State (Ent : Entity_Id; Scop : Entity_Id) is
       begin
-         Set_Ekind               (Ent, E_Abstract_State);
+         Mutate_Ekind            (Ent, E_Abstract_State);
          Set_Etype               (Ent, Standard_Void_Type);
          Set_Scope               (Ent, Scop);
          Set_Encapsulating_State (Ent, Empty);
@@ -5818,7 +5819,7 @@ package body Sem_Ch10 is
          --  An unanalyzed type or a shadow entity of a type is treated as an
          --  incomplete type, and carries the corresponding attributes.
 
-         Set_Ekind              (Ent, E_Incomplete_Type);
+         Mutate_Ekind           (Ent, E_Incomplete_Type);
          Set_Etype              (Ent, Ent);
          Set_Full_View          (Ent, Empty);
          Set_Is_First_Subtype   (Ent);
@@ -5854,7 +5855,7 @@ package body Sem_Ch10 is
 
             Set_Parent (CW_Typ, Parent (Ent));
 
-            Set_Ekind                     (CW_Typ, E_Class_Wide_Type);
+            Mutate_Ekind                  (CW_Typ, E_Class_Wide_Type);
             Set_Class_Wide_Type           (CW_Typ, CW_Typ);
             Set_Etype                     (CW_Typ, Ent);
             Set_Equivalent_Type           (CW_Typ, Empty);
@@ -5874,7 +5875,7 @@ package body Sem_Ch10 is
 
       procedure Decorate_Variable (Ent : Entity_Id; Scop : Entity_Id) is
       begin
-         Set_Ekind (Ent, E_Variable);
+         Mutate_Ekind (Ent, E_Variable);
          Set_Etype (Ent, Standard_Void_Type);
          Set_Scope (Ent, Scop);
       end Decorate_Variable;
@@ -6229,7 +6230,7 @@ package body Sem_Ch10 is
       --  must be minimally decorated. This ensures that the checks on unused
       --  with clauses also process limieted withs.
 
-      Set_Ekind (Pack, E_Package);
+      Mutate_Ekind (Pack, E_Package);
       Set_Etype (Pack, Standard_Void_Type);
 
       if Is_Entity_Name (Nam) then
@@ -6251,7 +6252,7 @@ package body Sem_Ch10 is
       --  incomplete view of all types and packages declared within.
 
       Shadow_Pack := Make_Temporary (Sloc (N), 'Z');
-      Set_Ekind        (Shadow_Pack, E_Package);
+      Mutate_Ekind     (Shadow_Pack, E_Package);
       Set_Is_Internal  (Shadow_Pack);
       Set_Limited_View (Pack, Shadow_Pack);
 
index c250ed2..aea32c1 100644 (file)
@@ -65,7 +65,7 @@ package body Sem_Ch11 is
    begin
       Generate_Definition         (Id);
       Enter_Name                  (Id);
-      Set_Ekind                   (Id, E_Exception);
+      Mutate_Ekind                (Id, E_Exception);
       Set_Etype                   (Id, Standard_Exception_Type);
       Set_Is_Statically_Allocated (Id);
       Set_Is_Pure                 (Id, PF);
@@ -233,7 +233,7 @@ package body Sem_Ch11 is
                Set_Etype (H_Scope, Standard_Void_Type);
 
                Enter_Name (Choice);
-               Set_Ekind (Choice, E_Variable);
+               Mutate_Ekind (Choice, E_Variable);
 
                if RTE_Available (RE_Exception_Occurrence) then
                   Set_Etype (Choice, RTE (RE_Exception_Occurrence));
index 5303fb0..12e25b9 100644 (file)
@@ -2351,7 +2351,7 @@ package body Sem_Ch12 is
       Set_Is_Generic_Type (Base);
       Set_Parent          (Base, Parent (Def));
 
-      Set_Ekind          (T, E_Decimal_Fixed_Point_Subtype);
+      Mutate_Ekind       (T, E_Decimal_Fixed_Point_Subtype);
       Set_Etype          (T, Base);
       Set_Size_Info      (T, Int_Base);
       Set_RM_Size        (T, RM_Size (Int_Base));
@@ -2473,7 +2473,7 @@ package body Sem_Ch12 is
 
    begin
       Enter_Name          (T);
-      Set_Ekind           (T, E_Enumeration_Subtype);
+      Mutate_Ekind        (T, E_Enumeration_Subtype);
       Set_Etype           (T, Base);
       Init_Size           (T, 8);
       Init_Alignment      (T);
@@ -2502,7 +2502,7 @@ package body Sem_Ch12 is
           Low_Bound  => Lo,
           High_Bound => Hi));
 
-      Set_Ekind           (Base, E_Enumeration_Type);
+      Mutate_Ekind        (Base, E_Enumeration_Type);
       Set_Etype           (Base, Base);
       Init_Size           (Base, 8);
       Init_Alignment      (Base);
@@ -2528,7 +2528,7 @@ package body Sem_Ch12 is
       --  the generic itself.
 
       Enter_Name (T);
-      Set_Ekind          (T, E_Floating_Point_Subtype);
+      Mutate_Ekind       (T, E_Floating_Point_Subtype);
       Set_Etype          (T, Base);
       Set_Size_Info      (T,              (Standard_Float));
       Set_RM_Size        (T, RM_Size      (Standard_Float));
@@ -2580,8 +2580,8 @@ package body Sem_Ch12 is
       --  signed integer types, and have the same attributes.
 
       Analyze_Formal_Signed_Integer_Type (T, Def);
-      Set_Ekind (T, E_Modular_Integer_Subtype);
-      Set_Ekind (Etype (T), E_Modular_Integer_Type);
+      Mutate_Ekind (T, E_Modular_Integer_Subtype);
+      Mutate_Ekind (Etype (T), E_Modular_Integer_Type);
 
    end Analyze_Formal_Modular_Type;
 
@@ -2678,7 +2678,7 @@ package body Sem_Ch12 is
             end if;
          end if;
 
-         Set_Ekind (Id, K);
+         Mutate_Ekind (Id, K);
          Set_Etype (Id, T);
 
       --  Case of generic IN OUT parameter
@@ -2688,7 +2688,7 @@ package body Sem_Ch12 is
          --  subtype, as is done for subprogram formals. In this fashion, all
          --  its uses can refer to specific bounds.
 
-         Set_Ekind (Id, K);
+         Mutate_Ekind (Id, K);
          Set_Etype (Id, T);
 
          if (Is_Array_Type (T) and then not Is_Constrained (T))
@@ -2741,7 +2741,7 @@ package body Sem_Ch12 is
       --  will never be used, since all properties of the type are non-static.
 
       Enter_Name (T);
-      Set_Ekind            (T, E_Ordinary_Fixed_Point_Subtype);
+      Mutate_Ekind         (T, E_Ordinary_Fixed_Point_Subtype);
       Set_Etype            (T, Base);
       Set_Size_Info        (T, Standard_Integer);
       Set_RM_Size          (T, RM_Size (Standard_Integer));
@@ -3017,8 +3017,8 @@ package body Sem_Ch12 is
       exception
          when Instantiation_Error =>
             Enter_Name (Formal);
-            Set_Ekind  (Formal, E_Variable);
-            Set_Etype  (Formal, Any_Type);
+            Mutate_Ekind (Formal, E_Variable);
+            Set_Etype (Formal, Any_Type);
             Restore_Hidden_Primitives (Vis_Prims_List);
 
             if Parent_Installed then
@@ -3035,8 +3035,8 @@ package body Sem_Ch12 is
       Set_Is_Generic_Instance (Formal);
 
       Enter_Name (Formal);
-      Set_Ekind  (Formal, E_Package);
-      Set_Etype  (Formal, Standard_Void_Type);
+      Mutate_Ekind (Formal, E_Package);
+      Set_Etype (Formal, Standard_Void_Type);
       Set_Inner_Instances (Formal, New_Elmt_List);
 
       --  It is unclear that any aspects can apply to a formal package
@@ -3094,7 +3094,7 @@ package body Sem_Ch12 is
 
          Renaming_In_Par :=
            Make_Defining_Identifier (Loc, Chars (Gen_Unit));
-         Set_Ekind (Renaming_In_Par, E_Package);
+         Mutate_Ekind (Renaming_In_Par, E_Package);
          Set_Etype (Renaming_In_Par, Standard_Void_Type);
          Set_Scope (Renaming_In_Par, Parent_Instance);
          Set_Parent (Renaming_In_Par, Parent (Formal));
@@ -3163,7 +3163,7 @@ package body Sem_Ch12 is
 
       --  Add semantic information to the original defining identifier.
 
-      Set_Ekind (Pack_Id, E_Package);
+      Mutate_Ekind (Pack_Id, E_Package);
       Set_Etype (Pack_Id, Standard_Void_Type);
       Set_Scope (Pack_Id, Scope (Formal));
       Set_Has_Completion (Pack_Id, True);
@@ -3207,7 +3207,7 @@ package body Sem_Ch12 is
    is
    begin
       Enter_Name (T);
-      Set_Ekind (T, E_Incomplete_Type);
+      Mutate_Ekind (T, E_Incomplete_Type);
       Set_Etype (T, T);
       Set_Private_Dependents (T, New_Elmt_List);
 
@@ -3235,7 +3235,7 @@ package body Sem_Ch12 is
    begin
       Enter_Name (T);
 
-      Set_Ekind          (T, E_Signed_Integer_Subtype);
+      Mutate_Ekind       (T, E_Signed_Integer_Subtype);
       Set_Etype          (T, Base);
       Set_Size_Info      (T, Standard_Integer);
       Set_RM_Size        (T, RM_Size (Standard_Integer));
@@ -3693,8 +3693,8 @@ package body Sem_Ch12 is
       Start_Generic;
 
       Enter_Name (Id);
-      Set_Ekind  (Id, E_Generic_Package);
-      Set_Etype  (Id, Standard_Void_Type);
+      Mutate_Ekind (Id, E_Generic_Package);
+      Set_Etype (Id, Standard_Void_Type);
 
       --  Set SPARK_Mode from context
 
@@ -3870,9 +3870,9 @@ package body Sem_Ch12 is
       Analyze_Generic_Formal_Part (N);
 
       if Nkind (Spec) = N_Function_Specification then
-         Set_Ekind (Id, E_Generic_Function);
+         Mutate_Ekind (Id, E_Generic_Function);
       else
-         Set_Ekind (Id, E_Generic_Procedure);
+         Mutate_Ekind (Id, E_Generic_Procedure);
       end if;
 
       --  Set SPARK_Mode from context
@@ -4189,7 +4189,7 @@ package body Sem_Ch12 is
       end if;
 
       Generate_Definition (Act_Decl_Id);
-      Set_Ekind (Act_Decl_Id, E_Package);
+      Mutate_Ekind (Act_Decl_Id, E_Package);
 
       --  Initialize list of incomplete actuals before analysis
 
@@ -4316,7 +4316,7 @@ package body Sem_Ch12 is
          goto Leave;
 
       else
-         Set_Ekind (Inst_Id, E_Package);
+         Mutate_Ekind (Inst_Id, E_Package);
          Set_Scope (Inst_Id, Current_Scope);
 
          --  If the context of the instance is subject to SPARK_Mode "off" or
@@ -5663,7 +5663,7 @@ package body Sem_Ch12 is
          Error_Msg_NE ("instantiation of & within itself", N, Gen_Unit);
 
       else
-         Set_Ekind (Inst_Id, K);
+         Mutate_Ekind (Inst_Id, K);
          Set_Scope (Inst_Id, Current_Scope);
 
          Set_Entity (Gen_Id, Gen_Unit);
@@ -6055,7 +6055,7 @@ package body Sem_Ch12 is
       Func_Name := New_Occurrence_Of (Actual_Subp, Loc);
 
       Func := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
-      Set_Ekind (Func, E_Function);
+      Mutate_Ekind (Func, E_Function);
       Set_Is_Generic_Actual_Subprogram (Func);
 
       Actuals := New_List;
@@ -6140,7 +6140,7 @@ package body Sem_Ch12 is
       R  := New_Occurrence_Of (F2, Loc);
 
       Func := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
-      Set_Ekind (Func, E_Function);
+      Mutate_Ekind (Func, E_Function);
       Set_Is_Generic_Actual_Subprogram (Func);
 
       Spec :=
@@ -6255,7 +6255,7 @@ package body Sem_Ch12 is
    begin
 
       Subp := Make_Defining_Identifier (Loc, Chars (Formal_Subp));
-      Set_Ekind (Subp, Ekind (Formal_Subp));
+      Mutate_Ekind (Subp, Ekind (Formal_Subp));
       Set_Is_Generic_Actual_Subprogram (Subp);
 
       Profile := Parameter_Specifications (
@@ -10885,7 +10885,7 @@ package body Sem_Ch12 is
 
             begin
                Set_Is_Internal (I_Pack);
-               Set_Ekind (I_Pack, E_Package);
+               Mutate_Ekind (I_Pack, E_Package);
                Set_Hidden_In_Formal_Instance (I_Pack, Hidden_Formals);
 
                Append_To (Decls,
@@ -11022,7 +11022,7 @@ package body Sem_Ch12 is
          New_Subp := Make_Defining_Identifier (Loc, Chars (Formal_Sub));
       end if;
 
-      Set_Ekind (New_Subp, Ekind (Analyzed_S));
+      Mutate_Ekind (New_Subp, Ekind (Analyzed_S));
       Set_Is_Generic_Actual_Subprogram (New_Subp);
       Set_Defining_Unit_Name (New_Spec, New_Subp);
 
@@ -14214,7 +14214,7 @@ package body Sem_Ch12 is
       --  the local subtype must be treated as such.
 
       if From_Limited_With (Act_T) then
-         Set_Ekind (Subt, E_Incomplete_Subtype);
+         Mutate_Ekind (Subt, E_Incomplete_Subtype);
          Set_From_Limited_With (Subt);
       end if;
 
@@ -14273,9 +14273,9 @@ package body Sem_Ch12 is
             Append_To (Decl_Nodes, Corr_Decl);
 
             if Ekind (Act_T) = E_Task_Type then
-               Set_Ekind (Subt, E_Task_Subtype);
+               Mutate_Ekind (Subt, E_Task_Subtype);
             else
-               Set_Ekind (Subt, E_Protected_Subtype);
+               Mutate_Ekind (Subt, E_Protected_Subtype);
             end if;
 
             Set_Corresponding_Record_Type (Subt, Corr_Rec);
index 4002d82..4a5273b 100644 (file)
@@ -10216,7 +10216,7 @@ package body Sem_Ch13 is
             FBody : Node_Id;
 
          begin
-            Set_Ekind (SIdB, E_Function);
+            Mutate_Ekind (SIdB, E_Function);
             Set_Is_Predicate_Function (SIdB);
 
             --  Build function body
@@ -10350,7 +10350,7 @@ package body Sem_Ch13 is
 
                --  Build function declaration
 
-               Set_Ekind (SId, E_Function);
+               Mutate_Ekind (SId, E_Function);
                Set_Is_Predicate_Function_M (SId);
                Set_Predicate_Function_M (Typ, SId);
 
@@ -10565,7 +10565,7 @@ package body Sem_Ch13 is
         Make_Defining_Identifier (Loc,
           Chars => New_External_Name (Chars (Typ), "Predicate"));
 
-      Set_Ekind (Func_Id, E_Function);
+      Mutate_Ekind (Func_Id, E_Function);
       Set_Etype (Func_Id, Standard_Boolean);
       Set_Is_Internal (Func_Id);
       Set_Is_Predicate_Function (Func_Id);
index 448a7ad..6b8fe6f 100644 (file)
@@ -857,10 +857,10 @@ package body Sem_Ch3 is
             T_Def  => Access_To_Subprogram_Definition (N));
 
          if Ekind (Anon_Type) = E_Access_Protected_Subprogram_Type then
-            Set_Ekind
+            Mutate_Ekind
               (Anon_Type, E_Anonymous_Access_Protected_Subprogram_Type);
          else
-            Set_Ekind (Anon_Type, E_Anonymous_Access_Subprogram_Type);
+            Mutate_Ekind (Anon_Type, E_Anonymous_Access_Subprogram_Type);
          end if;
 
          Set_Can_Use_Internal_Rep
@@ -1290,10 +1290,10 @@ package body Sem_Ch3 is
       Check_Delayed_Subprogram (Desig_Type);
 
       if Protected_Present (T_Def) then
-         Set_Ekind (T_Name, E_Access_Protected_Subprogram_Type);
+         Mutate_Ekind (T_Name, E_Access_Protected_Subprogram_Type);
          Set_Convention (Desig_Type, Convention_Protected);
       else
-         Set_Ekind (T_Name, E_Access_Subprogram_Type);
+         Mutate_Ekind (T_Name, E_Access_Subprogram_Type);
       end if;
 
       Set_Can_Use_Internal_Rep     (T_Name,
@@ -1365,7 +1365,7 @@ package body Sem_Ch3 is
             if From_Limited_With (Entity (S))
               and then not Is_Class_Wide_Type (Entity (S))
             then
-               Set_Ekind (T, E_Access_Type);
+               Mutate_Ekind (T, E_Access_Type);
                Build_Master_Entity (T);
                Build_Master_Renaming (T);
             end if;
@@ -1408,9 +1408,9 @@ package body Sem_Ch3 is
       end if;
 
       if All_Present (Def) or Constant_Present (Def) then
-         Set_Ekind (T, E_General_Access_Type);
+         Mutate_Ekind (T, E_General_Access_Type);
       else
-         Set_Ekind (T, E_Access_Type);
+         Mutate_Ekind (T, E_Access_Type);
       end if;
 
       if not Error_Posted (T) then
@@ -1541,7 +1541,7 @@ package body Sem_Ch3 is
          Analyze_Component_Declaration (Decl);
 
          Set_Analyzed (Decl);
-         Set_Ekind               (Tag, E_Component);
+         Mutate_Ekind            (Tag, E_Component);
          Set_Is_Tag              (Tag);
          Set_Is_Aliased          (Tag);
          Set_Is_Independent      (Tag);
@@ -1582,7 +1582,7 @@ package body Sem_Ch3 is
             Analyze_Component_Declaration (Decl);
 
             Set_Analyzed (Decl);
-            Set_Ekind               (Offset, E_Component);
+            Mutate_Ekind            (Offset, E_Component);
             Set_Is_Aliased          (Offset);
             Set_Is_Independent      (Offset);
             Set_Related_Type        (Offset, Iface);
@@ -3419,7 +3419,7 @@ package body Sem_Ch3 is
 
       T := Find_Type_Name (N);
 
-      Set_Ekind            (T, E_Incomplete_Type);
+      Mutate_Ekind         (T, E_Incomplete_Type);
       Set_Etype            (T, T);
       Set_Is_First_Subtype (T);
       Init_Size_Align      (T);
@@ -3543,7 +3543,7 @@ package body Sem_Ch3 is
          Set_Etype                (E, Universal_Integer);
 
          Set_Etype     (Id, Universal_Integer);
-         Set_Ekind     (Id, E_Named_Integer);
+         Mutate_Ekind  (Id, E_Named_Integer);
          Set_Is_Frozen (Id, True);
 
          Set_Debug_Info_Needed (Id);
@@ -3603,7 +3603,7 @@ package body Sem_Ch3 is
       if Is_Integer_Type (T) then
          Resolve (E, T);
          Set_Etype (Id, Universal_Integer);
-         Set_Ekind (Id, E_Named_Integer);
+         Mutate_Ekind (Id, E_Named_Integer);
 
       elsif Is_Real_Type (T) then
 
@@ -3635,14 +3635,14 @@ package body Sem_Ch3 is
 
          Resolve (E, T);
          Set_Etype (Id, Universal_Real);
-         Set_Ekind (Id, E_Named_Real);
+         Mutate_Ekind (Id, E_Named_Real);
 
       else
          Wrong_Type (E, Any_Numeric);
          Resolve (E, T);
 
          Set_Etype               (Id, T);
-         Set_Ekind               (Id, E_Constant);
+         Mutate_Ekind            (Id, E_Constant);
          Set_Never_Set_In_Source (Id, True);
          Set_Is_True_Constant    (Id, True);
          return;
@@ -4043,7 +4043,7 @@ package body Sem_Ch3 is
 
             T := Find_Type_Of_Object (Object_Definition (N), N);
             Set_Etype (Id, T);
-            Set_Ekind (Id, E_Variable);
+            Mutate_Ekind (Id, E_Variable);
             goto Leave;
          end if;
 
@@ -4069,7 +4069,7 @@ package body Sem_Ch3 is
 
          if Error_Posted (Id) then
             Set_Etype (Id, T);
-            Set_Ekind (Id, E_Variable);
+            Mutate_Ekind (Id, E_Variable);
             goto Leave;
          end if;
       end if;
@@ -4371,7 +4371,7 @@ package body Sem_Ch3 is
            and then In_Subrange_Of (Etype (Entity (E)), T)
          then
             Set_Is_Known_Valid (Id);
-            Set_Ekind (Id, E_Constant);
+            Mutate_Ekind (Id, E_Constant);
             Set_Actual_Subtype (Id, Etype (Entity (E)));
          end if;
 
@@ -4587,9 +4587,9 @@ package body Sem_Ch3 is
 
             elsif Is_Unchecked_Union (T) then
                if Constant_Present (N) or else Nkind (E) = N_Function_Call then
-                  Set_Ekind (Id, E_Constant);
+                  Mutate_Ekind (Id, E_Constant);
                else
-                  Set_Ekind (Id, E_Variable);
+                  Mutate_Ekind (Id, E_Variable);
                end if;
 
                --  If the expression is an aggregate it contains the required
@@ -4770,11 +4770,11 @@ package body Sem_Ch3 is
       end if;
 
       if Constant_Present (N) then
-         Set_Ekind            (Id, E_Constant);
+         Mutate_Ekind         (Id, E_Constant);
          Set_Is_True_Constant (Id);
 
       else
-         Set_Ekind (Id, E_Variable);
+         Mutate_Ekind (Id, E_Variable);
 
          --  A variable is set as shared passive if it appears in a shared
          --  passive package, and is at the outer level. This is not done for
@@ -5102,7 +5102,7 @@ package body Sem_Ch3 is
       Parent_Base := Base_Type (Parent_Type);
 
       if Parent_Type = Any_Type or else Etype (Parent_Type) = Any_Type then
-         Set_Ekind (T, Ekind (Parent_Type));
+         Mutate_Ekind (T, Ekind (Parent_Type));
          Set_Etype (T, Any_Type);
          goto Leave;
 
@@ -5121,7 +5121,7 @@ package body Sem_Ch3 is
             & "tagged type (RM 3.9.1 (3/1))", N);
 
          Set_Etype              (T, Any_Type);
-         Set_Ekind              (T, E_Limited_Private_Type);
+         Mutate_Ekind           (T, E_Limited_Private_Type);
          Set_Private_Dependents (T, New_Elmt_List);
          Set_Error_Posted       (T);
          goto Leave;
@@ -5147,7 +5147,7 @@ package body Sem_Ch3 is
 
       Set_Is_Pure          (T, Is_Pure (Current_Scope));
       Set_Scope            (T, Current_Scope);
-      Set_Ekind            (T, E_Record_Type_With_Private);
+      Mutate_Ekind         (T, E_Record_Type_With_Private);
       Init_Size_Align      (T);
       Set_Default_SSO      (T);
       Set_No_Reordering    (T, No_Component_Reordering);
@@ -5392,7 +5392,7 @@ package body Sem_Ch3 is
          --  (no aspects to examine on the generated declaration).
 
          if not Comes_From_Source (N) then
-            Set_Ekind (Id, Ekind (T));
+            Mutate_Ekind (Id, Ekind (T));
 
             if Present (Predicate_Function (Id)) then
                null;
@@ -5418,11 +5418,11 @@ package body Sem_Ch3 is
 
          case Ekind (T) is
             when Array_Kind =>
-               Set_Ekind                     (Id, E_Array_Subtype);
+               Mutate_Ekind                  (Id, E_Array_Subtype);
                Copy_Array_Subtype_Attributes (Id, T);
 
             when Decimal_Fixed_Point_Kind =>
-               Set_Ekind                (Id, E_Decimal_Fixed_Point_Subtype);
+               Mutate_Ekind             (Id, E_Decimal_Fixed_Point_Subtype);
                Set_Digits_Value         (Id, Digits_Value       (T));
                Set_Delta_Value          (Id, Delta_Value        (T));
                Set_Scale_Value          (Id, Scale_Value        (T));
@@ -5434,7 +5434,7 @@ package body Sem_Ch3 is
                Set_RM_Size              (Id, RM_Size            (T));
 
             when Enumeration_Kind =>
-               Set_Ekind                (Id, E_Enumeration_Subtype);
+               Mutate_Ekind             (Id, E_Enumeration_Subtype);
                Set_First_Literal        (Id, First_Literal (Base_Type (T)));
                Set_Scalar_Range         (Id, Scalar_Range       (T));
                Set_Is_Character_Type    (Id, Is_Character_Type  (T));
@@ -5443,7 +5443,7 @@ package body Sem_Ch3 is
                Set_RM_Size              (Id, RM_Size            (T));
 
             when Ordinary_Fixed_Point_Kind =>
-               Set_Ekind                (Id, E_Ordinary_Fixed_Point_Subtype);
+               Mutate_Ekind          (Id, E_Ordinary_Fixed_Point_Subtype);
                Set_Scalar_Range         (Id, Scalar_Range       (T));
                Set_Small_Value          (Id, Small_Value        (T));
                Set_Delta_Value          (Id, Delta_Value        (T));
@@ -5452,7 +5452,7 @@ package body Sem_Ch3 is
                Set_RM_Size              (Id, RM_Size            (T));
 
             when Float_Kind =>
-               Set_Ekind                (Id, E_Floating_Point_Subtype);
+               Mutate_Ekind             (Id, E_Floating_Point_Subtype);
                Set_Scalar_Range         (Id, Scalar_Range       (T));
                Set_Digits_Value         (Id, Digits_Value       (T));
                Set_Is_Constrained       (Id, Is_Constrained     (T));
@@ -5461,21 +5461,21 @@ package body Sem_Ch3 is
                --  inherited subsequently when Analyze_Dimensions is called.
 
             when Signed_Integer_Kind =>
-               Set_Ekind                (Id, E_Signed_Integer_Subtype);
+               Mutate_Ekind             (Id, E_Signed_Integer_Subtype);
                Set_Scalar_Range         (Id, Scalar_Range       (T));
                Set_Is_Constrained       (Id, Is_Constrained     (T));
                Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
                Set_RM_Size              (Id, RM_Size            (T));
 
             when Modular_Integer_Kind =>
-               Set_Ekind                (Id, E_Modular_Integer_Subtype);
+               Mutate_Ekind             (Id, E_Modular_Integer_Subtype);
                Set_Scalar_Range         (Id, Scalar_Range       (T));
                Set_Is_Constrained       (Id, Is_Constrained     (T));
                Set_Is_Known_Valid       (Id, Is_Known_Valid     (T));
                Set_RM_Size              (Id, RM_Size            (T));
 
             when Class_Wide_Kind =>
-               Set_Ekind                (Id, E_Class_Wide_Subtype);
+               Mutate_Ekind             (Id, E_Class_Wide_Subtype);
                Set_Class_Wide_Type      (Id, Class_Wide_Type    (T));
                Set_Cloned_Subtype       (Id, T);
                Set_Is_Tagged_Type       (Id, True);
@@ -5492,7 +5492,7 @@ package body Sem_Ch3 is
             when E_Record_Subtype
                | E_Record_Type
             =>
-               Set_Ekind                (Id, E_Record_Subtype);
+               Mutate_Ekind             (Id, E_Record_Subtype);
 
                --  Subtype declarations introduced for formal type parameters
                --  in generic instantiations should inherit the Size value of
@@ -5545,7 +5545,7 @@ package body Sem_Ch3 is
                end if;
 
             when Private_Kind =>
-               Set_Ekind              (Id, Subtype_Kind (Ekind        (T)));
+               Mutate_Ekind           (Id, Subtype_Kind (Ekind        (T)));
                Set_Has_Discriminants  (Id, Has_Discriminants          (T));
                Set_Is_Constrained     (Id, Is_Constrained             (T));
                Set_First_Entity       (Id, First_Entity               (T));
@@ -5610,7 +5610,7 @@ package body Sem_Ch3 is
                end if;
 
             when Access_Kind =>
-               Set_Ekind             (Id, E_Access_Subtype);
+               Mutate_Ekind          (Id, E_Access_Subtype);
                Set_Is_Constrained    (Id, Is_Constrained        (T));
                Set_Is_Access_Constant
                                      (Id, Is_Access_Constant    (T));
@@ -5633,7 +5633,7 @@ package body Sem_Ch3 is
                end if;
 
             when Concurrent_Kind =>
-               Set_Ekind                (Id, Subtype_Kind (Ekind   (T)));
+               Mutate_Ekind             (Id, Subtype_Kind (Ekind   (T)));
                Set_Corresponding_Record_Type (Id,
                                          Corresponding_Record_Type (T));
                Set_First_Entity         (Id, First_Entity          (T));
@@ -5661,7 +5661,7 @@ package body Sem_Ch3 is
                   --  propagate indication. Note that we also have to include
                   --  subtypes for Ada 2012 extended use of incomplete types.
 
-                  Set_Ekind              (Id, E_Incomplete_Subtype);
+                  Mutate_Ekind           (Id, E_Incomplete_Subtype);
                   Set_Is_Tagged_Type     (Id, Is_Tagged_Type (T));
                   Set_Private_Dependents (Id, New_Elmt_List);
 
@@ -6197,7 +6197,7 @@ package body Sem_Ch3 is
 
          --  The constrained array type is a subtype of the unconstrained one
 
-         Set_Ekind              (T, E_Array_Subtype);
+         Mutate_Ekind           (T, E_Array_Subtype);
          Init_Size_Align        (T);
          Set_Etype              (T, Implicit_Base);
          Set_Scope              (T, Current_Scope);
@@ -6233,7 +6233,7 @@ package body Sem_Ch3 is
             pragma Assert (Ekind (T) = E_Void);
          end if;
 
-         Set_Ekind                    (T, E_Array_Type);
+         Mutate_Ekind                 (T, E_Array_Type);
          Init_Size_Align              (T);
          Set_Etype                    (T, T);
          Set_Scope                    (T, Current_Scope);
@@ -6506,7 +6506,7 @@ package body Sem_Ch3 is
          Scope_Stack.Append (Curr_Scope);
       end if;
 
-      Set_Ekind (Anon, E_Anonymous_Access_Protected_Subprogram_Type);
+      Mutate_Ekind (Anon, E_Anonymous_Access_Protected_Subprogram_Type);
       Set_Can_Use_Internal_Rep (Anon, not Always_Compatible_Rep_On_Target);
       return Anon;
    end Replace_Anonymous_Access_To_Protected_Subprogram;
@@ -6679,7 +6679,7 @@ package body Sem_Ch3 is
       if Nkind (S) /= N_Subtype_Indication
         and then Subt /= Base_Type (Subt)
       then
-         Set_Ekind (Derived_Type, E_Access_Subtype);
+         Mutate_Ekind (Derived_Type, E_Access_Subtype);
       end if;
 
       if Ekind (Derived_Type) = E_Access_Subtype then
@@ -6794,7 +6794,7 @@ package body Sem_Ch3 is
          Implicit_Base :=
            Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
 
-         Set_Ekind (Implicit_Base, Ekind (Parent_Base));
+         Mutate_Ekind (Implicit_Base, Ekind (Parent_Base));
          Set_Etype (Implicit_Base, Parent_Base);
 
          Copy_Array_Subtype_Attributes   (Implicit_Base, Parent_Base);
@@ -6808,7 +6808,7 @@ package body Sem_Ch3 is
    begin
       if not Is_Constrained (Parent_Type) then
          if Nkind (Indic) /= N_Subtype_Indication then
-            Set_Ekind (Derived_Type, E_Array_Type);
+            Mutate_Ekind (Derived_Type, E_Array_Type);
 
             Copy_Array_Subtype_Attributes   (Derived_Type, Parent_Type);
             Copy_Array_Base_Type_Attributes (Derived_Type, Parent_Type);
@@ -6835,7 +6835,7 @@ package body Sem_Ch3 is
          if Nkind (Indic) /= N_Subtype_Indication then
             Make_Implicit_Base;
 
-            Set_Ekind                     (Derived_Type, Ekind (Parent_Type));
+            Mutate_Ekind               (Derived_Type, Ekind (Parent_Type));
             Set_Etype                     (Derived_Type, Implicit_Base);
             Copy_Array_Subtype_Attributes (Derived_Type, Parent_Type);
 
@@ -7295,7 +7295,7 @@ package body Sem_Ch3 is
                New_Lit := Make_Defining_Identifier (Loc, Chars (Literal));
             end if;
 
-            Set_Ekind                (New_Lit, E_Enumeration_Literal);
+            Mutate_Ekind             (New_Lit, E_Enumeration_Literal);
             Set_Enumeration_Pos      (New_Lit, Enumeration_Pos (Literal));
             Set_Enumeration_Rep      (New_Lit, Enumeration_Rep (Literal));
             Set_Enumeration_Rep_Expr (New_Lit, Empty);
@@ -7315,7 +7315,7 @@ package body Sem_Ch3 is
          --  may be hidden by a previous explicit function definition (cf.
          --  c83031a).
 
-         Set_Ekind (Derived_Type, E_Enumeration_Subtype);
+         Mutate_Ekind (Derived_Type, E_Enumeration_Subtype);
          Set_Etype (Derived_Type, Implicit_Base);
 
          Type_Decl :=
@@ -7487,7 +7487,7 @@ package body Sem_Ch3 is
         Create_Itype (Ekind (Parent_Base), N, Derived_Type, 'B');
 
       Set_Etype          (Implicit_Base, Parent_Base);
-      Set_Ekind          (Implicit_Base, Ekind          (Parent_Base));
+      Mutate_Ekind       (Implicit_Base, Ekind          (Parent_Base));
       Set_Size_Info      (Implicit_Base,                 Parent_Base);
       Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Parent_Base));
       Set_Parent         (Implicit_Base, Parent (Derived_Type));
@@ -7527,7 +7527,7 @@ package body Sem_Ch3 is
       --  parent type (otherwise Process_Subtype has set the bounds)
 
       if No_Constraint then
-         Set_Ekind (Derived_Type, Subtype_Kind (Ekind (Parent_Type)));
+         Mutate_Ekind (Derived_Type, Subtype_Kind (Ekind (Parent_Type)));
       end if;
 
       --  If we did not have a range constraint, then set the range from the
@@ -7956,7 +7956,7 @@ package body Sem_Ch3 is
                --  prevent spurious errors associated with missing overriding
                --  of abstract primitives (overridden only for Derived_Type).
 
-               Set_Ekind (Full_Der, E_Record_Type);
+               Mutate_Ekind (Full_Der, E_Record_Type);
                Set_Is_Underlying_Record_View (Full_Der);
                Set_Default_SSO (Full_Der);
                Set_No_Reordering (Full_Der, No_Component_Reordering);
@@ -8856,7 +8856,7 @@ package body Sem_Ch3 is
 
       if Private_Extension then
          Type_Def := N;
-         Set_Ekind (Derived_Type, E_Record_Type_With_Private);
+         Mutate_Ekind (Derived_Type, E_Record_Type_With_Private);
          Set_Default_SSO (Derived_Type);
          Set_No_Reordering (Derived_Type, No_Component_Reordering);
 
@@ -8871,7 +8871,7 @@ package body Sem_Ch3 is
          --  For untagged types we preserve the Ekind of the Parent_Base.
 
          if Present (Record_Extension_Part (Type_Def)) then
-            Set_Ekind (Derived_Type, E_Record_Type);
+            Mutate_Ekind (Derived_Type, E_Record_Type);
             Set_Default_SSO (Derived_Type);
             Set_No_Reordering (Derived_Type, No_Component_Reordering);
 
@@ -8885,7 +8885,7 @@ package body Sem_Ch3 is
             end if;
 
          else
-            Set_Ekind (Derived_Type, Ekind (Parent_Base));
+            Mutate_Ekind (Derived_Type, Ekind (Parent_Base));
          end if;
       end if;
 
@@ -9744,7 +9744,7 @@ package body Sem_Ch3 is
 
       Set_Scope                  (Derived_Type, Current_Scope);
       Set_Etype                  (Derived_Type,        Parent_Base);
-      Set_Ekind                  (Derived_Type, Ekind (Parent_Base));
+      Mutate_Ekind               (Derived_Type, Ekind (Parent_Base));
       Propagate_Concurrent_Flags (Derived_Type,        Parent_Base);
 
       Set_Size_Info (Derived_Type,          Parent_Type);
@@ -9963,7 +9963,7 @@ package body Sem_Ch3 is
 
       D_Minal := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
 
-      Set_Ekind     (D_Minal, E_In_Parameter);
+      Mutate_Ekind  (D_Minal, E_In_Parameter);
       Set_Mechanism (D_Minal, Default_Mechanism);
       Set_Etype     (D_Minal, Etype (Discrim));
       Set_Scope     (D_Minal, Current_Scope);
@@ -9982,7 +9982,7 @@ package body Sem_Ch3 is
       then
          CR_Disc := Make_Defining_Identifier (Sloc (Discrim), Chars (Discrim));
 
-         Set_Ekind            (CR_Disc, E_In_Parameter);
+         Mutate_Ekind         (CR_Disc, E_In_Parameter);
          Set_Mechanism        (CR_Disc, Default_Mechanism);
          Set_Etype            (CR_Disc, Etype (Discrim));
          Set_Scope            (CR_Disc, Current_Scope);
@@ -10373,7 +10373,7 @@ package body Sem_Ch3 is
 
    begin
       if Ekind (T) = E_Record_Type then
-         Set_Ekind (Def_Id, E_Record_Subtype);
+         Mutate_Ekind (Def_Id, E_Record_Subtype);
 
          --  Inherit preelaboration flag from base, for types for which it
          --  may have been set: records, private types, protected types.
@@ -10382,15 +10382,15 @@ package body Sem_Ch3 is
            (Def_Id, Known_To_Have_Preelab_Init (T));
 
       elsif Ekind (T) = E_Task_Type then
-         Set_Ekind (Def_Id, E_Task_Subtype);
+         Mutate_Ekind (Def_Id, E_Task_Subtype);
 
       elsif Ekind (T) = E_Protected_Type then
-         Set_Ekind (Def_Id, E_Protected_Subtype);
+         Mutate_Ekind (Def_Id, E_Protected_Subtype);
          Set_Known_To_Have_Preelab_Init
            (Def_Id, Known_To_Have_Preelab_Init (T));
 
       elsif Is_Private_Type (T) then
-         Set_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
+         Mutate_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
          Set_Known_To_Have_Preelab_Init
            (Def_Id, Known_To_Have_Preelab_Init (T));
 
@@ -10399,7 +10399,7 @@ package body Sem_Ch3 is
          Set_Private_Dependents (Def_Id, New_Elmt_List);
 
       elsif Is_Class_Wide_Type (T) then
-         Set_Ekind (Def_Id, E_Class_Wide_Subtype);
+         Mutate_Ekind (Def_Id, E_Class_Wide_Subtype);
 
       else
          --  Incomplete type. Attach subtype to list of dependents, to be
@@ -10412,9 +10412,9 @@ package body Sem_Ch3 is
          --  initialization procedure.
 
          if Ekind (T) = E_Incomplete_Type then
-            Set_Ekind (Def_Id, E_Incomplete_Subtype);
+            Mutate_Ekind (Def_Id, E_Incomplete_Subtype);
          else
-            Set_Ekind (Def_Id, Ekind (T));
+            Mutate_Ekind (Def_Id, Ekind (T));
          end if;
 
          if For_Access and then Within_Init_Proc then
@@ -11533,9 +11533,9 @@ package body Sem_Ch3 is
          end if;
 
          if Ekind (Designated_Type (Anon_Access)) = E_Subprogram_Type then
-            Set_Ekind (Anon_Access, E_Anonymous_Access_Subprogram_Type);
+            Mutate_Ekind (Anon_Access, E_Anonymous_Access_Subprogram_Type);
          else
-            Set_Ekind (Anon_Access, E_Anonymous_Access_Type);
+            Mutate_Ekind (Anon_Access, E_Anonymous_Access_Type);
          end if;
 
          Set_Is_Local_Anonymous_Access (Anon_Access);
@@ -12529,7 +12529,7 @@ package body Sem_Ch3 is
 
       --  Set common attributes for all subtypes: kind, convention, etc.
 
-      Set_Ekind            (Full, Subtype_Kind (Ekind (Full_Base)));
+      Mutate_Ekind         (Full, Subtype_Kind (Ekind (Full_Base)));
       Set_Convention       (Full, Convention (Full_Base));
       Set_Is_First_Subtype (Full, False);
       Set_Scope            (Full, Scope (Priv));
@@ -13085,7 +13085,7 @@ package body Sem_Ch3 is
             Desig_Subtype :=
               Create_Itype
                 (E_Void, Related_Nod, Scope_Id => Scope (Desig_Type));
-            Set_Ekind (Desig_Subtype, E_Record_Subtype);
+            Mutate_Ekind (Desig_Subtype, E_Record_Subtype);
             Def_Id := Entity (Subtype_Mark (S));
 
             --  We indicate that the component has a per-object constraint
@@ -13182,7 +13182,7 @@ package body Sem_Ch3 is
       if No (Def_Id) then
          Def_Id := Create_Itype (E_Access_Subtype, Related_Nod);
       else
-         Set_Ekind (Def_Id, E_Access_Subtype);
+         Mutate_Ekind (Def_Id, E_Access_Subtype);
       end if;
 
       if Constraint_OK then
@@ -13316,7 +13316,7 @@ package body Sem_Ch3 is
          Set_Parent (Def_Id, Related_Nod);
 
       else
-         Set_Ekind (Def_Id, E_Array_Subtype);
+         Mutate_Ekind (Def_Id, E_Array_Subtype);
       end if;
 
       Set_Size_Info      (Def_Id,                (T));
@@ -13879,7 +13879,7 @@ package body Sem_Ch3 is
       Bound_Val   : Ureal;
 
    begin
-      Set_Ekind (Def_Id, E_Decimal_Fixed_Point_Subtype);
+      Mutate_Ekind (Def_Id, E_Decimal_Fixed_Point_Subtype);
 
       if Nkind (C) = N_Range_Constraint then
          Range_Expr := Range_Expression (C);
@@ -13963,7 +13963,7 @@ package body Sem_Ch3 is
       begin
          --  Set a reasonable Ekind for the entity, including incomplete types.
 
-         Set_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
+         Mutate_Ekind (Def_Id, Subtype_Kind (Ekind (T)));
 
          --  Set Etype to the known type, to reduce chances of cascaded errors
 
@@ -14089,7 +14089,7 @@ package body Sem_Ch3 is
       C : constant Node_Id   := Constraint (S);
 
    begin
-      Set_Ekind (Def_Id, E_Enumeration_Subtype);
+      Mutate_Ekind (Def_Id, E_Enumeration_Subtype);
 
       Set_First_Literal     (Def_Id, First_Literal (Base_Type (T)));
 
@@ -14114,7 +14114,7 @@ package body Sem_Ch3 is
       Rais : Node_Id;
 
    begin
-      Set_Ekind (Def_Id, E_Floating_Point_Subtype);
+      Mutate_Ekind (Def_Id, E_Floating_Point_Subtype);
 
       Set_Etype          (Def_Id, Base_Type      (T));
       Set_Size_Info      (Def_Id,                (T));
@@ -14289,13 +14289,13 @@ package body Sem_Ch3 is
       --  Complete construction of the Itype
 
       if Is_Modular_Integer_Type (T) then
-         Set_Ekind (Def_Id, E_Modular_Integer_Subtype);
+         Mutate_Ekind (Def_Id, E_Modular_Integer_Subtype);
 
       elsif Is_Integer_Type (T) then
-         Set_Ekind (Def_Id, E_Signed_Integer_Subtype);
+         Mutate_Ekind (Def_Id, E_Signed_Integer_Subtype);
 
       else
-         Set_Ekind (Def_Id, E_Enumeration_Subtype);
+         Mutate_Ekind (Def_Id, E_Enumeration_Subtype);
          Set_Is_Character_Type (Def_Id, Is_Character_Type (T));
          Set_First_Literal     (Def_Id, First_Literal (T));
       end if;
@@ -14322,9 +14322,9 @@ package body Sem_Ch3 is
       Set_Scalar_Range_For_Subtype (Def_Id, Range_Expression (C), T);
 
       if Is_Modular_Integer_Type (T) then
-         Set_Ekind (Def_Id, E_Modular_Integer_Subtype);
+         Mutate_Ekind (Def_Id, E_Modular_Integer_Subtype);
       else
-         Set_Ekind (Def_Id, E_Signed_Integer_Subtype);
+         Mutate_Ekind (Def_Id, E_Signed_Integer_Subtype);
       end if;
 
       Set_Etype            (Def_Id, Base_Type      (T));
@@ -14344,7 +14344,7 @@ package body Sem_Ch3 is
       Rais : Node_Id;
 
    begin
-      Set_Ekind          (Def_Id, E_Ordinary_Fixed_Point_Subtype);
+      Mutate_Ekind       (Def_Id, E_Ordinary_Fixed_Point_Subtype);
       Set_Etype          (Def_Id, Base_Type      (T));
       Set_Size_Info      (Def_Id,                (T));
       Set_First_Rep_Item (Def_Id, First_Rep_Item (T));
@@ -14521,7 +14521,7 @@ package body Sem_Ch3 is
       --  appropriate choice, since it allowed the attributes to be set
       --  in the first place. This Ekind value will be modified later.
 
-      Set_Ekind (Full, Ekind (Priv));
+      Mutate_Ekind (Full, Ekind (Priv));
 
       --  Also set Etype temporarily to Any_Type, again, in the absence
       --  of errors, it will be properly reset, and if there are errors,
@@ -15143,7 +15143,7 @@ package body Sem_Ch3 is
       --  chain ensures that SPARK-related pragmas are not clobbered when the
       --  decimal fixed point type acts as a full view of a private type.
 
-      Set_Ekind              (T, E_Decimal_Fixed_Point_Subtype);
+      Mutate_Ekind           (T, E_Decimal_Fixed_Point_Subtype);
       Set_Etype              (T, Implicit_Base);
       Set_Size_Info          (T, Implicit_Base);
       Inherit_Rep_Item_Chain (T, Implicit_Base);
@@ -15535,7 +15535,7 @@ package body Sem_Ch3 is
 
    begin
       New_Subp := New_Entity (Nkind (Parent_Subp), Sloc (Derived_Type));
-      Set_Ekind (New_Subp, Ekind (Parent_Subp));
+      Mutate_Ekind (New_Subp, Ekind (Parent_Subp));
 
       --  Check whether the inherited subprogram is a private operation that
       --  should be inherited but not yet made visible. Such subprograms can
@@ -16597,7 +16597,7 @@ package body Sem_Ch3 is
 
       Conditional_Delay (Derived_Type, Parent_Type);
 
-      Set_Ekind (Derived_Type, E_Enumeration_Subtype);
+      Mutate_Ekind (Derived_Type, E_Enumeration_Subtype);
       Set_Etype (Derived_Type, Implicit_Base);
       Set_Size_Info         (Derived_Type, Parent_Type);
 
@@ -16846,7 +16846,7 @@ package body Sem_Ch3 is
             Error_Msg_N ("type cannot be used in its own definition", Indic);
          end if;
 
-         Set_Ekind        (T, Ekind (Parent_Type));
+         Mutate_Ekind     (T, Ekind (Parent_Type));
          Set_Etype        (T, Any_Type);
          Set_Scalar_Range (T, Scalar_Range (Any_Type));
 
@@ -17187,7 +17187,7 @@ package body Sem_Ch3 is
       R_Node := New_Node (N_Range, Sloc (Def));
       Set_Low_Bound  (R_Node, B_Node);
 
-      Set_Ekind (T, E_Enumeration_Type);
+      Mutate_Ekind (T, E_Enumeration_Type);
       Set_First_Literal (T, L);
       Set_Etype (T, T);
       Set_Is_Constrained (T);
@@ -17201,7 +17201,7 @@ package body Sem_Ch3 is
 
       while Present (L) loop
          if Ekind (L) /= E_Enumeration_Literal then
-            Set_Ekind (L, E_Enumeration_Literal);
+            Mutate_Ekind (L, E_Enumeration_Literal);
             Set_Enumeration_Pos (L, Ev);
             Set_Enumeration_Rep (L, Ev);
             Set_Is_Known_Valid  (L, True);
@@ -17578,7 +17578,7 @@ package body Sem_Ch3 is
             if Is_Tagged_Type (Prev)
               and then Present (Class_Wide_Type (Prev))
             then
-               Set_Ekind (Id, Ekind (Prev));         --  will be reset later
+               Mutate_Ekind (Id, Ekind (Prev));         --  will be reset later
                Set_Class_Wide_Type (Id, Class_Wide_Type (Prev));
 
                --  Type of the class-wide type is the current Id. Previously
@@ -17872,7 +17872,7 @@ package body Sem_Ch3 is
                    Subtype_Indication  => Relocate_Node (Obj_Def));
             begin
                Set_Etype  (T, Base_T);
-               Set_Ekind  (T, Subtype_Kind (Ekind (Base_T)));
+               Mutate_Ekind  (T, Subtype_Kind (Ekind (Base_T)));
                Set_Parent (T, Obj_Def);
 
                if Ekind (T) = E_Array_Subtype then
@@ -18174,7 +18174,7 @@ package body Sem_Ch3 is
       Set_Digits_Value       (Implicit_Base, Digits_Value   (Base_Typ));
       Set_Float_Rep          (Implicit_Base, Float_Rep      (Base_Typ));
 
-      Set_Ekind              (T, E_Floating_Point_Subtype);
+      Mutate_Ekind           (T, E_Floating_Point_Subtype);
       Set_Etype              (T,          Implicit_Base);
       Set_Size_Info          (T,          Implicit_Base);
       Set_RM_Size            (T, RM_Size (Implicit_Base));
@@ -18661,7 +18661,7 @@ package body Sem_Ch3 is
          if Is_Tagged and then Ekind (New_C) = E_Component
            and then Nkind (N) /= N_Private_Extension_Declaration
          then
-            Set_Ekind (New_C, E_Void);
+            Mutate_Ekind (New_C, E_Void);
          end if;
 
          if Plain_Discrim then
@@ -19230,7 +19230,7 @@ package body Sem_Ch3 is
          Reinit_Field_To_Zero (CW_Type, SPARK_Aux_Pragma_Inherited);
       end if;
 
-      Set_Ekind                       (CW_Type, E_Class_Wide_Type);
+      Mutate_Ekind                    (CW_Type, E_Class_Wide_Type);
       Set_Is_Tagged_Type              (CW_Type, True);
       Set_Direct_Primitive_Operations (CW_Type, New_Elmt_List);
       Set_Is_Abstract_Type            (CW_Type, False);
@@ -19508,13 +19508,13 @@ package body Sem_Ch3 is
          Set_Etype (Def_Id, Base_Type (T));
 
          if Is_Signed_Integer_Type (T) then
-            Set_Ekind (Def_Id, E_Signed_Integer_Subtype);
+            Mutate_Ekind (Def_Id, E_Signed_Integer_Subtype);
 
          elsif Is_Modular_Integer_Type (T) then
-            Set_Ekind (Def_Id, E_Modular_Integer_Subtype);
+            Mutate_Ekind (Def_Id, E_Modular_Integer_Subtype);
 
          else
-            Set_Ekind             (Def_Id, E_Enumeration_Subtype);
+            Mutate_Ekind          (Def_Id, E_Enumeration_Subtype);
             Set_Is_Character_Type (Def_Id, Is_Character_Type (T));
             Set_First_Literal     (Def_Id, First_Literal (T));
          end if;
@@ -19612,7 +19612,7 @@ package body Sem_Ch3 is
 
       Analyze_And_Resolve (Mod_Expr, Any_Integer);
       Set_Etype (T, T);
-      Set_Ekind (T, E_Modular_Integer_Type);
+      Mutate_Ekind (T, E_Modular_Integer_Type);
       Init_Alignment (T);
       Set_Is_Constrained (T);
 
@@ -19726,7 +19726,7 @@ package body Sem_Ch3 is
    begin
       Op := Make_Defining_Operator_Symbol (Loc, Name_Op_Concat);
 
-      Set_Ekind                   (Op, E_Operator);
+      Mutate_Ekind                (Op, E_Operator);
       Set_Scope                   (Op, Current_Scope);
       Set_Etype                   (Op, Typ);
       Set_Homonym                 (Op, Get_Name_Entity_Id (Name_Op_Concat));
@@ -20012,7 +20012,7 @@ package body Sem_Ch3 is
       --  chain ensures that SPARK-related pragmas are not clobbered when the
       --  ordinary fixed point type acts as a full view of a private type.
 
-      Set_Ekind              (T, E_Ordinary_Fixed_Point_Subtype);
+      Mutate_Ekind           (T, E_Ordinary_Fixed_Point_Subtype);
       Set_Etype              (T, Implicit_Base);
       Init_Size_Align        (T);
       Inherit_Rep_Item_Chain (T, Implicit_Base);
@@ -20415,7 +20415,7 @@ package body Sem_Ch3 is
             Reinit_Field_To_Zero (Id, Discriminal_Link);
          end if;
 
-         Set_Ekind (Id, E_Discriminant);
+         Mutate_Ekind (Id, E_Discriminant);
          Init_Component_Location (Id);
          Init_Esize (Id);
          Set_Discriminant_Number (Id, Discr_Number);
@@ -21302,7 +21302,7 @@ package body Sem_Ch3 is
             Reinit_Field_To_Zero
               (Priv_Dep, Private_Dependents,
                Old_Ekind => E_Incomplete_Subtype);
-            Set_Ekind (Priv_Dep, Subtype_Kind (Ekind (Full_T)));
+            Mutate_Ekind (Priv_Dep, Subtype_Kind (Ekind (Full_T)));
             Set_Etype (Priv_Dep, Full_T);
             Set_Analyzed (Parent (Priv_Dep), False);
 
@@ -21877,7 +21877,7 @@ package body Sem_Ch3 is
             --  Set Ekind of orphan itype, to prevent cascaded errors
 
             if Present (Def_Id) then
-               Set_Ekind (Def_Id, Ekind (Any_Type));
+               Mutate_Ekind (Def_Id, Ekind (Any_Type));
             end if;
 
             --  Make recursive call, having got rid of the bogus constraint
@@ -22068,7 +22068,7 @@ package body Sem_Ch3 is
       --  These flags must be initialized before calling Process_Discriminants
       --  because this routine makes use of them.
 
-      Set_Ekind             (T, E_Record_Type);
+      Mutate_Ekind          (T, E_Record_Type);
       Set_Etype             (T, T);
       Init_Size_Align       (T);
       Set_Interfaces        (T, No_Elist);
@@ -22172,7 +22172,7 @@ package body Sem_Ch3 is
             Tag_Comp := Make_Defining_Identifier (Sloc (Def), Name_uTag);
             Enter_Name (Tag_Comp);
 
-            Set_Ekind                     (Tag_Comp, E_Component);
+            Mutate_Ekind                  (Tag_Comp, E_Component);
             Set_Is_Tag                    (Tag_Comp);
             Set_Is_Aliased                (Tag_Comp);
             Set_Is_Independent            (Tag_Comp);
@@ -22282,7 +22282,7 @@ package body Sem_Ch3 is
          if Ekind (Component) = E_Void
            and then not Is_Itype (Component)
          then
-            Set_Ekind (Component, E_Component);
+            Mutate_Ekind (Component, E_Component);
             Init_Component_Location (Component);
          end if;
 
@@ -22503,9 +22503,9 @@ package body Sem_Ch3 is
       --  Reset the kind of the subtype during analysis of the range, to
       --  catch possible premature use in the bounds themselves.
 
-      Set_Ekind (Def_Id, E_Void);
+      Mutate_Ekind (Def_Id, E_Void);
       Process_Range_Expr_In_Decl (R, Subt, Subtyp => Def_Id);
-      Set_Ekind (Def_Id, Kind);
+      Mutate_Ekind (Def_Id, Kind);
    end Set_Scalar_Range_For_Subtype;
 
    --------------------------------------------------------
@@ -22681,7 +22681,7 @@ package body Sem_Ch3 is
       Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Base_Typ));
       Set_Scalar_Range   (Implicit_Base, Scalar_Range   (Base_Typ));
 
-      Set_Ekind              (T, E_Signed_Integer_Subtype);
+      Mutate_Ekind        (T, E_Signed_Integer_Subtype);
       Set_Etype              (T, Implicit_Base);
       Set_Size_Info          (T, Implicit_Base);
       Inherit_Rep_Item_Chain (T, Implicit_Base);
index 9b34694..1f55af6 100644 (file)
@@ -1323,7 +1323,7 @@ package body Sem_Ch5 is
                   Reinit_Field_To_Zero (Ent, Enclosing_Scope);
                end if;
 
-               Set_Ekind (Ent, E_Block);
+               Mutate_Ekind (Ent, E_Block);
                Generate_Reference (Ent, N, ' ');
                Generate_Definition (Ent);
 
@@ -1970,7 +1970,7 @@ package body Sem_Ch5 is
       Id : constant Node_Id := Defining_Identifier (N);
    begin
       Enter_Name          (Id);
-      Set_Ekind           (Id, E_Label);
+      Mutate_Ekind        (Id, E_Label);
       Set_Etype           (Id, Standard_Void_Type);
       Set_Enclosing_Scope (Id, Current_Scope);
    end Analyze_Implicit_Label_Declaration;
@@ -2164,7 +2164,7 @@ package body Sem_Ch5 is
       --  Set the kind of the loop variable, which is not visible within the
       --  iterator name.
 
-      Set_Ekind (Def_Id, E_Variable);
+      Mutate_Ekind (Def_Id, E_Variable);
 
       --  Provide a link between the iterator variable and the container, for
       --  subsequent use in cross-reference and modification information.
@@ -2433,7 +2433,7 @@ package body Sem_Ch5 is
 
             --  Prevent cascaded errors
 
-            Set_Ekind (Def_Id, E_Loop_Parameter);
+            Mutate_Ekind (Def_Id, E_Loop_Parameter);
             Set_Etype (Def_Id, Etype (First_Index (Typ)));
          end if;
 
@@ -2445,7 +2445,7 @@ package body Sem_Ch5 is
       --  Iteration over a container
 
       else
-         Set_Ekind (Def_Id, E_Loop_Parameter);
+         Mutate_Ekind (Def_Id, E_Loop_Parameter);
          Error_Msg_Ada_2012_Feature ("container iterator", Sloc (N));
 
          --  OF present
@@ -2498,7 +2498,7 @@ package body Sem_Ch5 is
                      --  element is a variable and is modifiable in the loop.
 
                      if Has_Aspect (Typ, Aspect_Variable_Indexing) then
-                        Set_Ekind (Def_Id, E_Variable);
+                        Mutate_Ekind (Def_Id, E_Variable);
                      end if;
 
                      --  If the container is a constant, iterating over it
@@ -2669,7 +2669,7 @@ package body Sem_Ch5 is
 
    procedure Analyze_Label_Entity (E : Entity_Id) is
    begin
-      Set_Ekind           (E, E_Label);
+      Mutate_Ekind        (E, E_Label);
       Set_Etype           (E, Standard_Void_Type);
       Set_Enclosing_Scope (E, Current_Scope);
       Set_Reachable       (E, True);
@@ -3055,7 +3055,7 @@ package body Sem_Ch5 is
                --  subsequent analysis of the condition in a quantified
                --  expression.
 
-               Set_Ekind (Id, E_Loop_Parameter);
+               Mutate_Ekind (Id, E_Loop_Parameter);
                return;
             end;
 
@@ -3118,7 +3118,7 @@ package body Sem_Ch5 is
          Make_Index (DS, N);
       end if;
 
-      Set_Ekind (Id, E_Loop_Parameter);
+      Mutate_Ekind (Id, E_Loop_Parameter);
 
       --  A quantified expression which appears in a pre- or post-condition may
       --  be analyzed multiple times. The analysis of the range creates several
@@ -3746,7 +3746,7 @@ package body Sem_Ch5 is
               and then Ekind (Homonym (Ent)) = E_Label
             then
                Set_Entity (Id, Ent);
-               Set_Ekind (Ent, E_Loop);
+               Mutate_Ekind (Ent, E_Loop);
             end if;
 
          else
@@ -3761,7 +3761,7 @@ package body Sem_Ch5 is
 
             if Ekind (Ent) = E_Label then
                Reinit_Field_To_Zero (Ent, Enclosing_Scope);
-               Set_Ekind (Ent, E_Loop);
+               Mutate_Ekind (Ent, E_Loop);
 
                if Nkind (Parent (Ent)) = N_Implicit_Label_Declaration then
                   Set_Label_Construct (Parent (Ent), N);
@@ -3925,7 +3925,7 @@ package body Sem_Ch5 is
                if not Of_Present (I_Spec)
                  or else not Is_Variable (Name (I_Spec))
                then
-                  Set_Ekind (Id, E_Loop_Parameter);
+                  Mutate_Ekind (Id, E_Loop_Parameter);
                end if;
             end;
 
index c2b5c4d..cbba916 100644 (file)
@@ -1796,7 +1796,7 @@ package body Sem_Ch6 is
       end if;
 
       if Nkind (N) = N_Subprogram_Body_Stub then
-         Set_Ekind (Defining_Entity (Specification (N)), Kind);
+         Mutate_Ekind (Defining_Entity (Specification (N)), Kind);
       else
          Set_Corresponding_Spec (N, Gen_Id);
       end if;
@@ -1847,13 +1847,13 @@ package body Sem_Ch6 is
 
          --  Visible generic entity is callable within its own body
 
-         Set_Ekind          (Gen_Id,  Ekind (Body_Id));
+         Mutate_Ekind       (Gen_Id,  Ekind (Body_Id));
          Reinit_Field_To_Zero (Body_Id, Has_Out_Or_In_Out_Parameter,
            Old_Ekind =>
              (E_Function | E_Procedure |
                 E_Generic_Function | E_Generic_Procedure => True,
               others => False));
-         Set_Ekind          (Body_Id, E_Subprogram_Body);
+         Mutate_Ekind       (Body_Id, E_Subprogram_Body);
          Set_Convention     (Body_Id, Convention (Gen_Id));
          Set_Is_Obsolescent (Body_Id, Is_Obsolescent (Gen_Id));
          Set_Scope          (Body_Id, Scope (Gen_Id));
@@ -1864,8 +1864,8 @@ package body Sem_Ch6 is
 
             --  No body to analyze, so restore state of generic unit
 
-            Set_Ekind (Gen_Id, Kind);
-            Set_Ekind (Body_Id, Kind);
+            Mutate_Ekind (Gen_Id, Kind);
+            Mutate_Ekind (Body_Id, Kind);
 
             if Present (First_Ent) then
                Set_First_Entity (Gen_Id, First_Ent);
@@ -1931,7 +1931,7 @@ package body Sem_Ch6 is
 
       Reinit_Field_To_Zero (Gen_Id, Has_Nested_Subprogram,
         Old_Ekind => (E_Function | E_Procedure => True, others => False));
-      Set_Ekind (Gen_Id, Kind);
+      Mutate_Ekind (Gen_Id, Kind);
       Generate_Reference (Gen_Id, Body_Id, 'b', Set_Ref => False);
 
       if Style_Check then
@@ -2026,7 +2026,7 @@ package body Sem_Ch6 is
 
       if Present (Prev) and then Is_Generic_Subprogram (Prev) then
          Insert_Before (N, Null_Body);
-         Set_Ekind (Defining_Entity (N), Ekind (Prev));
+         Mutate_Ekind (Defining_Entity (N), Ekind (Prev));
 
          Rewrite (N, Make_Null_Statement (Loc));
          Analyze_Generic_Subprogram_Body (Null_Body, Prev);
@@ -4622,7 +4622,7 @@ package body Sem_Ch6 is
             Reinit_Field_To_Zero (Body_Id, Receiving_Entry);
          end if;
 
-         Set_Ekind (Body_Id, E_Subprogram_Body);
+         Mutate_Ekind (Body_Id, E_Subprogram_Body);
 
          if Nkind (N) = N_Subprogram_Body_Stub then
             Set_Corresponding_Spec_Of_Stub (N, Spec_Id);
@@ -5787,10 +5787,10 @@ package body Sem_Ch6 is
       end if;
 
       if Nkind (N) = N_Function_Specification then
-         Set_Ekind (Designator, E_Function);
+         Mutate_Ekind (Designator, E_Function);
          Set_Mechanism (Designator, Default_Mechanism);
       else
-         Set_Ekind (Designator, E_Procedure);
+         Mutate_Ekind (Designator, E_Procedure);
          Set_Etype (Designator, Standard_Void_Type);
       end if;
 
@@ -8796,7 +8796,7 @@ package body Sem_Ch6 is
             return Empty;
          end if;
 
-         Set_Ekind           (EF, E_In_Parameter);
+         Mutate_Ekind        (EF, E_In_Parameter);
          Set_Actual_Subtype  (EF, Typ);
          Set_Etype           (EF, Typ);
          Set_Scope           (EF, Scope);
@@ -12984,30 +12984,30 @@ package body Sem_Ch6 is
                end if;
 
                if In_Present (Spec) then
-                  Set_Ekind (Formal_Id, E_In_Out_Parameter);
+                  Mutate_Ekind (Formal_Id, E_In_Out_Parameter);
                else
-                  Set_Ekind (Formal_Id, E_Out_Parameter);
+                  Mutate_Ekind (Formal_Id, E_Out_Parameter);
                end if;
 
             --  But not in earlier versions of Ada
 
             else
                Error_Msg_N ("functions can only have IN parameters", Spec);
-               Set_Ekind (Formal_Id, E_In_Parameter);
+               Mutate_Ekind (Formal_Id, E_In_Parameter);
             end if;
 
          elsif In_Present (Spec) then
-            Set_Ekind (Formal_Id, E_In_Out_Parameter);
+            Mutate_Ekind (Formal_Id, E_In_Out_Parameter);
 
          else
-            Set_Ekind               (Formal_Id, E_Out_Parameter);
+            Mutate_Ekind            (Formal_Id, E_Out_Parameter);
             Set_Never_Set_In_Source (Formal_Id, True);
             Set_Is_True_Constant    (Formal_Id, False);
             Set_Current_Value       (Formal_Id, Empty);
          end if;
 
       else
-         Set_Ekind (Formal_Id, E_In_Parameter);
+         Mutate_Ekind (Formal_Id, E_In_Parameter);
       end if;
 
       --  Set Is_Known_Non_Null for access parameters since the language
index 2f65ff2..b71a26c 100644 (file)
@@ -843,7 +843,7 @@ package body Sem_Ch7 is
          --  unannotated body will be used in all instantiations.
 
          Body_Id := Defining_Entity (N);
-         Set_Ekind (Body_Id, E_Package_Body);
+         Mutate_Ekind (Body_Id, E_Package_Body);
          Set_Scope (Body_Id, Scope (Spec_Id));
          Set_Is_Obsolescent (Body_Id, Is_Obsolescent (Spec_Id));
          Set_Body_Entity (Spec_Id, Body_Id);
@@ -875,7 +875,7 @@ package body Sem_Ch7 is
       --  current node otherwise. Note that N was rewritten above, so we must
       --  be sure to get the latest Body_Id value.
 
-      Set_Ekind (Body_Id, E_Package_Body);
+      Mutate_Ekind (Body_Id, E_Package_Body);
       Set_Body_Entity (Spec_Id, Body_Id);
       Set_Spec_Entity (Body_Id, Spec_Id);
 
@@ -1161,7 +1161,7 @@ package body Sem_Ch7 is
 
       Generate_Definition (Id);
       Enter_Name (Id);
-      Set_Ekind  (Id, E_Package);
+      Mutate_Ekind  (Id, E_Package);
       Set_Etype  (Id, Standard_Void_Type);
 
       --  Set SPARK_Mode from context
@@ -2558,9 +2558,9 @@ package body Sem_Ch7 is
       end if;
 
       if Limited_Present (Def) then
-         Set_Ekind (Id, E_Limited_Private_Type);
+         Mutate_Ekind (Id, E_Limited_Private_Type);
       else
-         Set_Ekind (Id, E_Private_Type);
+         Mutate_Ekind (Id, E_Private_Type);
       end if;
 
       Set_Etype              (Id, Id);
@@ -2592,7 +2592,7 @@ package body Sem_Ch7 is
       Set_Private_Dependents (Id, New_Elmt_List);
 
       if Tagged_Present (Def) then
-         Set_Ekind                       (Id, E_Record_Type_With_Private);
+         Mutate_Ekind                    (Id, E_Record_Type_With_Private);
          Set_Direct_Primitive_Operations (Id, New_Elmt_List);
          Set_Is_Abstract_Type            (Id, Abstract_Present (Def));
          Set_Is_Limited_Record           (Id, Limited_Present (Def));
index b88a36a..127896e 100644 (file)
@@ -572,7 +572,7 @@ package body Sem_Ch8 is
       Enter_Name (Id);
       Analyze (Nam);
 
-      Set_Ekind   (Id, E_Exception);
+      Mutate_Ekind   (Id, E_Exception);
       Set_Etype   (Id, Standard_Exception_Type);
       Set_Is_Pure (Id, Is_Pure (Current_Scope));
 
@@ -701,7 +701,7 @@ package body Sem_Ch8 is
       end if;
 
       Enter_Name (New_P);
-      Set_Ekind (New_P, K);
+      Mutate_Ekind (New_P, K);
 
       if Etype (Old_P) = Any_Type then
          null;
@@ -984,7 +984,7 @@ package body Sem_Ch8 is
                   Error_Msg_N
                     ("object name or value expected in renaming", Nam);
 
-                  Set_Ekind (Id, E_Variable);
+                  Mutate_Ekind (Id, E_Variable);
                   Set_Etype (Id, Any_Type);
 
                   return;
@@ -1032,7 +1032,7 @@ package body Sem_Ch8 is
                      Error_Msg_N
                        ("object name or value expected in renaming", Nam);
 
-                     Set_Ekind (Id, E_Variable);
+                     Mutate_Ekind (Id, E_Variable);
                      Set_Etype (Id, Any_Type);
 
                      return;
@@ -1145,7 +1145,7 @@ package body Sem_Ch8 is
            and then Comes_From_Source (N)
          then
             Set_Etype (Id, T);
-            Set_Ekind (Id, E_Constant);
+            Mutate_Ekind (Id, E_Constant);
             Rewrite (N,
               Make_Object_Declaration (Loc,
                 Defining_Identifier => Id,
@@ -1458,7 +1458,7 @@ package body Sem_Ch8 is
       --  want to change it to a variable.
 
       if Ekind (Id) /= E_Constant then
-         Set_Ekind (Id, E_Variable);
+         Mutate_Ekind (Id, E_Variable);
       end if;
 
       Init_Object_Size_Align (Id);
@@ -1536,7 +1536,7 @@ package body Sem_Ch8 is
       Set_Etype (Id, T2);
 
       if not Is_Variable (Nam) then
-         Set_Ekind               (Id, E_Constant);
+         Mutate_Ekind            (Id, E_Constant);
          Set_Never_Set_In_Source (Id, True);
          Set_Is_True_Constant    (Id, True);
       end if;
@@ -1632,7 +1632,7 @@ package body Sem_Ch8 is
 
          --  Set basic attributes to minimize cascaded errors
 
-         Set_Ekind (New_P, E_Package);
+         Mutate_Ekind (New_P, E_Package);
          Set_Etype (New_P, Standard_Void_Type);
 
       elsif Present (Renamed_Entity (Old_P))
@@ -1647,7 +1647,7 @@ package body Sem_Ch8 is
 
          --  Set basic attributes to minimize cascaded errors
 
-         Set_Ekind (New_P, E_Package);
+         Mutate_Ekind (New_P, E_Package);
          Set_Etype (New_P, Standard_Void_Type);
 
       --  Here for OK package renaming
@@ -1657,7 +1657,7 @@ package body Sem_Ch8 is
          --  entity. The simplest implementation is to have both packages share
          --  the entity list.
 
-         Set_Ekind (New_P, E_Package);
+         Mutate_Ekind (New_P, E_Package);
          Set_Etype (New_P, Standard_Void_Type);
 
          if Present (Renamed_Object (Old_P)) then
@@ -3281,7 +3281,7 @@ package body Sem_Ch8 is
          Reinit_Field_To_Zero (New_S, Has_Out_Or_In_Out_Parameter);
          Reinit_Field_To_Zero (New_S, Needs_No_Actuals,
            Old_Ekind => (E_Function | E_Procedure => True, others => False));
-         Set_Ekind (New_S, E_Subprogram_Body);
+         Mutate_Ekind (New_S, E_Subprogram_Body);
          New_S := Rename_Spec;
          Set_Has_Completion (Rename_Spec, False);
 
index c8962a9..dd5f6e1 100644 (file)
@@ -1232,9 +1232,9 @@ package body Sem_Ch9 is
       Analyze (Formals);
 
       if Present (Entry_Index_Specification (Formals)) then
-         Set_Ekind (Id, E_Entry_Family);
+         Mutate_Ekind (Id, E_Entry_Family);
       else
-         Set_Ekind (Id, E_Entry);
+         Mutate_Ekind (Id, E_Entry);
       end if;
 
       Set_Etype          (Id, Standard_Void_Type);
@@ -1551,13 +1551,13 @@ package body Sem_Ch9 is
       --  Case of no discrete subtype definition
 
       if No (D_Sdef) then
-         Set_Ekind (Def_Id, E_Entry);
+         Mutate_Ekind (Def_Id, E_Entry);
 
       --  Processing for discrete subtype definition present
 
       else
          Enter_Name (Def_Id);
-         Set_Ekind (Def_Id, E_Entry_Family);
+         Mutate_Ekind (Def_Id, E_Entry_Family);
          Analyze (D_Sdef);
          Make_Index (D_Sdef, N, Def_Id);
 
@@ -1722,11 +1722,11 @@ package body Sem_Ch9 is
          Make_Index (Def, N);
       end if;
 
-      Set_Ekind (Loop_Id, E_Loop);
+      Mutate_Ekind (Loop_Id, E_Loop);
       Set_Scope (Loop_Id, Current_Scope);
       Push_Scope (Loop_Id);
       Enter_Name (Iden);
-      Set_Ekind (Iden, E_Entry_Index_Parameter);
+      Mutate_Ekind (Iden, E_Entry_Index_Parameter);
       Set_Etype (Iden, Etype (Def));
    end Analyze_Entry_Index_Specification;
 
@@ -1808,7 +1808,7 @@ package body Sem_Ch9 is
       Freeze_Previous_Contracts (N);
 
       Tasking_Used := True;
-      Set_Ekind (Body_Id, E_Protected_Body);
+      Mutate_Ekind (Body_Id, E_Protected_Body);
       Set_Etype (Body_Id, Standard_Void_Type);
       Spec_Id := Find_Concurrent_Spec (Body_Id);
 
@@ -2024,7 +2024,7 @@ package body Sem_Ch9 is
          Set_Completion_Referenced (T);
       end if;
 
-      Set_Ekind              (T, E_Protected_Type);
+      Mutate_Ekind           (T, E_Protected_Type);
       Set_Is_First_Subtype   (T);
       Init_Size_Align        (T);
       Set_Etype              (T, T);
@@ -2138,7 +2138,7 @@ package body Sem_Ch9 is
       E := First_Entity (Current_Scope);
       while Present (E) loop
          if Ekind (E) = E_Void then
-            Set_Ekind (E, E_Component);
+            Mutate_Ekind (E, E_Component);
             Init_Component_Location (E);
          end if;
 
@@ -2775,12 +2775,12 @@ package body Sem_Ch9 is
       --  its own body.
 
       Enter_Name (Typ);
-      Set_Ekind            (Typ, E_Protected_Type);
+      Mutate_Ekind         (Typ, E_Protected_Type);
       Set_Etype            (Typ, Typ);
       Set_Anonymous_Object (Typ, Obj_Id);
 
       Enter_Name (Obj_Id);
-      Set_Ekind                  (Obj_Id, E_Variable);
+      Mutate_Ekind               (Obj_Id, E_Variable);
       Set_Etype                  (Obj_Id, Typ);
       Set_SPARK_Pragma           (Obj_Id, SPARK_Mode_Pragma);
       Set_SPARK_Pragma_Inherited (Obj_Id);
@@ -2861,12 +2861,12 @@ package body Sem_Ch9 is
       --  in its own body.
 
       Enter_Name (Typ);
-      Set_Ekind            (Typ, E_Task_Type);
+      Mutate_Ekind         (Typ, E_Task_Type);
       Set_Etype            (Typ, Typ);
       Set_Anonymous_Object (Typ, Obj_Id);
 
       Enter_Name (Obj_Id);
-      Set_Ekind                  (Obj_Id, E_Variable);
+      Mutate_Ekind               (Obj_Id, E_Variable);
       Set_Etype                  (Obj_Id, Typ);
       Set_SPARK_Pragma           (Obj_Id, SPARK_Mode_Pragma);
       Set_SPARK_Pragma_Inherited (Obj_Id);
@@ -2922,7 +2922,7 @@ package body Sem_Ch9 is
 
       Tasking_Used := True;
       Set_Scope (Body_Id, Current_Scope);
-      Set_Ekind (Body_Id, E_Task_Body);
+      Mutate_Ekind (Body_Id, E_Task_Body);
       Set_Etype (Body_Id, Standard_Void_Type);
       Spec_Id := Find_Concurrent_Spec (Body_Id);
 
@@ -3139,12 +3139,12 @@ package body Sem_Ch9 is
             Set_Completion_Referenced (T);
 
          else
-            Set_Ekind (T, E_Task_Type);
+            Mutate_Ekind (T, E_Task_Type);
             Set_Corresponding_Record_Type (T, Empty);
          end if;
       end if;
 
-      Set_Ekind              (T, E_Task_Type);
+      Mutate_Ekind           (T, E_Task_Type);
       Set_Is_First_Subtype   (T, True);
       Set_Has_Task           (T, True);
       Init_Size_Align        (T);
index 15767cf..ff76c75 100644 (file)
@@ -660,7 +660,7 @@ package body Sem_Dist is
       --  Corresponding_Remote_Type attribute, whose presence indicates that
       --  this is the record type used to implement a RAS.
 
-      Set_Ekind (Fat_Type, E_Record_Type);
+      Mutate_Ekind (Fat_Type, E_Record_Type);
       Set_Corresponding_Remote_Type (Fat_Type, User_Type);
 
       Insert_After_And_Analyze (Subpkg_Body, Fat_Type_Decl);
index ac99e1d..2142983 100644 (file)
@@ -11887,7 +11887,7 @@ package body Sem_Elab is
          --  Partially decorate the elaboration procedure because it will not
          --  be insertred into the tree and analyzed.
 
-         Set_Ekind (Proc_Id, E_Procedure);
+         Mutate_Ekind (Proc_Id, E_Procedure);
          Set_Etype (Proc_Id, Standard_Void_Type);
          Set_Scope (Proc_Id, Unique_Entity (Main_Unit_Entity));
 
@@ -12012,7 +12012,7 @@ package body Sem_Elab is
          --  it will not be inserted into the tree and analyzed.
 
          Task_Obj := Make_Temporary (Loc, 'T');
-         Set_Ekind (Task_Obj, E_Variable);
+         Mutate_Ekind (Task_Obj, E_Variable);
          Set_Etype (Task_Obj, Task_Typ);
 
          --  Associate the dummy task object with the activation call
index 4eb2732..5b1173c 100644 (file)
@@ -11978,7 +11978,7 @@ package body Sem_Prag is
 
                   Set_Comes_From_Source   (State_Id, not Is_Null);
                   Set_Parent              (State_Id, State);
-                  Set_Ekind               (State_Id, E_Abstract_State);
+                  Mutate_Ekind            (State_Id, E_Abstract_State);
                   Set_Etype               (State_Id, Standard_Void_Type);
                   Set_Encapsulating_State (State_Id, Empty);
 
index 5c1368e..3b5775e 100644 (file)
@@ -8553,7 +8553,7 @@ package body Sem_Util is
       --  will be detected. Any_Type insures that no cascaded errors will occur
 
       else
-         Set_Ekind (Def_Id, E_Void);
+         Mutate_Ekind (Def_Id, E_Void);
          Set_Etype (Def_Id, Any_Type);
       end if;
 
@@ -24441,7 +24441,7 @@ package body Sem_Util is
                 (Chars (Related_Id), Suffix, Suffix_Index, Prefix));
 
    begin
-      Set_Ekind          (N, Kind);
+      Mutate_Ekind       (N, Kind);
       Set_Is_Internal    (N, True);
       Append_Entity      (N, Scope_Id);
       Set_Public_Status  (N);
@@ -24466,7 +24466,7 @@ package body Sem_Util is
       N : constant Entity_Id := Make_Temporary (Sloc_Value, Id_Char);
 
    begin
-      Set_Ekind       (N, Kind);
+      Mutate_Ekind    (N, Kind);
       Set_Is_Internal (N, True);
       Append_Entity   (N, Scope_Id);
 
@@ -31242,9 +31242,9 @@ package body Sem_Util is
                       (Loc, Access_Type_Id,
                        Type_Definition => Access_Type_Def);
             begin
-               Set_Ekind (Temp_Id, E_Variable);
+               Mutate_Ekind (Temp_Id, E_Variable);
                Set_Etype (Temp_Id, Access_Type_Id);
-               Set_Ekind (Access_Type_Id, E_Access_Type);
+               Mutate_Ekind (Access_Type_Id, E_Access_Type);
 
                if Append_Decls_In_Reverse_Order then
                   Append_Item (Temp_Decl, Is_Eval_Stmt => False);
index 6a155be..9101abb 100644 (file)
@@ -23,7 +23,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This package defines the structure of the abstract syntax tree. The Tree
+--  This package documents the structure of the abstract syntax tree. The Atree
 --  package provides a basic tree structure. Sinfo describes how this structure
 --  is used to represent the syntax of an Ada program.
 
 --  would normally be regarded as the symbol table information. In addition a
 --  number of the tree nodes contain semantic information.
 
---  WARNING: Several files are automatically generated from this package.
---  See below for details.
+--  See the spec of Gen_IL.Gen for instructions on making changes to this file.
+--  Note that the official definition of what nodes have what fields is in
+--  Gen_IL.Gen.Gen_Nodes; if there is a discrepancy between that and the
+--  comments here, Gen_IL.Gen.Gen_Nodes wins.
+--
+--  Offsets of each field are given in parentheses below, but this information
+--  is obsolete, and should be completely ignored. The actual field offsets are
+--  determined by the Gen_IL program. We might want to remove these comments at
+--  some point.
 
 pragma Warnings (Off); -- with/use clauses for children
 with Namet; use Namet;
@@ -49,84 +56,67 @@ pragma Warnings (On);
 
 package Sinfo is
 
-   --  ????Comments below are partly obsolete
-
-   ---------------------------------
-   -- Making Changes to This File --
-   ---------------------------------
-
-   --  If changes are made to this file, a number of related steps must be
-   --  carried out to ensure consistency. First, if a field access function is
-   --  added, it appears in these places:
-
-   --    In sinfo.ads:
-   --      The documentation associated with the field (if semantic)
-   --      The documentation associated with the node
-   --      The spec of the access function
-   --      The spec of the set procedure
-   --      The entries in Is_Syntactic_Field
-   --      The pragma Inline for the access function
-   --      The pragma Inline for the set procedure
-   --    In sinfo.adb:
-   --      The body of the access function
-   --      The body of the set procedure
-
-   --  The field chosen must be consistent in all places, and, for a node that
-   --  is a subexpression, must not overlap any of the standard expression
-   --  fields.
-
-   --  In addition, if any of the standard expression fields is changed, then
-   --  the utility program which creates the Treeprs spec (in file treeprs.ads)
-   --  must be updated appropriately, since it special cases expression fields.
-
-   --  If a new tree node is added, then the following changes are made:
-
-   --    Add it to the documentation in the appropriate place
-   --    Add its fields to this documentation section
-   --    Define it in the appropriate classification in Node_Kind
-   --    Add an entry in Is_Syntactic_Field
-   --    In the body (sinfo), add entries to the access functions for all
-   --     its fields (except standard expression fields) to include the new
-   --     node in the checks.
-   --    Add an appropriate section to the case statement in sprint.adb
-   --    Add an appropriate section to the case statement in sem.adb
-   --    Add an appropriate section to the case statement in exp_util.adb
-   --     (Insert_Actions procedure)
-   --    For a subexpression, add an appropriate section to the case
-   --     statement in sem_eval.adb
-   --    For a subexpression, add an appropriate section to the case
-   --     statement in sem_res.adb
-
-   --  All back ends must be made aware of the new node kind.
-
-   --  Finally, four utility programs must be run:
-
-   --    (Optional.) Run CSinfo to check that you have made the changes
-   --     consistently. It checks most of the rules given above. This utility
-   --     reads sinfo.ads and sinfo.adb and generates a report to standard
-   --     output. This step is optional because XSinfo runs CSinfo.
-
-   --    Run XSinfo to create sinfo.h, the corresponding C header. This
-   --     utility reads sinfo.ads and generates sinfo.h. Note that it does
-   --     not need to read sinfo.adb, since the contents of the body are
-   --     algorithmically determinable from the spec.
-
-   --    Run XTreeprs to create treeprs.ads, an updated version of the module
-   --     that is used to drive the tree print routine. This utility reads (but
-   --     does not modify) treeprs.adt, the template that provides the basic
-   --     structure of the file, and then fills in the data from the comments
-   --     in sinfo.ads.
-
-   --    Run XNmake to create nmake.ads and nmake.adb, the package body and
-   --     spec of the Nmake package which contains functions for constructing
-   --     nodes.
-
-   --  The above steps are done automatically by the build scripts when you do
-   --  a full bootstrap.
-
-   --  Note: sometime we could write a utility that actually generated the body
-   --  of sinfo from the spec instead of simply checking it, since, as noted
-   --  above, the contents of the body can be determined from the spec.
+   ----------------------------------------
+   -- Definitions of fields in tree node --
+   ----------------------------------------
+
+   --  The following fields are common to all nodes:
+
+   --   Nkind         Indicates the kind of the node. This field is present
+   --                 in all nodes.
+
+   --   Sloc          Location (Source_Ptr) of the corresponding token
+   --                 in the Source buffer. The individual node definitions
+   --                 show which token is referenced by this pointer.
+
+   --   In_List       A flag used to indicate if the node is a member
+   --                 of a node list (see package Nlists).
+
+   --   Rewrite_Ins   A flag set if a node is marked as a rewrite inserted
+   --                 node as a result of a call to Mark_Rewrite_Insertion.
+
+   --   Small_Paren_Count
+   --                 A 2-bit count used in subexpression nodes to indicate
+   --                 the level of parentheses. The settings are 0,1,2 and
+   --                 3 for many. If the value is 3, then an auxiliary table
+   --                 is used to indicate the real value, which is computed by
+   --                 Paren_Count. Set to zero for nonsubexpression nodes.
+
+   --                 Note: the required parentheses surrounding conditional
+   --                 and quantified expressions count as a level of parens
+   --                 for this purpose, so e.g. in X := (if A then B else C);
+   --                 Paren_Count for the right side will be 1.
+
+   --   Comes_From_Source
+   --                 This flag is present in all nodes. It is set if the
+   --                 node is built by the scanner or parser, and clear if
+   --                 the node is built by the analyzer or expander. It
+   --                 indicates that the node corresponds to a construct
+   --                 that appears in the original source program.
+
+   --   Analyzed      This flag is present in all nodes. It is set when
+   --                 a node is analyzed, and is used to avoid analyzing
+   --                 the same node twice. Analysis includes expansion if
+   --                 expansion is active, so in this case if the flag is
+   --                 set it means the node has been analyzed and expanded.
+
+   --   Error_Posted  This flag is present in all nodes. It is set when
+   --                 an error message is posted which is associated with
+   --                 the flagged node. This is used to avoid posting more
+   --                 than one message on the same node.
+
+   --   Link          For a node, points to the Parent. For a list, points
+   --                 to the list header. Note that in the latter case, a
+   --                 client cannot modify the link field. This field is
+   --                 private to the Atree package (but is also modified
+   --                 by the Nlists package).
+
+   --  The following additional fields are common to all entities (that is,
+   --  nodes whose Nkind is in N_Entity):
+
+   --   Ekind         Entity type.
+
+   --   Convention    Entity convention (Convention_Id value)
 
    --------------------------------
    -- Implicit Nodes in the Tree --
@@ -1328,7 +1318,7 @@ package Sinfo is
    --    expansion of aggregates is also used for in-place array aggregate
    --    assignment or initialization. When the full context is known, the
    --    target of the assignment or initialization is used to generate the
-   --    left-hand side of individual assignment to each sub-component.
+   --    left-hand side of individual assignment to each subcomponent.
 
    --  Expression_Copy (Node2-Sem)
    --    Present in N_Pragma_Argument_Association nodes. Contains a copy of the