]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Further adjustment and optimization of System.Value_N
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 9 Apr 2021 11:29:44 +0000 (13:29 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 29 Jun 2021 14:23:46 +0000 (14:23 +0000)
gcc/ada/

* rtsfind.ads (RE_Id): Change RE_Valid_Enumeration_Value_NN into
RE_Valid_Value_Enumeration_NN.
(RE_Unit_Table): Adjust to above renaming.
* exp_imgv.adb (Expand_Valid_Value_Attribute): Likewise.
* libgnat/s-valuen.ads (Invalid): Remove.
(Value_Enumeration_Pos): Move to...
* libgnat/s-valuen.adb (Value_Enumeration_Pos): ...here.
Return -1 instead of Invalid.
(Value_Enumeration): Compare against 0 instead of Invalid.
(Valid_Enumeration_Value): Likewise.  Rename to...
(Valid_Value_Enumeration): ...this.
* libgnat/s-vaenu8.ads (Valid_Enumeration_Value_8): Rename into...
(Valid_Value_Enumeration_8): ...this.
* libgnat/s-vaen16.ads (Valid_Enumeration_Value_16): Rename into...
(Valid_Value_Enumeration_16): ...this.
* libgnat/s-vaen32.ads (Valid_Enumeration_Value_32): Rename into...
(Valid_Value_Enumeration_32): ...this.

gcc/ada/exp_imgv.adb
gcc/ada/libgnat/s-vaen16.ads
gcc/ada/libgnat/s-vaen32.ads
gcc/ada/libgnat/s-vaenu8.ads
gcc/ada/libgnat/s-valuen.adb
gcc/ada/libgnat/s-valuen.ads
gcc/ada/rtsfind.ads

index 38ee11e5d66710618acad34cb51de2b3dbbe5ab0..6e17a5c452a68b0ec07fc5d7bf4d2958f1e3d5ae 100644 (file)
@@ -1439,17 +1439,17 @@ package body Exp_Imgv is
    begin
       --  Generate:
 
-      --     Valid_Enumeration_Value _NN
+      --     Valid_Value_Enumeration_NN
       --       (typS, typN'Address, typH'Unrestricted_Access, Num, X)
 
       Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
 
       if Ttyp = Standard_Integer_8 then
-         Func := RE_Valid_Enumeration_Value_8;
+         Func := RE_Valid_Value_Enumeration_8;
       elsif Ttyp = Standard_Integer_16 then
-         Func := RE_Valid_Enumeration_Value_16;
+         Func := RE_Valid_Value_Enumeration_16;
       else
-         Func := RE_Valid_Enumeration_Value_32;
+         Func := RE_Valid_Value_Enumeration_32;
       end if;
 
       Prepend_To (Args,
index 86cdaa10fd168da4c518442dd6728f6fc8e8ae09..6ea6071f8a8a3c14722de96157ce18e5e9ee475e 100644 (file)
@@ -49,13 +49,13 @@ package System.Val_Enum_16 is
       return    Natural
      renames Impl.Value_Enumeration;
 
-   function Valid_Enumeration_Value_16
+   function Valid_Value_Enumeration_16
      (Names   : String;
       Indexes : System.Address;
       Hash    : Impl.Hash_Function_Ptr;
       Num     : Natural;
       Str     : String)
       return    Boolean
-     renames Impl.Valid_Enumeration_Value;
+     renames Impl.Valid_Value_Enumeration;
 
 end System.Val_Enum_16;
index 0dead0704eb8a608d6dbbbd85e6b304873dc5df4..e1a7644ec72a4a6f11bdcb920186225c71e21f3b 100644 (file)
@@ -49,13 +49,13 @@ package System.Val_Enum_32 is
       return    Natural
      renames Impl.Value_Enumeration;
 
-   function Valid_Enumeration_Value_32
+   function Valid_Value_Enumeration_32
      (Names   : String;
       Indexes : System.Address;
       Hash    : Impl.Hash_Function_Ptr;
       Num     : Natural;
       Str     : String)
       return    Boolean
-     renames Impl.Valid_Enumeration_Value;
+     renames Impl.Valid_Value_Enumeration;
 
 end System.Val_Enum_32;
index db0b360d661db456587b65641822d81449bb11d8..395a969db7be0c2c1c01343c77040cd07649d766 100644 (file)
@@ -49,13 +49,13 @@ package System.Val_Enum_8 is
       return    Natural
      renames Impl.Value_Enumeration;
 
-   function Valid_Enumeration_Value_8
+   function Valid_Value_Enumeration_8
      (Names   : String;
       Indexes : System.Address;
       Hash    : Impl.Hash_Function_Ptr;
       Num     : Natural;
       Str     : String)
       return    Boolean
-     renames Impl.Valid_Enumeration_Value;
+     renames Impl.Valid_Value_Enumeration;
 
 end System.Val_Enum_8;
index 7b72bc6ed0671a19c65b90f9b395ca4ca4a8c506..ef613a28cf8ef256ee00b12590e140961d9ffae1 100644 (file)
@@ -35,6 +35,16 @@ with System.Val_Util; use System.Val_Util;
 
 package body System.Value_N is
 
+   function Value_Enumeration_Pos
+     (Names   : String;
+      Indexes : System.Address;
+      Hash    : Hash_Function_Ptr;
+      Num     : Natural;
+      Str     : String)
+      return    Integer with Pure_Function;
+   --  Same as Value_Enumeration, except returns negative if Value_Enumeration
+   --  would raise Constraint_Error.
+
    ---------------------------
    -- Value_Enumeration_Pos --
    ---------------------------
@@ -98,9 +108,25 @@ package body System.Value_N is
          end if;
       end;
 
-      return Invalid;
+      return -1;
    end Value_Enumeration_Pos;
 
+   -----------------------------
+   -- Valid_Value_Enumeration --
+   -----------------------------
+
+   function Valid_Value_Enumeration
+     (Names   : String;
+      Indexes : System.Address;
+      Hash    : Hash_Function_Ptr;
+      Num     : Natural;
+      Str     : String)
+      return    Boolean
+   is
+   begin
+      return Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str) >= 0;
+   end Valid_Value_Enumeration;
+
    -----------------------
    -- Value_Enumeration --
    -----------------------
@@ -115,28 +141,15 @@ package body System.Value_N is
    is
       Result : constant Integer :=
         Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str);
