Commit dae4faf2 by Thomas Quinot Committed by Arnaud Charlet

exp_dist.adb (Build_From_Any_Call): For a subtype that is a generic actual type...

2009-04-16  Thomas Quinot  <quinot@adacore.com>

	* exp_dist.adb (Build_From_Any_Call): For a subtype that is a generic
	actual type, use the base type to build the To_Any function.
	(Build_From_Any_Function): Remove junk, useless subtype conversion.

2009-04-16  Thomas Quinot  <quinot@adacore.com>

	* exp_ch9.adb, exp_code.adb, tbuild.adb, sem_case.adb,
	restrict.adb: Minor code reorganization (use
	Add_{Char,Str}_To_Name_Buffer instead of inlining it by hand).

From-SVN: r146166
parent 2794f022
2009-04-16 Thomas Quinot <quinot@adacore.com>
* exp_dist.adb (Build_From_Any_Call): For a subtype that is a generic
actual type, use the base type to build the To_Any function.
(Build_From_Any_Function): Remove junk, useless subtype conversion.
2009-04-16 Thomas Quinot <quinot@adacore.com>
* exp_ch9.adb, exp_code.adb, tbuild.adb, sem_case.adb,
restrict.adb: Minor code reorganization (use
Add_{Char,Str}_To_Name_Buffer instead of inlining it by hand).
2009-04-16 Bob Duff <duff@adacore.com> 2009-04-16 Bob Duff <duff@adacore.com>
* exp_ch6.ads, exp_ch6.adb (Is_Build_In_Place_Function_Return): Remove, * exp_ch6.ads, exp_ch6.adb (Is_Build_In_Place_Function_Return): Remove,
...@@ -1218,8 +1218,7 @@ package body Exp_Ch9 is ...@@ -1218,8 +1218,7 @@ package body Exp_Ch9 is
-- Add a leading '(' -- Add a leading '('
Name_Len := Name_Len + 1; Add_Char_To_Name_Buffer ('(');
Name_Buffer (Name_Len) := '(';
-- Generate: -- Generate:
-- new String'("<Entry name>(" & Lnn'Img & ")"); -- new String'("<Entry name>(" & Lnn'Img & ")");
...@@ -3176,13 +3175,9 @@ package body Exp_Ch9 is ...@@ -3176,13 +3175,9 @@ package body Exp_Ch9 is
Name_Len := Name_Len - 1; Name_Len := Name_Len - 1;
end if; end if;
Name_Buffer (Name_Len + 1) := '_'; Add_Str_To_Name_Buffer ("__");
Name_Buffer (Name_Len + 2) := '_';
Name_Len := Name_Len + 2;
for J in 1 .. Select_Len loop for J in 1 .. Select_Len loop
Name_Len := Name_Len + 1; Add_Char_To_Name_Buffer (Select_Buffer (J));
Name_Buffer (Name_Len) := Select_Buffer (J);
end loop; end loop;
-- Now add the Append_Char if specified. The encoding to follow -- Now add the Append_Char if specified. The encoding to follow
...@@ -3195,13 +3190,10 @@ package body Exp_Ch9 is ...@@ -3195,13 +3190,10 @@ package body Exp_Ch9 is
if Append_Char /= ' ' then if Append_Char /= ' ' then
if Append_Char = 'P' or Append_Char = 'N' then if Append_Char = 'P' or Append_Char = 'N' then
Name_Len := Name_Len + 1; Add_Char_To_Name_Buffer (Append_Char);
Name_Buffer (Name_Len) := Append_Char;
return Name_Find; return Name_Find;
else else
Name_Buffer (Name_Len + 1) := '_'; Add_Str_To_Name_Buffer ((1 => '_', 2 => Append_Char));
Name_Buffer (Name_Len + 2) := Append_Char;
Name_Len := Name_Len + 2;
return New_External_Name (Name_Find, ' ', -1); return New_External_Name (Name_Find, ' ', -1);
end if; end if;
else else
......
...@@ -220,8 +220,7 @@ package body Exp_Code is ...@@ -220,8 +220,7 @@ package body Exp_Code is
Name_Len := 0; Name_Len := 0;
loop loop
Name_Len := Name_Len + 1; Add_Char_To_Name_Buffer (C);
Name_Buffer (Name_Len) := C;
Clobber_Ptr := Clobber_Ptr + 1; Clobber_Ptr := Clobber_Ptr + 1;
exit when Clobber_Ptr > Len; exit when Clobber_Ptr > Len;
C := Get_Character (Get_String_Char (Str, Clobber_Ptr)); C := Get_Character (Get_String_Char (Str, Clobber_Ptr));
......
...@@ -8461,8 +8461,17 @@ package body Exp_Dist is ...@@ -8461,8 +8461,17 @@ package body Exp_Dist is
else else
declare declare
Decl : Entity_Id; Decl : Entity_Id;
Typ : Entity_Id := U_Type;
begin begin
Build_From_Any_Function (Loc, U_Type, Decl, Fnam); -- For the subtype representing a generic actual type, go
-- to the base type.
if Is_Generic_Actual_Type (Typ) then
Typ := Base_Type (Typ);
end if;
Build_From_Any_Function (Loc, Typ, Decl, Fnam);
Append_To (Decls, Decl); Append_To (Decls, Decl);
end; end;
end if; end if;
...@@ -8565,11 +8574,10 @@ package body Exp_Dist is ...@@ -8565,11 +8574,10 @@ package body Exp_Dist is
Append_To (Stms, Append_To (Stms,
Make_Simple_Return_Statement (Loc, Make_Simple_Return_Statement (Loc,
Expression => Expression =>
OK_Convert_To (Typ,
Build_From_Any_Call Build_From_Any_Call
(Etype (Typ), (Etype (Typ),
New_Occurrence_Of (Any_Parameter, Loc), New_Occurrence_Of (Any_Parameter, Loc),
Decls)))); Decls)));
else else
declare declare
......
...@@ -154,10 +154,7 @@ package body Restrict is ...@@ -154,10 +154,7 @@ package body Restrict is
-- Strip extension and pad to eight characters -- Strip extension and pad to eight characters
Name_Len := Name_Len - 4; Name_Len := Name_Len - 4;
while Name_Len < 8 loop Add_Str_To_Name_Buffer ((Name_Len + 1 .. 8 => ' '));
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := ' ';
end loop;
-- If predefined unit, check the list of restricted units -- If predefined unit, check the list of restricted units
......
...@@ -313,26 +313,11 @@ package body Sem_Case is ...@@ -313,26 +313,11 @@ package body Sem_Case is
-- the pos value passed as an argument to Choice_Image. -- the pos value passed as an argument to Choice_Image.
Get_Name_String (Chars (First_Subtype (Ctype))); Get_Name_String (Chars (First_Subtype (Ctype)));
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := ''';
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := 'v';
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := 'a';
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := 'l';
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := '(';
Add_Str_To_Name_Buffer ("'val(");
UI_Image (Value); UI_Image (Value);
Add_Str_To_Name_Buffer (UI_Image_Buffer (1 .. UI_Image_Length));
for J in 1 .. UI_Image_Length loop Add_Char_To_Name_Buffer (')');
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := UI_Image_Buffer (J);
end loop;
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := ')';
return Name_Find; return Name_Find;
end Choice_Image; end Choice_Image;
......
...@@ -511,8 +511,7 @@ package body Tbuild is ...@@ -511,8 +511,7 @@ package body Tbuild is
if Suffix /= ' ' then if Suffix /= ' ' then
pragma Assert (Is_OK_Internal_Letter (Suffix)); pragma Assert (Is_OK_Internal_Letter (Suffix));
Name_Len := Name_Len + 1; Add_Char_To_Name_Buffer (Suffix);
Name_Buffer (Name_Len) := Suffix;
end if; end if;
if Suffix_Index /= 0 then if Suffix_Index /= 0 then
...@@ -637,10 +636,8 @@ package body Tbuild is ...@@ -637,10 +636,8 @@ package body Tbuild is
is is
begin begin
Get_Name_String (Related_Id); Get_Name_String (Related_Id);
Name_Len := Name_Len + 1; Add_Char_To_Name_Buffer ('_');
Name_Buffer (Name_Len) := '_'; Add_Str_To_Name_Buffer (Suffix);
Name_Buffer (Name_Len + 1 .. Name_Len + Suffix'Length) := Suffix;
Name_Len := Name_Len + Suffix'Length;
return Name_Find; return Name_Find;
end New_Suffixed_Name; end New_Suffixed_Name;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment