diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2008-08-01 12:47:27 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2008-08-01 12:47:27 +0200 |
commit | 585df50b0c63b895742726b556732faac623fa35 (patch) | |
tree | 901aa00917dc6e453a022ff13c76ed721ac6fb44 /gcc/ada/exp_attr.adb | |
parent | 20b40e7b4413bac4698d39675c32ce4b0eb61e45 (diff) | |
download | gcc-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.adb | 97 |
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; |