[Ada] Small cleanup throughout CStand body
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 15 Apr 2020 08:42:05 +0000 (10:42 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 17 Jun 2020 08:14:14 +0000 (04:14 -0400)
2020-06-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* cstand.adb (Stloc): Change to a renaming.
(Staloc): Likewise.
(Build_Unsigned_Integer_Type): Remove Nam parameter, use local
constants and do not call Make_Name.
(Make_Dummy_Index): Use local constants.
(Create_Standard): Pass the name of entities as parameter in
calls to New_Standard_Entity and remove calls to Make_Name.
Adjust calls to Build_Unsigned_Integer_Type.
(Identifier_For): Use local constant.
(Make_Component): Pass the name of the component as parameter
in call to New_Standard_Entity and remove call to Make_Name.
(Make_Formal): Likewise.  Rename Formal_Name parameter into
Nam and use local constant.
(Make_Name): Delete.
(New_Operator): Use local constant.
(New_Standard_Entity): Rename S parameter into Nam and build
the name here.  Remove call to Make_Name.
(Register_Float_Type): Pass the name of the type as parameter
in call to New_Standard_Entity and remove call to Make_Name.

gcc/ada/cstand.adb

index ba31bb6cdc9be8960762c9b945d9e67cfb1737fd..71d40e995706496de9003fee28d5694c94f56c48 100644 (file)
@@ -48,8 +48,8 @@ with Urealp;   use Urealp;
 
 package body CStand is
 
-   Stloc  : constant Source_Ptr := Standard_Location;
-   Staloc : constant Source_Ptr := Standard_ASCII_Location;
+   Stloc  : Source_Ptr renames Standard_Location;
+   Staloc : Source_Ptr renames Standard_ASCII_Location;
    --  Standard abbreviations used throughout this package
 
    Back_End_Float_Types : Elist_Id := No_Elist;
@@ -85,14 +85,11 @@ package body CStand is
    --  is the size in bits. The corresponding base type is not built by
    --  this routine but instead must be built by the caller where needed.
 
-   procedure Build_Unsigned_Integer_Type
-     (Uns : Entity_Id;
-      Siz : Nat;
-      Nam : String);
+   procedure Build_Unsigned_Integer_Type (Uns : Entity_Id; Siz : Nat);
    --  Procedure to build standard predefined unsigned integer subtype. These
    --  subtypes are not user visible, but they are used internally. The first
    --  parameter is the entity for the subtype. The second parameter is the
-   --  size in bits. The third parameter is an identifying name.
+   --  size in bits.
 
    procedure Copy_Float_Type (To : Entity_Id; From : Entity_Id);
    --  Build a floating point type, copying representation details from From.
@@ -129,8 +126,8 @@ package body CStand is
    --  These are not generally valid identifier names.
 
    function Identifier_For (S : Standard_Entity_Type) return Node_Id;
-   --  Returns an identifier node with the same name as the defining
-   --  identifier corresponding to the given Standard_Entity_Type value
+   --  Returns an identifier node with the same name as the defining identifier
+   --  corresponding to the given Standard_Entity_Type value.
 
    procedure Make_Component
      (Rec : Entity_Id;
@@ -139,17 +136,12 @@ package body CStand is
    --  Build a record component with the given type and name, and append to
    --  the list of components of Rec.
 
-   function Make_Formal
-     (Typ         : Entity_Id;
-      Formal_Name : String) return Entity_Id;
+   function Make_Formal (Typ : Entity_Id; Nam : String) return Entity_Id;
    --  Construct entity for subprogram formal with given name and type
 
    function Make_Integer (V : Uint) return Node_Id;
    --  Builds integer literal with given value
 
-   procedure Make_Name (Id : Entity_Id; Nam : String);
-   --  Make an entry in the names table for Nam, and set as Chars field of Id
-
    function New_Operator (Op : Name_Id; Typ : Entity_Id) return Entity_Id;
    --  Build entity for standard operator with given name and type
 
@@ -157,9 +149,9 @@ package body CStand is
      (New_Node_Kind : Node_Kind := N_Defining_Identifier) return Entity_Id;
    --  Builds a new entity for Standard
 
-   function New_Standard_Entity (S : String) return Entity_Id;
+   function New_Standard_Entity (Nam : String) return Entity_Id;
    --  Builds a new entity for Standard with Nkind = N_Defining_Identifier,
-   --  and Chars of this defining identifier set to the given string S.
+   --  and Chars of this defining identifier set to the given string Nam.
 
    procedure Print_Standard;
    --  Print representation of package Standard if switch set
@@ -268,16 +260,13 @@ package body CStand is
 
    procedure Build_Unsigned_Integer_Type
      (Uns : Entity_Id;
-      Siz : Nat;
-      Nam : String)
+      Siz : Nat)
    is
-      Decl   : Node_Id;
-      R_Node : Node_Id;
+      Decl   : constant Node_Id := New_Node (N_Full_Type_Declaration, Stloc);
+      R_Node : constant Node_Id := New_Node (N_Range, Stloc);
 
    begin
-      Decl := New_Node (N_Full_Type_Declaration, Stloc);
       Set_Defining_Identifier (Decl, Uns);
-      Make_Name (Uns, Nam);
 
       Set_Ekind                      (Uns, E_Modular_Integer_Type);
       Set_Scope                      (Uns, Standard_Standard);
@@ -289,7 +278,6 @@ package body CStand is
       Set_Size_Known_At_Compile_Time (Uns);
       Set_Is_Known_Valid             (Uns, True);
 
-      R_Node := New_Node (N_Range, Stloc);
       Set_Low_Bound  (R_Node, Make_Integer (Uint_0));
       Set_High_Bound (R_Node, Make_Integer (Modulus (Uns) - 1));
       Set_Etype (Low_Bound  (R_Node), Uns);
@@ -553,20 +541,18 @@ package body CStand is
       ----------------------
 
       procedure Make_Dummy_Index (E : Entity_Id) is
-         Index : Node_Id;
-         Dummy : List_Id;
-
-      begin
-         Index :=
+         Index : constant Node_Id :=
            Make_Range (Sloc (E),
              Low_Bound  => Make_Integer (Uint_0),
              High_Bound => Make_Integer (Uint_2 ** Standard_Integer_Size));
-         Set_Etype (Index, Standard_Integer);
-         Set_First_Index (E, Index);
 
          --  Make sure Index is a list as required, so Next_Index is Empty
 
-         Dummy := New_List (Index);
+         Dummy : constant List_Id := New_List (Index);
+
+      begin
+         Set_Etype (Index, Standard_Integer);
+         Set_First_Index (E, Index);
       end Make_Dummy_Index;
 
       ----------------------
@@ -581,6 +567,7 @@ package body CStand is
                New_List (
                  Make_Pragma_Argument_Association (Stloc,
                    Expression => New_Occurrence_Of (String_Type, Stloc))));
