diff options
Diffstat (limited to 'gcc/ada/krunch.adb')
-rw-r--r-- | gcc/ada/krunch.adb | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ada/krunch.adb b/gcc/ada/krunch.adb index da0929c49d4..a325063d2f5 100644 --- a/gcc/ada/krunch.adb +++ b/gcc/ada/krunch.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2000 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -44,6 +44,7 @@ is Krlen : Natural; Num_Seps : Natural; Startloc : Natural; + J : Natural; begin -- Deal with special predefined children cases. Startloc is the first @@ -64,6 +65,15 @@ begin Curlen := Len - 12; Krlen := 8; + elsif Len >= 23 + and then Buffer (1 .. 22) = "ada-wide_wide_text_io-" + then + Startloc := 3; + Buffer (2 .. 5) := "-zt-"; + Buffer (6 .. Len - 17) := Buffer (23 .. Len); + Curlen := Len - 17; + Krlen := 8; + elsif Len >= 4 and then Buffer (1 .. 4) = "ada-" then Startloc := 3; Buffer (2 .. Len - 2) := Buffer (4 .. Len); @@ -138,6 +148,26 @@ begin return; end if; + -- If string contains Wide_Wide, replace by a single z + + J := Startloc; + while J <= Curlen - 8 loop + if Buffer (J .. J + 8) = "wide_wide" + and then (J = Startloc + or else Buffer (J - 1) = '-' + or else Buffer (J - 1) = '_') + and then (J + 8 = Curlen + or else Buffer (J + 9) = '-' + or else Buffer (J + 9) = '_') + then + Buffer (J) := 'z'; + Buffer (J + 1 .. Curlen - 8) := Buffer (J + 9 .. Curlen); + Curlen := Curlen - 8; + end if; + + J := J + 1; + end loop; + -- For now, refuse to krunch a name that contains an ESC character (wide -- character sequence) since it's too much trouble to do this right ??? @@ -152,7 +182,6 @@ begin -- the krunching process, and then we eliminate them as the last step Num_Seps := 0; - for J in Startloc .. Curlen loop if Buffer (J) = '-' or else Buffer (J) = '_' then Buffer (J) := ' '; |