]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Simplify conversion from Character to Char_Code
authorPiotr Trojanek <trojanek@adacore.com>
Wed, 19 Jan 2022 13:05:16 +0000 (14:05 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 10 May 2022 08:19:20 +0000 (08:19 +0000)
Replace "Char_Code (Character'Pos (...))" with "Get_Char_Code (...)".
The Get_Char_Code routine is inlined, so there is no performance penalty
when it is called with static actual parameters.

The N_Character_Literal has field Char_Literal_Value of type Unat, but
we should really only store there values from Char_Code type (e.g. there
are no characters with negative ASCII codes). It seems cleaner to use
UI_From_CC and not a more general UI_From_Int when setting the character
literal values.

Cleanup related to handling of character values in SPARK
counterexamples, which just like the code for names in task arrays
create N_Character_Literal nodes.

gcc/ada/

* exp_prag.adb (Expand_Pragma_Import_Or_Interface): Use
Get_Char_Code.
* exp_util.adb (Build_Task_Array_Image): Simplify conversion to
Char_Code.
(Build_Task_Image_Prefix): Likewise.
(Build_Task_Record_Image): Likewise.
* cstand.adb (Create_Standard): Use UI_From_Int instead of
UI_From_CC.
* exp_ch11.adb (Expand_N_Exception_Declaration): Likewise.
* sem_res.adb (Patch_Up_Value): Likewise.
* stringt.adb (Write_String_Table_Entry): Use Get_Char_Code.

gcc/ada/cstand.adb
gcc/ada/exp_ch11.adb
gcc/ada/exp_prag.adb
gcc/ada/exp_util.adb
gcc/ada/sem_res.adb
gcc/ada/stringt.adb

index b2e6ef9e5de3b2c01897b2b141f6c5db0b5dc69e..8ae0e47a96ee3fb76da28f891c789702965e8ae4 100644 (file)
@@ -787,7 +787,7 @@ package body CStand is
       B_Node := New_Node (N_Character_Literal, Stloc);
       Set_Is_Static_Expression (B_Node);
       Set_Chars                (B_Node, No_Name);
-      Set_Char_Literal_Value   (B_Node, UI_From_Int (16#FF#));
+      Set_Char_Literal_Value   (B_Node, UI_From_CC (16#FF#));
       Set_Entity               (B_Node, Empty);
       Set_Etype                (B_Node, Standard_Character);
       Set_High_Bound (R_Node, B_Node);
@@ -833,7 +833,7 @@ package body CStand is
       B_Node := New_Node (N_Character_Literal, Stloc);
       Set_Is_Static_Expression (B_Node);
       Set_Chars                (B_Node, No_Name);
-      Set_Char_Literal_Value   (B_Node, UI_From_Int (16#FFFF#));
+      Set_Char_Literal_Value   (B_Node, UI_From_CC (16#FFFF#));
       Set_Entity               (B_Node, Empty);
       Set_Etype                (B_Node, Standard_Wide_Character);
       Set_High_Bound           (R_Node, B_Node);
@@ -882,7 +882,7 @@ package body CStand is
       B_Node := New_Node (N_Character_Literal, Stloc);
       Set_Is_Static_Expression (B_Node);
       Set_Chars                (B_Node, No_Name);
-      Set_Char_Literal_Value   (B_Node, UI_From_Int (16#7FFF_FFFF#));
+      Set_Char_Literal_Value   (B_Node, UI_From_CC (16#7FFF_FFFF#));
       Set_Entity               (B_Node, Empty);
       Set_Etype                (B_Node, Standard_Wide_Wide_Character);
       Set_High_Bound           (R_Node, B_Node);
@@ -1088,7 +1088,7 @@ package body CStand is
             Set_Is_Static_Expression (Expr_Decl);
             Set_Chars                (Expr_Decl, No_Name);
             Set_Etype                (Expr_Decl, Standard_Character);
-            Set_Char_Literal_Value   (Expr_Decl, UI_From_Int (Int (Ccode)));
+            Set_Char_Literal_Value   (Expr_Decl, UI_From_CC (Ccode));
          end;
 
          Append (Decl, Decl_A);
index b2eff312bafeffba3c8cfae75c75a0aa440b7ff3..855d30388269b7f328c169525ce7130b8aa1d4e4 100644 (file)
@@ -1246,7 +1246,7 @@ package body Exp_Ch11 is
       Append_To (L,
         Make_Character_Literal (Loc,
           Chars              => Name_uA,
-          Char_Literal_Value => UI_From_Int (Character'Pos ('A'))));
+          Char_Literal_Value => UI_From_CC (Get_Char_Code ('A'))));
 
       --  Name_Length component: Nam'Length
 
index 35ec2508550f4eda578241c286f4c5be552edd9e..0fe8bfffdb20d024875b95d77d223e94b25cb487 100644 (file)
@@ -2010,7 +2010,7 @@ package body Exp_Prag is
             Rewrite (Expression (Lang_Char),
               Make_Character_Literal (Loc,
                 Chars              => Name_uC,
-                Char_Literal_Value => UI_From_Int (Character'Pos ('C'))));
+                Char_Literal_Value => UI_From_CC (Get_Char_Code ('C'))));
             Analyze (Expression (Lang_Char));
 
             --  Change the value of Foreign_Data
index 30c293c3465a6eeb6237f7e0e75645f981f540bc..263b42f7586f2f1ddb38b3f18fbdcff87bd445f2 100644 (file)
@@ -4183,7 +4183,7 @@ package body Exp_Util is
 
       Build_Task_Image_Prefix (Loc, Len, Res, Pos, Pref, Sum, Decls, Stats);
 
-      Set_Character_Literal_Name (Char_Code (Character'Pos ('(')));
+      Set_Character_Literal_Name (Get_Char_Code ('('));
 
       Append_To (Stats,
         Make_Assignment_Statement (Loc,
@@ -4194,7 +4194,7 @@ package body Exp_Util is
           Expression =>
             Make_Character_Literal (Loc,
               Chars              => Name_Find,
-              Char_Literal_Value => UI_From_Int (Character'Pos ('(')))));
+              Char_Literal_Value => UI_From_CC (Get_Char_Code ('(')))));
 
       Append_To (Stats,
         Make_Assignment_Statement (Loc,
@@ -4244,7 +4244,7 @@ package body Exp_Util is
                           Expressions    =>
                             New_List (Make_Integer_Literal (Loc, 1))))));
 
-            Set_Character_Literal_Name (Char_Code (Character'Pos (',')));
+            Set_Character_Literal_Name (Get_Char_Code (','));
 
             Append_To (Stats,
               Make_Assignment_Statement (Loc,
@@ -4254,7 +4254,7 @@ package body Exp_Util is
                 Expression =>
                   Make_Character_Literal (Loc,
                     Chars              => Name_Find,
-                    Char_Literal_Value => UI_From_Int (Character'Pos (',')))));
+                    Char_Literal_Value => UI_From_CC (Get_Char_Code (',')))));
 
             Append_To (Stats,
               Make_Assignment_Statement (Loc,
@@ -4266,7 +4266,7 @@ package body Exp_Util is
          end if;
       end loop;
 
-      Set_Character_Literal_Name (Char_Code (Character'Pos (')')));
+      Set_Character_Literal_Name (Get_Char_Code (')'));
 
       Append_To (Stats,
         Make_Assignment_Statement (Loc,
@@ -4277,7 +4277,7 @@ package body Exp_Util is
            Expression =>
              Make_Character_Literal (Loc,
                Chars              => Name_Find,
-               Char_Literal_Value => UI_From_Int (Character'Pos (')')))));
+               Char_Literal_Value => UI_From_CC (Get_Char_Code (')')))));
       return Build_Task_Image_Function (Loc, Decls, Stats, Res);
    end Build_Task_Array_Image;
 
@@ -4569,7 +4569,7 @@ package body Exp_Util is
 
       Build_Task_Image_Prefix (Loc, Len, Res, Pos, Pref, Sum, Decls, Stats);
 
-      Set_Character_Literal_Name (Char_Code (Character'Pos ('.')));
+      Set_Character_Literal_Name (Get_Char_Code ('.'));
 
       --  Res (Pos) := '.';
 
@@ -4582,7 +4582,7 @@ package body Exp_Util is
              Make_Character_Literal (Loc,
                Chars => Name_Find,
                Char_Literal_Value =>
-                 UI_From_Int (Character'Pos ('.')))));
+                 UI_From_CC (Get_Char_Code ('.')))));
 
       Append_To (Stats,
         Make_Assignment_Statement (Loc,
index 1c686cd3e06a6dcfb6c10394f77143e76984b24c..734e457975befd3a990dbb69a583554f7a0c716e 100644 (file)
@@ -2245,12 +2245,12 @@ package body Sem_Res is
          elsif Nkind (N) = N_String_Literal
                  and then Is_Character_Type (Typ)
          then
-            Set_Character_Literal_Name (Char_Code (Character'Pos ('A')));
+            Set_Character_Literal_Name (Get_Char_Code ('A'));
             Rewrite (N,
               Make_Character_Literal (Sloc (N),
                 Chars => Name_Find,
                 Char_Literal_Value =>
-                  UI_From_Int (Character'Pos ('A'))));
+                  UI_From_CC (Get_Char_Code ('A'))));
             Set_Etype (N, Any_Character);
             Set_Is_Static_Expression (N);
 
index e96b96f558699864e22d5c64afdbad680137522c..5bae3cc9ae7264710d18e7698efc0b9f23db46d4 100644 (file)
@@ -441,7 +441,7 @@ package body Stringt is
          for J in 1 .. String_Length (Id) loop
             C := Get_String_Char (Id, J);
 
-            if C = Character'Pos ('"') then
+            if C = Get_Char_Code ('"') then
                Write_Str ("""""");
             else
                Write_Char_Code (C);