+
    begin
-      if Result = Invalid then
+      --  The comparison eliminates the need for a range check on return
+
+      if Result < 0 then
          Bad_Value (Str);
       else
          return Result;
       end if;
    end Value_Enumeration;
 
-   -----------------------------
-   -- Valid_Enumeration_Value --
-   -----------------------------
-
-   function Valid_Enumeration_Value
-     (Names   : String;
-      Indexes : System.Address;
-      Hash    : Hash_Function_Ptr;
-      Num     : Natural;
-      Str     : String)
-      return    Boolean
-   is
-   begin
-      return Value_Enumeration_Pos (Names, Indexes, Hash, Num, Str) /= Invalid;
-   end Valid_Enumeration_Value;
-
 end System.Value_N;
index 7ef053914ac65bfe30aae88e63745dda8be0453d..db8ad1d03951c9d75a24a03375b86b739fdecee8 100644 (file)
@@ -67,7 +67,7 @@ package System.Value_N is
    --  If the image is found in Names, then the corresponding Pos value is
    --  returned. If not, Constraint_Error is raised.
 
-   function Valid_Enumeration_Value
+   function Valid_Value_Enumeration
      (Names   : String;
       Indexes : System.Address;
       Hash    : Hash_Function_Ptr;
@@ -79,16 +79,4 @@ package System.Value_N is
    --  raise Constraint_Error. The parameters have the same meaning as for
    --  Value_Enumeration.
 
-   Invalid : constant Integer := -1;
-
-   function Value_Enumeration_Pos
-     (Names   : String;
-      Indexes : System.Address;
-      Hash    : Hash_Function_Ptr;
-      Num     : Natural;
-      Str     : String)
-      return    Integer with Pure_Function;
-   --  Same as Value_Enumeration, except returns Invalid if Value_Enumeration
-   --  would raise Constraint_Error.
-
 end System.Value_N;
index df51477c1399acdce4504c3386466beca02cafde..ad84e9e761e8c1a8c01fa0bd1b75796a0991d7dc 100644 (file)
@@ -2040,9 +2040,9 @@ package Rtsfind is
      RE_Value_Enumeration_16,            -- System.Val_Enum_16
      RE_Value_Enumeration_32,            -- System.Val_Enum_32
 
-     RE_Valid_Enumeration_Value_8,       -- System.Val_Enum_8
-     RE_Valid_Enumeration_Value_16,      -- System.Val_Enum_16
-     RE_Valid_Enumeration_Value_32,      -- System.Val_Enum_32
+     RE_Valid_Value_Enumeration_8,       -- System.Val_Enum_8
+     RE_Valid_Value_Enumeration_16,      -- System.Val_Enum_16
+     RE_Valid_Value_Enumeration_32,      -- System.Val_Enum_32
 
      RE_Value_Fixed32,                   -- System_Val_Fixed_32
 
@@ -3731,11 +3731,11 @@ package Rtsfind is
 
      RE_Value_Enumeration_32             => System_Val_Enum_32,
 
-     RE_Valid_Enumeration_Value_8        => System_Val_Enum_8,
+     RE_Valid_Value_Enumeration_8        => System_Val_Enum_8,
 
-     RE_Valid_Enumeration_Value_16       => System_Val_Enum_16,
+     RE_Valid_Value_Enumeration_16       => System_Val_Enum_16,
 
-     RE_Valid_Enumeration_Value_32       => System_Val_Enum_32,
+     RE_Valid_Value_Enumeration_32       => System_Val_Enum_32,
 
      RE_Value_Fixed32                    => System_Val_Fixed_32,