exp_attr.adb (Find_Stream_Subprogram): Check the base type instead of the type when...

2008-07-31  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_attr.adb (Find_Stream_Subprogram): Check the base type instead
	of the type when looking for stream subprograms for type String,
	Wide_String and Wide_Wide_String.
	
	* s-ststop.adb: Change the initialization expression of constant
	Use_Block_IO.

From-SVN: r138383
This commit is contained in:
Hristian Kirtchev 2008-07-31 12:27:04 +02:00 committed by Arnaud Charlet
parent a66495761c
commit b2c6b35f24
2 changed files with 9 additions and 13 deletions

View File

@ -5314,7 +5314,8 @@ package body Exp_Attr is
(Typ : Entity_Id;
Nam : TSS_Name_Type) return Entity_Id
is
Ent : constant Entity_Id := TSS (Typ, Nam);
Base_Typ : constant Entity_Id := Base_Type (Typ);
Ent : constant Entity_Id := TSS (Typ, Nam);
begin
if Present (Ent) then
@ -5340,7 +5341,7 @@ package body Exp_Attr is
-- String as defined in package Ada
if Typ = Standard_String then
if Base_Typ = Standard_String then
if Nam = TSS_Stream_Input then
return RTE (RE_String_Input);
@ -5356,7 +5357,7 @@ package body Exp_Attr is
-- Wide_String as defined in package Ada
elsif Typ = Standard_Wide_String then
elsif Base_Typ = Standard_Wide_String then
if Nam = TSS_Stream_Input then
return RTE (RE_Wide_String_Input);
@ -5372,7 +5373,7 @@ package body Exp_Attr is
-- Wide_Wide_String as defined in package Ada
elsif Typ = Standard_Wide_Wide_String then
elsif Base_Typ = Standard_Wide_Wide_String then
if Nam = TSS_Stream_Input then
return RTE (RE_Wide_Wide_String_Input);

View File

@ -92,17 +92,12 @@ package body System.Strings.Stream_Ops is
subtype String_Block is String_Type (1 .. C_In_Default_Block);
-- Block IO is used in the following two scenarios:
-- 1) When the size of the character type equals that of the stream
-- element type, regardless of endianness.
-- 2) When using the standard stream IO routines for elementary
-- types which guarantees the same endianness over partitions.
-- Block IO is used when the low level can support block IO and the size
-- of the character type is a multiple of the stream element type.
Use_Block_IO : constant Boolean :=
C_Size = SE_Size
or else Stream_Attributes.Block_IO_OK;
Stream_Attributes.Block_IO_OK
and then C_Size mod SE_Size = 0;
-- Conversions to and from Default_Block