aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_attr.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2008-08-01 12:47:27 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2008-08-01 12:47:27 +0200
commit585df50b0c63b895742726b556732faac623fa35 (patch)
tree901aa00917dc6e453a022ff13c76ed721ac6fb44 /gcc/ada/exp_attr.adb
parent20b40e7b4413bac4698d39675c32ce4b0eb61e45 (diff)
downloadgcc-585df50b0c63b895742726b556732faac623fa35.zip
gcc-585df50b0c63b895742726b556732faac623fa35.tar.gz
gcc-585df50b0c63b895742726b556732faac623fa35.tar.bz2
rtsfind.ads: Add block IO versions of stream routines for Strings.
2008-08-01 Hristian Kirtchev <kirtchev@adacore.com> * rtsfind.ads: Add block IO versions of stream routines for Strings. * bindgen.adb, gnat_rm.texi, gnat_ugn.texi, opt.ads, sem_prag.adb, snames.adb, snames.ads, snames.h, par-prag.adb: Undo Canonical_Streams related changes. * s-rident.ads: Add new restriction No_Stream_Optimizations. * s-ststop.ads, s-ststop.adb: Comment reformatting. Define enumeration type to designate different IO mechanisms. Enchance generic package Stream_Ops_Internal to include an implementation of Input and Output. * exp_attr.adb (Find_Stream_Subprogram): If restriction No_Stream_Optimization is active, choose the default byte IO implementations of stream attributes for Strings. Otherwise use the corresponding block IO version. From-SVN: r138511
Diffstat (limited to 'gcc/ada/exp_attr.adb')
-rw-r--r--gcc/ada/exp_attr.adb97
1 files changed, 72 insertions, 25 deletions
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 84bc808..8e0a83b 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -5365,53 +5365,100 @@ package body Exp_Attr is
and then
not Is_Predefined_File_Name (Unit_File_Name (Current_Sem_Unit))
then
-
-- String as defined in package Ada
if Base_Typ = Standard_String then
- if Nam = TSS_Stream_Input then
- return RTE (RE_String_Input);
+ if Restriction_Active (No_Stream_Optimizations) then
+ if Nam = TSS_Stream_Input then
+ return RTE (RE_String_Input);
+
+ elsif Nam = TSS_Stream_Output then
+ return RTE (RE_String_Output);
+
+ elsif Nam = TSS_Stream_Read then
+ return RTE (RE_String_Read);
- elsif Nam = TSS_Stream_Output then
- return RTE (RE_String_Output);
+ else pragma Assert (Nam = TSS_Stream_Write);
+ return RTE (RE_String_Write);
+ end if;
+
+ else
+ if Nam = TSS_Stream_Input then
+ return RTE (RE_String_Input_Blk_IO);
- elsif Nam = TSS_Stream_Read then
- return RTE (RE_String_Read);
+ elsif Nam = TSS_Stream_Output then
+ return RTE (RE_String_Output_Blk_IO);
- else pragma Assert (Nam = TSS_Stream_Write);
- return RTE (RE_String_Write);
+ elsif Nam = TSS_Stream_Read then
+ return RTE (RE_String_Read_Blk_IO);
+
+ else pragma Assert (Nam = TSS_Stream_Write);
+ return RTE (RE_String_Write_Blk_IO);
+ end if;
end if;
-- Wide_String as defined in package Ada
elsif Base_Typ = Standard_Wide_String then
- if Nam = TSS_Stream_Input then
- return RTE (RE_Wide_String_Input);
+ if Restriction_Active (No_Stream_Optimizations) then
+ if Nam = TSS_Stream_Input then
+ return RTE (RE_Wide_String_Input);
+
+ elsif Nam = TSS_Stream_Output then
+ return RTE (RE_Wide_String_Output);
+
+ elsif Nam = TSS_Stream_Read then
+ return RTE (RE_Wide_String_Read);
+
+ else pragma Assert (Nam = TSS_Stream_Write);
+ return RTE (RE_Wide_String_Write);
+ end if;
+
+ else
+ if Nam = TSS_Stream_Input then
+ return RTE (RE_Wide_String_Input_Blk_IO);
- elsif Nam = TSS_Stream_Output then
- return RTE (RE_Wide_String_Output);
+ elsif Nam = TSS_Stream_Output then
+ return RTE (RE_Wide_String_Output_Blk_IO);
- elsif Nam = TSS_Stream_Read then
- return RTE (RE_Wide_String_Read);
+ elsif Nam = TSS_Stream_Read then
+ return RTE (RE_Wide_String_Read_Blk_IO);
- else pragma Assert (Nam = TSS_Stream_Write);
- return RTE (RE_Wide_String_Write);
+ else pragma Assert (Nam = TSS_Stream_Write);
+ return RTE (RE_Wide_String_Write_Blk_IO);
+ end if;
end if;
-- Wide_Wide_String as defined in package Ada
elsif Base_Typ = Standard_Wide_Wide_String then
- if Nam = TSS_Stream_Input then
- return RTE (RE_Wide_Wide_String_Input);
+ if Restriction_Active (No_Stream_Optimizations) then
+ if Nam = TSS_Stream_Input then
+ return RTE (RE_Wide_Wide_String_Input);
+
+ elsif Nam = TSS_Stream_Output then
+ return RTE (RE_Wide_Wide_String_Output);
- elsif Nam = TSS_Stream_Output then
- return RTE (RE_Wide_Wide_String_Output);
+ elsif Nam = TSS_Stream_Read then
+ return RTE (RE_Wide_Wide_String_Read);
- elsif Nam = TSS_Stream_Read then
- return RTE (RE_Wide_Wide_String_Read);
+ else pragma Assert (Nam = TSS_Stream_Write);
+ return RTE (RE_Wide_Wide_String_Write);
+ end if;
- else pragma Assert (Nam = TSS_Stream_Write);
- return RTE (RE_Wide_Wide_String_Write);
+ else
+ if Nam = TSS_Stream_Input then
+ return RTE (RE_Wide_Wide_String_Input_Blk_IO);
+
+ elsif Nam = TSS_Stream_Output then
+ return RTE (RE_Wide_Wide_String_Output_Blk_IO);
+
+ elsif Nam = TSS_Stream_Read then
+ return RTE (RE_Wide_Wide_String_Read_Blk_IO);
+
+ else pragma Assert (Nam = TSS_Stream_Write);
+ return RTE (RE_Wide_Wide_String_Write_Blk_IO);
+ end if;
end if;
end if;
end if;