+
       begin
          Append (Prag, Decl_S);
          Record_Rep_Item (String_Type, Prag);
@@ -601,8 +588,7 @@ package body CStand is
             --  Defining identifier node
 
          begin
-            Ident_Node := New_Standard_Entity;
-            Make_Name (Ident_Node, S_Name (3 .. S_Name'Length));
+            Ident_Node := New_Standard_Entity (S_Name (3 .. S_Name'Length));
             Standard_Entity (S) := Ident_Node;
          end;
       end loop;
@@ -1110,11 +1096,10 @@ package body CStand is
 
       --  Create semantic phase entities
 
-      Standard_Void_Type := New_Standard_Entity;
+      Standard_Void_Type := New_Standard_Entity ("_void_type");
       Set_Ekind       (Standard_Void_Type, E_Void);
       Set_Etype       (Standard_Void_Type, Standard_Void_Type);
       Set_Scope       (Standard_Void_Type, Standard_Standard);
-      Make_Name       (Standard_Void_Type, "_void_type");
 
       --  The type field of packages is set to void
 
@@ -1124,7 +1109,7 @@ package body CStand is
       --  Standard_A_String is actually used in generated code, so it has a
       --  type name that is reasonable, but does not overlap any Ada name.
 
-      Standard_A_String := New_Standard_Entity;
+      Standard_A_String := New_Standard_Entity ("access_string");
       Set_Ekind      (Standard_A_String, E_Access_Type);
       Set_Scope      (Standard_A_String, Standard_Standard);
       Set_Etype      (Standard_A_String, Standard_A_String);
@@ -1139,9 +1124,8 @@ package body CStand is
 
       Set_Directly_Designated_Type
                      (Standard_A_String, Standard_String);
-      Make_Name      (Standard_A_String, "access_string");
 
-      Standard_A_Char := New_Standard_Entity;
+      Standard_A_Char := New_Standard_Entity ("access_character");
       Set_Ekind          (Standard_A_Char, E_Access_Type);
       Set_Scope          (Standard_A_Char, Standard_Standard);
       Set_Etype          (Standard_A_Char, Standard_A_String);
@@ -1149,14 +1133,13 @@ package body CStand is
       Set_Elem_Alignment (Standard_A_Char);
 
       Set_Directly_Designated_Type (Standard_A_Char, Standard_Character);
-      Make_Name     (Standard_A_Char, "access_character");
 
       --  Standard_Debug_Renaming_Type is used for the special objects created
       --  to encode the names occurring in renaming declarations for use by the
       --  debugger (see exp_dbug.adb). The type is a zero-sized subtype of
       --  Standard.Integer.
 
-      Standard_Debug_Renaming_Type := New_Standard_Entity;
+      Standard_Debug_Renaming_Type := New_Standard_Entity ("_renaming_type");
 
       Set_Ekind (Standard_Debug_Renaming_Type, E_Signed_Integer_Subtype);
       Set_Scope (Standard_Debug_Renaming_Type, Standard_Standard);
@@ -1171,8 +1154,6 @@ package body CStand is
       Set_Is_Constrained  (Standard_Debug_Renaming_Type);
       Set_Has_Size_Clause (Standard_Debug_Renaming_Type);
 
-      Make_Name           (Standard_Debug_Renaming_Type, "_renaming_type");
-
       --  Note on type names. The type names for the following special types
       --  are constructed so that they will look reasonable should they ever
       --  appear in error messages etc, although in practice the use of the
@@ -1341,48 +1322,39 @@ package body CStand is
       --  used internally. They are unsigned types with the same length as
       --  the correspondingly named signed integer types.
 
-      Standard_Short_Short_Unsigned := New_Standard_Entity;
+      Standard_Short_Short_Unsigned
+        := New_Standard_Entity ("short_short_unsigned");
       Build_Unsigned_Integer_Type
-        (Standard_Short_Short_Unsigned,
-         Standard_Short_Short_Integer_Size,
-         "short_short_unsigned");
+        (Standard_Short_Short_Unsigned, Standard_Short_Short_Integer_Size);
 
-      Standard_Short_Unsigned := New_Standard_Entity;
+      Standard_Short_Unsigned := New_Standard_Entity ("short_unsigned");
       Build_Unsigned_Integer_Type
-        (Standard_Short_Unsigned,
-         Standard_Short_Integer_Size,
-         "short_unsigned");
+        (Standard_Short_Unsigned, Standard_Short_Integer_Size);
 
-      Standard_Unsigned := New_Standard_Entity;
+      Standard_Unsigned := New_Standard_Entity ("unsigned");
       Build_Unsigned_Integer_Type
-        (Standard_Unsigned,
-         Standard_Integer_Size,
-         "unsigned");
+        (Standard_Unsigned, Standard_Integer_Size);
 
-      Standard_Long_Unsigned := New_Standard_Entity;
+      Standard_Long_Unsigned := New_Standard_Entity ("long_unsigned");
       Build_Unsigned_Integer_Type
-        (Standard_Long_Unsigned,
-         Standard_Long_Integer_Size,
-         "long_unsigned");
+        (Standard_Long_Unsigned, Standard_Long_Integer_Size);
 
-      Standard_Long_Long_Unsigned := New_Standard_Entity;
+      Standard_Long_Long_Unsigned
+        := New_Standard_Entity ("long_long_unsigned");
       Build_Unsigned_Integer_Type
-        (Standard_Long_Long_Unsigned,
-         Standard_Long_Long_Integer_Size,
-         "long_long_unsigned");
+        (Standard_Long_Long_Unsigned, Standard_Long_Long_Integer_Size);
 
       --  Standard_Unsigned_64 is not user visible, but is used internally. It
       --  is an unsigned type mod 2**64 with 64 bits size.
 
-      Standard_Unsigned_64 := New_Standard_Entity;
-      Build_Unsigned_Integer_Type (Standard_Unsigned_64, 64, "unsigned_64");
+      Standard_Unsigned_64 := New_Standard_Entity ("unsigned_64");
+      Build_Unsigned_Integer_Type (Standard_Unsigned_64, 64);
 
       --  Standard_Address is not user visible, but is used internally. It is
       --  an unsigned type mod 2**System_Address_Size with System.Address size.
 
-      Standard_Address := New_Standard_Entity;
-      Build_Unsigned_Integer_Type
-        (Standard_Address, System_Address_Size, "standard_address");
+      Standard_Address := New_Standard_Entity ("standard_address");
+      Build_Unsigned_Integer_Type (Standard_Address, System_Address_Size);
 
       --  Note: universal integer and universal real are constructed as fully
       --  formed signed numeric types, with parameters corresponding to the
@@ -1390,28 +1362,25 @@ package body CStand is
       --  allows Gigi to properly process references to universal types that
       --  are not folded at compile time.
 
-      Universal_Integer := New_Standard_Entity;
+      Universal_Integer := New_Standard_Entity ("universal_integer");
       Decl := New_Node (N_Full_Type_Declaration, Stloc);
       Set_Defining_Identifier (Decl, Universal_Integer);
-      Make_Name (Universal_Integer, "universal_integer");
       Set_Scope (Universal_Integer, Standard_Standard);
       Build_Signed_Integer_Type
         (Universal_Integer, Standard_Long_Long_Integer_Size);
 
-      Universal_Real := New_Standard_Entity;
+      Universal_Real := New_Standard_Entity ("universal_real");
       Decl := New_Node (N_Full_Type_Declaration, Stloc);
       Set_Defining_Identifier (Decl, Universal_Real);
-      Make_Name (Universal_Real, "universal_real");
       Set_Scope (Universal_Real, Standard_Standard);
       Copy_Float_Type (Universal_Real, Standard_Long_Long_Float);
 
       --  Note: universal fixed, unlike universal integer and universal real,
       --  is never used at runtime, so it does not need to have bounds set.
 
-      Universal_Fixed := New_Standard_Entity;
+      Universal_Fixed := New_Standard_Entity ("universal_fixed");
       Decl := New_Node (N_Full_Type_Declaration, Stloc);
       Set_Defining_Identifier (Decl, Universal_Fixed);
-      Make_Name            (Universal_Fixed, "universal_fixed");
       Set_Ekind            (Universal_Fixed, E_Ordinary_Fixed_Point_Type);
       Set_Etype            (Universal_Fixed, Universal_Fixed);
       Set_Scope            (Universal_Fixed, Standard_Standard);
@@ -1502,7 +1471,7 @@ package body CStand is
       --  known by the run-time. Components of the record are documented in
       --  the declaration in System.Standard_Library.
 
-      Standard_Exception_Type := New_Standard_Entity;
+      Standard_Exception_Type := New_Standard_Entity ("exception");
       Set_Ekind       (Standard_Exception_Type, E_Record_Type);
       Set_Etype       (Standard_Exception_Type, Standard_Exception_Type);
       Set_Scope       (Standard_Exception_Type, Standard_Standard);
@@ -1511,7 +1480,6 @@ package body CStand is
       Init_Size_Align (Standard_Exception_Type);
       Set_Size_Known_At_Compile_Time
                       (Standard_Exception_Type, True);
-      Make_Name       (Standard_Exception_Type, "exception");
 
       Make_Component
         (Standard_Exception_Type, Standard_Boolean,   "Not_Handled_By_Others");
@@ -1703,7 +1671,6 @@ package body CStand is
          Set_Etype (Low_Bound  (Scalar_Range (E)), New_Ent);
          Set_Etype (High_Bound (Scalar_Range (E)), New_Ent);
       end if;
-
    end Create_Unconstrained_Base_Type;
 
    --------------------
@@ -1711,11 +1678,12 @@ package body CStand is
    --------------------
 
    function Identifier_For (S : Standard_Entity_Type) return Node_Id is
-      Ident_Node : Node_Id;
+      Ident_Node : constant Node_Id := New_Node (N_Identifier, Stloc);
+
    begin
-      Ident_Node := New_Node (N_Identifier, Stloc);
       Set_Chars (Ident_Node, Chars (Standard_Entity (S)));
       Set_Entity (Ident_Node, Standard_Entity (S));
+
       return Ident_Node;
    end Identifier_For;
 
@@ -1728,16 +1696,14 @@ package body CStand is
       Typ : Entity_Id;
       Nam : String)
    is
-      Id : constant Entity_Id := New_Standard_Entity;
+      Id : constant Entity_Id := New_Standard_Entity (Nam);
 
    begin
-      Set_Ekind                 (Id, E_Component);
-      Set_Etype                 (Id, Typ);
-      Set_Scope                 (Id, Rec);
-      Init_Component_Location   (Id);
-
+      Set_Ekind                     (Id, E_Component);
+      Set_Etype                     (Id, Typ);
+      Set_Scope                     (Id, Rec);
+      Init_Component_Location       (Id);
       Set_Original_Record_Component (Id, Id);
-      Make_Name (Id, Nam);
       Append_Entity (Id, Rec);
    end Make_Component;
 
@@ -1745,20 +1711,14 @@ package body CStand is
    -- Make_Formal --
    -----------------
 
-   function Make_Formal
-     (Typ         : Entity_Id;
-      Formal_Name : String) return Entity_Id
-   is
-      Formal : Entity_Id;
+   function Make_Formal (Typ : Entity_Id; Nam : String) return Entity_Id is
+      Formal : constant Entity_Id := New_Standard_Entity (Nam);
 
    begin
-      Formal := New_Standard_Entity;
-
       Set_Ekind     (Formal, E_In_Parameter);
       Set_Mechanism (Formal, Default_Mechanism);
       Set_Scope     (Formal, Standard_Standard);
       Set_Etype     (Formal, Typ);
-      Make_Name     (Formal, Formal_Name);
 
       return Formal;
    end Make_Formal;
@@ -1769,35 +1729,21 @@ package body CStand is
 
    function Make_Integer (V : Uint) return Node_Id is
       N : constant Node_Id := Make_Integer_Literal (Stloc, V);
+
    begin
       Set_Is_Static_Expression (N);
+
       return N;
    end Make_Integer;
 
-   ---------------
-   -- Make_Name --
-   ---------------
-
-   procedure Make_Name (Id : Entity_Id; Nam : String) is
-   begin
-      for J in 1 .. Nam'Length loop
-         Name_Buffer (J) := Fold_Lower (Nam (Nam'First + (J - 1)));
-      end loop;
-
-      Name_Len := Nam'Length;
-      Set_Chars (Id, Name_Find);
-   end Make_Name;
-
    ------------------
    -- New_Operator --
    ------------------
 
    function New_Operator (Op : Name_Id; Typ : Entity_Id) return Entity_Id is
-      Ident_Node : Entity_Id;
+      Ident_Node : constant Entity_Id := Make_Defining_Identifier (Stloc, Op);
 
    begin
-      Ident_Node := Make_Defining_Identifier (Stloc, Op);
-
       Set_Is_Pure    (Ident_Node, True);
       Set_Ekind      (Ident_Node, E_Operator);
       Set_Etype      (Ident_Node, Typ);
@@ -1805,11 +1751,12 @@ package body CStand is
       Set_Homonym    (Ident_Node, Get_Name_Entity_Id (Op));
       Set_Convention (Ident_Node, Convention_Intrinsic);
 
-      Set_Is_Immediately_Visible   (Ident_Node, True);
-      Set_Is_Intrinsic_Subprogram  (Ident_Node, True);
+      Set_Is_Immediately_Visible  (Ident_Node, True);
+      Set_Is_Intrinsic_Subprogram (Ident_Node, True);
 
       Set_Name_Entity_Id (Op, Ident_Node);
       Append_Entity (Ident_Node, Standard_Standard);
+
       return Ident_Node;
    end New_Operator;
 
@@ -1847,10 +1794,17 @@ package body CStand is
       return E;
    end New_Standard_Entity;
 
-   function New_Standard_Entity (S : String) return Entity_Id is
+   function New_Standard_Entity (Nam : String) return Entity_Id is
       Ent : constant Entity_Id := New_Standard_Entity;
+
    begin
-      Make_Name (Ent, S);
+      for J in 1 .. Nam'Length loop
+         Name_Buffer (J) := Fold_Lower (Nam (Nam'First + (J - 1)));
+      end loop;
+
+      Name_Len := Nam'Length;
+      Set_Chars (Ent, Name_Find);
+
       return Ent;
    end New_Standard_Entity;
 
@@ -2085,11 +2039,10 @@ package body CStand is
       pragma Unreferenced (Precision);
       --  See Build_Float_Type for the rationale
 
-      Ent : constant Entity_Id := New_Standard_Entity;
+      Ent : constant Entity_Id := New_Standard_Entity (Name);
 
    begin
       Set_Defining_Identifier (New_Node (N_Full_Type_Declaration, Stloc), Ent);
-      Make_Name (Ent, Name);
       Set_Scope (Ent, Standard_Standard);
       Build_Float_Type
         (Ent, Pos (Digs), Float_Rep, Int (Size), Int (Alignment / 8));