diff options
author | Robert Dewar <dewar@adacore.com> | 2005-12-09 18:19:19 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2005-12-09 18:19:19 +0100 |
commit | e6d9df3c650d24bcd50b5df61d4656dea3e974da (patch) | |
tree | c29a9485008dc37a0ce489ce23a01cd8ba7dbd48 | |
parent | d82e89e9defbe9f2b9ddbbd4873f2706e30c9f27 (diff) | |
download | gcc-e6d9df3c650d24bcd50b5df61d4656dea3e974da.zip gcc-e6d9df3c650d24bcd50b5df61d4656dea3e974da.tar.gz gcc-e6d9df3c650d24bcd50b5df61d4656dea3e974da.tar.bz2 |
exp_imgv.adb (Expand_Image_Attribute): Generate extra boolean parameter in call to Image_Wide_Character.
2005-12-05 Robert Dewar <dewar@adacore.com>
* exp_imgv.adb (Expand_Image_Attribute): Generate extra boolean
parameter in call to Image_Wide_Character.
* s-imgwch.ads, s-imgwch.adb (Image_Wide_Character): Add boolean
parameter Ada_2005 to deal with annoying FFFE/FFFF inconsistency.
(Image_Wide_Character): Add boolean parameter Ada_2005 to deal with
annoying FFFE/FFFF inconsistency.
From-SVN: r108293
-rw-r--r-- | gcc/ada/exp_imgv.adb | 9 | ||||
-rw-r--r-- | gcc/ada/s-imgwch.adb | 17 | ||||
-rw-r--r-- | gcc/ada/s-imgwch.ads | 8 |
3 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb index 1fdbced..2f76d63 100644 --- a/gcc/ada/exp_imgv.adb +++ b/gcc/ada/exp_imgv.adb @@ -32,6 +32,7 @@ with Exp_Util; use Exp_Util; with Namet; use Namet; with Nmake; use Nmake; with Nlists; use Nlists; +with Opt; use Opt; with Rtsfind; use Rtsfind; with Sem_Res; use Sem_Res; with Sinfo; use Sinfo; @@ -148,7 +149,6 @@ package body Exp_Imgv is Make_Aggregate (Loc, Expressions => Ind))), Suppress => All_Checks); - end Build_Enumeration_Image_Tables; ---------------------------- @@ -191,6 +191,7 @@ package body Exp_Imgv is -- For types whose root type is Wide_Character -- xx = Wide_Character -- tv = Wide_Character (Expr) + -- pm = Boolean, true if Ada 2005 mode, False otherwise -- For types whose root type is Wide_Wide_Character -- xx = Wide_Wide_haracter @@ -398,6 +399,12 @@ package body Exp_Imgv is Set_Conversion_OK (First (Arglist)); Set_Etype (First (Arglist), Tent); + + -- For Wide_Character, append Ada 2005 indication + + elsif Rtyp = Standard_Wide_Character then + Append_To (Arglist, + New_Reference_To (Boolean_Literals (Ada_Version >= Ada_05), Loc)); end if; Rewrite (N, diff --git a/gcc/ada/s-imgwch.adb b/gcc/ada/s-imgwch.adb index dc524da..a408ef6 100644 --- a/gcc/ada/s-imgwch.adb +++ b/gcc/ada/s-imgwch.adb @@ -42,9 +42,24 @@ package body System.Img_WChar is -------------------------- function Image_Wide_Character - (V : Wide_Character) return String + (V : Wide_Character; + Ada_2005 : Boolean) return String is begin + -- Annoying Ada 95 incompatibility with FFFE/FFFF + + if V >= Wide_Character'Val (16#FFFE#) + and then not Ada_2005 + then + if V = Wide_Character'Val (16#FFFE#) then + return "FFFE"; + else + return "FFFF"; + end if; + end if; + + -- Normal case, same as Wide_Wide_Character + return Image_Wide_Wide_Character (Wide_Wide_Character'Val (Wide_Character'Pos (V))); diff --git a/gcc/ada/s-imgwch.ads b/gcc/ada/s-imgwch.ads index 61f4441..b827b80 100644 --- a/gcc/ada/s-imgwch.ads +++ b/gcc/ada/s-imgwch.ads @@ -36,8 +36,12 @@ package System.Img_WChar is pragma Pure; - function Image_Wide_Character (V : Wide_Character) return String; - -- Computes Wide_Character'Image (V) and returns the computed result + function Image_Wide_Character + (V : Wide_Character; + Ada_2005 : Boolean) return String; + -- Computes Wide_Character'Image (V) and returns the computed result. The + -- parameter Ada_2005 is True if operating in Ada 2005 mode (or beyond). + -- This is needed for the annoying FFFE/FFFF incompatibility. function Image_Wide_Wide_Character (V : Wide_Wide_Character) return String; -- Computes Wide_Wide_Character'Image (V) and returns the computed result |