summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/Makefile.rtl81
-rw-r--r--gcc/ada/a-chahan.adb213
-rw-r--r--gcc/ada/a-chahan.ads108
-rw-r--r--gcc/ada/a-except.adb59
-rw-r--r--gcc/ada/a-strbou.adb37
-rw-r--r--gcc/ada/a-strbou.ads986
-rw-r--r--gcc/ada/a-string.ads9
-rw-r--r--gcc/ada/a-strsup.adb343
-rw-r--r--gcc/ada/a-strsup.ads245
-rw-r--r--gcc/ada/a-stunau.ads4
-rw-r--r--gcc/ada/a-stwibo.adb42
-rw-r--r--gcc/ada/a-stwibo.ads1015
-rw-r--r--gcc/ada/a-stwisu.adb350
-rw-r--r--gcc/ada/a-stwisu.ads284
-rw-r--r--gcc/ada/a-stwiun.adb182
-rw-r--r--gcc/ada/a-stwiun.ads304
-rw-r--r--gcc/ada/a-suteio.adb45
-rw-r--r--gcc/ada/a-suteio.ads8
-rw-r--r--gcc/ada/a-swuwti.adb66
-rw-r--r--gcc/ada/a-swuwti.ads17
-rw-r--r--gcc/ada/a-tags.adb242
-rw-r--r--gcc/ada/a-tags.ads41
-rw-r--r--gcc/ada/ada-tree.h8
-rw-r--r--gcc/ada/ali-util.adb8
-rw-r--r--gcc/ada/ali.adb13
-rw-r--r--gcc/ada/ali.ads8
-rw-r--r--gcc/ada/atree.adb29
-rw-r--r--gcc/ada/atree.ads37
-rw-r--r--gcc/ada/atree.h92
-rw-r--r--gcc/ada/binde.adb10
-rw-r--r--gcc/ada/bindgen.adb92
-rw-r--r--gcc/ada/bindusg.adb7
-rw-r--r--gcc/ada/checks.adb38
-rw-r--r--gcc/ada/cstand.adb174
-rw-r--r--gcc/ada/einfo.adb159
-rw-r--r--gcc/ada/einfo.ads46
-rw-r--r--gcc/ada/errout.adb6
-rw-r--r--gcc/ada/exp_attr.adb129
-rw-r--r--gcc/ada/exp_ch11.adb6
-rw-r--r--gcc/ada/exp_ch3.adb277
-rw-r--r--gcc/ada/exp_ch3.ads13
-rw-r--r--gcc/ada/exp_ch6.adb4
-rw-r--r--gcc/ada/exp_dbug.adb5
-rw-r--r--gcc/ada/exp_disp.adb146
-rw-r--r--gcc/ada/exp_disp.ads4
-rw-r--r--gcc/ada/exp_dist.adb194
-rw-r--r--gcc/ada/exp_imgv.adb173
-rw-r--r--gcc/ada/exp_imgv.ads12
-rw-r--r--gcc/ada/exp_prag.adb11
-rw-r--r--gcc/ada/exp_strm.adb92
-rw-r--r--gcc/ada/exp_util.adb13
-rw-r--r--gcc/ada/g-utf_32.adb1622
-rw-r--r--gcc/ada/g-utf_32.ads124
-rw-r--r--gcc/ada/g-zstspl.ads46
-rw-r--r--gcc/ada/gnatbind.adb24
-rw-r--r--gcc/ada/gnatls.adb24
-rw-r--r--gcc/ada/i-c.adb445
-rw-r--r--gcc/ada/i-c.ads162
-rw-r--r--gcc/ada/i-cpp.adb159
-rw-r--r--gcc/ada/i-cpp.ads40
-rw-r--r--gcc/ada/impunit.adb186
-rw-r--r--gcc/ada/impunit.ads35
-rw-r--r--gcc/ada/krunch.adb33
-rw-r--r--gcc/ada/krunch.ads9
-rw-r--r--gcc/ada/lib-xref.adb10
-rw-r--r--gcc/ada/mlib-prj.adb22
-rw-r--r--gcc/ada/mlib.adb14
-rw-r--r--gcc/ada/namet.adb79
-rw-r--r--gcc/ada/namet.ads71
-rw-r--r--gcc/ada/opt.ads7
-rw-r--r--gcc/ada/par-ch12.adb50
-rw-r--r--gcc/ada/par-ch2.adb33
-rw-r--r--gcc/ada/par-ch3.adb17
-rw-r--r--gcc/ada/par-prag.adb10
-rw-r--r--gcc/ada/rtsfind.adb54
-rw-r--r--gcc/ada/rtsfind.ads84
-rw-r--r--gcc/ada/s-imgwch.adb40
-rw-r--r--gcc/ada/s-imgwch.ads20
-rw-r--r--gcc/ada/s-scaval.adb24
-rw-r--r--gcc/ada/s-scaval.ads31
-rw-r--r--gcc/ada/s-strops.adb24
-rw-r--r--gcc/ada/s-strops.ads10
-rw-r--r--gcc/ada/s-valwch.adb47
-rw-r--r--gcc/ada/s-valwch.ads14
-rw-r--r--gcc/ada/s-wchcnv.adb330
-rw-r--r--gcc/ada/s-wchcnv.ads37
-rw-r--r--gcc/ada/s-wchcon.ads52
-rw-r--r--gcc/ada/s-wchstw.adb269
-rw-r--r--gcc/ada/s-wchstw.ads16
-rw-r--r--gcc/ada/s-wchwts.adb179
-rw-r--r--gcc/ada/s-wchwts.ads19
-rw-r--r--gcc/ada/s-widwch.adb66
-rw-r--r--gcc/ada/s-widwch.ads12
-rw-r--r--gcc/ada/s-wwdcha.adb24
-rw-r--r--gcc/ada/s-wwdcha.ads10
-rw-r--r--gcc/ada/s-wwdenu.adb146
-rw-r--r--gcc/ada/s-wwdenu.ads34
-rw-r--r--gcc/ada/s-wwdwch.adb147
-rw-r--r--gcc/ada/s-wwdwch.ads25
-rw-r--r--gcc/ada/scans.ads5
-rw-r--r--gcc/ada/scn.adb5
-rw-r--r--gcc/ada/scng.adb850
-rw-r--r--gcc/ada/sem_aggr.adb75
-rw-r--r--gcc/ada/sem_attr.adb137
-rw-r--r--gcc/ada/sem_case.adb9
-rw-r--r--gcc/ada/sem_ch10.adb24
-rw-r--r--gcc/ada/sem_ch12.adb91
-rw-r--r--gcc/ada/sem_ch13.adb48
-rw-r--r--gcc/ada/sem_ch2.adb3
-rw-r--r--gcc/ada/sem_ch3.adb24
-rw-r--r--gcc/ada/sem_ch5.adb8
-rw-r--r--gcc/ada/sem_ch6.adb656
-rw-r--r--gcc/ada/sem_ch8.adb72
-rw-r--r--gcc/ada/sem_disp.adb123
-rw-r--r--gcc/ada/sem_eval.adb63
-rw-r--r--gcc/ada/sem_prag.adb112
-rw-r--r--gcc/ada/sem_res.adb183
-rw-r--r--gcc/ada/sem_util.adb39
-rw-r--r--gcc/ada/sinfo.adb43
-rw-r--r--gcc/ada/sinfo.ads70
-rw-r--r--gcc/ada/sinput.adb54
-rw-r--r--gcc/ada/sinput.ads65
-rw-r--r--gcc/ada/snames.adb2091
-rw-r--r--gcc/ada/snames.ads2981
-rw-r--r--gcc/ada/snames.h213
-rw-r--r--gcc/ada/sprint.adb45
-rw-r--r--gcc/ada/stand.ads10
-rw-r--r--gcc/ada/stringt.adb28
-rw-r--r--gcc/ada/stringt.ads6
-rw-r--r--gcc/ada/switch-b.adb8
-rw-r--r--gcc/ada/trans.c22
-rw-r--r--gcc/ada/treepr.adb15
-rw-r--r--gcc/ada/ttypes.ads9
-rw-r--r--gcc/ada/types.adb21
-rw-r--r--gcc/ada/types.ads48
-rw-r--r--gcc/ada/types.h58
-rw-r--r--gcc/ada/uintp.adb44
-rw-r--r--gcc/ada/uintp.ads17
-rw-r--r--gcc/ada/uintp.h10
-rw-r--r--gcc/ada/vms_data.ads40
-rw-r--r--gcc/ada/widechar.adb1654
-rw-r--r--gcc/ada/widechar.ads94
142 files changed, 14587 insertions, 7009 deletions
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
index 4c01553fe50..282cbff9569 100644
--- a/gcc/ada/Makefile.rtl
+++ b/gcc/ada/Makefile.rtl
@@ -1,5 +1,5 @@
# Makefile.rtl for GNU Ada Compiler (GNAT).
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
#This file is part of GCC.
@@ -75,13 +75,40 @@ GNATRTL_TASKING_OBJS= \
GNATRTL_NONTASKING_OBJS= \
a-caldel$(objext) \
a-calend$(objext) \
+ a-cdlili$(objext) \
+ a-cgaaso$(objext) \
+ a-cgarso$(objext) \
+ a-cgcaso$(objext) \
a-chahan$(objext) \
a-charac$(objext) \
a-chlat1$(objext) \
a-chlat9$(objext) \
+ a-chtgke$(objext) \
+ a-chtgop$(objext) \
+ a-chzla1$(objext) \
+ a-chzla9$(objext) \
+ a-cidlli$(objext) \
+ a-cihama$(objext) \
+ a-cihase$(objext) \
+ a-ciorma$(objext) \
+ a-ciormu$(objext) \
+ a-ciorse$(objext) \
+ a-cohama$(objext) \
+ a-cohase$(objext) \
+ a-cohata$(objext) \
+ a-coinve$(objext) \
a-colien$(objext) \
a-colire$(objext) \
a-comlin$(objext) \
+ a-contai$(objext) \
+ a-convec$(objext) \
+ a-coorma$(objext) \
+ a-coormu$(objext) \
+ a-coorse$(objext) \
+ a-coprnu$(objext) \
+ a-crbltr$(objext) \
+ a-crbtgk$(objext) \
+ a-crbtgo$(objext) \
a-cwila1$(objext) \
a-cwila9$(objext) \
a-decima$(objext) \
@@ -102,12 +129,16 @@ GNATRTL_NONTASKING_OBJS= \
a-iwteio$(objext) \
a-lfteio$(objext) \
a-lfwtio$(objext) \
+ a-lfztio$(objext) \
a-liteio$(objext) \
a-liwtio$(objext) \
+ a-liztio$(objext) \
a-llftio$(objext) \
a-llfwti$(objext) \
+ a-llfzti$(objext) \
a-llitio$(objext) \
a-lliwti$(objext) \
+ a-llizti$(objext) \
a-ncelfu$(objext) \
a-ngcefu$(objext) \
a-ngcoty$(objext) \
@@ -127,20 +158,28 @@ GNATRTL_NONTASKING_OBJS= \
a-nuflra$(objext) \
a-numaux$(objext) \
a-numeri$(objext) \
+ a-rbtgso$(objext) \
+ a-secain$(objext) \
a-sequio$(objext) \
a-sfteio$(objext) \
a-sfwtio$(objext) \
+ a-sfztio$(objext) \
+ a-shcain$(objext) \
a-siocst$(objext) \
a-siteio$(objext) \
a-siwtio$(objext) \
+ a-siztio$(objext) \
+ a-slcain$(objext) \
a-ssicst$(objext) \
a-ssitio$(objext) \
a-ssiwti$(objext) \
+ a-ssizti$(objext) \
a-stmaco$(objext) \
a-storio$(objext) \
a-strbou$(objext) \
a-stream$(objext) \
a-strfix$(objext) \
+ a-strhas$(objext) \
a-string$(objext) \
a-strmap$(objext) \
a-strsea$(objext) \
@@ -148,15 +187,30 @@ GNATRTL_NONTASKING_OBJS= \
a-strunb$(objext) \
a-ststio$(objext) \
a-stunau$(objext) \
+ a-stunha$(objext) \
a-stwibo$(objext) \
a-stwifi$(objext) \
+ a-stwiha$(objext) \
a-stwima$(objext) \
a-stwise$(objext) \
a-stwisu$(objext) \
a-stwiun$(objext) \
+ a-stzbou$(objext) \
+ a-stzfix$(objext) \
+ a-stzhas$(objext) \
+ a-stzmap$(objext) \
+ a-stzsea$(objext) \
+ a-stzsup$(objext) \
+ a-stzunb$(objext) \
a-suteio$(objext) \
- a-swuwti$(objext) \
a-swmwco$(objext) \
+ a-swunau$(objext) \
+ a-swunha$(objext) \
+ a-swuwti$(objext) \
+ a-szmzco$(objext) \
+ a-szunau$(objext) \
+ a-szunha$(objext) \
+ a-szuzti$(objext) \
a-tags$(objext) \
a-teioed$(objext) \
a-textio$(objext) \
@@ -176,6 +230,7 @@ GNATRTL_NONTASKING_OBJS= \
a-timoio$(objext) \
a-tiocst$(objext) \
a-titest$(objext) \
+ a-tiunio$(objext) \
a-unccon$(objext) \
a-uncdea$(objext) \
a-witeio$(objext) \
@@ -196,6 +251,26 @@ GNATRTL_NONTASKING_OBJS= \
a-wtmoau$(objext) \
a-wtmoio$(objext) \
a-wttest$(objext) \
+ a-wwunio$(objext) \
+ a-ztcoau$(objext) \
+ a-ztcoio$(objext) \
+ a-ztcstr$(objext) \
+ a-ztdeau$(objext) \
+ a-ztdeio$(objext) \
+ a-ztedit$(objext) \
+ a-ztenau$(objext) \
+ a-ztenio$(objext) \
+ a-ztexio$(objext) \
+ a-ztfiio$(objext) \
+ a-ztflau$(objext) \
+ a-ztflio$(objext) \
+ a-ztgeau$(objext) \
+ a-ztinau$(objext) \
+ a-ztinio$(objext) \
+ a-ztmoau$(objext) \
+ a-ztmoio$(objext) \
+ a-zttest$(objext) \
+ a-zzunio$(objext) \
ada$(objext) \
calendar$(objext) \
g-arrspl$(objext) \
@@ -256,7 +331,9 @@ GNATRTL_NONTASKING_OBJS= \
g-table$(objext) \
g-tasloc$(objext) \
g-traceb$(objext) \
+ g-utf_32$(objext) \
g-wistsp$(objext) \
+ g-zstspl$(objext) \
gnat$(objext) \
i-c$(objext) \
i-cexten$(objext) \
diff --git a/gcc/ada/a-chahan.adb b/gcc/ada/a-chahan.adb
index 11733401137..c94a999ddf3 100644
--- a/gcc/ada/a-chahan.adb
+++ b/gcc/ada/a-chahan.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2001 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- --
@@ -281,7 +281,7 @@ package body Ada.Characters.Handling is
-- Is_Alphanumeric --
---------------------
- function Is_Alphanumeric (Item : in Character) return Boolean is
+ function Is_Alphanumeric (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Alphanum) /= 0;
end Is_Alphanumeric;
@@ -290,7 +290,7 @@ package body Ada.Characters.Handling is
-- Is_Basic --
--------------
- function Is_Basic (Item : in Character) return Boolean is
+ function Is_Basic (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Basic) /= 0;
end Is_Basic;
@@ -299,16 +299,21 @@ package body Ada.Characters.Handling is
-- Is_Character --
------------------
- function Is_Character (Item : in Wide_Character) return Boolean is
+ function Is_Character (Item : Wide_Character) return Boolean is
begin
return Wide_Character'Pos (Item) < 256;
end Is_Character;
+ function Is_Character (Item : Wide_Wide_Character) return Boolean is
+ begin
+ return Wide_Wide_Character'Pos (Item) < 256;
+ end Is_Character;
+
----------------
-- Is_Control --
----------------
- function Is_Control (Item : in Character) return Boolean is
+ function Is_Control (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Control) /= 0;
end Is_Control;
@@ -317,7 +322,7 @@ package body Ada.Characters.Handling is
-- Is_Digit --
--------------
- function Is_Digit (Item : in Character) return Boolean is
+ function Is_Digit (Item : Character) return Boolean is
begin
return Item in '0' .. '9';
end Is_Digit;
@@ -326,7 +331,7 @@ package body Ada.Characters.Handling is
-- Is_Graphic --
----------------
- function Is_Graphic (Item : in Character) return Boolean is
+ function Is_Graphic (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Graphic) /= 0;
end Is_Graphic;
@@ -335,7 +340,7 @@ package body Ada.Characters.Handling is
-- Is_Hexadecimal_Digit --
--------------------------
- function Is_Hexadecimal_Digit (Item : in Character) return Boolean is
+ function Is_Hexadecimal_Digit (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Hex_Digit) /= 0;
end Is_Hexadecimal_Digit;
@@ -344,7 +349,7 @@ package body Ada.Characters.Handling is
-- Is_ISO_646 --
----------------
- function Is_ISO_646 (Item : in Character) return Boolean is
+ function Is_ISO_646 (Item : Character) return Boolean is
begin
return Item in ISO_646;
end Is_ISO_646;
@@ -352,7 +357,7 @@ package body Ada.Characters.Handling is
-- Note: much more efficient coding of the following function is possible
-- by testing several 16#80# bits in a complete word in a single operation
- function Is_ISO_646 (Item : in String) return Boolean is
+ function Is_ISO_646 (Item : String) return Boolean is
begin
for J in Item'Range loop
if Item (J) not in ISO_646 then
@@ -367,7 +372,7 @@ package body Ada.Characters.Handling is
-- Is_Letter --
---------------
- function Is_Letter (Item : in Character) return Boolean is
+ function Is_Letter (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Letter) /= 0;
end Is_Letter;
@@ -376,7 +381,7 @@ package body Ada.Characters.Handling is
-- Is_Lower --
--------------
- function Is_Lower (Item : in Character) return Boolean is
+ function Is_Lower (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Lower) /= 0;
end Is_Lower;
@@ -385,7 +390,7 @@ package body Ada.Characters.Handling is
-- Is_Special --
----------------
- function Is_Special (Item : in Character) return Boolean is
+ function Is_Special (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Special) /= 0;
end Is_Special;
@@ -394,7 +399,7 @@ package body Ada.Characters.Handling is
-- Is_String --
---------------
- function Is_String (Item : in Wide_String) return Boolean is
+ function Is_String (Item : Wide_String) return Boolean is
begin
for J in Item'Range loop
if Wide_Character'Pos (Item (J)) >= 256 then
@@ -405,25 +410,60 @@ package body Ada.Characters.Handling is
return True;
end Is_String;
+ function Is_String (Item : Wide_Wide_String) return Boolean is
+ begin
+ for J in Item'Range loop
+ if Wide_Wide_Character'Pos (Item (J)) >= 256 then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Is_String;
+
--------------
-- Is_Upper --
--------------
- function Is_Upper (Item : in Character) return Boolean is
+ function Is_Upper (Item : Character) return Boolean is
begin
return (Char_Map (Item) and Upper) /= 0;
end Is_Upper;
+ -----------------------
+ -- Is_Wide_Character --
+ -----------------------
+
+ function Is_Wide_Character (Item : Wide_Wide_Character) return Boolean is
+ begin
+ return Wide_Wide_Character'Pos (Item) < 2**16;
+ end Is_Wide_Character;
+
+ --------------------
+ -- Is_Wide_String --
+ --------------------
+
+ function Is_Wide_String (Item : Wide_Wide_String) return Boolean is
+ begin
+ for J in Item'Range loop
+ if Wide_Wide_Character'Pos (Item (J)) >= 2**16 then
+ return False;
+ end if;
+ end loop;
+
+ return True;
+ end Is_Wide_String;
+
--------------
-- To_Basic --
--------------
- function To_Basic (Item : in Character) return Character is
+ function To_Basic (Item : Character) return Character is
begin
return Value (Basic_Map, Item);
end To_Basic;
- function To_Basic (Item : in String) return String is
+ function To_Basic (Item : String) return String is
Result : String (1 .. Item'Length);
begin
@@ -439,9 +479,8 @@ package body Ada.Characters.Handling is
------------------
function To_Character
- (Item : in Wide_Character;
- Substitute : in Character := ' ')
- return Character
+ (Item : Wide_Character;
+ Substitute : Character := ' ') return Character
is
begin
if Is_Character (Item) then
@@ -451,14 +490,25 @@ package body Ada.Characters.Handling is
end if;
end To_Character;
+ function To_Character
+ (Item : Wide_Wide_Character;
+ Substitute : Character := ' ') return Character
+ is
+ begin
+ if Is_Character (Item) then
+ return Character'Val (Wide_Wide_Character'Pos (Item));
+ else
+ return Substitute;
+ end if;
+ end To_Character;
+
----------------
-- To_ISO_646 --
----------------
function To_ISO_646
- (Item : in Character;
- Substitute : in ISO_646 := ' ')
- return ISO_646
+ (Item : Character;
+ Substitute : ISO_646 := ' ') return ISO_646
is
begin
if Item in ISO_646 then
@@ -469,9 +519,8 @@ package body Ada.Characters.Handling is
end To_ISO_646;
function To_ISO_646
- (Item : in String;
- Substitute : in ISO_646 := ' ')
- return String
+ (Item : String;
+ Substitute : ISO_646 := ' ') return String
is
Result : String (1 .. Item'Length);
@@ -491,12 +540,12 @@ package body Ada.Characters.Handling is
-- To_Lower --
--------------
- function To_Lower (Item : in Character) return Character is
+ function To_Lower (Item : Character) return Character is
begin
return Value (Lower_Case_Map, Item);
end To_Lower;
- function To_Lower (Item : in String) return String is
+ function To_Lower (Item : String) return String is
Result : String (1 .. Item'Length);
begin
@@ -512,9 +561,22 @@ package body Ada.Characters.Handling is
---------------
function To_String
- (Item : in Wide_String;
- Substitute : in Character := ' ')
- return String
+ (Item : Wide_String;
+ Substitute : Character := ' ') return String
+ is
+ Result : String (1 .. Item'Length);
+
+ begin
+ for J in Item'Range loop
+ Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
+ end loop;
+
+ return Result;
+ end To_String;
+
+ function To_String
+ (Item : Wide_Wide_String;
+ Substitute : Character := ' ') return String
is
Result : String (1 .. Item'Length);
@@ -522,6 +584,7 @@ package body Ada.Characters.Handling is
for J in Item'Range loop
Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
end loop;
+
return Result;
end To_String;
@@ -530,16 +593,14 @@ package body Ada.Characters.Handling is
--------------
function To_Upper
- (Item : in Character)
- return Character
+ (Item : Character) return Character
is
begin
return Value (Upper_Case_Map, Item);
end To_Upper;
function To_Upper
- (Item : in String)
- return String
+ (Item : String) return String
is
Result : String (1 .. Item'Length);
@@ -556,20 +617,30 @@ package body Ada.Characters.Handling is
-----------------------
function To_Wide_Character
- (Item : in Character)
- return Wide_Character
+ (Item : Character) return Wide_Character
is
begin
return Wide_Character'Val (Character'Pos (Item));
end To_Wide_Character;
+ function To_Wide_Character
+ (Item : Wide_Wide_Character;
+ Substitute : Wide_Character := ' ') return Wide_Character
+ is
+ begin
+ if Wide_Wide_Character'Pos (Item) < 2**16 then
+ return Wide_Character'Val (Wide_Wide_Character'Pos (Item));
+ else
+ return Substitute;
+ end if;
+ end To_Wide_Character;
+
--------------------
-- To_Wide_String --
--------------------
function To_Wide_String
- (Item : in String)
- return Wide_String
+ (Item : String) return Wide_String
is
Result : Wide_String (1 .. Item'Length);
@@ -580,4 +651,68 @@ package body Ada.Characters.Handling is
return Result;
end To_Wide_String;
+
+ function To_Wide_String
+ (Item : Wide_Wide_String;
+ Substitute : Wide_Character := ' ') return Wide_String
+ is
+ Result : Wide_String (1 .. Item'Length);
+
+ begin
+ for J in Item'Range loop
+ Result (J - (Item'First - 1)) :=
+ To_Wide_Character (Item (J), Substitute);
+ end loop;
+
+ return Result;
+ end To_Wide_String;
+
+ ----------------------------
+ -- To_Wide_Wide_Character --
+ ----------------------------
+
+ function To_Wide_Wide_Character
+ (Item : Character) return Wide_Wide_Character
+ is
+ begin
+ return Wide_Wide_Character'Val (Character'Pos (Item));
+ end To_Wide_Wide_Character;
+
+ function To_Wide_Wide_Character
+ (Item : Wide_Character) return Wide_Wide_Character
+ is
+ begin
+ return Wide_Wide_Character'Val (Wide_Character'Pos (Item));
+ end To_Wide_Wide_Character;
+
+ -------------------------
+ -- To_Wide_Wide_String --
+ -------------------------
+
+ function To_Wide_Wide_String
+ (Item : String) return Wide_Wide_String
+ is
+ Result : Wide_Wide_String (1 .. Item'Length);
+
+ begin
+ for J in Item'Range loop
+ Result (J - (Item'First - 1)) := To_Wide_Wide_Character (Item (J));
+ end loop;
+
+ return Result;
+ end To_Wide_Wide_String;
+
+ function To_Wide_Wide_String
+ (Item : Wide_String) return Wide_Wide_String
+ is
+ Result : Wide_Wide_String (1 .. Item'Length);
+
+ begin
+ for J in Item'Range loop
+ Result (J - (Item'First - 1)) := To_Wide_Wide_Character (Item (J));
+ end loop;
+
+ return Result;
+ end To_Wide_Wide_String;
+
end Ada.Characters.Handling;
diff --git a/gcc/ada/a-chahan.ads b/gcc/ada/a-chahan.ads
index 0a0162d1d67..ca29d752419 100644
--- a/gcc/ada/a-chahan.ads
+++ b/gcc/ada/a-chahan.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-1997 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -43,30 +43,30 @@ pragma Preelaborate (Handling);
-- Character Classification Functions --
----------------------------------------
- function Is_Control (Item : in Character) return Boolean;
- function Is_Graphic (Item : in Character) return Boolean;
- function Is_Letter (Item : in Character) return Boolean;
- function Is_Lower (Item : in Character) return Boolean;
- function Is_Upper (Item : in Character) return Boolean;
- function Is_Basic (Item : in Character) return Boolean;
- function Is_Digit (Item : in Character) return Boolean;
- function Is_Decimal_Digit (Item : in Character) return Boolean
- renames Is_Digit;
- function Is_Hexadecimal_Digit (Item : in Character) return Boolean;
- function Is_Alphanumeric (Item : in Character) return Boolean;
- function Is_Special (Item : in Character) return Boolean;
+ function Is_Control (Item : Character) return Boolean;
+ function Is_Graphic (Item : Character) return Boolean;
+ function Is_Letter (Item : Character) return Boolean;
+ function Is_Lower (Item : Character) return Boolean;
+ function Is_Upper (Item : Character) return Boolean;
+ function Is_Basic (Item : Character) return Boolean;
+ function Is_Digit (Item : Character) return Boolean;
+ function Is_Decimal_Digit (Item : Character) return Boolean
+ renames Is_Digit;
+ function Is_Hexadecimal_Digit (Item : Character) return Boolean;
+ function Is_Alphanumeric (Item : Character) return Boolean;
+ function Is_Special (Item : Character) return Boolean;
---------------------------------------------------
-- Conversion Functions for Character and String --
---------------------------------------------------
- function To_Lower (Item : in Character) return Character;
- function To_Upper (Item : in Character) return Character;
- function To_Basic (Item : in Character) return Character;
+ function To_Lower (Item : Character) return Character;
+ function To_Upper (Item : Character) return Character;
+ function To_Basic (Item : Character) return Character;
- function To_Lower (Item : in String) return String;
- function To_Upper (Item : in String) return String;
- function To_Basic (Item : in String) return String;
+ function To_Lower (Item : String) return String;
+ function To_Upper (Item : String) return String;
+ function To_Basic (Item : String) return String;
----------------------------------------------------------------------
-- Classifications of and Conversions Between Character and ISO 646 --
@@ -75,42 +75,69 @@ pragma Preelaborate (Handling);
subtype ISO_646 is
Character range Character'Val (0) .. Character'Val (127);
- function Is_ISO_646 (Item : in Character) return Boolean;
- function Is_ISO_646 (Item : in String) return Boolean;
+ function Is_ISO_646 (Item : Character) return Boolean;
+ function Is_ISO_646 (Item : String) return Boolean;
function To_ISO_646
- (Item : in Character;
- Substitute : in ISO_646 := ' ')
- return ISO_646;
+ (Item : Character;
+ Substitute : ISO_646 := ' ') return ISO_646;
function To_ISO_646
- (Item : in String;
- Substitute : in ISO_646 := ' ')
- return String;
+ (Item : String;
+ Substitute : ISO_646 := ' ') return String;
------------------------------------------------------
-- Classifications of Wide_Character and Characters --
------------------------------------------------------
- function Is_Character (Item : in Wide_Character) return Boolean;
- function Is_String (Item : in Wide_String) return Boolean;
+ function Is_Character (Item : Wide_Character) return Boolean;
+ function Is_Character (Item : Wide_Wide_Character) return Boolean;
+ function Is_String (Item : Wide_String) return Boolean;
+ function Is_String (Item : Wide_Wide_String) return Boolean;
+ function Is_Wide_Character (Item : Wide_Wide_Character) return Boolean;
+ function Is_Wide_String (Item : Wide_Wide_String) return Boolean;
- ------------------------------------------------------
- -- Conversions between Wide_Character and Character --
- ------------------------------------------------------
+ ---------------------------------------------------------------------------
+ -- Conversions between Wide_Wide_Character, Wide_Character and Character --
+ ---------------------------------------------------------------------------
function To_Character
- (Item : in Wide_Character;
- Substitute : in Character := ' ')
- return Character;
+ (Item : Wide_Character;
+ Substitute : Character := ' ') return Character;
+
+ function To_Character
+ (Item : Wide_Wide_Character;
+ Substitute : Character := ' ') return Character;
function To_String
- (Item : in Wide_String;
- Substitute : in Character := ' ')
- return String;
+ (Item : Wide_String;
+ Substitute : Character := ' ') return String;
- function To_Wide_Character (Item : in Character) return Wide_Character;
- function To_Wide_String (Item : in String) return Wide_String;
+ function To_String
+ (Item : Wide_Wide_String;
+ Substitute : Character := ' ') return String;
+
+ function To_Wide_Character
+ (Item : Character) return Wide_Character;
+ function To_Wide_Character
+ (Item : Wide_Wide_Character;
+ Substitute : Wide_Character := ' ') return Wide_Character;
+
+ function To_Wide_String
+ (Item : String) return Wide_String;
+ function To_Wide_String
+ (Item : Wide_Wide_String;
+ Substitute : Wide_Character := ' ') return Wide_String;
+
+ function To_Wide_Wide_Character
+ (Item : Character) return Wide_Wide_Character;
+ function To_Wide_Wide_Character
+ (Item : Wide_Character) return Wide_Wide_Character;
+
+ function To_Wide_Wide_String
+ (Item : String) return Wide_Wide_String;
+ function To_Wide_Wide_String
+ (Item : Wide_String) return Wide_Wide_String;
private
pragma Inline (Is_Control);
@@ -130,5 +157,6 @@ private
pragma Inline (Is_Character);
pragma Inline (To_Character);
pragma Inline (To_Wide_Character);
+ pragma Inline (To_Wide_Wide_Character);
end Ada.Characters.Handling;
diff --git a/gcc/ada/a-except.adb b/gcc/ada/a-except.adb
index 1ca819011c5..7470d545039 100644
--- a/gcc/ada/a-except.adb
+++ b/gcc/ada/a-except.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -484,6 +484,7 @@ package body Ada.Exceptions is
procedure Rcheck_27 (File : Big_String_Ptr; Line : Integer);
procedure Rcheck_28 (File : Big_String_Ptr; Line : Integer);
procedure Rcheck_29 (File : Big_String_Ptr; Line : Integer);
+ procedure Rcheck_30 (File : Big_String_Ptr; Line : Integer);
pragma Export (C, Rcheck_00, "__gnat_rcheck_00");
pragma Export (C, Rcheck_01, "__gnat_rcheck_01");
@@ -515,6 +516,7 @@ package body Ada.Exceptions is
pragma Export (C, Rcheck_27, "__gnat_rcheck_27");
pragma Export (C, Rcheck_28, "__gnat_rcheck_28");
pragma Export (C, Rcheck_29, "__gnat_rcheck_29");
+ pragma Export (C, Rcheck_30, "__gnat_rcheck_30");
-- None of these procedures ever returns (they raise an exception!). By
-- using pragma No_Return, we ensure that any junk code after the call,
@@ -550,6 +552,7 @@ package body Ada.Exceptions is
pragma No_Return (Rcheck_27);
pragma No_Return (Rcheck_28);
pragma No_Return (Rcheck_29);
+ pragma No_Return (Rcheck_30);
---------------------------------------------
-- Reason Strings for Run-Time Check Calls --
@@ -568,29 +571,30 @@ package body Ada.Exceptions is
Rmsg_05 : constant String := "index check failed" & NUL;
Rmsg_06 : constant String := "invalid data" & NUL;
Rmsg_07 : constant String := "length check failed" & NUL;
- Rmsg_08 : constant String := "overflow check failed" & NUL;
- Rmsg_09 : constant String := "partition check failed" & NUL;
- Rmsg_10 : constant String := "range check failed" & NUL;
- Rmsg_11 : constant String := "tag check failed" & NUL;
- Rmsg_12 : constant String := "access before elaboration" & NUL;
- Rmsg_13 : constant String := "accessibility check failed" & NUL;
- Rmsg_14 : constant String := "all guards closed" & NUL;
- Rmsg_15 : constant String := "duplicated entry address" & NUL;
- Rmsg_16 : constant String := "explicit raise" & NUL;
- Rmsg_17 : constant String := "finalize/adjust raised exception" & NUL;
- Rmsg_18 : constant String := "misaligned address value" & NUL;
- Rmsg_19 : constant String := "missing return" & NUL;
- Rmsg_20 : constant String := "overlaid controlled object" & NUL;
- Rmsg_21 : constant String := "potentially blocking operation" & NUL;
- Rmsg_22 : constant String := "stubbed subprogram called" & NUL;
- Rmsg_23 : constant String := "unchecked union restriction" & NUL;
- Rmsg_24 : constant String := "illegal use of"
+ Rmsg_08 : constant String := "null-exclusion check failed" & NUL;
+ Rmsg_09 : constant String := "overflow check failed" & NUL;
+ Rmsg_10 : constant String := "partition check failed" & NUL;
+ Rmsg_11 : constant String := "range check failed" & NUL;
+ Rmsg_12 : constant String := "tag check failed" & NUL;
+ Rmsg_13 : constant String := "access before elaboration" & NUL;
+ Rmsg_14 : constant String := "accessibility check failed" & NUL;
+ Rmsg_15 : constant String := "all guards closed" & NUL;
+ Rmsg_16 : constant String := "duplicated entry address" & NUL;
+ Rmsg_17 : constant String := "explicit raise" & NUL;
+ Rmsg_18 : constant String := "finalize/adjust raised exception" & NUL;
+ Rmsg_19 : constant String := "misaligned address value" & NUL;
+ Rmsg_20 : constant String := "missing return" & NUL;
+ Rmsg_21 : constant String := "overlaid controlled object" & NUL;
+ Rmsg_22 : constant String := "potentially blocking operation" & NUL;
+ Rmsg_23 : constant String := "stubbed subprogram called" & NUL;
+ Rmsg_24 : constant String := "unchecked union restriction" & NUL;
+ Rmsg_25 : constant String := "illegal use of"
& " remote access-to-class-wide type, see RM E.4(18)" & NUL;
- Rmsg_25 : constant String := "empty storage pool" & NUL;
- Rmsg_26 : constant String := "explicit raise" & NUL;
- Rmsg_27 : constant String := "infinite recursion" & NUL;
- Rmsg_28 : constant String := "object too large" & NUL;
- Rmsg_29 : constant String := "restriction violation" & NUL;
+ Rmsg_26 : constant String := "empty storage pool" & NUL;
+ Rmsg_27 : constant String := "explicit raise" & NUL;
+ Rmsg_28 : constant String := "infinite recursion" & NUL;
+ Rmsg_29 : constant String := "object too large" & NUL;
+ Rmsg_30 : constant String := "restriction violation" & NUL;
-----------------------
-- Polling Interface --
@@ -1097,7 +1101,7 @@ package body Ada.Exceptions is
procedure Rcheck_12 (File : Big_String_Ptr; Line : Integer) is
begin
- Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_12'Address));
+ Raise_Constraint_Error_Msg (File, Line, To_Ptr (Rmsg_12'Address));
end Rcheck_12;
procedure Rcheck_13 (File : Big_String_Ptr; Line : Integer) is
@@ -1162,7 +1166,7 @@ package body Ada.Exceptions is
procedure Rcheck_25 (File : Big_String_Ptr; Line : Integer) is
begin
- Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_25'Address));
+ Raise_Program_Error_Msg (File, Line, To_Ptr (Rmsg_25'Address));
end Rcheck_25;
procedure Rcheck_26 (File : Big_String_Ptr; Line : Integer) is
@@ -1185,6 +1189,11 @@ package body Ada.Exceptions is
Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_29'Address));
end Rcheck_29;
+ procedure Rcheck_30 (File : Big_String_Ptr; Line : Integer) is
+ begin
+ Raise_Storage_Error_Msg (File, Line, To_Ptr (Rmsg_30'Address));
+ end Rcheck_30;
+
-------------
-- Reraise --
-------------
diff --git a/gcc/ada/a-strbou.adb b/gcc/ada/a-strbou.adb
index 886c03ff68a..08d339d0b68 100644
--- a/gcc/ada/a-strbou.adb
+++ b/gcc/ada/a-strbou.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -35,23 +35,26 @@ package body Ada.Strings.Bounded is
package body Generic_Bounded_Length is
+ -- The subprograms in this body are those for which there is no
+ -- Bounded_String input, and hence no implicit information on the
+ -- maximum size. This means that the maximum size has to be passed
+ -- explicitly to the routine in Superbounded.
+
---------
-- "*" --
---------
function "*"
- (Left : in Natural;
- Right : in Character)
- return Bounded_String
+ (Left : Natural;
+ Right : Character) return Bounded_String
is
begin
return Times (Left, Right, Max_Length);
end "*";
function "*"
- (Left : in Natural;
- Right : in String)
- return Bounded_String
+ (Left : Natural;
+ Right : String) return Bounded_String
is
begin
return Times (Left, Right, Max_Length);
@@ -62,34 +65,30 @@ package body Ada.Strings.Bounded is
---------------
function Replicate
- (Count : in Natural;
- Item : in Character;
- Drop : in Strings.Truncation := Strings.Error)
- return Bounded_String
+ (Count : Natural;
+ Item : Character;
+ Drop : Strings.Truncation := Strings.Error) return Bounded_String
is
begin
return Super_Replicate (Count, Item, Drop, Max_Length);
end Replicate;
function Replicate
- (Count : in Natural;
- Item : in String;
- Drop : in Strings.Truncation := Strings.Error)
- return Bounded_String
+ (Count : Natural;
+ Item : String;
+ Drop : Strings.Truncation := Strings.Error) return Bounded_String
is
begin
return Super_Replicate (Count, Item, Drop, Max_Length);
end Replicate;
-
-----------------------
-- To_Bounded_String --
-----------------------
function To_Bounded_String
- (Source : in String;
- Drop : in Strings.Truncation := Strings.Error)
- return Bounded_String
+ (Source : String;
+ Drop : Strings.Truncation := Strings.Error) return Bounded_String
is
begin
return To_Super_String (Source, Max_Length, Drop);
diff --git a/gcc/ada/a-strbou.ads b/gcc/ada/a-strbou.ads
index 7e9f54f1b0a..5b8346ad102 100644
--- a/gcc/ada/a-strbou.ads
+++ b/gcc/ada/a-strbou.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -55,214 +55,245 @@ pragma Preelaborate (Bounded);
subtype Length_Range is Natural range 0 .. Max_Length;
- function Length (Source : in Bounded_String) return Length_Range;
+ function Length (Source : Bounded_String) return Length_Range;
--------------------------------------------------------
-- Conversion, Concatenation, and Selection Functions --
--------------------------------------------------------
function To_Bounded_String
- (Source : in String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Source : String;
+ Drop : Truncation := Error) return Bounded_String;
- function To_String (Source : in Bounded_String) return String;
+ function To_String (Source : Bounded_String) return String;
+
+ procedure Set_Bounded_String
+ (Target : out Bounded_String;
+ Source : String;
+ Drop : Truncation := Error);
+ pragma Ada_05 (Set_Bounded_String);
function Append
- (Left, Right : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Left : Bounded_String;
+ Right : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String;
function Append
- (Left : in Bounded_String;
- Right : in String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Left : Bounded_String;
+ Right : String;
+ Drop : Truncation := Error) return Bounded_String;
function Append
- (Left : in String;
- Right : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Left : String;
+ Right : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String;
function Append
- (Left : in Bounded_String;
- Right : in Character;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Left : Bounded_String;
+ Right : Character;
+ Drop : Truncation := Error) return Bounded_String;
function Append
- (Left : in Character;
- Right : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Left : Character;
+ Right : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String;
procedure Append
(Source : in out Bounded_String;
- New_Item : in Bounded_String;
- Drop : in Truncation := Error);
+ New_Item : Bounded_String;
+ Drop : Truncation := Error);
procedure Append
(Source : in out Bounded_String;
- New_Item : in String;
- Drop : in Truncation := Error);
+ New_Item : String;
+ Drop : Truncation := Error);
procedure Append
(Source : in out Bounded_String;
- New_Item : in Character;
- Drop : in Truncation := Error);
+ New_Item : Character;
+ Drop : Truncation := Error);
function "&"
- (Left, Right : in Bounded_String)
- return Bounded_String;
+ (Left : Bounded_String;
+ Right : Bounded_String) return Bounded_String;
function "&"
- (Left : in Bounded_String;
- Right : in String)
- return Bounded_String;
+ (Left : Bounded_String;
+ Right : String) return Bounded_String;
function "&"
- (Left : in String;
- Right : in Bounded_String)
- return Bounded_String;
+ (Left : String;
+ Right : Bounded_String) return Bounded_String;
function "&"
- (Left : in Bounded_String;
- Right : in Character)
- return Bounded_String;
+ (Left : Bounded_String;
+ Right : Character) return Bounded_String;
function "&"
- (Left : in Character;
- Right : in Bounded_String)
- return Bounded_String;
+ (Left : Character;
+ Right : Bounded_String) return Bounded_String;
function Element
- (Source : in Bounded_String;
- Index : in Positive)
- return Character;
+ (Source : Bounded_String;
+ Index : Positive) return Character;
procedure Replace_Element
(Source : in out Bounded_String;
- Index : in Positive;
- By : in Character);
+ Index : Positive;
+ By : Character);
function Slice
- (Source : in Bounded_String;
- Low : in Positive;
- High : in Natural)
- return String;
+ (Source : Bounded_String;
+ Low : Positive;
+ High : Natural) return String;
+
+ function Bounded_Slice
+ (Source : Bounded_String;
+ Low : Positive;
+ High : Natural) return Bounded_String;
+ pragma Ada_05 (Bounded_Slice);
+
+ procedure Bounded_Slice
+ (Source : Bounded_String;
+ Target : out Bounded_String;
+ Low : Positive;
+ High : Natural);
+ pragma Ada_05 (Bounded_Slice);
- function "=" (Left, Right : in Bounded_String) return Boolean;
+ function "="
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean;
function "="
- (Left : in Bounded_String;
- Right : in String)
- return Boolean;
+ (Left : Bounded_String;
+ Right : String) return Boolean;
function "="
- (Left : in String;
- Right : in Bounded_String)
- return Boolean;
+ (Left : String;
+ Right : Bounded_String) return Boolean;
- function "<" (Left, Right : in Bounded_String) return Boolean;
+ function "<"
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean;
function "<"
- (Left : in Bounded_String;
- Right : in String)
- return Boolean;
+ (Left : Bounded_String;
+ Right : String) return Boolean;
function "<"
- (Left : in String;
- Right : in Bounded_String)
- return Boolean;
+ (Left : String;
+ Right : Bounded_String) return Boolean;
- function "<=" (Left, Right : in Bounded_String) return Boolean;
+ function "<="
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean;
function "<="
- (Left : in Bounded_String;
- Right : in String)
- return Boolean;
+ (Left : Bounded_String;
+ Right : String) return Boolean;
function "<="
- (Left : in String;
- Right : in Bounded_String)
- return Boolean;
+ (Left : String;
+ Right : Bounded_String) return Boolean;
- function ">" (Left, Right : in Bounded_String) return Boolean;
+ function ">"
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean;
function ">"
- (Left : in Bounded_String;
- Right : in String)
- return Boolean;
+ (Left : Bounded_String;
+ Right : String) return Boolean;
function ">"
- (Left : in String;
- Right : in Bounded_String)
- return Boolean;
+ (Left : String;
+ Right : Bounded_String) return Boolean;
- function ">=" (Left, Right : in Bounded_String) return Boolean;
+ function ">="
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean;
function ">="
- (Left : in Bounded_String;
- Right : in String)
- return Boolean;
+ (Left : Bounded_String;
+ Right : String) return Boolean;
function ">="
- (Left : in String;
- Right : in Bounded_String)
- return Boolean;
+ (Left : String;
+ Right : Bounded_String) return Boolean;
----------------------
-- Search Functions --
----------------------
function Index
- (Source : in Bounded_String;
- Pattern : in String;
- Going : in Direction := Forward;
- Mapping : in Maps.Character_Mapping := Maps.Identity)
- return Natural;
+ (Source : Bounded_String;
+ Pattern : String;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
+
+ function Index
+ (Source : Bounded_String;
+ Pattern : String;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural;
function Index
- (Source : in Bounded_String;
- Pattern : in String;
- Going : in Direction := Forward;
- Mapping : in Maps.Character_Mapping_Function)
- return Natural;
+ (Source : Bounded_String;
+ Set : Maps.Character_Set;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
function Index
- (Source : in Bounded_String;
- Set : in Maps.Character_Set;
- Test : in Membership := Inside;
- Going : in Direction := Forward)
- return Natural;
+ (Source : Bounded_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
+ pragma Ada_05 (Index);
+
+ function Index
+ (Source : Bounded_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural;
+ pragma Ada_05 (Index);
+
+ function Index
+ (Source : Bounded_String;
+ Set : Maps.Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
+ pragma Ada_05 (Index);
function Index_Non_Blank
- (Source : in Bounded_String;
- Going : in Direction := Forward)
- return Natural;
+ (Source : Bounded_String;
+ Going : Direction := Forward) return Natural;
+
+ function Index_Non_Blank
+ (Source : Bounded_String;
+ From : Positive;
+ Going : Direction := Forward) return Natural;
+ pragma Ada_05 (Index_Non_Blank);
function Count
- (Source : in Bounded_String;
- Pattern : in String;
- Mapping : in Maps.Character_Mapping := Maps.Identity)
- return Natural;
+ (Source : Bounded_String;
+ Pattern : String;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
function Count
- (Source : in Bounded_String;
- Pattern : in String;
- Mapping : in Maps.Character_Mapping_Function)
- return Natural;
+ (Source : Bounded_String;
+ Pattern : String;
+ Mapping : Maps.Character_Mapping_Function) return Natural;
function Count
- (Source : in Bounded_String;
- Set : in Maps.Character_Set)
- return Natural;
+ (Source : Bounded_String;
+ Set : Maps.Character_Set) return Natural;
procedure Find_Token
- (Source : in Bounded_String;
- Set : in Maps.Character_Set;
- Test : in Membership;
+ (Source : Bounded_String;
+ Set : Maps.Character_Set;
+ Test : Membership;
First : out Positive;
Last : out Natural);
@@ -271,569 +302,588 @@ pragma Preelaborate (Bounded);
------------------------------------
function Translate
- (Source : in Bounded_String;
- Mapping : in Maps.Character_Mapping)
- return Bounded_String;
+ (Source : Bounded_String;
+ Mapping : Maps.Character_Mapping) return Bounded_String;
procedure Translate
(Source : in out Bounded_String;
- Mapping : in Maps.Character_Mapping);
+ Mapping : Maps.Character_Mapping);
function Translate
- (Source : in Bounded_String;
- Mapping : in Maps.Character_Mapping_Function)
- return Bounded_String;
+ (Source : Bounded_String;
+ Mapping : Maps.Character_Mapping_Function) return Bounded_String;
procedure Translate
(Source : in out Bounded_String;
- Mapping : in Maps.Character_Mapping_Function);
+ Mapping : Maps.Character_Mapping_Function);
---------------------------------------
-- String Transformation Subprograms --
---------------------------------------
function Replace_Slice
- (Source : in Bounded_String;
- Low : in Positive;
- High : in Natural;
- By : in String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Source : Bounded_String;
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Truncation := Error) return Bounded_String;
procedure Replace_Slice
(Source : in out Bounded_String;
- Low : in Positive;
- High : in Natural;
- By : in String;
- Drop : in Truncation := Error);
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Truncation := Error);
function Insert
- (Source : in Bounded_String;
- Before : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Source : Bounded_String;
+ Before : Positive;
+ New_Item : String;
+ Drop : Truncation := Error) return Bounded_String;
procedure Insert
(Source : in out Bounded_String;
- Before : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error);
+ Before : Positive;
+ New_Item : String;
+ Drop : Truncation := Error);
function Overwrite
- (Source : in Bounded_String;
- Position : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Source : Bounded_String;
+ Position : Positive;
+ New_Item : String;
+ Drop : Truncation := Error) return Bounded_String;
procedure Overwrite
(Source : in out Bounded_String;
- Position : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error);
+ Position : Positive;
+ New_Item : String;
+ Drop : Truncation := Error);
function Delete
- (Source : in Bounded_String;
- From : in Positive;
- Through : in Natural)
- return Bounded_String;
+ (Source : Bounded_String;
+ From : Positive;
+ Through : Natural) return Bounded_String;
procedure Delete
(Source : in out Bounded_String;
- From : in Positive;
- Through : in Natural);
+ From : Positive;
+ Through : Natural);
---------------------------------
-- String Selector Subprograms --
---------------------------------
function Trim
- (Source : in Bounded_String;
- Side : in Trim_End)
- return Bounded_String;
+ (Source : Bounded_String;
+ Side : Trim_End) return Bounded_String;
procedure Trim
(Source : in out Bounded_String;
- Side : in Trim_End);
+ Side : Trim_End);
function Trim
- (Source : in Bounded_String;
- Left : in Maps.Character_Set;
- Right : in Maps.Character_Set)
- return Bounded_String;
+ (Source : Bounded_String;
+ Left : Maps.Character_Set;
+ Right : Maps.Character_Set) return Bounded_String;
procedure Trim
(Source : in out Bounded_String;
- Left : in Maps.Character_Set;
- Right : in Maps.Character_Set);
+ Left : Maps.Character_Set;
+ Right : Maps.Character_Set);
function Head
- (Source : in Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Source : Bounded_String;
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error) return Bounded_String;
procedure Head
(Source : in out Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error);
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error);
function Tail
- (Source : in Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Source : Bounded_String;
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error) return Bounded_String;
procedure Tail
(Source : in out Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error);
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error);
------------------------------------
-- String Constructor Subprograms --
------------------------------------
function "*"
- (Left : in Natural;
- Right : in Character)
- return Bounded_String;
+ (Left : Natural;
+ Right : Character) return Bounded_String;
function "*"
- (Left : in Natural;
- Right : in String)
- return Bounded_String;
+ (Left : Natural;
+ Right : String) return Bounded_String;
function "*"
- (Left : in Natural;
- Right : in Bounded_String)
- return Bounded_String;
+ (Left : Natural;
+ Right : Bounded_String) return Bounded_String;
function Replicate
- (Count : in Natural;
- Item : in Character;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Count : Natural;
+ Item : Character;
+ Drop : Truncation := Error) return Bounded_String;
function Replicate
- (Count : in Natural;
- Item : in String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Count : Natural;
+ Item : String;
+ Drop : Truncation := Error) return Bounded_String;
function Replicate
- (Count : in Natural;
- Item : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String;
+ (Count : Natural;
+ Item : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String;
private
-
- -- Most of the implementation is in the non generic package
+ -- Most of the implementation is in the separate non generic package
-- Ada.Strings.Superbounded. Type Bounded_String is derived from type
- -- Superbounded.Super_String with the maximum length constraint.
- -- Except for five, all subprograms are renames of subprograms that
- -- are inherited from Superbounded.Super_String.
+ -- Superbounded.Super_String with the maximum length constraint. In
+ -- almost all cases, the routines in Superbounded can be called with
+ -- no requirement to pass the maximum length explicitly, since there
+ -- is at least one Bounded_String argument from which the maximum
+ -- length can be obtained. For all such routines, the implementation
+ -- in this private part is simply a renaming of the corresponding
+ -- routine in the super bouded package.
+
+ -- The five exceptions are the * and Replicate routines operating on
+ -- character values. For these cases, we have a routine in the body
+ -- that calls the superbounded routine passing the maximum length
+ -- explicitly as an extra parameter.
type Bounded_String is new Superbounded.Super_String (Max_Length);
+ -- Deriving Bounded_String from Superbounded.Super_String is the
+ -- real trick, it ensures that the type Bounded_String declared in
+ -- the generic instantiation is compatible with the Super_String
+ -- type declared in the Superbounded package.
Null_Bounded_String : constant Bounded_String :=
- (Max_Length => Max_Length,
- Current_Length => 0,
- Data => (1 .. Max_Length => ASCII.NUL));
+ (Max_Length => Max_Length,
+ Current_Length => 0,
+ Data =>
+ (1 .. Max_Length => ASCII.NUL));
pragma Inline (To_Bounded_String);
- function Length (Source : in Bounded_String) return Length_Range
- renames Super_Length;
+ procedure Set_Bounded_String
+ (Target : out Bounded_String;
+ Source : String;
+ Drop : Truncation := Error)
+ renames Set_Super_String;
- function To_String (Source : in Bounded_String) return String
- renames Super_To_String;
+ function Length
+ (Source : Bounded_String) return Length_Range
+ renames Super_Length;
+
+ function To_String
+ (Source : Bounded_String) return String
+ renames Super_To_String;
function Append
- (Left, Right : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Append;
+ (Left : Bounded_String;
+ Right : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Append;
function Append
- (Left : in Bounded_String;
- Right : in String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Append;
+ (Left : Bounded_String;
+ Right : String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Append;
function Append
- (Left : in String;
- Right : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Append;
+ (Left : String;
+ Right : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Append;
function Append
- (Left : in Bounded_String;
- Right : in Character;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Append;
+ (Left : Bounded_String;
+ Right : Character;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Append;
function Append
- (Left : in Character;
- Right : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Append;
+ (Left : Character;
+ Right : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Append;
procedure Append
(Source : in out Bounded_String;
- New_Item : in Bounded_String;
- Drop : in Truncation := Error)
- renames Super_Append;
+ New_Item : Bounded_String;
+ Drop : Truncation := Error)
+ renames Super_Append;
procedure Append
(Source : in out Bounded_String;
- New_Item : in String;
- Drop : in Truncation := Error)
- renames Super_Append;
+ New_Item : String;
+ Drop : Truncation := Error)
+ renames Super_Append;
procedure Append
(Source : in out Bounded_String;
- New_Item : in Character;
- Drop : in Truncation := Error)
- renames Super_Append;
+ New_Item : Character;
+ Drop : Truncation := Error)
+ renames Super_Append;
function "&"
- (Left, Right : in Bounded_String)
- return Bounded_String
- renames Concat;
+ (Left : Bounded_String;
+ Right : Bounded_String) return Bounded_String
+ renames Concat;
function "&"
- (Left : in Bounded_String;
- Right : in String)
- return Bounded_String
- renames Concat;
+ (Left : Bounded_String;
+ Right : String) return Bounded_String
+ renames Concat;
function "&"
- (Left : in String;
- Right : in Bounded_String)
- return Bounded_String
- renames Concat;
+ (Left : String;
+ Right : Bounded_String) return Bounded_String
+ renames Concat;
function "&"
- (Left : in Bounded_String;
- Right : in Character)
- return Bounded_String
- renames Concat;
+ (Left : Bounded_String;
+ Right : Character) return Bounded_String
+ renames Concat;
function "&"
- (Left : in Character;
- Right : in Bounded_String)
- return Bounded_String
- renames Concat;
+ (Left : Character;
+ Right : Bounded_String) return Bounded_String
+ renames Concat;
function Element
- (Source : in Bounded_String;
- Index : in Positive)
- return Character
- renames Super_Element;
+ (Source : Bounded_String;
+ Index : Positive) return Character
+ renames Super_Element;
procedure Replace_Element
(Source : in out Bounded_String;
- Index : in Positive;
- By : in Character)
- renames Super_Replace_Element;
+ Index : Positive;
+ By : Character)
+ renames Super_Replace_Element;
function Slice
- (Source : in Bounded_String;
- Low : in Positive;
- High : in Natural)
- return String
- renames Super_Slice;
+ (Source : Bounded_String;
+ Low : Positive;
+ High : Natural) return String
+ renames Super_Slice;
+
+ function Bounded_Slice
+ (Source : Bounded_String;
+ Low : Positive;
+ High : Natural) return Bounded_String
+ renames Super_Slice;
+
+ procedure Bounded_Slice
+ (Source : Bounded_String;
+ Target : out Bounded_String;
+ Low : Positive;
+ High : Natural)
+ renames Super_Slice;
- function "=" (Left, Right : in Bounded_String) return Boolean
- renames Equal;
+ function "="
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean
+ renames Equal;
function "="
- (Left : in Bounded_String;
- Right : in String)
- return Boolean
- renames Equal;
+ (Left : Bounded_String;
+ Right : String) return Boolean
+ renames Equal;
function "="
- (Left : in String;
- Right : in Bounded_String)
- return Boolean
- renames Equal;
+ (Left : String;
+ Right : Bounded_String) return Boolean
+ renames Equal;
- function "<" (Left, Right : in Bounded_String) return Boolean
- renames Less;
+ function "<"
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean
+ renames Less;
function "<"
- (Left : in Bounded_String;
- Right : in String)
- return Boolean
- renames Less;
+ (Left : Bounded_String;
+ Right : String) return Boolean
+ renames Less;
function "<"
- (Left : in String;
- Right : in Bounded_String)
- return Boolean
- renames Less;
+ (Left : String;
+ Right : Bounded_String) return Boolean
+ renames Less;
- function "<=" (Left, Right : in Bounded_String) return Boolean
- renames Less_Or_Equal;
+ function "<="
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean
+ renames Less_Or_Equal;
function "<="
- (Left : in Bounded_String;
- Right : in String)
- return Boolean
- renames Less_Or_Equal;
+ (Left : Bounded_String;
+ Right : String) return Boolean
+ renames Less_Or_Equal;
function "<="
- (Left : in String;
- Right : in Bounded_String)
- return Boolean
- renames Less_Or_Equal;
+ (Left : String;
+ Right : Bounded_String) return Boolean
+ renames Less_Or_Equal;
- function ">" (Left, Right : in Bounded_String) return Boolean
- renames Greater;
+ function ">"
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean
+ renames Greater;
function ">"
- (Left : in Bounded_String;
- Right : in String)
- return Boolean
- renames Greater;
+ (Left : Bounded_String;
+ Right : String) return Boolean
+ renames Greater;
function ">"
- (Left : in String;
- Right : in Bounded_String)
- return Boolean
- renames Greater;
+ (Left : String;
+ Right : Bounded_String) return Boolean
+ renames Greater;
- function ">=" (Left, Right : in Bounded_String) return Boolean
- renames Greater_Or_Equal;
+ function ">="
+ (Left : Bounded_String;
+ Right : Bounded_String) return Boolean
+ renames Greater_Or_Equal;
function ">="
- (Left : in Bounded_String;
- Right : in String)
- return Boolean
- renames Greater_Or_Equal;
+ (Left : Bounded_String;
+ Right : String) return Boolean
+ renames Greater_Or_Equal;
function ">="
- (Left : in String;
- Right : in Bounded_String)
- return Boolean
- renames Greater_Or_Equal;
+ (Left : String;
+ Right : Bounded_String) return Boolean
+ renames Greater_Or_Equal;
+
+ function Index
+ (Source : Bounded_String;
+ Pattern : String;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+ renames Super_Index;
+
+ function Index
+ (Source : Bounded_String;
+ Pattern : String;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural
+ renames Super_Index;
function Index
- (Source : in Bounded_String;
- Pattern : in String;
- Going : in Direction := Forward;
- Mapping : in Maps.Character_Mapping := Maps.Identity)
- return Natural
- renames Super_Index;
+ (Source : Bounded_String;
+ Set : Maps.Character_Set;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural
+ renames Super_Index;
function Index
- (Source : in Bounded_String;
- Pattern : in String;
- Going : in Direction := Forward;
- Mapping : in Maps.Character_Mapping_Function)
- return Natural
- renames Super_Index;
+ (Source : Bounded_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+ renames Super_Index;
function Index
- (Source : in Bounded_String;
- Set : in Maps.Character_Set;
- Test : in Membership := Inside;
- Going : in Direction := Forward)
- return Natural
- renames Super_Index;
+ (Source : Bounded_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural
+ renames Super_Index;
+
+ function Index
+ (Source : Bounded_String;
+ Set : Maps.Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural
+ renames Super_Index;
+
+ function Index_Non_Blank
+ (Source : Bounded_String;
+ Going : Direction := Forward) return Natural
+ renames Super_Index_Non_Blank;
function Index_Non_Blank
- (Source : in Bounded_String;
- Going : in Direction := Forward)
- return Natural
- renames Super_Index_Non_Blank;
+ (Source : Bounded_String;
+ From : Positive;
+ Going : Direction := Forward) return Natural
+ renames Super_Index_Non_Blank;
function Count
- (Source : in Bounded_String;
- Pattern : in String;
- Mapping : in Maps.Character_Mapping := Maps.Identity)
- return Natural
- renames Super_Count;
+ (Source : Bounded_String;
+ Pattern : String;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+ renames Super_Count;
function Count
- (Source : in Bounded_String;
- Pattern : in String;
- Mapping : in Maps.Character_Mapping_Function)
- return Natural
- renames Super_Count;
+ (Source : Bounded_String;
+ Pattern : String;
+ Mapping : Maps.Character_Mapping_Function) return Natural
+ renames Super_Count;
function Count
- (Source : in Bounded_String;
- Set : in Maps.Character_Set)
- return Natural
- renames Super_Count;
+ (Source : Bounded_String;
+ Set : Maps.Character_Set) return Natural
+ renames Super_Count;
procedure Find_Token
- (Source : in Bounded_String;
- Set : in Maps.Character_Set;
- Test : in Membership;
+ (Source : Bounded_String;
+ Set : Maps.Character_Set;
+ Test : Membership;
First : out Positive;
Last : out Natural)
- renames Super_Find_Token;
+ renames Super_Find_Token;
function Translate
- (Source : in Bounded_String;
- Mapping : in Maps.Character_Mapping)
- return Bounded_String
- renames Super_Translate;
+ (Source : Bounded_String;
+ Mapping : Maps.Character_Mapping) return Bounded_String
+ renames Super_Translate;
procedure Translate
(Source : in out Bounded_String;
- Mapping : in Maps.Character_Mapping)
- renames Super_Translate;
+ Mapping : Maps.Character_Mapping)
+ renames Super_Translate;
function Translate
- (Source : in Bounded_String;
- Mapping : in Maps.Character_Mapping_Function)
- return Bounded_String
- renames Super_Translate;
+ (Source : Bounded_String;
+ Mapping : Maps.Character_Mapping_Function) return Bounded_String
+ renames Super_Translate;
procedure Translate
(Source : in out Bounded_String;
- Mapping : in Maps.Character_Mapping_Function)
- renames Super_Translate;
+ Mapping : Maps.Character_Mapping_Function)
+ renames Super_Translate;
function Replace_Slice
- (Source : in Bounded_String;
- Low : in Positive;
- High : in Natural;
- By : in String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Replace_Slice;
+ (Source : Bounded_String;
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Replace_Slice;
procedure Replace_Slice
(Source : in out Bounded_String;
- Low : in Positive;
- High : in Natural;
- By : in String;
- Drop : in Truncation := Error)
- renames Super_Replace_Slice;
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Truncation := Error)
+ renames Super_Replace_Slice;
function Insert
- (Source : in Bounded_String;
- Before : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Insert;
+ (Source : Bounded_String;
+ Before : Positive;
+ New_Item : String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Insert;
procedure Insert
(Source : in out Bounded_String;
- Before : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error)
- renames Super_Insert;
+ Before : Positive;
+ New_Item : String;
+ Drop : Truncation := Error)
+ renames Super_Insert;
function Overwrite
- (Source : in Bounded_String;
- Position : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Overwrite;
+ (Source : Bounded_String;
+ Position : Positive;
+ New_Item : String;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Overwrite;
procedure Overwrite
(Source : in out Bounded_String;
- Position : in Positive;
- New_Item : in String;
- Drop : in Truncation := Error)
- renames Super_Overwrite;
+ Position : Positive;
+ New_Item : String;
+ Drop : Truncation := Error)
+ renames Super_Overwrite;
function Delete
- (Source : in Bounded_String;
- From : in Positive;
- Through : in Natural)
- return Bounded_String
- renames Super_Delete;
+ (Source : Bounded_String;
+ From : Positive;
+ Through : Natural) return Bounded_String
+ renames Super_Delete;
procedure Delete
(Source : in out Bounded_String;
- From : in Positive;
- Through : in Natural)
- renames Super_Delete;
+ From : Positive;
+ Through : Natural)
+ renames Super_Delete;
function Trim
- (Source : in Bounded_String;
- Side : in Trim_End)
- return Bounded_String
- renames Super_Trim;
+ (Source : Bounded_String;
+ Side : Trim_End) return Bounded_String
+ renames Super_Trim;
procedure Trim
(Source : in out Bounded_String;
- Side : in Trim_End)
- renames Super_Trim;
+ Side : Trim_End)
+ renames Super_Trim;
function Trim
- (Source : in Bounded_String;
- Left : in Maps.Character_Set;
- Right : in Maps.Character_Set)
- return Bounded_String
- renames Super_Trim;
+ (Source : Bounded_String;
+ Left : Maps.Character_Set;
+ Right : Maps.Character_Set) return Bounded_String
+ renames Super_Trim;
procedure Trim
(Source : in out Bounded_String;
- Left : in Maps.Character_Set;
- Right : in Maps.Character_Set)
- renames Super_Trim;
+ Left : Maps.Character_Set;
+ Right : Maps.Character_Set)
+ renames Super_Trim;
function Head
- (Source : in Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Head;
+ (Source : Bounded_String;
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Head;
procedure Head
(Source : in out Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error)
- renames Super_Head;
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error)
+ renames Super_Head;
function Tail
- (Source : in Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error)
- return Bounded_String
- renames Super_Tail;
+ (Source : Bounded_String;
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error) return Bounded_String
+ renames Super_Tail;
procedure Tail
(Source : in out Bounded_String;
- Count : in Natural;
- Pad : in Character := Space;
- Drop : in Truncation := Error)
- renames Super_Tail;
+ Count : Natural;
+ Pad : Character := Space;
+ Drop : Truncation := Error)
+ renames Super_Tail;
function "*"
- (Left : in Natural;
- Right : in Bounded_String)
- return Bounded_String
- renames Times;
+ (Left : Natural;
+ Right : Bounded_String) return Bounded_String
+ renames Times;
function Replicate
- (Count : in Natural;
- Item : in Bounded_String;
- Drop : in Truncation := Error)
- return Bounded_String
+ (Count : Natural;
+ Item : Bounded_String;
+ Drop : Truncation := Error) return Bounded_String
renames Super_Replicate;
end Generic_Bounded_Length;
diff --git a/gcc/ada/a-string.ads b/gcc/ada/a-string.ads
index e8ec5ac3690..5b9d803a200 100644
--- a/gcc/ada/a-string.ads
+++ b/gcc/ada/a-string.ads
@@ -16,8 +16,13 @@
package Ada.Strings is
pragma Pure (Strings);
- Space : constant Character := ' ';
- Wide_Space : constant Wide_Character := ' ';
+ Space : constant Character := ' ';
+ Wide_Space : constant Wide_Character := ' ';
+
+ -- The following declaration is for Ada 2005 (AI-285)
+
+ Wide_Wide_Space : constant Wide_Wide_Character := ' ';
+ pragma Ada_05 (Wide_Wide_Space);
Length_Error, Pattern_Error, Index_Error, Translation_Error : exception;
diff --git a/gcc/ada/a-strsup.adb b/gcc/ada/a-strsup.adb
index 8ae039336d9..f32398e71b0 100644
--- a/gcc/ada/a-strsup.adb
+++ b/gcc/ada/a-strsup.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2003-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- --
@@ -42,8 +42,7 @@ package body Ada.Strings.Superbounded is
function Concat
(Left : Super_String;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Left.Max_Length);
Llen : constant Natural := Left.Current_Length;
@@ -64,8 +63,7 @@ package body Ada.Strings.Superbounded is
function Concat
(Left : Super_String;
- Right : String)
- return Super_String
+ Right : String) return Super_String
is
Result : Super_String (Left.Max_Length);
Llen : constant Natural := Left.Current_Length;
@@ -85,8 +83,7 @@ package body Ada.Strings.Superbounded is
function Concat
(Left : String;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Right.Max_Length);
Llen : constant Natural := Left'Length;
@@ -107,8 +104,7 @@ package body Ada.Strings.Superbounded is
function Concat
(Left : Super_String;
- Right : Character)
- return Super_String
+ Right : Character) return Super_String
is
Result : Super_String (Left.Max_Length);
Llen : constant Natural := Left.Current_Length;
@@ -127,8 +123,7 @@ package body Ada.Strings.Superbounded is
function Concat
(Left : Character;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Right.Max_Length);
Rlen : constant Natural := Right.Current_Length;
@@ -149,22 +144,29 @@ package body Ada.Strings.Superbounded is
-- Equal --
-----------
- function "=" (Left, Right : Super_String) return Boolean is
+ function "="
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Current_Length = Right.Current_Length
and then Left.Data (1 .. Left.Current_Length) =
Right.Data (1 .. Right.Current_Length);
end "=";
- function Equal (Left : Super_String; Right : String)
- return Boolean is
+ function Equal
+ (Left : Super_String;
+ Right : String) return Boolean
+ is
begin
return Left.Current_Length = Right'Length
and then Left.Data (1 .. Left.Current_Length) = Right;
end Equal;
- function Equal (Left : String; Right : Super_String)
- return Boolean is
+ function Equal
+ (Left : String;
+ Right : Super_String) return Boolean
+ is
begin
return Left'Length = Right.Current_Length
and then Left = Right.Data (1 .. Right.Current_Length);
@@ -174,7 +176,10 @@ package body Ada.Strings.Superbounded is
-- Greater --
-------------
- function Greater (Left, Right : Super_String) return Boolean is
+ function Greater
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) >
Right.Data (1 .. Right.Current_Length);
@@ -182,8 +187,7 @@ package body Ada.Strings.Superbounded is
function Greater
(Left : Super_String;
- Right : String)
- return Boolean
+ Right : String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) > Right;
@@ -191,8 +195,7 @@ package body Ada.Strings.Superbounded is
function Greater
(Left : String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left > Right.Data (1 .. Right.Current_Length);
@@ -202,7 +205,10 @@ package body Ada.Strings.Superbounded is
-- Greater_Or_Equal --
----------------------
- function Greater_Or_Equal (Left, Right : Super_String) return Boolean is
+ function Greater_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) >=
Right.Data (1 .. Right.Current_Length);
@@ -210,8 +216,7 @@ package body Ada.Strings.Superbounded is
function Greater_Or_Equal
(Left : Super_String;
- Right : String)
- return Boolean
+ Right : String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) >= Right;
@@ -219,8 +224,7 @@ package body Ada.Strings.Superbounded is
function Greater_Or_Equal
(Left : String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left >= Right.Data (1 .. Right.Current_Length);
@@ -230,7 +234,10 @@ package body Ada.Strings.Superbounded is
-- Less --
----------
- function Less (Left, Right : Super_String) return Boolean is
+ function Less
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) <
Right.Data (1 .. Right.Current_Length);
@@ -238,8 +245,7 @@ package body Ada.Strings.Superbounded is
function Less
(Left : Super_String;
- Right : String)
- return Boolean
+ Right : String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) < Right;
@@ -247,8 +253,7 @@ package body Ada.Strings.Superbounded is
function Less
(Left : String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left < Right.Data (1 .. Right.Current_Length);
@@ -258,7 +263,10 @@ package body Ada.Strings.Superbounded is
-- Less_Or_Equal --
-------------------
- function Less_Or_Equal (Left, Right : Super_String) return Boolean is
+ function Less_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) <=
Right.Data (1 .. Right.Current_Length);
@@ -266,8 +274,7 @@ package body Ada.Strings.Superbounded is
function Less_Or_Equal
(Left : Super_String;
- Right : String)
- return Boolean
+ Right : String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) <= Right;
@@ -275,13 +282,47 @@ package body Ada.Strings.Superbounded is
function Less_Or_Equal
(Left : String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left <= Right.Data (1 .. Right.Current_Length);
end Less_Or_Equal;
+ ----------------------
+ -- Set_Super_String --
+ ----------------------
+
+ procedure Set_Super_String
+ (Target : out Super_String;
+ Source : String;
+ Drop : Truncation := Error)
+ is
+ Slen : constant Natural := Source'Length;
+ Max_Length : constant Positive := Target.Max_Length;
+
+ begin
+ if Slen <= Max_Length then
+ Target.Current_Length := Slen;
+ Target.Data (1 .. Slen) := Source;
+
+ else
+ case Drop is
+ when Strings.Right =>
+ Target.Current_Length := Max_Length;
+ Target.Data (1 .. Max_Length) :=
+ Source (Source'First .. Source'First - 1 + Max_Length);
+
+ when Strings.Left =>
+ Target.Current_Length := Max_Length;
+ Target.Data (1 .. Max_Length) :=
+ Source (Source'Last - (Max_Length - 1) .. Source'Last);
+
+ when Strings.Error =>
+ raise Ada.Strings.Length_Error;
+ end case;
+ end if;
+ end Set_Super_String;
+
------------------
-- Super_Append --
------------------
@@ -289,9 +330,9 @@ package body Ada.Strings.Superbounded is
-- Case of Super_String and Super_String
function Super_Append
- (Left, Right : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ (Left : Super_String;
+ Right : Super_String;
+ Drop : Truncation := Error) return Super_String
is
Max_Length : constant Positive := Left.Max_Length;
Result : Super_String (Max_Length);
@@ -341,7 +382,7 @@ package body Ada.Strings.Superbounded is
procedure Super_Append
(Source : in out Super_String;
New_Item : Super_String;
- Drop : Truncation := Error)
+ Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
Llen : constant Natural := Source.Current_Length;
@@ -386,8 +427,7 @@ package body Ada.Strings.Superbounded is
function Super_Append
(Left : Super_String;
Right : String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Left.Max_Length;
Result : Super_String (Max_Length);
@@ -440,7 +480,7 @@ package body Ada.Strings.Superbounded is
procedure Super_Append
(Source : in out Super_String;
New_Item : String;
- Drop : Truncation := Error)
+ Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
Llen : constant Natural := Source.Current_Length;
@@ -488,8 +528,7 @@ package body Ada.Strings.Superbounded is
function Super_Append
(Left : String;
Right : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Right.Max_Length;
Result : Super_String (Max_Length);
@@ -543,8 +582,7 @@ package body Ada.Strings.Superbounded is
function Super_Append
(Left : Super_String;
Right : Character;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Left.Max_Length;
Result : Super_String (Max_Length);
@@ -578,7 +616,7 @@ package body Ada.Strings.Superbounded is
procedure Super_Append
(Source : in out Super_String;
New_Item : Character;
- Drop : Truncation := Error)
+ Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
Llen : constant Natural := Source.Current_Length;
@@ -612,8 +650,7 @@ package body Ada.Strings.Superbounded is
function Super_Append
(Left : Character;
Right : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Right.Max_Length;
Result : Super_String (Max_Length);
@@ -649,10 +686,9 @@ package body Ada.Strings.Superbounded is
-----------------
function Super_Count
- (Source : Super_String;
- Pattern : String;
- Mapping : Maps.Character_Mapping := Maps.Identity)
- return Natural
+ (Source : Super_String;
+ Pattern : String;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
is
begin
return
@@ -661,10 +697,9 @@ package body Ada.Strings.Superbounded is
end Super_Count;
function Super_Count
- (Source : Super_String;
- Pattern : String;
- Mapping : Maps.Character_Mapping_Function)
- return Natural
+ (Source : Super_String;
+ Pattern : String;
+ Mapping : Maps.Character_Mapping_Function) return Natural
is
begin
return
@@ -674,8 +709,7 @@ package body Ada.Strings.Superbounded is
function Super_Count
(Source : Super_String;
- Set : Maps.Character_Set)
- return Natural
+ Set : Maps.Character_Set) return Natural
is
begin
return Search.Count (Source.Data (1 .. Source.Current_Length), Set);
@@ -688,8 +722,7 @@ package body Ada.Strings.Superbounded is
function Super_Delete
(Source : Super_String;
From : Positive;
- Through : Natural)
- return Super_String
+ Through : Natural) return Super_String
is
Result : Super_String (Source.Max_Length);
Slen : constant Natural := Source.Current_Length;
@@ -747,8 +780,7 @@ package body Ada.Strings.Superbounded is
function Super_Element
(Source : Super_String;
- Index : Positive)
- return Character
+ Index : Positive) return Character
is
begin
if Index in 1 .. Source.Current_Length then
@@ -782,8 +814,7 @@ package body Ada.Strings.Superbounded is
(Source : Super_String;
Count : Natural;
Pad : Character := Space;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -830,7 +861,7 @@ package body Ada.Strings.Superbounded is
procedure Super_Head
(Source : in out Super_String;
Count : Natural;
- Pad : Character := Space;
+ Pad : Character := Space;
Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
@@ -878,11 +909,10 @@ package body Ada.Strings.Superbounded is
-----------------
function Super_Index
- (Source : Super_String;
- Pattern : String;
- Going : Strings.Direction := Strings.Forward;
- Mapping : Maps.Character_Mapping := Maps.Identity)
- return Natural
+ (Source : Super_String;
+ Pattern : String;
+ Going : Strings.Direction := Strings.Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
is
begin
return Search.Index
@@ -890,11 +920,10 @@ package body Ada.Strings.Superbounded is
end Super_Index;
function Super_Index
- (Source : Super_String;
- Pattern : String;
- Going : Direction := Forward;
- Mapping : Maps.Character_Mapping_Function)
- return Natural
+ (Source : Super_String;
+ Pattern : String;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural
is
begin
return Search.Index
@@ -905,22 +934,58 @@ package body Ada.Strings.Superbounded is
(Source : Super_String;
Set : Maps.Character_Set;
Test : Strings.Membership := Strings.Inside;
- Going : Strings.Direction := Strings.Forward)
- return Natural
+ Going : Strings.Direction := Strings.Forward) return Natural
is
begin
return Search.Index
(Source.Data (1 .. Source.Current_Length), Set, Test, Going);
end Super_Index;
+ function Super_Index
+ (Source : Super_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural
+ is
+ begin
+ return Search.Index
+ (Source.Data (1 .. Source.Current_Length),
+ Pattern, From, Going, Mapping);
+ end Super_Index;
+
+ function Super_Index
+ (Source : Super_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural
+ is
+ begin
+ return Search.Index
+ (Source.Data (1 .. Source.Current_Length),
+ Pattern, From, Going, Mapping);
+ end Super_Index;
+
+ function Super_Index
+ (Source : Super_String;
+ Set : Maps.Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural
+ is
+ begin
+ return Search.Index
+ (Source.Data (1 .. Source.Current_Length), Set, From, Test, Going);
+ end Super_Index;
+
---------------------------
-- Super_Index_Non_Blank --
---------------------------
function Super_Index_Non_Blank
(Source : Super_String;
- Going : Strings.Direction := Strings.Forward)
- return Natural
+ Going : Strings.Direction := Strings.Forward) return Natural
is
begin
return
@@ -928,6 +993,17 @@ package body Ada.Strings.Superbounded is
(Source.Data (1 .. Source.Current_Length), Going);
end Super_Index_Non_Blank;
+ function Super_Index_Non_Blank
+ (Source : Super_String;
+ From : Positive;
+ Going : Direction := Forward) return Natural
+ is
+ begin
+ return
+ Search.Index_Non_Blank
+ (Source.Data (1 .. Source.Current_Length), From, Going);
+ end Super_Index_Non_Blank;
+
------------------
-- Super_Insert --
------------------
@@ -936,8 +1012,7 @@ package body Ada.Strings.Superbounded is
(Source : Super_String;
Before : Positive;
New_Item : String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -1032,11 +1107,10 @@ package body Ada.Strings.Superbounded is
---------------------
function Super_Overwrite
- (Source : Super_String;
- Position : Positive;
- New_Item : String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ (Source : Super_String;
+ Position : Positive;
+ New_Item : String;
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -1172,12 +1246,11 @@ package body Ada.Strings.Superbounded is
-------------------------
function Super_Replace_Slice
- (Source : Super_String;
- Low : Positive;
- High : Natural;
- By : String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Slen : constant Natural := Source.Current_Length;
@@ -1273,8 +1346,7 @@ package body Ada.Strings.Superbounded is
(Count : Natural;
Item : Character;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Result : Super_String (Max_Length);
@@ -1297,8 +1369,7 @@ package body Ada.Strings.Superbounded is
(Count : Natural;
Item : String;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Length : constant Integer := Count * Item'Length;
Result : Super_String (Max_Length);
@@ -1354,8 +1425,7 @@ package body Ada.Strings.Superbounded is
function Super_Replicate
(Count : Natural;
Item : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
begin
return
@@ -1373,8 +1443,7 @@ package body Ada.Strings.Superbounded is
function Super_Slice
(Source : Super_String;
Low : Positive;
- High : Natural)
- return String
+ High : Natural) return String
is
begin
-- Note: test of High > Length is in accordance with AI95-00128
@@ -1388,6 +1457,43 @@ package body Ada.Strings.Superbounded is
end if;
end Super_Slice;
+ function Super_Slice
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural) return Super_String
+ is
+ Result : Super_String (Source.Max_Length);
+
+ begin
+ if Low > Source.Current_Length + 1
+ or else High > Source.Current_Length
+ then
+ raise Index_Error;
+ else
+ Result.Current_Length := High - Low + 1;
+ Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+ end if;
+
+ return Result;
+ end Super_Slice;
+
+ procedure Super_Slice
+ (Source : Super_String;
+ Target : out Super_String;
+ Low : Positive;
+ High : Natural)
+ is
+ begin
+ if Low > Source.Current_Length + 1
+ or else High > Source.Current_Length
+ then
+ raise Index_Error;
+ else
+ Target.Current_Length := High - Low + 1;
+ Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+ end if;
+ end Super_Slice;
+
----------------
-- Super_Tail --
----------------
@@ -1396,8 +1502,7 @@ package body Ada.Strings.Superbounded is
(Source : Super_String;
Count : Natural;
Pad : Character := Space;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -1445,7 +1550,7 @@ package body Ada.Strings.Superbounded is
procedure Super_Tail
(Source : in out Super_String;
Count : Natural;
- Pad : Character := Space;
+ Pad : Character := Space;
Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
@@ -1497,7 +1602,7 @@ package body Ada.Strings.Superbounded is
-- Super_To_String --
---------------------
- function Super_To_String (Source : in Super_String) return String is
+ function Super_To_String (Source : Super_String) return String is
begin
return Source.Data (1 .. Source.Current_Length);
end Super_To_String;
@@ -1508,8 +1613,7 @@ package body Ada.Strings.Superbounded is
function Super_Translate
(Source : Super_String;
- Mapping : Maps.Character_Mapping)
- return Super_String
+ Mapping : Maps.Character_Mapping) return Super_String
is
Result : Super_String (Source.Max_Length);
@@ -1535,8 +1639,7 @@ package body Ada.Strings.Superbounded is
function Super_Translate
(Source : Super_String;
- Mapping : Maps.Character_Mapping_Function)
- return Super_String
+ Mapping : Maps.Character_Mapping_Function) return Super_String
is
Result : Super_String (Source.Max_Length);
@@ -1564,8 +1667,9 @@ package body Ada.Strings.Superbounded is
-- Super_Trim --
----------------
- function Super_Trim (Source : Super_String; Side : Trim_End)
- return Super_String
+ function Super_Trim
+ (Source : Super_String;
+ Side : Trim_End) return Super_String
is
Result : Super_String (Source.Max_Length);
Last : Natural := Source.Current_Length;
@@ -1621,8 +1725,7 @@ package body Ada.Strings.Superbounded is
function Super_Trim
(Source : Super_String;
Left : Maps.Character_Set;
- Right : Maps.Character_Set)
- return Super_String
+ Right : Maps.Character_Set) return Super_String
is
Result : Super_String (Source.Max_Length);
@@ -1688,8 +1791,7 @@ package body Ada.Strings.Superbounded is
function Times
(Left : Natural;
Right : Character;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Result : Super_String (Max_Length);
@@ -1711,8 +1813,7 @@ package body Ada.Strings.Superbounded is
function Times
(Left : Natural;
Right : String;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Result : Super_String (Max_Length);
Pos : Positive := 1;
@@ -1739,8 +1840,7 @@ package body Ada.Strings.Superbounded is
function Times
(Left : Natural;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Right.Max_Length);
Pos : Positive := 1;
@@ -1773,8 +1873,7 @@ package body Ada.Strings.Superbounded is
function To_Super_String
(Source : String;
Max_Length : Natural;
- Drop : Truncation := Error)
- return Super_String
+ Drop : Truncation := Error) return Super_String
is
Result : Super_String (Max_Length);
Slen : constant Natural := Source'Length;
diff --git a/gcc/ada/a-strsup.ads b/gcc/ada/a-strsup.ads
index 7716ca79e25..542f821e74f 100644
--- a/gcc/ada/a-strsup.ads
+++ b/gcc/ada/a-strsup.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2003-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- --
@@ -63,8 +63,7 @@ pragma Preelaborate (Superbounded);
function To_Super_String
(Source : String;
Max_Length : Natural;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
-- Note the additional parameter Max_Length, which specifies the maximum
-- length setting of the resulting Super_String value.
@@ -73,34 +72,35 @@ pragma Preelaborate (Superbounded);
function Super_To_String (Source : Super_String) return String;
+ procedure Set_Super_String
+ (Target : out Super_String;
+ Source : String;
+ Drop : Truncation := Error);
+
function Super_Append
- (Left, Right : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ (Left : Super_String;
+ Right : Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Super_String;
Right : String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : String;
Right : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Super_String;
Right : Character;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Character;
Right : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Append
(Source : in out Super_String;
@@ -118,33 +118,28 @@ pragma Preelaborate (Superbounded);
Drop : Truncation := Error);
function Concat
- (Left, Right : Super_String)
- return Super_String;
+ (Left : Super_String;
+ Right : Super_String) return Super_String;
function Concat
(Left : Super_String;
- Right : String)
- return Super_String;
+ Right : String) return Super_String;
function Concat
(Left : String;
- Right : Super_String)
- return Super_String;
+ Right : Super_String) return Super_String;
function Concat
(Left : Super_String;
- Right : Character)
- return Super_String;
+ Right : Character) return Super_String;
function Concat
(Left : Character;
- Right : Super_String)
- return Super_String;
+ Right : Super_String) return Super_String;
function Super_Element
(Source : Super_String;
- Index : Positive)
- return Character;
+ Index : Positive) return Character;
procedure Super_Replace_Element
(Source : in out Super_String;
@@ -154,70 +149,82 @@ pragma Preelaborate (Superbounded);
function Super_Slice
(Source : Super_String;
Low : Positive;
- High : Natural)
- return String;
+ High : Natural) return String;
+
+ function Super_Slice
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural) return Super_String;
+
+ procedure Super_Slice
+ (Source : Super_String;
+ Target : out Super_String;
+ Low : Positive;
+ High : Natural);
- function "=" (Left, Right : Super_String) return Boolean;
+ function "="
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
- function Equal (Left, Right : Super_String) return Boolean renames "=";
+ function Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean renames "=";
function Equal
(Left : Super_String;
- Right : String)
- return Boolean;
+ Right : String) return Boolean;
function Equal
(Left : String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Less (Left, Right : Super_String) return Boolean;
+ function Less
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Less
(Left : Super_String;
- Right : String)
- return Boolean;
+ Right : String) return Boolean;
function Less
(Left : String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Less_Or_Equal (Left, Right : Super_String) return Boolean;
+ function Less_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Less_Or_Equal
(Left : Super_String;
- Right : String)
- return Boolean;
+ Right : String) return Boolean;
function Less_Or_Equal
(Left : String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Greater (Left, Right : Super_String) return Boolean;
+ function Greater
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Greater
(Left : Super_String;
- Right : String)
- return Boolean;
+ Right : String) return Boolean;
function Greater
(Left : String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Greater_Or_Equal (Left, Right : Super_String) return Boolean;
+ function Greater_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Greater_Or_Equal
(Left : Super_String;
- Right : String)
- return Boolean;
+ Right : String) return Boolean;
function Greater_Or_Equal
(Left : String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
----------------------
-- Search Functions --
@@ -227,44 +234,63 @@ pragma Preelaborate (Superbounded);
(Source : Super_String;
Pattern : String;
Going : Direction := Forward;
- Mapping : Maps.Character_Mapping := Maps.Identity)
- return Natural;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
function Super_Index
(Source : Super_String;
Pattern : String;
Going : Direction := Forward;
- Mapping : Maps.Character_Mapping_Function)
- return Natural;
+ Mapping : Maps.Character_Mapping_Function) return Natural;
function Super_Index
(Source : Super_String;
Set : Maps.Character_Set;
Test : Membership := Inside;
- Going : Direction := Forward)
- return Natural;
+ Going : Direction := Forward) return Natural;
+
+ function Super_Index
+ (Source : Super_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
+
+ function Super_Index
+ (Source : Super_String;
+ Pattern : String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Maps.Character_Mapping_Function) return Natural;
+
+ function Super_Index
+ (Source : Super_String;
+ Set : Maps.Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
+
+ function Super_Index_Non_Blank
+ (Source : Super_String;
+ Going : Direction := Forward) return Natural;
function Super_Index_Non_Blank
(Source : Super_String;
- Going : Direction := Forward)
- return Natural;
+ From : Positive;
+ Going : Direction := Forward) return Natural;
function Super_Count
(Source : Super_String;
Pattern : String;
- Mapping : Maps.Character_Mapping := Maps.Identity)
- return Natural;
+ Mapping : Maps.Character_Mapping := Maps.Identity) return Natural;
function Super_Count
(Source : Super_String;
Pattern : String;
- Mapping : Maps.Character_Mapping_Function)
- return Natural;
+ Mapping : Maps.Character_Mapping_Function) return Natural;
function Super_Count
(Source : Super_String;
- Set : Maps.Character_Set)
- return Natural;
+ Set : Maps.Character_Set) return Natural;
procedure Super_Find_Token
(Source : Super_String;
@@ -278,9 +304,8 @@ pragma Preelaborate (Superbounded);
------------------------------------
function Super_Translate
- (Source : Super_String;
- Mapping : Maps.Character_Mapping)
- return Super_String;
+ (Source : Super_String;
+ Mapping : Maps.Character_Mapping) return Super_String;
procedure Super_Translate
(Source : in out Super_String;
@@ -288,8 +313,7 @@ pragma Preelaborate (Superbounded);
function Super_Translate
(Source : Super_String;
- Mapping : Maps.Character_Mapping_Function)
- return Super_String;
+ Mapping : Maps.Character_Mapping_Function) return Super_String;
procedure Super_Translate
(Source : in out Super_String;
@@ -300,26 +324,24 @@ pragma Preelaborate (Superbounded);
---------------------------------------
function Super_Replace_Slice
- (Source : Super_String;
- Low : Positive;
- High : Natural;
- By : String;
- Drop : Truncation := Error)
- return Super_String;
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Replace_Slice
- (Source : in out Super_String;
- Low : Positive;
- High : Natural;
- By : String;
- Drop : Truncation := Error);
+ (Source : in out Super_String;
+ Low : Positive;
+ High : Natural;
+ By : String;
+ Drop : Truncation := Error);
function Super_Insert
(Source : Super_String;
Before : Positive;
New_Item : String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Insert
(Source : in out Super_String;
@@ -328,11 +350,10 @@ pragma Preelaborate (Superbounded);
Drop : Truncation := Error);
function Super_Overwrite
- (Source : Super_String;
- Position : Positive;
- New_Item : String;
- Drop : Truncation := Error)
- return Super_String;
+ (Source : Super_String;
+ Position : Positive;
+ New_Item : String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Overwrite
(Source : in out Super_String;
@@ -343,8 +364,7 @@ pragma Preelaborate (Superbounded);
function Super_Delete
(Source : Super_String;
From : Positive;
- Through : Natural)
- return Super_String;
+ Through : Natural) return Super_String;
procedure Super_Delete
(Source : in out Super_String;
@@ -357,18 +377,16 @@ pragma Preelaborate (Superbounded);
function Super_Trim
(Source : Super_String;
- Side : Trim_End)
- return Super_String;
+ Side : Trim_End) return Super_String;
procedure Super_Trim
(Source : in out Super_String;
Side : Trim_End);
function Super_Trim
- (Source : Super_String;
+ (Source : Super_String;
Left : Maps.Character_Set;
- Right : Maps.Character_Set)
- return Super_String;
+ Right : Maps.Character_Set) return Super_String;
procedure Super_Trim
(Source : in out Super_String;
@@ -379,26 +397,24 @@ pragma Preelaborate (Superbounded);
(Source : Super_String;
Count : Natural;
Pad : Character := Space;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Head
(Source : in out Super_String;
Count : Natural;
- Pad : Character := Space;
+ Pad : Character := Space;
Drop : Truncation := Error);
function Super_Tail
(Source : Super_String;
Count : Natural;
- Pad : Character := Space;
- Drop : Truncation := Error)
- return Super_String;
+ Pad : Character := Space;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Tail
(Source : in out Super_String;
Count : Natural;
- Pad : Character := Space;
+ Pad : Character := Space;
Drop : Truncation := Error);
------------------------------------
@@ -412,46 +428,39 @@ pragma Preelaborate (Superbounded);
function Times
(Left : Natural;
Right : Character;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Times
(Left : Natural;
Right : String;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Times
(Left : Natural;
- Right : Super_String)
- return Super_String;
+ Right : Super_String) return Super_String;
function Super_Replicate
(Count : Natural;
Item : Character;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Super_Replicate
(Count : Natural;
Item : String;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Super_Replicate
(Count : Natural;
Item : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
private
-
-- Pragma Inline declarations
pragma Inline ("=");
diff --git a/gcc/ada/a-stunau.ads b/gcc/ada/a-stunau.ads
index 2da87482fa0..6ba3e567140 100644
--- a/gcc/ada/a-stunau.ads
+++ b/gcc/ada/a-stunau.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2002, 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- --
@@ -34,7 +34,7 @@
-- This child package of Ada.Strings.Unbounded provides some specialized
-- access functions which are intended to allow more efficient use of the
-- facilities of Ada.Strings.Unbounded, particularly by other layered
--- utilities (such as GNAT.Patterns).
+-- utilities (such as GNAT.SPITBOL.Patterns).
package Ada.Strings.Unbounded.Aux is
pragma Preelaborate (Aux);
diff --git a/gcc/ada/a-stwibo.adb b/gcc/ada/a-stwibo.adb
index 9d0661a6c96..a53dd7a3569 100644
--- a/gcc/ada/a-stwibo.adb
+++ b/gcc/ada/a-stwibo.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -40,18 +40,16 @@ package body Ada.Strings.Wide_Bounded is
---------
function "*"
- (Left : in Natural;
- Right : in Wide_Character)
- return Bounded_Wide_String
+ (Left : Natural;
+ Right : Wide_Character) return Bounded_Wide_String
is
begin
return Times (Left, Right, Max_Length);
end "*";
function "*"
- (Left : in Natural;
- Right : in Wide_String)
- return Bounded_Wide_String
+ (Left : Natural;
+ Right : Wide_String) return Bounded_Wide_String
is
begin
return Times (Left, Right, Max_Length);
@@ -62,39 +60,37 @@ package body Ada.Strings.Wide_Bounded is
---------------
function Replicate
- (Count : in Natural;
- Item : in Wide_Character;
- Drop : in Strings.Truncation := Strings.Error)
- return Bounded_Wide_String
+ (Count : Natural;
+ Item : Wide_Character;
+ Drop : Strings.Truncation := Strings.Error)
+ return Bounded_Wide_String
is
begin
return Super_Replicate (Count, Item, Drop, Max_Length);
end Replicate;
function Replicate
- (Count : in Natural;
- Item : in Wide_String;
- Drop : in Strings.Truncation := Strings.Error)
- return Bounded_Wide_String
+ (Count : Natural;
+ Item : Wide_String;
+ Drop : Strings.Truncation := Strings.Error)
+ return Bounded_Wide_String
is
begin
return Super_Replicate (Count, Item, Drop, Max_Length);
end Replicate;
-
- -----------------------
- -- To_Bounded_String --
- -----------------------
+ ----------------------------
+ -- To_Bounded_Wide_String --
+ ----------------------------
function To_Bounded_Wide_String
- (Source : in Wide_String;
- Drop : in Strings.Truncation := Strings.Error)
- return Bounded_Wide_String
+ (Source : Wide_String;
+ Drop : Strings.Truncation := Strings.Error)
+ return Bounded_Wide_String
is
begin
return To_Super_String (Source, Max_Length, Drop);
end To_Bounded_Wide_String;
end Generic_Bounded_Length;
-
end Ada.Strings.Wide_Bounded;
diff --git a/gcc/ada/a-stwibo.ads b/gcc/ada/a-stwibo.ads
index 9cebf6f484b..5c3bfd215b7 100644
--- a/gcc/ada/a-stwibo.ads
+++ b/gcc/ada/a-stwibo.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -55,805 +55,848 @@ pragma Preelaborate (Wide_Bounded);
subtype Length_Range is Natural range 0 .. Max_Length;
- function Length (Source : in Bounded_Wide_String) return Length_Range;
+ function Length (Source : Bounded_Wide_String) return Length_Range;
--------------------------------------------------------
-- Conversion, Concatenation, and Selection Functions --
--------------------------------------------------------
function To_Bounded_Wide_String
- (Source : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Source : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function To_Wide_String
- (Source : in Bounded_Wide_String)
- return Wide_String;
+ (Source : Bounded_Wide_String) return Wide_String;
+
+ procedure Set_Bounded_Wide_String
+ (Target : out Bounded_Wide_String;
+ Source : Wide_String;
+ Drop : Truncation := Error);
+ pragma Ada_05 (Set_Bounded_Wide_String);
function Append
- (Left, Right : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function Append
- (Left : in Bounded_Wide_String;
- Right : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function Append
- (Left : in Wide_String;
- Right : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function Append
- (Left : in Bounded_Wide_String;
- Right : in Wide_Character;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Left : Bounded_Wide_String;
+ Right : Wide_Character;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function Append
- (Left : in Wide_Character;
- Right : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Left : Wide_Character;
+ Right : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
procedure Append
(Source : in out Bounded_Wide_String;
- New_Item : in Bounded_Wide_String;
- Drop : in Truncation := Error);
+ New_Item : Bounded_Wide_String;
+ Drop : Truncation := Error);
procedure Append
(Source : in out Bounded_Wide_String;
- New_Item : in Wide_String;
- Drop : in Truncation := Error);
+ New_Item : Wide_String;
+ Drop : Truncation := Error);
procedure Append
(Source : in out Bounded_Wide_String;
- New_Item : in Wide_Character;
- Drop : in Truncation := Error);
+ New_Item : Wide_Character;
+ Drop : Truncation := Error);
function "&"
- (Left, Right : in Bounded_Wide_String)
- return Bounded_Wide_String;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Bounded_Wide_String;
function "&"
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Bounded_Wide_String;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Bounded_Wide_String;
function "&"
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Bounded_Wide_String;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Bounded_Wide_String;
function "&"
- (Left : in Bounded_Wide_String;
- Right : in Wide_Character)
- return Bounded_Wide_String;
+ (Left : Bounded_Wide_String;
+ Right : Wide_Character) return Bounded_Wide_String;
function "&"
- (Left : in Wide_Character;
- Right : in Bounded_Wide_String)
- return Bounded_Wide_String;
+ (Left : Wide_Character;
+ Right : Bounded_Wide_String) return Bounded_Wide_String;
function Element
- (Source : in Bounded_Wide_String;
- Index : in Positive)
- return Wide_Character;
+ (Source : Bounded_Wide_String;
+ Index : Positive) return Wide_Character;
procedure Replace_Element
(Source : in out Bounded_Wide_String;
- Index : in Positive;
- By : in Wide_Character);
+ Index : Positive;
+ By : Wide_Character);
function Slice
- (Source : in Bounded_Wide_String;
- Low : in Positive;
- High : in Natural)
- return Wide_String;
+ (Source : Bounded_Wide_String;
+ Low : Positive;
+ High : Natural) return Wide_String;
+
+ function Bounded_Slice
+ (Source : Bounded_Wide_String;
+ Low : Positive;
+ High : Natural) return Bounded_Wide_String;
+ pragma Ada_05 (Bounded_Slice);
+
+ procedure Bounded_Slice
+ (Source : Bounded_Wide_String;
+ Target : out Bounded_Wide_String;
+ Low : Positive;
+ High : Natural);
+ pragma Ada_05 (Bounded_Slice);
function "="
- (Left : in Bounded_Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function "="
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean;
function "="
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function "<"
- (Left : in Bounded_Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function "<"
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean;
function "<"
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function "<="
- (Left : in Bounded_Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function "<="
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean;
function "<="
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function ">"
- (Left : in Bounded_Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function ">"
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean;
function ">"
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function ">="
- (Left : in Bounded_Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
function ">="
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean;
function ">="
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean;
----------------------
-- Search Functions --
----------------------
function Index
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Going : in Direction := Forward;
- Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural;
+
+ function Index
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
+
+ function Index
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
+
+ function Index
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural;
+ pragma Ada_05 (Index);
function Index
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Going : in Direction := Forward;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Natural;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
+ pragma Ada_05 (Index);
function Index
- (Source : in Bounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set;
- Test : in Membership := Inside;
- Going : in Direction := Forward)
- return Natural;
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
+ pragma Ada_05 (Index);
+
+ function Index_Non_Blank
+ (Source : Bounded_Wide_String;
+ Going : Direction := Forward) return Natural;
function Index_Non_Blank
- (Source : in Bounded_Wide_String;
- Going : in Direction := Forward)
- return Natural;
+ (Source : Bounded_Wide_String;
+ From : Positive;
+ Going : Direction := Forward) return Natural;
+ pragma Ada_05 (Index_Non_Blank);
function Count
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural;
function Count
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Natural;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
function Count
- (Source : in Bounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set)
- return Natural;
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set) return Natural;
procedure Find_Token
- (Source : in Bounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set;
- Test : in Membership;
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ Test : Membership;
First : out Positive;
Last : out Natural);
------------------------------------
- -- Wide_String Translation Subprograms --
+ -- String Translation Subprograms --
------------------------------------
function Translate
- (Source : in Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping)
+ return Bounded_Wide_String;
procedure Translate
- (Source : in out Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping);
+ (Source : in out Bounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping);
function Translate
- (Source : in Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function)
+ return Bounded_Wide_String;
procedure Translate
(Source : in out Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function);
---------------------------------------
- -- Wide_String Transformation Subprograms --
+ -- String Transformation Subprograms --
---------------------------------------
function Replace_Slice
- (Source : in Bounded_Wide_String;
- Low : in Positive;
- High : in Natural;
- By : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
procedure Replace_Slice
(Source : in out Bounded_Wide_String;
- Low : in Positive;
- High : in Natural;
- By : in Wide_String;
- Drop : in Truncation := Error);
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Truncation := Error);
function Insert
- (Source : in Bounded_Wide_String;
- Before : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Before : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
procedure Insert
(Source : in out Bounded_Wide_String;
- Before : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error);
+ Before : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error);
function Overwrite
- (Source : in Bounded_Wide_String;
- Position : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Position : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
procedure Overwrite
(Source : in out Bounded_Wide_String;
- Position : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error);
+ Position : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error);
function Delete
- (Source : in Bounded_Wide_String;
- From : in Positive;
- Through : in Natural)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ From : Positive;
+ Through : Natural) return Bounded_Wide_String;
procedure Delete
(Source : in out Bounded_Wide_String;
- From : in Positive;
- Through : in Natural);
+ From : Positive;
+ Through : Natural);
---------------------------------
- -- Wide_String Selector Subprograms --
+ -- String Selector Subprograms --
---------------------------------
function Trim
- (Source : in Bounded_Wide_String;
- Side : in Trim_End)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Side : Trim_End) return Bounded_Wide_String;
procedure Trim
(Source : in out Bounded_Wide_String;
- Side : in Trim_End);
+ Side : Trim_End);
function Trim
- (Source : in Bounded_Wide_String;
- Left : in Wide_Maps.Wide_Character_Set;
- Right : in Wide_Maps.Wide_Character_Set)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Left : Wide_Maps.Wide_Character_Set;
+ Right : Wide_Maps.Wide_Character_Set) return Bounded_Wide_String;
procedure Trim
(Source : in out Bounded_Wide_String;
- Left : in Wide_Maps.Wide_Character_Set;
- Right : in Wide_Maps.Wide_Character_Set);
+ Left : Wide_Maps.Wide_Character_Set;
+ Right : Wide_Maps.Wide_Character_Set);
function Head
- (Source : in Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error) return Bounded_Wide_String;
procedure Head
(Source : in out Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error);
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error);
function Tail
- (Source : in Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Source : Bounded_Wide_String;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error) return Bounded_Wide_String;
procedure Tail
(Source : in out Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error);
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error);
------------------------------------
- -- Wide_String Constructor Subprograms --
+ -- String Constructor Subprograms --
------------------------------------
function "*"
- (Left : in Natural;
- Right : in Wide_Character)
- return Bounded_Wide_String;
+ (Left : Natural;
+ Right : Wide_Character) return Bounded_Wide_String;
function "*"
- (Left : in Natural;
- Right : in Wide_String)
- return Bounded_Wide_String;
+ (Left : Natural;
+ Right : Wide_String) return Bounded_Wide_String;
function "*"
- (Left : in Natural;
- Right : in Bounded_Wide_String)
- return Bounded_Wide_String;
+ (Left : Natural;
+ Right : Bounded_Wide_String) return Bounded_Wide_String;
function Replicate
- (Count : in Natural;
- Item : in Wide_Character;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Count : Natural;
+ Item : Wide_Character;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function Replicate
- (Count : in Natural;
- Item : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Count : Natural;
+ Item : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
function Replicate
- (Count : in Natural;
- Item : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String;
+ (Count : Natural;
+ Item : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String;
private
-
- -- Most of the implementation is in the non generic package
- -- Ada.Strings.Superbounded. Type Bounded_Wide_String is derived from
- -- type Wide_Superbounded.Super_String with the maximum length
- -- constraint. Except for five, all subprograms are renames of
- -- subprograms that are inherited from Wide_Superbounded.Super_String.
+ -- Most of the implementation is in the separate non generic package
+ -- Ada.Strings.Wide_Superbounded. Type Bounded_Wide_String is derived
+ -- from type Wide_Superbounded.Super_String with the maximum length
+ -- constraint. In almost all cases, the routines in Wide_Superbounded
+ -- can be called with no requirement to pass the maximum length
+ -- explicitly, since there is at least one Bounded_Wide_String argument
+ -- from which the maximum length can be obtained. For all such
+ -- routines, the implementation in this private part is simply a
+ -- renaming of the corresponding routine in the super bouded package.
+
+ -- The five exceptions are the * and Replicate routines operating on
+ -- character values. For these cases, we have a routine in the body
+ -- that calls the superbounded routine passing the maximum length
+ -- explicitly as an extra parameter.
type Bounded_Wide_String is
new Wide_Superbounded.Super_String (Max_Length);
+ -- Deriving Bounded_Wide_String from Wide_Superbounded.Super_String is
+ -- the real trick, it ensures that the type Bounded_Wide_String
+ -- declared in the generic instantiation is compatible with the
+ -- Super_String type declared in the Wide_Superbounded package.
Null_Bounded_Wide_String : constant Bounded_Wide_String :=
- (Max_Length => Max_Length,
- Current_Length => 0,
- Data => (1 .. Max_Length => Wide_Superbounded.Wide_NUL));
+ (Max_Length => Max_Length,
+ Current_Length => 0,
+ Data =>
+ (1 .. Max_Length =>
+ Wide_Superbounded.Wide_NUL));
pragma Inline (To_Bounded_Wide_String);
- function Length (Source : in Bounded_Wide_String) return Length_Range
- renames Super_Length;
+ procedure Set_Bounded_Wide_String
+ (Target : out Bounded_Wide_String;
+ Source : Wide_String;
+ Drop : Truncation := Error)
+ renames Set_Super_String;
+
+ function Length
+ (Source : Bounded_Wide_String) return Length_Range
+ renames Super_Length;
function To_Wide_String
- (Source : in Bounded_Wide_String)
- return Wide_String
- renames Super_To_String;
+ (Source : Bounded_Wide_String) return Wide_String
+ renames Super_To_String;
function Append
- (Left, Right : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Append;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Append;
function Append
- (Left : in Bounded_Wide_String;
- Right : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Append;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Append;
function Append
- (Left : in Wide_String;
- Right : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Append;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Append;
function Append
- (Left : in Bounded_Wide_String;
- Right : in Wide_Character;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Append;
+ (Left : Bounded_Wide_String;
+ Right : Wide_Character;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Append;
function Append
- (Left : in Wide_Character;
- Right : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Append;
+ (Left : Wide_Character;
+ Right : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Append;
procedure Append
(Source : in out Bounded_Wide_String;
- New_Item : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- renames Super_Append;
+ New_Item : Bounded_Wide_String;
+ Drop : Truncation := Error)
+ renames Super_Append;
procedure Append
(Source : in out Bounded_Wide_String;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- renames Super_Append;
+ New_Item : Wide_String;
+ Drop : Truncation := Error)
+ renames Super_Append;
procedure Append
(Source : in out Bounded_Wide_String;
- New_Item : in Wide_Character;
- Drop : in Truncation := Error)
- renames Super_Append;
+ New_Item : Wide_Character;
+ Drop : Truncation := Error)
+ renames Super_Append;
function "&"
- (Left, Right : in Bounded_Wide_String)
- return Bounded_Wide_String
- renames Concat;
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Bounded_Wide_String
+ renames Concat;
function "&"
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Bounded_Wide_String
- renames Concat;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Bounded_Wide_String
+ renames Concat;
function "&"
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Bounded_Wide_String
- renames Concat;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Bounded_Wide_String
+ renames Concat;
function "&"
- (Left : in Bounded_Wide_String;
- Right : in Wide_Character)
- return Bounded_Wide_String
- renames Concat;
+ (Left : Bounded_Wide_String;
+ Right : Wide_Character) return Bounded_Wide_String
+ renames Concat;
function "&"
- (Left : in Wide_Character;
- Right : in Bounded_Wide_String)
- return Bounded_Wide_String
- renames Concat;
+ (Left : Wide_Character;
+ Right : Bounded_Wide_String) return Bounded_Wide_String
+ renames Concat;
function Element
- (Source : in Bounded_Wide_String;
- Index : in Positive)
- return Wide_Character
- renames Super_Element;
+ (Source : Bounded_Wide_String;
+ Index : Positive) return Wide_Character
+ renames Super_Element;
procedure Replace_Element
(Source : in out Bounded_Wide_String;
- Index : in Positive;
- By : in Wide_Character)
- renames Super_Replace_Element;
+ Index : Positive;
+ By : Wide_Character)
+ renames Super_Replace_Element;
function Slice
- (Source : in Bounded_Wide_String;
- Low : in Positive;
- High : in Natural)
- return Wide_String
- renames Super_Slice;
+ (Source : Bounded_Wide_String;
+ Low : Positive;
+ High : Natural) return Wide_String
+ renames Super_Slice;
+
+ function Bounded_Slice
+ (Source : Bounded_Wide_String;
+ Low : Positive;
+ High : Natural) return Bounded_Wide_String
+ renames Super_Slice;
+
+ procedure Bounded_Slice
+ (Source : Bounded_Wide_String;
+ Target : out Bounded_Wide_String;
+ Low : Positive;
+ High : Natural)
+ renames Super_Slice;
- function "=" (Left, Right : in Bounded_Wide_String) return Boolean
- renames Equal;
+ function "="
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Equal;
function "="
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean
- renames Equal;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean
+ renames Equal;
function "="
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean
- renames Equal;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Equal;
- function "<" (Left, Right : in Bounded_Wide_String) return Boolean
- renames Less;
+ function "<"
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Less;
function "<"
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean
- renames Less;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean
+ renames Less;
function "<"
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean
- renames Less;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Less;
- function "<=" (Left, Right : in Bounded_Wide_String) return Boolean
- renames Less_Or_Equal;
+ function "<="
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Less_Or_Equal;
function "<="
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean
- renames Less_Or_Equal;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean
+ renames Less_Or_Equal;
function "<="
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean
- renames Less_Or_Equal;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Less_Or_Equal;
- function ">" (Left, Right : in Bounded_Wide_String) return Boolean
- renames Greater;
+ function ">"
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Greater;
function ">"
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean
- renames Greater;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean
+ renames Greater;
function ">"
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean
- renames Greater;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Greater;
- function ">=" (Left, Right : in Bounded_Wide_String) return Boolean
- renames Greater_Or_Equal;
+ function ">="
+ (Left : Bounded_Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Greater_Or_Equal;
function ">="
- (Left : in Bounded_Wide_String;
- Right : in Wide_String)
- return Boolean
- renames Greater_Or_Equal;
+ (Left : Bounded_Wide_String;
+ Right : Wide_String) return Boolean
+ renames Greater_Or_Equal;
function ">="
- (Left : in Wide_String;
- Right : in Bounded_Wide_String)
- return Boolean
- renames Greater_Or_Equal;
+ (Left : Wide_String;
+ Right : Bounded_Wide_String) return Boolean
+ renames Greater_Or_Equal;
+
+ function Index
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural
+ renames Super_Index;
+
+ function Index
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
+ renames Super_Index;
+
+ function Index
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural
+ renames Super_Index;
function Index
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Going : in Direction := Forward;
- Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural
- renames Super_Index;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural
+ renames Super_Index;
function Index
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Going : in Direction := Forward;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Natural
- renames Super_Index;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
+ renames Super_Index;
function Index
- (Source : in Bounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set;
- Test : in Membership := Inside;
- Going : in Direction := Forward)
- return Natural
- renames Super_Index;
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural
+ renames Super_Index;
+
+ function Index_Non_Blank
+ (Source : Bounded_Wide_String;
+ Going : Direction := Forward) return Natural
+ renames Super_Index_Non_Blank;
function Index_Non_Blank
- (Source : in Bounded_Wide_String;
- Going : in Direction := Forward)
- return Natural
- renames Super_Index_Non_Blank;
+ (Source : Bounded_Wide_String;
+ From : Positive;
+ Going : Direction := Forward) return Natural
+ renames Super_Index_Non_Blank;
function Count
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural
- renames Super_Count;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural
+ renames Super_Count;
function Count
- (Source : in Bounded_Wide_String;
- Pattern : in Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Natural
- renames Super_Count;
+ (Source : Bounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
+ renames Super_Count;
function Count
- (Source : in Bounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set)
- return Natural
- renames Super_Count;
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set) return Natural
+ renames Super_Count;
procedure Find_Token
- (Source : in Bounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set;
- Test : in Membership;
+ (Source : Bounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ Test : Membership;
First : out Positive;
Last : out Natural)
- renames Super_Find_Token;
+ renames Super_Find_Token;
function Translate
- (Source : in Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping)
- return Bounded_Wide_String
- renames Super_Translate;
+ (Source : Bounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping)
+ return Bounded_Wide_String
+ renames Super_Translate;
procedure Translate
(Source : in out Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping)
- renames Super_Translate;
+ Mapping : Wide_Maps.Wide_Character_Mapping)
+ renames Super_Translate;
function Translate
- (Source : in Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Bounded_Wide_String
- renames Super_Translate;
+ (Source : Bounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function)
+ return Bounded_Wide_String
+ renames Super_Translate;
procedure Translate
(Source : in out Bounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- renames Super_Translate;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function)
+ renames Super_Translate;
function Replace_Slice
- (Source : in Bounded_Wide_String;
- Low : in Positive;
- High : in Natural;
- By : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Replace_Slice;
+ (Source : Bounded_Wide_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Replace_Slice;
procedure Replace_Slice
(Source : in out Bounded_Wide_String;
- Low : in Positive;
- High : in Natural;
- By : in Wide_String;
- Drop : in Truncation := Error)
- renames Super_Replace_Slice;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Truncation := Error)
+ renames Super_Replace_Slice;
function Insert
- (Source : in Bounded_Wide_String;
- Before : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Insert;
+ (Source : Bounded_Wide_String;
+ Before : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Insert;
procedure Insert
(Source : in out Bounded_Wide_String;
- Before : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- renames Super_Insert;
+ Before : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error)
+ renames Super_Insert;
function Overwrite
- (Source : in Bounded_Wide_String;
- Position : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Overwrite;
+ (Source : Bounded_Wide_String;
+ Position : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Overwrite;
procedure Overwrite
(Source : in out Bounded_Wide_String;
- Position : in Positive;
- New_Item : in Wide_String;
- Drop : in Truncation := Error)
- renames Super_Overwrite;
+ Position : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error)
+ renames Super_Overwrite;
function Delete
- (Source : in Bounded_Wide_String;
- From : in Positive;
- Through : in Natural)
- return Bounded_Wide_String
- renames Super_Delete;
+ (Source : Bounded_Wide_String;
+ From : Positive;
+ Through : Natural) return Bounded_Wide_String
+ renames Super_Delete;
procedure Delete
(Source : in out Bounded_Wide_String;
- From : in Positive;
- Through : in Natural)
- renames Super_Delete;
+ From : Positive;
+ Through : Natural)
+ renames Super_Delete;
function Trim
- (Source : in Bounded_Wide_String;
- Side : in Trim_End)
- return Bounded_Wide_String
- renames Super_Trim;
+ (Source : Bounded_Wide_String;
+ Side : Trim_End) return Bounded_Wide_String
+ renames Super_Trim;
procedure Trim
(Source : in out Bounded_Wide_String;
- Side : in Trim_End)
- renames Super_Trim;
+ Side : Trim_End)
+ renames Super_Trim;
function Trim
- (Source : in Bounded_Wide_String;
- Left : in Wide_Maps.Wide_Character_Set;
- Right : in Wide_Maps.Wide_Character_Set)
- return Bounded_Wide_String
- renames Super_Trim;
+ (Source : Bounded_Wide_String;
+ Left : Wide_Maps.Wide_Character_Set;
+ Right : Wide_Maps.Wide_Character_Set) return Bounded_Wide_String
+ renames Super_Trim;
procedure Trim
(Source : in out Bounded_Wide_String;
- Left : in Wide_Maps.Wide_Character_Set;
- Right : in Wide_Maps.Wide_Character_Set)
- renames Super_Trim;
+ Left : Wide_Maps.Wide_Character_Set;
+ Right : Wide_Maps.Wide_Character_Set)
+ renames Super_Trim;
function Head
- (Source : in Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Head;
+ (Source : Bounded_Wide_String;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Head;
procedure Head
(Source : in out Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error)
- renames Super_Head;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error)
+ renames Super_Head;
function Tail
- (Source : in Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
- renames Super_Tail;
+ (Source : Bounded_Wide_String;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error) return Bounded_Wide_String
+ renames Super_Tail;
procedure Tail
(Source : in out Bounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space;
- Drop : in Truncation := Error)
- renames Super_Tail;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space;
+ Drop : Truncation := Error)
+ renames Super_Tail;
function "*"
- (Left : in Natural;
- Right : in Bounded_Wide_String)
- return Bounded_Wide_String
- renames Times;
+ (Left : Natural;
+ Right : Bounded_Wide_String) return Bounded_Wide_String
+ renames Times;
function Replicate
- (Count : in Natural;
- Item : in Bounded_Wide_String;
- Drop : in Truncation := Error)
- return Bounded_Wide_String
+ (Count : Natural;
+ Item : Bounded_Wide_String;
+ Drop : Truncation := Error) return Bounded_Wide_String
renames Super_Replicate;
end Generic_Bounded_Length;
diff --git a/gcc/ada/a-stwisu.adb b/gcc/ada/a-stwisu.adb
index ebf15f71264..bdaac0b64df 100644
--- a/gcc/ada/a-stwisu.adb
+++ b/gcc/ada/a-stwisu.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2003-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- --
@@ -42,8 +42,7 @@ package body Ada.Strings.Wide_Superbounded is
function Concat
(Left : Super_String;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Left.Max_Length);
Llen : constant Natural := Left.Current_Length;
@@ -64,8 +63,7 @@ package body Ada.Strings.Wide_Superbounded is
function Concat
(Left : Super_String;
- Right : Wide_String)
- return Super_String
+ Right : Wide_String) return Super_String
is
Result : Super_String (Left.Max_Length);
Llen : constant Natural := Left.Current_Length;
@@ -85,8 +83,7 @@ package body Ada.Strings.Wide_Superbounded is
function Concat
(Left : Wide_String;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Right.Max_Length);
Llen : constant Natural := Left'Length;
@@ -107,8 +104,7 @@ package body Ada.Strings.Wide_Superbounded is
function Concat
(Left : Super_String;
- Right : Wide_Character)
- return Super_String
+ Right : Wide_Character) return Super_String
is
Result : Super_String (Left.Max_Length);
Llen : constant Natural := Left.Current_Length;
@@ -127,8 +123,7 @@ package body Ada.Strings.Wide_Superbounded is
function Concat
(Left : Wide_Character;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Right.Max_Length);
Rlen : constant Natural := Right.Current_Length;
@@ -149,22 +144,29 @@ package body Ada.Strings.Wide_Superbounded is
-- Equal --
-----------
- function "=" (Left, Right : Super_String) return Boolean is
+ function "="
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Current_Length = Right.Current_Length
and then Left.Data (1 .. Left.Current_Length) =
Right.Data (1 .. Right.Current_Length);
end "=";
- function Equal (Left : Super_String; Right : Wide_String)
- return Boolean is
+ function Equal
+ (Left : Super_String;
+ Right : Wide_String) return Boolean
+ is
begin
return Left.Current_Length = Right'Length
and then Left.Data (1 .. Left.Current_Length) = Right;
end Equal;
- function Equal (Left : Wide_String; Right : Super_String)
- return Boolean is
+ function Equal
+ (Left : Wide_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left'Length = Right.Current_Length
and then Left = Right.Data (1 .. Right.Current_Length);
@@ -174,7 +176,10 @@ package body Ada.Strings.Wide_Superbounded is
-- Greater --
-------------
- function Greater (Left, Right : Super_String) return Boolean is
+ function Greater
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) >
Right.Data (1 .. Right.Current_Length);
@@ -182,8 +187,7 @@ package body Ada.Strings.Wide_Superbounded is
function Greater
(Left : Super_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) > Right;
@@ -191,8 +195,7 @@ package body Ada.Strings.Wide_Superbounded is
function Greater
(Left : Wide_String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left > Right.Data (1 .. Right.Current_Length);
@@ -202,7 +205,10 @@ package body Ada.Strings.Wide_Superbounded is
-- Greater_Or_Equal --
----------------------
- function Greater_Or_Equal (Left, Right : Super_String) return Boolean is
+ function Greater_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) >=
Right.Data (1 .. Right.Current_Length);
@@ -210,8 +216,7 @@ package body Ada.Strings.Wide_Superbounded is
function Greater_Or_Equal
(Left : Super_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) >= Right;
@@ -219,8 +224,7 @@ package body Ada.Strings.Wide_Superbounded is
function Greater_Or_Equal
(Left : Wide_String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left >= Right.Data (1 .. Right.Current_Length);
@@ -230,7 +234,10 @@ package body Ada.Strings.Wide_Superbounded is
-- Less --
----------
- function Less (Left, Right : Super_String) return Boolean is
+ function Less
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) <
Right.Data (1 .. Right.Current_Length);
@@ -238,8 +245,7 @@ package body Ada.Strings.Wide_Superbounded is
function Less
(Left : Super_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) < Right;
@@ -247,8 +253,7 @@ package body Ada.Strings.Wide_Superbounded is
function Less
(Left : Wide_String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left < Right.Data (1 .. Right.Current_Length);
@@ -258,7 +263,10 @@ package body Ada.Strings.Wide_Superbounded is
-- Less_Or_Equal --
-------------------
- function Less_Or_Equal (Left, Right : Super_String) return Boolean is
+ function Less_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean
+ is
begin
return Left.Data (1 .. Left.Current_Length) <=
Right.Data (1 .. Right.Current_Length);
@@ -266,8 +274,7 @@ package body Ada.Strings.Wide_Superbounded is
function Less_Or_Equal
(Left : Super_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Data (1 .. Left.Current_Length) <= Right;
@@ -275,13 +282,47 @@ package body Ada.Strings.Wide_Superbounded is
function Less_Or_Equal
(Left : Wide_String;
- Right : Super_String)
- return Boolean
+ Right : Super_String) return Boolean
is
begin
return Left <= Right.Data (1 .. Right.Current_Length);
end Less_Or_Equal;
+ ----------------------
+ -- Set_Super_String --
+ ----------------------
+
+ procedure Set_Super_String
+ (Target : out Super_String;
+ Source : Wide_String;
+ Drop : Truncation := Error)
+ is
+ Slen : constant Natural := Source'Length;
+ Max_Length : constant Positive := Target.Max_Length;
+
+ begin
+ if Slen <= Max_Length then
+ Target.Current_Length := Slen;
+ Target.Data (1 .. Slen) := Source;
+
+ else
+ case Drop is
+ when Strings.Right =>
+ Target.Current_Length := Max_Length;
+ Target.Data (1 .. Max_Length) :=
+ Source (Source'First .. Source'First - 1 + Max_Length);
+
+ when Strings.Left =>
+ Target.Current_Length := Max_Length;
+ Target.Data (1 .. Max_Length) :=
+ Source (Source'Last - (Max_Length - 1) .. Source'Last);
+
+ when Strings.Error =>
+ raise Ada.Strings.Length_Error;
+ end case;
+ end if;
+ end Set_Super_String;
+
------------------
-- Super_Append --
------------------
@@ -289,9 +330,9 @@ package body Ada.Strings.Wide_Superbounded is
-- Case of Super_String and Super_String
function Super_Append
- (Left, Right : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ (Left : Super_String;
+ Right : Super_String;
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Left.Max_Length;
Result : Super_String (Max_Length);
@@ -386,8 +427,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Append
(Left : Super_String;
Right : Wide_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Left.Max_Length;
Result : Super_String (Max_Length);
@@ -488,8 +528,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Append
(Left : Wide_String;
Right : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Right.Max_Length;
Result : Super_String (Max_Length);
@@ -543,8 +582,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Append
(Left : Super_String;
Right : Wide_Character;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Left.Max_Length;
Result : Super_String (Max_Length);
@@ -612,8 +650,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Append
(Left : Wide_Character;
Right : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Right.Max_Length;
Result : Super_String (Max_Length);
@@ -649,10 +686,10 @@ package body Ada.Strings.Wide_Superbounded is
-----------------
function Super_Count
- (Source : Super_String;
- Pattern : Wide_String;
- Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural
+ (Source : Super_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural
is
begin
return
@@ -661,10 +698,9 @@ package body Ada.Strings.Wide_Superbounded is
end Super_Count;
function Super_Count
- (Source : Super_String;
- Pattern : Wide_String;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Natural
+ (Source : Super_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
is
begin
return
@@ -674,8 +710,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Count
(Source : Super_String;
- Set : Wide_Maps.Wide_Character_Set)
- return Natural
+ Set : Wide_Maps.Wide_Character_Set) return Natural
is
begin
return Wide_Search.Count (Source.Data (1 .. Source.Current_Length), Set);
@@ -688,8 +723,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Delete
(Source : Super_String;
From : Positive;
- Through : Natural)
- return Super_String
+ Through : Natural) return Super_String
is
Result : Super_String (Source.Max_Length);
Slen : constant Natural := Source.Current_Length;
@@ -747,8 +781,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Element
(Source : Super_String;
- Index : Positive)
- return Wide_Character
+ Index : Positive) return Wide_Character
is
begin
if Index in 1 .. Source.Current_Length then
@@ -782,8 +815,7 @@ package body Ada.Strings.Wide_Superbounded is
(Source : Super_String;
Count : Natural;
Pad : Wide_Character := Wide_Space;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -830,7 +862,7 @@ package body Ada.Strings.Wide_Superbounded is
procedure Super_Head
(Source : in out Super_String;
Count : Natural;
- Pad : Wide_Character := Wide_Space;
+ Pad : Wide_Character := Wide_Space;
Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
@@ -878,11 +910,11 @@ package body Ada.Strings.Wide_Superbounded is
-----------------
function Super_Index
- (Source : Super_String;
- Pattern : Wide_String;
- Going : Strings.Direction := Strings.Forward;
- Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural
+ (Source : Super_String;
+ Pattern : Wide_String;
+ Going : Strings.Direction := Strings.Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural
is
begin
return Wide_Search.Index
@@ -890,11 +922,10 @@ package body Ada.Strings.Wide_Superbounded is
end Super_Index;
function Super_Index
- (Source : Super_String;
- Pattern : Wide_String;
- Going : Direction := Forward;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Natural
+ (Source : Super_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
is
begin
return Wide_Search.Index
@@ -905,22 +936,59 @@ package body Ada.Strings.Wide_Superbounded is
(Source : Super_String;
Set : Wide_Maps.Wide_Character_Set;
Test : Strings.Membership := Strings.Inside;
- Going : Strings.Direction := Strings.Forward)
- return Natural
+ Going : Strings.Direction := Strings.Forward) return Natural
is
begin
return Wide_Search.Index
(Source.Data (1 .. Source.Current_Length), Set, Test, Going);
end Super_Index;
+ function Super_Index
+ (Source : Super_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural
+ is
+ begin
+ return Wide_Search.Index
+ (Source.Data (1 .. Source.Current_Length),
+ Pattern, From, Going, Mapping);
+ end Super_Index;
+
+ function Super_Index
+ (Source : Super_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
+ is
+ begin
+ return Wide_Search.Index
+ (Source.Data (1 .. Source.Current_Length),
+ Pattern, From, Going, Mapping);
+ end Super_Index;
+
+ function Super_Index
+ (Source : Super_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural
+ is
+ begin
+ return Wide_Search.Index
+ (Source.Data (1 .. Source.Current_Length), Set, From, Test, Going);
+ end Super_Index;
+
---------------------------
-- Super_Index_Non_Blank --
---------------------------
function Super_Index_Non_Blank
(Source : Super_String;
- Going : Strings.Direction := Strings.Forward)
- return Natural
+ Going : Strings.Direction := Strings.Forward) return Natural
is
begin
return
@@ -928,6 +996,17 @@ package body Ada.Strings.Wide_Superbounded is
(Source.Data (1 .. Source.Current_Length), Going);
end Super_Index_Non_Blank;
+ function Super_Index_Non_Blank
+ (Source : Super_String;
+ From : Positive;
+ Going : Direction := Forward) return Natural
+ is
+ begin
+ return
+ Wide_Search.Index_Non_Blank
+ (Source.Data (1 .. Source.Current_Length), From, Going);
+ end Super_Index_Non_Blank;
+
------------------
-- Super_Insert --
------------------
@@ -936,8 +1015,7 @@ package body Ada.Strings.Wide_Superbounded is
(Source : Super_String;
Before : Positive;
New_Item : Wide_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -948,9 +1026,9 @@ package body Ada.Strings.Wide_Superbounded is
Alen : constant Integer := Slen - Blen;
Droplen : constant Integer := Tlen - Max_Length;
- -- Tlen is the length of the total Wide_String before possible
- -- truncation. Blen, Alen are the lengths of the before and after
- -- pieces of the source Wide_String.
+ -- Tlen is the length of the total string before possible truncation.
+ -- Blen, Alen are the lengths of the before and after pieces of the
+ -- source string.
begin
if Alen < 0 then
@@ -1032,11 +1110,10 @@ package body Ada.Strings.Wide_Superbounded is
---------------------
function Super_Overwrite
- (Source : Super_String;
- Position : Positive;
- New_Item : Wide_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ (Source : Super_String;
+ Position : Positive;
+ New_Item : Wide_String;
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -1172,12 +1249,11 @@ package body Ada.Strings.Wide_Superbounded is
-------------------------
function Super_Replace_Slice
- (Source : Super_String;
- Low : Positive;
- High : Natural;
- By : Wide_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Slen : constant Natural := Source.Current_Length;
@@ -1197,10 +1273,10 @@ package body Ada.Strings.Wide_Superbounded is
Droplen : constant Integer := Tlen - Max_Length;
Result : Super_String (Max_Length);
- -- Tlen is the total length of the result Wide_String before any
+ -- Tlen is the total length of the result string before any
-- truncation. Blen and Alen are the lengths of the pieces
- -- of the original Wide_String that end up in the result
- -- Wide_String before and after the replaced slice.
+ -- of the original string that end up in the result string
+ -- before and after the replaced slice.
begin
if Droplen <= 0 then
@@ -1273,8 +1349,7 @@ package body Ada.Strings.Wide_Superbounded is
(Count : Natural;
Item : Wide_Character;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Result : Super_String (Max_Length);
@@ -1297,8 +1372,7 @@ package body Ada.Strings.Wide_Superbounded is
(Count : Natural;
Item : Wide_String;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Length : constant Integer := Count * Item'Length;
Result : Super_String (Max_Length);
@@ -1354,8 +1428,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Replicate
(Count : Natural;
Item : Super_String;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
begin
return
@@ -1373,8 +1446,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Slice
(Source : Super_String;
Low : Positive;
- High : Natural)
- return Wide_String
+ High : Natural) return Wide_String
is
begin
-- Note: test of High > Length is in accordance with AI95-00128
@@ -1388,6 +1460,43 @@ package body Ada.Strings.Wide_Superbounded is
end if;
end Super_Slice;
+ function Super_Slice
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural) return Super_String
+ is
+ Result : Super_String (Source.Max_Length);
+
+ begin
+ if Low > Source.Current_Length + 1
+ or else High > Source.Current_Length
+ then
+ raise Index_Error;
+ else
+ Result.Current_Length := High - Low + 1;
+ Result.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+ end if;
+
+ return Result;
+ end Super_Slice;
+
+ procedure Super_Slice
+ (Source : Super_String;
+ Target : out Super_String;
+ Low : Positive;
+ High : Natural)
+ is
+ begin
+ if Low > Source.Current_Length + 1
+ or else High > Source.Current_Length
+ then
+ raise Index_Error;
+ else
+ Target.Current_Length := High - Low + 1;
+ Target.Data (1 .. Source.Current_Length) := Source.Data (Low .. High);
+ end if;
+ end Super_Slice;
+
----------------
-- Super_Tail --
----------------
@@ -1396,8 +1505,7 @@ package body Ada.Strings.Wide_Superbounded is
(Source : Super_String;
Count : Natural;
Pad : Wide_Character := Wide_Space;
- Drop : Strings.Truncation := Strings.Error)
- return Super_String
+ Drop : Strings.Truncation := Strings.Error) return Super_String
is
Max_Length : constant Positive := Source.Max_Length;
Result : Super_String (Max_Length);
@@ -1445,7 +1553,7 @@ package body Ada.Strings.Wide_Superbounded is
procedure Super_Tail
(Source : in out Super_String;
Count : Natural;
- Pad : Wide_Character := Wide_Space;
+ Pad : Wide_Character := Wide_Space;
Drop : Truncation := Error)
is
Max_Length : constant Positive := Source.Max_Length;
@@ -1497,7 +1605,7 @@ package body Ada.Strings.Wide_Superbounded is
-- Super_To_String --
---------------------
- function Super_To_String (Source : in Super_String) return Wide_String is
+ function Super_To_String (Source : Super_String) return Wide_String is
begin
return Source.Data (1 .. Source.Current_Length);
end Super_To_String;
@@ -1508,8 +1616,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Translate
(Source : Super_String;
- Mapping : Wide_Maps.Wide_Character_Mapping)
- return Super_String
+ Mapping : Wide_Maps.Wide_Character_Mapping) return Super_String
is
Result : Super_String (Source.Max_Length);
@@ -1535,8 +1642,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Translate
(Source : Super_String;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Super_String
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Super_String
is
Result : Super_String (Source.Max_Length);
@@ -1566,8 +1672,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Trim
(Source : Super_String;
- Side : Trim_End)
- return Super_String
+ Side : Trim_End) return Super_String
is
Result : Super_String (Source.Max_Length);
Last : Natural := Source.Current_Length;
@@ -1623,8 +1728,7 @@ package body Ada.Strings.Wide_Superbounded is
function Super_Trim
(Source : Super_String;
Left : Wide_Maps.Wide_Character_Set;
- Right : Wide_Maps.Wide_Character_Set)
- return Super_String
+ Right : Wide_Maps.Wide_Character_Set) return Super_String
is
Result : Super_String (Source.Max_Length);
@@ -1690,8 +1794,7 @@ package body Ada.Strings.Wide_Superbounded is
function Times
(Left : Natural;
Right : Wide_Character;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Result : Super_String (Max_Length);
@@ -1713,8 +1816,7 @@ package body Ada.Strings.Wide_Superbounded is
function Times
(Left : Natural;
Right : Wide_String;
- Max_Length : Positive)
- return Super_String
+ Max_Length : Positive) return Super_String
is
Result : Super_String (Max_Length);
Pos : Positive := 1;
@@ -1741,8 +1843,7 @@ package body Ada.Strings.Wide_Superbounded is
function Times
(Left : Natural;
- Right : Super_String)
- return Super_String
+ Right : Super_String) return Super_String
is
Result : Super_String (Right.Max_Length);
Pos : Positive := 1;
@@ -1775,8 +1876,7 @@ package body Ada.Strings.Wide_Superbounded is
function To_Super_String
(Source : Wide_String;
Max_Length : Natural;
- Drop : Truncation := Error)
- return Super_String
+ Drop : Truncation := Error) return Super_String
is
Result : Super_String (Max_Length);
Slen : constant Natural := Source'Length;
diff --git a/gcc/ada/a-stwisu.ads b/gcc/ada/a-stwisu.ads
index 8ea068642f8..a9df6fa2547 100644
--- a/gcc/ada/a-stwisu.ads
+++ b/gcc/ada/a-stwisu.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2003-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- --
@@ -35,7 +35,7 @@
-- generic package Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
-- It defines type Super_String as a discriminated record with the maximum
--- length as the discriminant. Individual instantiations of
+-- length as the discriminant. Individual instantiations of the package
-- Strings.Wide_Bounded.Generic_Bounded_Length use this type with
-- an appropriate discriminant value set.
@@ -50,14 +50,12 @@ pragma Preelaborate (Wide_Superbounded);
Current_Length : Natural := 0;
Data : Wide_String (1 .. Max_Length) := (others => Wide_NUL);
end record;
- -- Type Wide_Bounded_String in
- -- Ada.Strings.Wide_Bounded.Generic_Bounded_Length is derived from this
- -- type, with the constraint of the maximum length.
+ -- Ada.Strings.Wide_Bounded.Generic_Bounded_Length.Wide_Bounded_String is
+ -- derived from this type, with the constraint of the maximum length.
- -- The subprograms defined for Super_String are similar to those
- -- defined for Wide_Bounded_String, except that they have different names,
- -- so that they can be renamed in
- -- Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
+ -- The subprograms defined for Super_String are similar to those defined
+ -- for Bounded_Wide_String, except that they have different names, so that
+ -- they can be renamed in Ada.Strings.Wide_Bounded.Generic_Bounded_Length.
function Super_Length (Source : Super_String) return Natural;
@@ -68,88 +66,83 @@ pragma Preelaborate (Wide_Superbounded);
function To_Super_String
(Source : Wide_String;
Max_Length : Natural;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
-- Note the additional parameter Max_Length, which specifies the maximum
-- length setting of the resulting Super_String value.
-- The following procedures have declarations (and semantics) that are
- -- exactly analogous to those declared in Ada.Strings.Bounded.
+ -- exactly analogous to those declared in Ada.Strings.Wide_Bounded.
function Super_To_String (Source : Super_String) return Wide_String;
+ procedure Set_Super_String
+ (Target : out Super_String;
+ Source : Wide_String;
+ Drop : Truncation := Error);
+
function Super_Append
- (Left, Right : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ (Left : Super_String;
+ Right : Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Super_String;
Right : Wide_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Wide_String;
Right : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Super_String;
Right : Wide_Character;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
function Super_Append
(Left : Wide_Character;
Right : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Append
(Source : in out Super_String;
New_Item : Super_String;
- Drop : Truncation := Error);
+ Drop : Truncation := Error);
procedure Super_Append
(Source : in out Super_String;
New_Item : Wide_String;
- Drop : Truncation := Error);
+ Drop : Truncation := Error);
procedure Super_Append
(Source : in out Super_String;
New_Item : Wide_Character;
- Drop : Truncation := Error);
+ Drop : Truncation := Error);
function Concat
- (Left, Right : Super_String)
- return Super_String;
+ (Left : Super_String;
+ Right : Super_String) return Super_String;
function Concat
(Left : Super_String;
- Right : Wide_String)
- return Super_String;
+ Right : Wide_String) return Super_String;
function Concat
(Left : Wide_String;
- Right : Super_String)
- return Super_String;
+ Right : Super_String) return Super_String;
function Concat
(Left : Super_String;
- Right : Wide_Character)
- return Super_String;
+ Right : Wide_Character) return Super_String;
function Concat
(Left : Wide_Character;
- Right : Super_String)
- return Super_String;
+ Right : Super_String) return Super_String;
function Super_Element
(Source : Super_String;
- Index : Positive)
- return Wide_Character;
+ Index : Positive) return Wide_Character;
procedure Super_Replace_Element
(Source : in out Super_String;
@@ -159,70 +152,82 @@ pragma Preelaborate (Wide_Superbounded);
function Super_Slice
(Source : Super_String;
Low : Positive;
- High : Natural)
- return Wide_String;
+ High : Natural) return Wide_String;
+
+ function Super_Slice
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural) return Super_String;
+
+ procedure Super_Slice
+ (Source : Super_String;
+ Target : out Super_String;
+ Low : Positive;
+ High : Natural);
- function "=" (Left, Right : Super_String) return Boolean;
+ function "="
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
- function Equal (Left, Right : Super_String) return Boolean renames "=";
+ function Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean renames "=";
function Equal
(Left : Super_String;
- Right : Wide_String)
- return Boolean;
+ Right : Wide_String) return Boolean;
function Equal
(Left : Wide_String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Less (Left, Right : Super_String) return Boolean;
+ function Less
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Less
(Left : Super_String;
- Right : Wide_String)
- return Boolean;
+ Right : Wide_String) return Boolean;
function Less
(Left : Wide_String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Less_Or_Equal (Left, Right : Super_String) return Boolean;
+ function Less_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Less_Or_Equal
(Left : Super_String;
- Right : Wide_String)
- return Boolean;
+ Right : Wide_String) return Boolean;
function Less_Or_Equal
(Left : Wide_String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Greater (Left, Right : Super_String) return Boolean;
+ function Greater
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Greater
(Left : Super_String;
- Right : Wide_String)
- return Boolean;
+ Right : Wide_String) return Boolean;
function Greater
(Left : Wide_String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
- function Greater_Or_Equal (Left, Right : Super_String) return Boolean;
+ function Greater_Or_Equal
+ (Left : Super_String;
+ Right : Super_String) return Boolean;
function Greater_Or_Equal
(Left : Super_String;
- Right : Wide_String)
- return Boolean;
+ Right : Wide_String) return Boolean;
function Greater_Or_Equal
(Left : Wide_String;
- Right : Super_String)
- return Boolean;
+ Right : Super_String) return Boolean;
----------------------
-- Search Functions --
@@ -233,43 +238,65 @@ pragma Preelaborate (Wide_Superbounded);
Pattern : Wide_String;
Going : Direction := Forward;
Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural;
+ return Natural;
function Super_Index
(Source : Super_String;
Pattern : Wide_String;
Going : Direction := Forward;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Natural;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
function Super_Index
(Source : Super_String;
Set : Wide_Maps.Wide_Character_Set;
Test : Membership := Inside;
- Going : Direction := Forward)
- return Natural;
+ Going : Direction := Forward) return Natural;
+
+ function Super_Index
+ (Source : Super_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural;
+
+ function Super_Index
+ (Source : Super_String;
+ Pattern : Wide_String;
+ From : Positive;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
+
+ function Super_Index
+ (Source : Super_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ From : Positive;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
+
+ function Super_Index_Non_Blank
+ (Source : Super_String;
+ Going : Direction := Forward) return Natural;
function Super_Index_Non_Blank
(Source : Super_String;
- Going : Direction := Forward)
- return Natural;
+ From : Positive;
+ Going : Direction := Forward) return Natural;
function Super_Count
(Source : Super_String;
Pattern : Wide_String;
Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural;
+ return Natural;
function Super_Count
(Source : Super_String;
Pattern : Wide_String;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Natural;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
function Super_Count
(Source : Super_String;
- Set : Wide_Maps.Wide_Character_Set)
- return Natural;
+ Set : Wide_Maps.Wide_Character_Set) return Natural;
procedure Super_Find_Token
(Source : Super_String;
@@ -278,14 +305,13 @@ pragma Preelaborate (Wide_Superbounded);
First : out Positive;
Last : out Natural);
- -----------------------------------------
- -- Wide_String Translation Subprograms --
- -----------------------------------------
+ ------------------------------------
+ -- String Translation Subprograms --
+ ------------------------------------
function Super_Translate
- (Source : Super_String;
- Mapping : Wide_Maps.Wide_Character_Mapping)
- return Super_String;
+ (Source : Super_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping) return Super_String;
procedure Super_Translate
(Source : in out Super_String;
@@ -293,38 +319,35 @@ pragma Preelaborate (Wide_Superbounded);
function Super_Translate
(Source : Super_String;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Super_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Super_String;
procedure Super_Translate
(Source : in out Super_String;
Mapping : Wide_Maps.Wide_Character_Mapping_Function);
- --------------------------------------------
- -- Wide_String Transformation Subprograms --
- --------------------------------------------
+ ---------------------------------------
+ -- String Transformation Subprograms --
+ ---------------------------------------
function Super_Replace_Slice
- (Source : Super_String;
- Low : Positive;
- High : Natural;
- By : Wide_String;
- Drop : Truncation := Error)
- return Super_String;
+ (Source : Super_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Replace_Slice
- (Source : in out Super_String;
- Low : Positive;
- High : Natural;
- By : Wide_String;
- Drop : Truncation := Error);
+ (Source : in out Super_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String;
+ Drop : Truncation := Error);
function Super_Insert
(Source : Super_String;
Before : Positive;
New_Item : Wide_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Insert
(Source : in out Super_String;
@@ -333,11 +356,10 @@ pragma Preelaborate (Wide_Superbounded);
Drop : Truncation := Error);
function Super_Overwrite
- (Source : Super_String;
- Position : Positive;
- New_Item : Wide_String;
- Drop : Truncation := Error)
- return Super_String;
+ (Source : Super_String;
+ Position : Positive;
+ New_Item : Wide_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Overwrite
(Source : in out Super_String;
@@ -348,32 +370,29 @@ pragma Preelaborate (Wide_Superbounded);
function Super_Delete
(Source : Super_String;
From : Positive;
- Through : Natural)
- return Super_String;
+ Through : Natural) return Super_String;
procedure Super_Delete
(Source : in out Super_String;
From : Positive;
Through : Natural);
- --------------------------------------
- -- Wide_String Selector Subprograms --
- --------------------------------------
+ ---------------------------------
+ -- String Selector Subprograms --
+ ---------------------------------
function Super_Trim
(Source : Super_String;
- Side : Trim_End)
- return Super_String;
+ Side : Trim_End) return Super_String;
procedure Super_Trim
(Source : in out Super_String;
Side : Trim_End);
function Super_Trim
- (Source : Super_String;
+ (Source : Super_String;
Left : Wide_Maps.Wide_Character_Set;
- Right : Wide_Maps.Wide_Character_Set)
- return Super_String;
+ Right : Wide_Maps.Wide_Character_Set) return Super_String;
procedure Super_Trim
(Source : in out Super_String;
@@ -384,30 +403,28 @@ pragma Preelaborate (Wide_Superbounded);
(Source : Super_String;
Count : Natural;
Pad : Wide_Character := Wide_Space;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Head
(Source : in out Super_String;
Count : Natural;
Pad : Wide_Character := Wide_Space;
- Drop : Truncation := Error);
+ Drop : Truncation := Error);
function Super_Tail
(Source : Super_String;
Count : Natural;
Pad : Wide_Character := Wide_Space;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
procedure Super_Tail
(Source : in out Super_String;
Count : Natural;
Pad : Wide_Character := Wide_Space;
- Drop : Truncation := Error);
+ Drop : Truncation := Error);
------------------------------------
- -- Wide_String Constructor Subprograms --
+ -- String Constructor Subprograms --
------------------------------------
-- Note: in some of the following routines, there is an extra parameter
@@ -417,46 +434,39 @@ pragma Preelaborate (Wide_Superbounded);
function Times
(Left : Natural;
Right : Wide_Character;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Times
(Left : Natural;
Right : Wide_String;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Times
(Left : Natural;
- Right : Super_String)
- return Super_String;
+ Right : Super_String) return Super_String;
function Super_Replicate
(Count : Natural;
Item : Wide_Character;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Super_Replicate
(Count : Natural;
Item : Wide_String;
Drop : Truncation := Error;
- Max_Length : Positive)
- return Super_String;
+ Max_Length : Positive) return Super_String;
-- Note the additional parameter Max_Length
function Super_Replicate
(Count : Natural;
Item : Super_String;
- Drop : Truncation := Error)
- return Super_String;
+ Drop : Truncation := Error) return Super_String;
private
-
-- Pragma Inline declarations
pragma Inline ("=");
diff --git a/gcc/ada/a-stwiun.adb b/gcc/ada/a-stwiun.adb
index 5e88d3e9997..b4217720079 100644
--- a/gcc/ada/a-stwiun.adb
+++ b/gcc/ada/a-stwiun.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002 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- --
@@ -55,8 +55,7 @@ package body Ada.Strings.Wide_Unbounded is
function "&"
(Left : Unbounded_Wide_String;
- Right : Unbounded_Wide_String)
- return Unbounded_Wide_String
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String
is
L_Length : constant Natural := Left.Last;
R_Length : constant Natural := Right.Last;
@@ -77,8 +76,7 @@ package body Ada.Strings.Wide_Unbounded is
function "&"
(Left : Unbounded_Wide_String;
- Right : Wide_String)
- return Unbounded_Wide_String
+ Right : Wide_String) return Unbounded_Wide_String
is
L_Length : constant Natural := Left.Last;
Result : Unbounded_Wide_String;
@@ -96,8 +94,7 @@ package body Ada.Strings.Wide_Unbounded is
function "&"
(Left : Wide_String;
- Right : Unbounded_Wide_String)
- return Unbounded_Wide_String
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String
is
R_Length : constant Natural := Right.Last;
Result : Unbounded_Wide_String;
@@ -116,8 +113,7 @@ package body Ada.Strings.Wide_Unbounded is
function "&"
(Left : Unbounded_Wide_String;
- Right : Wide_Character)
- return Unbounded_Wide_String
+ Right : Wide_Character) return Unbounded_Wide_String
is
Result : Unbounded_Wide_String;
@@ -135,8 +131,7 @@ package body Ada.Strings.Wide_Unbounded is
function "&"
(Left : Wide_Character;
- Right : Unbounded_Wide_String)
- return Unbounded_Wide_String
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String
is
Result : Unbounded_Wide_String;
@@ -157,8 +152,7 @@ package body Ada.Strings.Wide_Unbounded is
function "*"
(Left : Natural;
- Right : Wide_Character)
- return Unbounded_Wide_String
+ Right : Wide_Character) return Unbounded_Wide_String
is
Result : Unbounded_Wide_String;
@@ -174,9 +168,8 @@ package body Ada.Strings.Wide_Unbounded is
end "*";
function "*"
- (Left : Natural;
- Right : Wide_String)
- return Unbounded_Wide_String
+ (Left : Natural;
+ Right : Wide_String) return Unbounded_Wide_String
is
Len : constant Natural := Right'Length;
K : Positive;
@@ -198,8 +191,7 @@ package body Ada.Strings.Wide_Unbounded is
function "*"
(Left : Natural;
- Right : Unbounded_Wide_String)
- return Unbounded_Wide_String
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String
is
Len : constant Natural := Right.Last;
K : Positive;
@@ -226,8 +218,7 @@ package body Ada.Strings.Wide_Unbounded is
function "<"
(Left : Unbounded_Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return
@@ -236,8 +227,7 @@ package body Ada.Strings.Wide_Unbounded is
function "<"
(Left : Unbounded_Wide_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Reference (1 .. Left.Last) < Right;
@@ -245,8 +235,7 @@ package body Ada.Strings.Wide_Unbounded is
function "<"
(Left : Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return Left < Right.Reference (1 .. Right.Last);
@@ -258,8 +247,7 @@ package body Ada.Strings.Wide_Unbounded is
function "<="
(Left : Unbounded_Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return
@@ -268,8 +256,7 @@ package body Ada.Strings.Wide_Unbounded is
function "<="
(Left : Unbounded_Wide_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Reference (1 .. Left.Last) <= Right;
@@ -277,8 +264,7 @@ package body Ada.Strings.Wide_Unbounded is
function "<="
(Left : Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return Left <= Right.Reference (1 .. Right.Last);
@@ -290,8 +276,7 @@ package body Ada.Strings.Wide_Unbounded is
function "="
(Left : Unbounded_Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return
@@ -300,8 +285,7 @@ package body Ada.Strings.Wide_Unbounded is
function "="
(Left : Unbounded_Wide_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Reference (1 .. Left.Last) = Right;
@@ -309,8 +293,7 @@ package body Ada.Strings.Wide_Unbounded is
function "="
(Left : Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return Left = Right.Reference (1 .. Right.Last);
@@ -322,8 +305,7 @@ package body Ada.Strings.Wide_Unbounded is
function ">"
(Left : Unbounded_Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return
@@ -332,8 +314,7 @@ package body Ada.Strings.Wide_Unbounded is
function ">"
(Left : Unbounded_Wide_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Reference (1 .. Left.Last) > Right;
@@ -341,8 +322,7 @@ package body Ada.Strings.Wide_Unbounded is
function ">"
(Left : Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return Left > Right.Reference (1 .. Right.Last);
@@ -354,8 +334,7 @@ package body Ada.Strings.Wide_Unbounded is
function ">="
(Left : Unbounded_Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return
@@ -364,8 +343,7 @@ package body Ada.Strings.Wide_Unbounded is
function ">="
(Left : Unbounded_Wide_String;
- Right : Wide_String)
- return Boolean
+ Right : Wide_String) return Boolean
is
begin
return Left.Reference (1 .. Left.Last) >= Right;
@@ -373,8 +351,7 @@ package body Ada.Strings.Wide_Unbounded is
function ">="
(Left : Wide_String;
- Right : Unbounded_Wide_String)
- return Boolean
+ Right : Unbounded_Wide_String) return Boolean
is
begin
return Left >= Right.Reference (1 .. Right.Last);
@@ -438,11 +415,11 @@ package body Ada.Strings.Wide_Unbounded is
-----------
function Count
- (Source : Unbounded_Wide_String;
- Pattern : Wide_String;
- Mapping : Wide_Maps.Wide_Character_Mapping :=
- Wide_Maps.Identity)
- return Natural
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping :=
+ Wide_Maps.Identity)
+ return Natural
is
begin
return Wide_Search.Count
@@ -450,10 +427,9 @@ package body Ada.Strings.Wide_Unbounded is
end Count;
function Count
- (Source : Unbounded_Wide_String;
- Pattern : Wide_String;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Natural
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
is
begin
return Wide_Search.Count
@@ -461,9 +437,8 @@ package body Ada.Strings.Wide_Unbounded is
end Count;
function Count
- (Source : Unbounded_Wide_String;
- Set : Wide_Maps.Wide_Character_Set)
- return Natural
+ (Source : Unbounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set) return Natural
is
begin
return Wide_Search.Count (Source.Reference (1 .. Source.Last), Set);
@@ -476,8 +451,7 @@ package body Ada.Strings.Wide_Unbounded is
function Delete
(Source : Unbounded_Wide_String;
From : Positive;
- Through : Natural)
- return Unbounded_Wide_String
+ Through : Natural) return Unbounded_Wide_String
is
begin
return To_Unbounded_Wide_String
@@ -515,8 +489,7 @@ package body Ada.Strings.Wide_Unbounded is
function Element
(Source : Unbounded_Wide_String;
- Index : Positive)
- return Wide_Character
+ Index : Positive) return Wide_Character
is
begin
if Index <= Source.Last then
@@ -581,8 +554,7 @@ package body Ada.Strings.Wide_Unbounded is
function Head
(Source : Unbounded_Wide_String;
Count : Natural;
- Pad : Wide_Character := Wide_Space)
- return Unbounded_Wide_String
+ Pad : Wide_Character := Wide_Space) return Unbounded_Wide_String
is
begin
return
@@ -609,12 +581,11 @@ package body Ada.Strings.Wide_Unbounded is
-----------
function Index
- (Source : Unbounded_Wide_String;
- Pattern : Wide_String;
- Going : Strings.Direction := Strings.Forward;
- Mapping : Wide_Maps.Wide_Character_Mapping :=
- Wide_Maps.Identity)
- return Natural
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Strings.Direction := Strings.Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping :=
+ Wide_Maps.Identity) return Natural
is
begin
return Wide_Search.Index
@@ -622,11 +593,10 @@ package body Ada.Strings.Wide_Unbounded is
end Index;
function Index
- (Source : Unbounded_Wide_String;
- Pattern : Wide_String;
- Going : Direction := Forward;
- Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Natural
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural
is
begin
return Wide_Search.Index
@@ -637,8 +607,7 @@ package body Ada.Strings.Wide_Unbounded is
(Source : Unbounded_Wide_String;
Set : Wide_Maps.Wide_Character_Set;
Test : Strings.Membership := Strings.Inside;
- Going : Strings.Direction := Strings.Forward)
- return Natural
+ Going : Strings.Direction := Strings.Forward) return Natural
is
begin
return Wide_Search.Index
@@ -647,8 +616,7 @@ package body Ada.Strings.Wide_Unbounded is
function Index_Non_Blank
(Source : Unbounded_Wide_String;
- Going : Strings.Direction := Strings.Forward)
- return Natural
+ Going : Strings.Direction := Strings.Forward) return Natural
is
begin
return Wide_Search.Index_Non_Blank
@@ -672,8 +640,7 @@ package body Ada.Strings.Wide_Unbounded is
function Insert
(Source : Unbounded_Wide_String;
Before : Positive;
- New_Item : Wide_String)
- return Unbounded_Wide_String
+ New_Item : Wide_String) return Unbounded_Wide_String
is
begin
return To_Unbounded_Wide_String
@@ -715,11 +682,10 @@ package body Ada.Strings.Wide_Unbounded is
---------------
function Overwrite
- (Source : Unbounded_Wide_String;
- Position : Positive;
- New_Item : Wide_String)
- return Unbounded_Wide_String is
-
+ (Source : Unbounded_Wide_String;
+ Position : Positive;
+ New_Item : Wide_String) return Unbounded_Wide_String
+ is
begin
return To_Unbounded_Wide_String
(Wide_Fixed.Overwrite
@@ -800,11 +766,10 @@ package body Ada.Strings.Wide_Unbounded is
-------------------
function Replace_Slice
- (Source : Unbounded_Wide_String;
- Low : Positive;
- High : Natural;
- By : Wide_String)
- return Unbounded_Wide_String
+ (Source : Unbounded_Wide_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String) return Unbounded_Wide_String
is
begin
return
@@ -836,8 +801,7 @@ package body Ada.Strings.Wide_Unbounded is
function Slice
(Source : Unbounded_Wide_String;
Low : Positive;
- High : Natural)
- return Wide_String
+ High : Natural) return Wide_String
is
begin
-- Note: test of High > Length is in accordance with AI95-00128
@@ -857,9 +821,8 @@ package body Ada.Strings.Wide_Unbounded is
function Tail
(Source : Unbounded_Wide_String;
Count : Natural;
- Pad : Wide_Character := Wide_Space)
- return Unbounded_Wide_String is
-
+ Pad : Wide_Character := Wide_Space) return Unbounded_Wide_String
+ is
begin
return To_Unbounded_Wide_String
(Wide_Fixed.Tail (Source.Reference (1 .. Source.Last), Count, Pad));
@@ -884,11 +847,9 @@ package body Ada.Strings.Wide_Unbounded is
------------------------------
function To_Unbounded_Wide_String
- (Source : Wide_String)
- return Unbounded_Wide_String
+ (Source : Wide_String) return Unbounded_Wide_String
is
Result : Unbounded_Wide_String;
-
begin
Result.Last := Source'Length;
Result.Reference := new Wide_String (1 .. Source'Length);
@@ -896,11 +857,10 @@ package body Ada.Strings.Wide_Unbounded is
return Result;
end To_Unbounded_Wide_String;
- function To_Unbounded_Wide_String (Length : Natural)
- return Unbounded_Wide_String
+ function To_Unbounded_Wide_String
+ (Length : Natural) return Unbounded_Wide_String
is
Result : Unbounded_Wide_String;
-
begin
Result.Last := Length;
Result.Reference := new Wide_String (1 .. Length);
@@ -912,8 +872,7 @@ package body Ada.Strings.Wide_Unbounded is
--------------------
function To_Wide_String
- (Source : Unbounded_Wide_String)
- return Wide_String
+ (Source : Unbounded_Wide_String) return Wide_String
is
begin
return Source.Reference (1 .. Source.Last);
@@ -925,8 +884,7 @@ package body Ada.Strings.Wide_Unbounded is
function Translate
(Source : Unbounded_Wide_String;
- Mapping : Wide_Maps.Wide_Character_Mapping)
- return Unbounded_Wide_String
+ Mapping : Wide_Maps.Wide_Character_Mapping) return Unbounded_Wide_String
is
begin
return To_Unbounded_Wide_String
@@ -944,7 +902,7 @@ package body Ada.Strings.Wide_Unbounded is
function Translate
(Source : Unbounded_Wide_String;
Mapping : Wide_Maps.Wide_Character_Mapping_Function)
- return Unbounded_Wide_String
+ return Unbounded_Wide_String
is
begin
return To_Unbounded_Wide_String
@@ -965,8 +923,7 @@ package body Ada.Strings.Wide_Unbounded is
function Trim
(Source : Unbounded_Wide_String;
- Side : Trim_End)
- return Unbounded_Wide_String
+ Side : Trim_End) return Unbounded_Wide_String
is
begin
return To_Unbounded_Wide_String
@@ -988,8 +945,7 @@ package body Ada.Strings.Wide_Unbounded is
function Trim
(Source : Unbounded_Wide_String;
Left : Wide_Maps.Wide_Character_Set;
- Right : Wide_Maps.Wide_Character_Set)
- return Unbounded_Wide_String
+ Right : Wide_Maps.Wide_Character_Set) return Unbounded_Wide_String
is
begin
return To_Unbounded_Wide_String
diff --git a/gcc/ada/a-stwiun.ads b/gcc/ada/a-stwiun.ads
index 6b348d456fd..ed231b2e66c 100644
--- a/gcc/ada/a-stwiun.ads
+++ b/gcc/ada/a-stwiun.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2002 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -56,195 +56,165 @@ pragma Preelaborate (Wide_Unbounded);
--------------------------------------------------------
function To_Unbounded_Wide_String
- (Source : Wide_String)
- return Unbounded_Wide_String;
+ (Source : Wide_String) return Unbounded_Wide_String;
function To_Unbounded_Wide_String
- (Length : in Natural)
- return Unbounded_Wide_String;
+ (Length : Natural) return Unbounded_Wide_String;
function To_Wide_String
- (Source : Unbounded_Wide_String)
- return Wide_String;
+ (Source : Unbounded_Wide_String) return Wide_String;
procedure Append
(Source : in out Unbounded_Wide_String;
- New_Item : in Unbounded_Wide_String);
+ New_Item : Unbounded_Wide_String);
procedure Append
(Source : in out Unbounded_Wide_String;
- New_Item : in Wide_String);
+ New_Item : Wide_String);
procedure Append
(Source : in out Unbounded_Wide_String;
- New_Item : in Wide_Character);
+ New_Item : Wide_Character);
function "&"
- (Left, Right : Unbounded_Wide_String)
- return Unbounded_Wide_String;
+ (Left, Right : Unbounded_Wide_String) return Unbounded_Wide_String;
function "&"
- (Left : in Unbounded_Wide_String;
- Right : in Wide_String)
- return Unbounded_Wide_String;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_String) return Unbounded_Wide_String;
function "&"
- (Left : in Wide_String;
- Right : in Unbounded_Wide_String)
- return Unbounded_Wide_String;
+ (Left : Wide_String;
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String;
function "&"
- (Left : in Unbounded_Wide_String;
- Right : in Wide_Character)
- return Unbounded_Wide_String;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_Character) return Unbounded_Wide_String;
function "&"
- (Left : in Wide_Character;
- Right : in Unbounded_Wide_String)
- return Unbounded_Wide_String;
+ (Left : Wide_Character;
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String;
function Element
- (Source : in Unbounded_Wide_String;
- Index : in Positive)
- return Wide_Character;
+ (Source : Unbounded_Wide_String;
+ Index : Positive) return Wide_Character;
procedure Replace_Element
(Source : in out Unbounded_Wide_String;
- Index : in Positive;
+ Index : Positive;
By : Wide_Character);
function Slice
- (Source : in Unbounded_Wide_String;
- Low : in Positive;
- High : in Natural)
- return Wide_String;
+ (Source : Unbounded_Wide_String;
+ Low : Positive;
+ High : Natural) return Wide_String;
function "="
- (Left : in Unbounded_Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function "="
- (Left : in Unbounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_String) return Boolean;
function "="
- (Left : in Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function "<"
- (Left : in Unbounded_Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function "<"
- (Left : in Unbounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_String) return Boolean;
function "<"
- (Left : in Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function "<="
- (Left : in Unbounded_Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function "<="
- (Left : in Unbounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_String) return Boolean;
function "<="
- (Left : in Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function ">"
- (Left : in Unbounded_Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function ">"
- (Left : in Unbounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_String) return Boolean;
function ">"
- (Left : in Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function ">="
- (Left : in Unbounded_Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
function ">="
- (Left : in Unbounded_Wide_String;
- Right : in Wide_String)
- return Boolean;
+ (Left : Unbounded_Wide_String;
+ Right : Wide_String) return Boolean;
function ">="
- (Left : in Wide_String;
- Right : in Unbounded_Wide_String)
- return Boolean;
+ (Left : Wide_String;
+ Right : Unbounded_Wide_String) return Boolean;
------------------------
-- Search Subprograms --
------------------------
function Index
- (Source : in Unbounded_Wide_String;
- Pattern : in Wide_String;
- Going : in Direction := Forward;
- Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural;
function Index
- (Source : in Unbounded_Wide_String;
- Pattern : in Wide_String;
- Going : in Direction := Forward;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Going : Direction := Forward;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
function Index
- (Source : in Unbounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set;
- Test : in Membership := Inside;
- Going : in Direction := Forward)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ Test : Membership := Inside;
+ Going : Direction := Forward) return Natural;
function Index_Non_Blank
- (Source : in Unbounded_Wide_String;
- Going : in Direction := Forward)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Going : Direction := Forward) return Natural;
function Count
- (Source : in Unbounded_Wide_String;
- Pattern : in Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
+ return Natural;
function Count
- (Source : in Unbounded_Wide_String;
- Pattern : in Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Pattern : Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function) return Natural;
function Count
- (Source : in Unbounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set)
- return Natural;
+ (Source : Unbounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set) return Natural;
procedure Find_Token
- (Source : in Unbounded_Wide_String;
- Set : in Wide_Maps.Wide_Character_Set;
- Test : in Membership;
+ (Source : Unbounded_Wide_String;
+ Set : Wide_Maps.Wide_Character_Set;
+ Test : Membership;
First : out Positive;
Last : out Natural);
@@ -253,129 +223,117 @@ pragma Preelaborate (Wide_Unbounded);
------------------------------------
function Translate
- (Source : in Unbounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping) return Unbounded_Wide_String;
procedure Translate
(Source : in out Unbounded_Wide_String;
Mapping : Wide_Maps.Wide_Character_Mapping);
function Translate
- (Source : in Unbounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function)
+ return Unbounded_Wide_String;
procedure Translate
(Source : in out Unbounded_Wide_String;
- Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
+ Mapping : Wide_Maps.Wide_Character_Mapping_Function);
---------------------------------------
-- Wide_String Transformation Subprograms --
---------------------------------------
function Replace_Slice
- (Source : in Unbounded_Wide_String;
- Low : in Positive;
- High : in Natural;
- By : in Wide_String)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Low : Positive;
+ High : Natural;
+ By : Wide_String) return Unbounded_Wide_String;
procedure Replace_Slice
(Source : in out Unbounded_Wide_String;
- Low : in Positive;
- High : in Natural;
- By : in Wide_String);
+ Low : Positive;
+ High : Natural;
+ By : Wide_String);
function Insert
- (Source : in Unbounded_Wide_String;
- Before : in Positive;
- New_Item : in Wide_String)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Before : Positive;
+ New_Item : Wide_String) return Unbounded_Wide_String;
procedure Insert
(Source : in out Unbounded_Wide_String;
- Before : in Positive;
- New_Item : in Wide_String);
+ Before : Positive;
+ New_Item : Wide_String);
function Overwrite
- (Source : in Unbounded_Wide_String;
- Position : in Positive;
- New_Item : in Wide_String)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Position : Positive;
+ New_Item : Wide_String) return Unbounded_Wide_String;
procedure Overwrite
(Source : in out Unbounded_Wide_String;
- Position : in Positive;
- New_Item : in Wide_String);
+ Position : Positive;
+ New_Item : Wide_String);
function Delete
- (Source : in Unbounded_Wide_String;
- From : in Positive;
- Through : in Natural)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ From : Positive;
+ Through : Natural) return Unbounded_Wide_String;
procedure Delete
(Source : in out Unbounded_Wide_String;
- From : in Positive;
- Through : in Natural);
+ From : Positive;
+ Through : Natural);
function Trim
- (Source : in Unbounded_Wide_String;
- Side : in Trim_End)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Side : Trim_End) return Unbounded_Wide_String;
procedure Trim
(Source : in out Unbounded_Wide_String;
- Side : in Trim_End);
+ Side : Trim_End);
function Trim
- (Source : in Unbounded_Wide_String;
- Left : in Wide_Maps.Wide_Character_Set;
- Right : in Wide_Maps.Wide_Character_Set)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Left : Wide_Maps.Wide_Character_Set;
+ Right : Wide_Maps.Wide_Character_Set) return Unbounded_Wide_String;
procedure Trim
(Source : in out Unbounded_Wide_String;
- Left : in Wide_Maps.Wide_Character_Set;
- Right : in Wide_Maps.Wide_Character_Set);
+ Left : Wide_Maps.Wide_Character_Set;
+ Right : Wide_Maps.Wide_Character_Set);
function Head
- (Source : in Unbounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space) return Unbounded_Wide_String;
procedure Head
(Source : in out Unbounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space);
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space);
function Tail
- (Source : in Unbounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space)
- return Unbounded_Wide_String;
+ (Source : Unbounded_Wide_String;
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space) return Unbounded_Wide_String;
procedure Tail
(Source : in out Unbounded_Wide_String;
- Count : in Natural;
- Pad : in Wide_Character := Wide_Space);
+ Count : Natural;
+ Pad : Wide_Character := Wide_Space);
function "*"
- (Left : in Natural;
- Right : in Wide_Character)
- return Unbounded_Wide_String;
+ (Left : Natural;
+ Right : Wide_Character) return Unbounded_Wide_String;
function "*"
- (Left : in Natural;
- Right : in Wide_String)
- return Unbounded_Wide_String;
+ (Left : Natural;
+ Right : Wide_String) return Unbounded_Wide_String;
function "*"
- (Left : in Natural;
- Right : in Unbounded_Wide_String)
- return Unbounded_Wide_String;
+ (Left : Natural;
+ Right : Unbounded_Wide_String) return Unbounded_Wide_String;
private
pragma Inline (Length);
diff --git a/gcc/ada/a-suteio.adb b/gcc/ada/a-suteio.adb
index 737f3c7b35d..b1ddff23741 100644
--- a/gcc/ada/a-suteio.adb
+++ b/gcc/ada/a-suteio.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1997-1999 Free Software Foundation, Inc. --
+-- Copyright (C) 1997-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- --
@@ -50,7 +50,6 @@ package body Ada.Strings.Unbounded.Text_IO is
begin
Get_Line (Buffer, Last);
Str1 := new String'(Buffer (1 .. Last));
-
while Last = Buffer'Last loop
Get_Line (Buffer, Last);
Str2 := new String'(Str1.all & Buffer (1 .. Last));
@@ -72,7 +71,6 @@ package body Ada.Strings.Unbounded.Text_IO is
begin
Get_Line (File, Buffer, Last);
Str1 := new String'(Buffer (1 .. Last));
-
while Last = Buffer'Last loop
Get_Line (File, Buffer, Last);
Str2 := new String'(Str1.all & Buffer (1 .. Last));
@@ -84,6 +82,47 @@ package body Ada.Strings.Unbounded.Text_IO is
return Result;
end Get_Line;
+ procedure Get_Line (Item : out Unbounded_String) is
+ Buffer : String (1 .. 1000);
+ Last : Natural;
+ Str1 : String_Access;
+ Str2 : String_Access;
+
+ begin
+ Get_Line (Buffer, Last);
+ Str1 := new String'(Buffer (1 .. Last));
+ while Last = Buffer'Last loop
+ Get_Line (Buffer, Last);
+ Str2 := new String'(Str1.all & Buffer (1 .. Last));
+ Free (Str1);
+ Str1 := Str2;
+ end loop;
+
+ Set_String (Item, Str1);
+ end Get_Line;
+
+ procedure Get_Line
+ (File : Ada.Text_IO.File_Type;
+ Item : out Unbounded_String)
+ is
+ Buffer : String (1 .. 1000);
+ Last : Natural;
+ Str1 : String_Access;
+ Str2 : String_Access;
+
+ begin
+ Get_Line (File, Buffer, Last);
+ Str1 := new String'(Buffer (1 .. Last));
+ while Last = Buffer'Last loop
+ Get_Line (Buffer, Last);
+ Str2 := new String'(Str1.all & Buffer (1 .. Last));
+ Free (Str1);
+ Str1 := Str2;
+ end loop;
+
+ Set_String (Item, Str1);
+ end Get_Line;
+
---------
-- Put --
---------
diff --git a/gcc/ada/a-suteio.ads b/gcc/ada/a-suteio.ads
index c98f453f64b..e743bdf7243 100644
--- a/gcc/ada/a-suteio.ads
+++ b/gcc/ada/a-suteio.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1997-1999 Free Software Foundation, Inc. --
+-- Copyright (C) 1997-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- --
@@ -46,6 +46,12 @@ package Ada.Strings.Unbounded.Text_IO is
-- as an unbounded string of appropriate length. If no File parameter
-- is present, input is from Current_Input.
+ procedure Get_Line
+ (File : Ada.Text_IO.File_Type;
+ Item : out Unbounded_String);
+ procedure Get_Line (Item : out Unbounded_String);
+ -- Similar to the above, but in procedure form with an out parameter
+
procedure Put (U : Unbounded_String);
procedure Put (File : Ada.Text_IO.File_Type; U : Unbounded_String);
procedure Put_Line (U : Unbounded_String);
diff --git a/gcc/ada/a-swuwti.adb b/gcc/ada/a-swuwti.adb
index adf4ba7f05c..9836ae5b58c 100644
--- a/gcc/ada/a-swuwti.adb
+++ b/gcc/ada/a-swuwti.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1997-1999 Free Software Foundation, Inc. --
+-- Copyright (C) 1997-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- --
@@ -31,7 +31,8 @@
-- --
------------------------------------------------------------------------------
-with Ada.Wide_Text_IO; use Ada.Wide_Text_IO;
+with Ada.Strings.Wide_Unbounded.Aux; use Ada.Strings.Wide_Unbounded.Aux;
+with Ada.Wide_Text_IO; use Ada.Wide_Text_IO;
package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
@@ -44,11 +45,11 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
Last : Natural;
Str1 : Wide_String_Access;
Str2 : Wide_String_Access;
+ Result : Unbounded_Wide_String;
begin
Get_Line (Buffer, Last);
Str1 := new Wide_String'(Buffer (1 .. Last));
-
while Last = Buffer'Last loop
Get_Line (Buffer, Last);
Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
@@ -56,17 +57,18 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
Str1 := Str2;
end loop;
- return To_Unbounded_Wide_String (Str1.all);
+ Set_Wide_String (Result, Str1);
+ return Result;
end Get_Line;
function Get_Line
- (File : Ada.Wide_Text_IO.File_Type)
- return Unbounded_Wide_String
+ (File : Ada.Wide_Text_IO.File_Type) return Unbounded_Wide_String
is
Buffer : Wide_String (1 .. 1000);
Last : Natural;
Str1 : Wide_String_Access;
Str2 : Wide_String_Access;
+ Result : Unbounded_Wide_String;
begin
Get_Line (File, Buffer, Last);
@@ -79,7 +81,49 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
Str1 := Str2;
end loop;
- return To_Unbounded_Wide_String (Str1.all);
+ Set_Wide_String (Result, Str1);
+ return Result;
+ end Get_Line;
+
+ procedure Get_Line (Item : out Unbounded_Wide_String) is
+ Buffer : Wide_String (1 .. 1000);
+ Last : Natural;
+ Str1 : Wide_String_Access;
+ Str2 : Wide_String_Access;
+
+ begin
+ Get_Line (Buffer, Last);
+ Str1 := new Wide_String'(Buffer (1 .. Last));
+ while Last = Buffer'Last loop
+ Get_Line (Buffer, Last);
+ Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
+ Free (Str1);
+ Str1 := Str2;
+ end loop;
+
+ Set_Wide_String (Item, Str1);
+ end Get_Line;
+
+ procedure Get_Line
+ (File : Ada.Wide_Text_IO.File_Type;
+ Item : out Unbounded_Wide_String)
+ is
+ Buffer : Wide_String (1 .. 1000);
+ Last : Natural;
+ Str1 : Wide_String_Access;
+ Str2 : Wide_String_Access;
+
+ begin
+ Get_Line (File, Buffer, Last);
+ Str1 := new Wide_String'(Buffer (1 .. Last));
+ while Last = Buffer'Last loop
+ Get_Line (Buffer, Last);
+ Str2 := new Wide_String'(Str1.all & Buffer (1 .. Last));
+ Free (Str1);
+ Str1 := Str2;
+ end loop;
+
+ Set_Wide_String (Item, Str1);
end Get_Line;
---------
@@ -88,12 +132,12 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
procedure Put (U : Unbounded_Wide_String) is
begin
- Put (To_Wide_String (U));
+ Put (Get_Wide_String (U).all);
end Put;
procedure Put (File : File_Type; U : Unbounded_Wide_String) is
begin
- Put (File, To_Wide_String (U));
+ Put (File, Get_Wide_String (U).all);
end Put;
--------------
@@ -102,12 +146,12 @@ package body Ada.Strings.Wide_Unbounded.Wide_Text_IO is
procedure Put_Line (U : Unbounded_Wide_String) is
begin
- Put_Line (To_Wide_String (U));
+ Put_Line (Get_Wide_String (U).all);
end Put_Line;
procedure Put_Line (File : File_Type; U : Unbounded_Wide_String) is
begin
- Put_Line (File, To_Wide_String (U));
+ Put_Line (File, Get_Wide_String (U).all);
end Put_Line;
end Ada.Strings.Wide_Unbounded.Wide_Text_IO;
diff --git a/gcc/ada/a-swuwti.ads b/gcc/ada/a-swuwti.ads
index fca6211b00d..ff8acf75273 100644
--- a/gcc/ada/a-swuwti.ads
+++ b/gcc/ada/a-swuwti.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1997-1999 Free Software Foundation, Inc. --
+-- Copyright (C) 1997-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- --
@@ -32,9 +32,9 @@
------------------------------------------------------------------------------
-- This child package of Ada.Strings.Wide_Unbounded provides specialized
--- Text_IO routines that work directly with unbounded strings, avoiding the
--- inefficiencies of access via the standard interface, and also taking
--- direct advantage of the variable length semantics of these strings.
+-- Wide_Text_IO routines that work directly with unbounded wide strings,
+-- avoiding the inefficiencies of access via the standard interface, and also
+-- taking direct advantage of the variable length semantics of these strings.
with Ada.Wide_Text_IO;
@@ -43,12 +43,17 @@ package Ada.Strings.Wide_Unbounded.Wide_Text_IO is
function Get_Line
return Unbounded_Wide_String;
function Get_Line
- (File : Ada.Wide_Text_IO.File_Type)
- return Unbounded_Wide_String;
+ (File : Ada.Wide_Text_IO.File_Type) return Unbounded_Wide_String;
-- Reads up to the end of the current line, returning the result
-- as an unbounded string of appropriate length. If no File parameter
-- is present, input is from Current_Input.
+ procedure Get_Line
+ (File : Ada.Wide_Text_IO.File_Type;
+ Item : out Unbounded_Wide_String);
+ procedure Get_Line (Item : out Unbounded_Wide_String);
+ -- Similar to the above, but in procedure form with an out parameter
+
procedure Put
(U : Unbounded_Wide_String);
procedure Put
diff --git a/gcc/ada/a-tags.adb b/gcc/ada/a-tags.adb
index dddf1bb8835..03221948d34 100644
--- a/gcc/ada/a-tags.adb
+++ b/gcc/ada/a-tags.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -32,36 +32,35 @@
------------------------------------------------------------------------------
with Ada.Exceptions;
-
with System.HTable;
-with Unchecked_Conversion;
-
pragma Elaborate_All (System.HTable);
package body Ada.Tags is
-- Structure of the GNAT Dispatch Table
--- +----------------------+
--- | TSD pointer ---|-----> Type Specific Data
--- +----------------------+ +-------------------+
--- | table of | | inheritance depth |
--- : primitive ops : +-------------------+
--- | pointers | | expanded name |
--- +----------------------+ +-------------------+
--- | external tag |
--- +-------------------+
--- | Hash table link |
--- +-------------------+
--- | Remotely Callable |
--- +-------------------+
--- | Rec Ctrler offset |
--- +-------------------+
--- | table of |
--- : ancestor :
--- | tags |
--- +-------------------+
+-- +-----------------------+
+-- | Offset_To_Top |
+-- +-----------------------+
+-- | Typeinfo_Ptr/TSD_Ptr |----> Type Specific Data
+-- Tag ---> +-----------------------+ +-------------------+
+-- | table of | | inheritance depth |
+-- : primitive ops : +-------------------+
+-- | pointers | | expanded name |
+-- +-----------------------+ +-------------------+
+-- | external tag |
+-- +-------------------+
+-- | Hash table link |
+-- +-------------------+
+-- | Remotely Callable |
+-- +-------------------+
+-- | Rec Ctrler offset |
+-- +-------------------+
+-- | table of |
+-- : ancestor :
+-- | tags |
+-- +-------------------+
subtype Cstring is String (Positive);
type Cstring_Ptr is access all Cstring;
@@ -69,12 +68,12 @@ package body Ada.Tags is
type Tag_Table is array (Natural range <>) of Tag;
pragma Suppress_Initialization (Tag_Table);
pragma Suppress (Index_Check, On => Tag_Table);
- -- We suppress index checks because the declared size in the record
- -- below is a dummy size of one (see below).
+ -- We suppress index checks because the declared size in the record below
+ -- is a dummy size of one (see below).
type Wide_Boolean is new Boolean;
- -- This name should probably be changed sometime ??? and indeed
- -- probably this field could simply be of type Standard.Boolean.
+ -- This name should probably be changed sometime ??? and indeed probably
+ -- this field could simply be of type Standard.Boolean.
type Type_Specific_Data is record
Idepth : Natural;
@@ -85,31 +84,48 @@ package body Ada.Tags is
RC_Offset : SSE.Storage_Offset;
Ancestor_Tags : Tag_Table (0 .. 1);
end record;
- -- The size of the Ancestor_Tags array actually depends on the tagged
- -- type to which it applies. We are using the same mechanism as for
- -- the Prims_Ptr array in the Dispatch_Table record. See comments
- -- below for more details.
+ -- The size of the Ancestor_Tags array actually depends on the tagged type
+ -- to which it applies. We are using the same mechanism as for the
+ -- Prims_Ptr array in the Dispatch_Table record. See comments below for
+ -- more details.
type Dispatch_Table is record
- TSD : Type_Specific_Data_Ptr;
- Prims_Ptr : Address_Array (1 .. 1);
+ -- Offset_To_Top : Integer := 0;
+ -- Typeinfo_Ptr : System.Address; -- Currently TSD is also here???
+ Prims_Ptr : Address_Array (Positive);
end record;
- -- The size of the Prims_Ptr array actually depends on the tagged
- -- type to which it applies. For each tagged type, the expander
- -- computes the actual array size, and allocates the Dispatch_Table
- -- record accordingly.
+
+ -- Note on the commented out fields of the Dispatch_Table
+ -- ------------------------------------------------------
+ -- According to the C++ ABI the components Offset_To_Top and Typeinfo_Ptr
+ -- are stored just "before" the dispatch table (that is, the Prims_Ptr
+ -- table), and they are referenced with negative offsets referring to the
+ -- base of the dispatch table. The _Tag (or the VTable_Ptr in C++ termi-
+ -- nology) must point to the base of the virtual table, just after these
+ -- components, to point to the Prims_Ptr table. For this purpose the
+ -- expander generates a Prims_Ptr table that has enough space for these
+ -- additional components, and generates code that displaces the _Tag to
+ -- point after these components.
+ -- -----------------------------------------------------------------------
+
+ -- The size of the Prims_Ptr array actually depends on the tagged type to
+ -- which it applies. For each tagged type, the expander computes the
+ -- actual array size, allocates the Dispatch_Table record accordingly, and
+ -- generates code that displaces the base of the record after the
+ -- Typeinfo_Ptr component. For this reason the first two components have
+ -- been commented in the previous declaration. The access to these
+ -- components is done by means of local functions.
--
- -- To avoid the use of discriminants to define the actual size
- -- of the dispatch table, we used to declare the tag as a pointer
- -- to a record that contains an arbitrary array of addresses, using
- -- Positive as its index. This ensures that there are never range
- -- checks when accessing the dispatch table, but it prevents GDB
- -- from displaying tagged types properly. A better approach is
- -- to declare this record type as holding a small number of addresses,
- -- and to explicitly suppress checks on it.
+ -- To avoid the use of discriminants to define the actual size of the
+ -- dispatch table, we used to declare the tag as a pointer to a record
+ -- that contains an arbitrary array of addresses, using Positive as its
+ -- index. This ensures that there are never range checks when accessing
+ -- the dispatch table, but it prevents GDB from displaying tagged types
+ -- properly. A better approach is to declare this record type as holding a
+ -- small number of addresses, and to explicitly suppress checks on it.
--
- -- Note that in both cases, this type is never allocated, and serves
- -- only to declare the corresponding access type.
+ -- Note that in both cases, this type is never allocated, and serves only
+ -- to declare the corresponding access type.
---------------------------------------------
-- Unchecked Conversions for String Fields --
@@ -121,13 +137,34 @@ package body Ada.Tags is
function To_Address is
new Unchecked_Conversion (Cstring_Ptr, System.Address);
+ -----------------------------------------------------------
+ -- Unchecked Conversions for the component offset_to_top --
+ -----------------------------------------------------------
+
+ type Int_Ptr is access Integer;
+
+ function To_Int_Ptr is
+ new Unchecked_Conversion (System.Address, Int_Ptr);
+
-----------------------
-- Local Subprograms --
-----------------------
function Length (Str : Cstring_Ptr) return Natural;
- -- Length of string represented by the given pointer (treating the
- -- string as a C-style string, which is Nul terminated).
+ -- Length of string represented by the given pointer (treating the string
+ -- as a C-style string, which is Nul terminated).
+
+ function Offset_To_Top (T : Tag) return Integer;
+ -- Returns the current value of the offset_to_top component available in
+ -- the prologue of the dispatch table.
+
+ function Typeinfo_Ptr (T : Tag) return System.Address;
+ -- Returns the current value of the typeinfo_ptr component available in
+ -- the prologue of the dispatch table.
+
+ pragma Unreferenced (Offset_To_Top);
+ pragma Unreferenced (Typeinfo_Ptr);
+ -- These functions will be used for full compatibility with the C++ ABI
-------------------------
-- External_Tag_HTable --
@@ -135,9 +172,9 @@ package body Ada.Tags is
type HTable_Headers is range 1 .. 64;
- -- The following internal package defines the routines used for
- -- the instantiation of a new System.HTable.Static_HTable (see
- -- below). See spec in g-htable.ads for details of usage.
+ -- The following internal package defines the routines used for the
+ -- instantiation of a new System.HTable.Static_HTable (see below). See
+ -- spec in g-htable.ads for details of usage.
package HTable_Subprograms is
procedure Set_HT_Link (T : Tag; Next : Tag);
@@ -195,7 +232,7 @@ package body Ada.Tags is
function Get_HT_Link (T : Tag) return Tag is
begin
- return T.TSD.HT_Link;
+ return TSD (T).HT_Link;
end Get_HT_Link;
----------
@@ -216,7 +253,7 @@ package body Ada.Tags is
procedure Set_HT_Link (T : Tag; Next : Tag) is
begin
- T.TSD.HT_Link := Next;
+ TSD (T).HT_Link := Next;
end Set_HT_Link;
end HTable_Subprograms;
@@ -241,9 +278,9 @@ package body Ada.Tags is
-- = Typ'tag
function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean is
- Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
+ Pos : constant Integer := TSD (Obj_Tag).Idepth - TSD (Typ_Tag).Idepth;
begin
- return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
+ return Pos >= 0 and then TSD (Obj_Tag).Ancestor_Tags (Pos) = Typ_Tag;
end CW_Membership;
-------------------
@@ -251,7 +288,7 @@ package body Ada.Tags is
-------------------
function Expanded_Name (T : Tag) return String is
- Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
+ Result : constant Cstring_Ptr := TSD (T).Expanded_Name;
begin
return Result (1 .. Length (Result));
end Expanded_Name;
@@ -261,7 +298,7 @@ package body Ada.Tags is
------------------
function External_Tag (T : Tag) return String is
- Result : constant Cstring_Ptr := T.TSD.External_Tag;
+ Result : constant Cstring_Ptr := TSD (T).External_Tag;
begin
return Result (1 .. Length (Result));
end External_Tag;
@@ -272,7 +309,7 @@ package body Ada.Tags is
function Get_Expanded_Name (T : Tag) return System.Address is
begin
- return To_Address (T.TSD.Expanded_Name);
+ return To_Address (TSD (T).Expanded_Name);
end Get_Expanded_Name;
----------------------
@@ -281,7 +318,7 @@ package body Ada.Tags is
function Get_External_Tag (T : Tag) return System.Address is
begin
- return To_Address (T.TSD.External_Tag);
+ return To_Address (TSD (T).External_Tag);
end Get_External_Tag;
---------------------------
@@ -290,7 +327,7 @@ package body Ada.Tags is
function Get_Inheritance_Depth (T : Tag) return Natural is
begin
- return T.TSD.Idepth;
+ return TSD (T).Idepth;
end Get_Inheritance_Depth;
-------------------------
@@ -311,7 +348,7 @@ package body Ada.Tags is
function Get_RC_Offset (T : Tag) return SSE.Storage_Offset is
begin
- return T.TSD.RC_Offset;
+ return TSD (T).RC_Offset;
end Get_RC_Offset;
---------------------------
@@ -320,7 +357,7 @@ package body Ada.Tags is
function Get_Remotely_Callable (T : Tag) return Boolean is
begin
- return T.TSD.Remotely_Callable = True;
+ return TSD (T).Remotely_Callable = True;
end Get_Remotely_Callable;
-------------
@@ -328,8 +365,11 @@ package body Ada.Tags is
-------------
function Get_TSD (T : Tag) return System.Address is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
begin
- return To_Address (T.TSD);
+ return TSD_Ptr.all;
end Get_TSD;
----------------
@@ -353,20 +393,21 @@ package body Ada.Tags is
-----------------
procedure Inherit_TSD (Old_TSD : System.Address; New_Tag : Tag) is
- TSD : constant Type_Specific_Data_Ptr :=
- To_Type_Specific_Data_Ptr (Old_TSD);
- New_TSD : Type_Specific_Data renames New_Tag.TSD.all;
+ Old_TSD_Ptr : constant Type_Specific_Data_Ptr :=
+ To_Type_Specific_Data_Ptr (Old_TSD);
+ New_TSD_Ptr : constant Type_Specific_Data_Ptr :=
+ TSD (New_Tag);
begin
- if TSD /= null then
- New_TSD.Idepth := TSD.Idepth + 1;
- New_TSD.Ancestor_Tags (1 .. New_TSD.Idepth)
- := TSD.Ancestor_Tags (0 .. TSD.Idepth);
+ if Old_TSD_Ptr /= null then
+ New_TSD_Ptr.Idepth := Old_TSD_Ptr.Idepth + 1;
+ New_TSD_Ptr.Ancestor_Tags (1 .. New_TSD_Ptr.Idepth) :=
+ Old_TSD_Ptr.Ancestor_Tags (0 .. Old_TSD_Ptr.Idepth);
else
- New_TSD.Idepth := 0;
+ New_TSD_Ptr.Idepth := 0;
end if;
- New_TSD.Ancestor_Tags (0) := New_Tag;
+ New_TSD_Ptr.Ancestor_Tags (0) := New_Tag;
end Inherit_TSD;
------------------
@@ -389,7 +430,6 @@ package body Ada.Tags is
declare
Msg1 : constant String := "unknown tagged type: ";
Msg2 : String (1 .. Msg1'Length + External'Length);
-
begin
Msg2 (1 .. Msg1'Length) := Msg1;
Msg2 (Msg1'Length + 1 .. Msg1'Length + External'Length) :=
@@ -430,7 +470,7 @@ package body Ada.Tags is
(Obj : System.Address;
T : Tag) return SSE.Storage_Count
is
- Parent_Tag : constant Tag := T.TSD.Ancestor_Tags (1);
+ Parent_Tag : constant Tag := TSD (T).Ancestor_Tags (1);
-- The tag of the parent type through the dispatch table
F : constant Acc_Size := To_Acc_Size (Parent_Tag.Prims_Ptr (1));
@@ -449,7 +489,7 @@ package body Ada.Tags is
function Parent_Tag (T : Tag) return Tag is
begin
- return T.TSD.Ancestor_Tags (1);
+ return TSD (T).Ancestor_Tags (1);
end Parent_Tag;
------------------
@@ -467,7 +507,7 @@ package body Ada.Tags is
procedure Set_Expanded_Name (T : Tag; Value : System.Address) is
begin
- T.TSD.Expanded_Name := To_Cstring_Ptr (Value);
+ TSD (T).Expanded_Name := To_Cstring_Ptr (Value);
end Set_Expanded_Name;
----------------------
@@ -476,7 +516,7 @@ package body Ada.Tags is
procedure Set_External_Tag (T : Tag; Value : System.Address) is
begin
- T.TSD.External_Tag := To_Cstring_Ptr (Value);
+ TSD (T).External_Tag := To_Cstring_Ptr (Value);
end Set_External_Tag;
---------------------------
@@ -488,7 +528,7 @@ package body Ada.Tags is
Value : Natural)
is
begin
- T.TSD.Idepth := Value;
+ TSD (T).Idepth := Value;
end Set_Inheritance_Depth;
-------------------------
@@ -510,7 +550,7 @@ package body Ada.Tags is
procedure Set_RC_Offset (T : Tag; Value : SSE.Storage_Offset) is
begin
- T.TSD.RC_Offset := Value;
+ TSD (T).RC_Offset := Value;
end Set_RC_Offset;
---------------------------
@@ -520,9 +560,9 @@ package body Ada.Tags is
procedure Set_Remotely_Callable (T : Tag; Value : Boolean) is
begin
if Value then
- T.TSD.Remotely_Callable := True;
+ TSD (T).Remotely_Callable := True;
else
- T.TSD.Remotely_Callable := False;
+ TSD (T).Remotely_Callable := False;
end if;
end Set_Remotely_Callable;
@@ -531,8 +571,44 @@ package body Ada.Tags is
-------------
procedure Set_TSD (T : Tag; Value : System.Address) is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
begin
- T.TSD := To_Type_Specific_Data_Ptr (Value);
+ TSD_Ptr.all := Value;
end Set_TSD;
+ -------------------
+ -- Offset_To_Top --
+ -------------------
+
+ function Offset_To_Top (T : Tag) return Integer is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Int_Ptr :=
+ To_Int_Ptr (To_Address (T) - DT_Prologue_Size);
+ begin
+ return TSD_Ptr.all;
+ end Offset_To_Top;
+
+ ------------------
+ -- Typeinfo_Ptr --
+ ------------------
+
+ function Typeinfo_Ptr (T : Tag) return System.Address is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (T) - DT_Typeinfo_Ptr_Size);
+ begin
+ return TSD_Ptr.all;
+ end Typeinfo_Ptr;
+
+ ---------
+ -- TSD --
+ ---------
+
+ function TSD (T : Tag) return Type_Specific_Data_Ptr is
+ begin
+ return To_Type_Specific_Data_Ptr (Get_TSD (T));
+ end TSD;
+
end Ada.Tags;
diff --git a/gcc/ada/a-tags.ads b/gcc/ada/a-tags.ads
index 5dc3d1e378d..92715a85b14 100644
--- a/gcc/ada/a-tags.ads
+++ b/gcc/ada/a-tags.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -79,6 +79,12 @@ private
-- initialize those structures and uses the GET functions to
-- retreive the information when needed
+ type Dispatch_Table;
+ type Tag is access all Dispatch_Table;
+
+ type Type_Specific_Data;
+ type Type_Specific_Data_Ptr is access all Type_Specific_Data;
+
package SSE renames System.Storage_Elements;
function CW_Membership (Obj_Tag : Tag; Typ_Tag : Tag) return Boolean;
@@ -188,16 +194,26 @@ private
procedure Set_Remotely_Callable (T : Tag; Value : Boolean);
-- Set to true if the type has been declared in a context described
- -- in E.4 (18)
+ -- in E.4 (18).
+
+ function TSD (T : Tag) return Type_Specific_Data_Ptr;
+ -- This function is conceptually equivalent to Get_TSD, but
+ -- returning a Type_Specific_Data_Ptr type (rather than an Address)
+ -- simplifies the implementation of the other subprograms.
DT_Prologue_Size : constant SSE.Storage_Count :=
SSE.Storage_Count
- (Standard'Address_Size / System.Storage_Unit);
+ (2 * (Standard'Address_Size / System.Storage_Unit));
-- Size of the first part of the dispatch table
+ DT_Typeinfo_Ptr_Size : constant SSE.Storage_Count :=
+ SSE.Storage_Count
+ (Standard'Address_Size / System.Storage_Unit);
+ -- Size of the Typeinfo_Ptr field of the Dispatch Table.
+
DT_Entry_Size : constant SSE.Storage_Count :=
SSE.Storage_Count
- (Standard'Address_Size / System.Storage_Unit);
+ (1 * (Standard'Address_Size / System.Storage_Unit));
-- Size of each primitive operation entry in the Dispatch Table.
TSD_Prologue_Size : constant SSE.Storage_Count :=
@@ -206,7 +222,7 @@ private
-- Size of the first part of the type specific data
TSD_Entry_Size : constant SSE.Storage_Count :=
- SSE.Storage_Count (Standard'Address_Size / System.Storage_Unit);
+ SSE.Storage_Count (1 * (Standard'Address_Size / System.Storage_Unit));
-- Size of each ancestor tag entry in the TSD
type Address_Array is array (Natural range <>) of System.Address;
@@ -215,18 +231,20 @@ private
-- of this type are declared with a dummy size of 1, the actual size
-- depending on the number of primitive operations.
- type Dispatch_Table;
- type Tag is access all Dispatch_Table;
-
- type Type_Specific_Data;
- type Type_Specific_Data_Ptr is access all Type_Specific_Data;
-
function To_Type_Specific_Data_Ptr is
new Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr);
function To_Address is
new Unchecked_Conversion (Type_Specific_Data_Ptr, System.Address);
+ function To_Address is
+ new Unchecked_Conversion (Tag, System.Address);
+
+ type Addr_Ptr is access System.Address;
+
+ function To_Addr_Ptr is
+ new Unchecked_Conversion (System.Address, Addr_Ptr);
+
-- Primitive dispatching operations are always inlined, to facilitate
-- use in a minimal/no run-time environment for high integrity use.
@@ -247,5 +265,6 @@ private
pragma Inline_Always (Set_RC_Offset);
pragma Inline_Always (Set_Remotely_Callable);
pragma Inline_Always (Set_TSD);
+ pragma Inline_Always (TSD);
end Ada.Tags;
diff --git a/gcc/ada/ada-tree.h b/gcc/ada/ada-tree.h
index fde996972c9..fad1513ab8f 100644
--- a/gcc/ada/ada-tree.h
+++ b/gcc/ada/ada-tree.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2004 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- *
@@ -64,7 +64,8 @@ struct lang_type GTY(()) {tree t; };
/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a
record being used as a fat pointer (only true for RECORD_TYPE). */
-#define TYPE_IS_FAT_POINTER_P(NODE) TYPE_LANG_FLAG_0 (NODE)
+#define TYPE_IS_FAT_POINTER_P(NODE) \
+ TYPE_LANG_FLAG_0 (RECORD_OR_UNION_CHECK (NODE))
#define TYPE_FAT_POINTER_P(NODE) \
(TREE_CODE (NODE) == RECORD_TYPE && TYPE_IS_FAT_POINTER_P (NODE))
@@ -159,6 +160,9 @@ struct lang_type GTY(()) {tree t; };
padding or alignment. */
#define TYPE_IS_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE))
+/* For a UNION_TYPE, nonzero if this is an unchecked union. */
+#define TYPE_UNCHECKED_UNION_P(NODE) TYPE_LANG_FLAG_6 (UNION_TYPE_CHECK (NODE))
+
/* This field is only defined for FUNCTION_TYPE nodes. If the Ada
subprogram contains no parameters passed by copy in/copy out then this
field is 0. Otherwise it points to a list of nodes used to specify the
diff --git a/gcc/ada/ali-util.adb b/gcc/ada/ali-util.adb
index 1bf114a59e6..518d1df8a83 100644
--- a/gcc/ada/ali-util.adb
+++ b/gcc/ada/ali-util.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -291,8 +291,8 @@ package body ALI.Util is
-- set the Interface flag in the Withs table, so that its
-- dependant are not considered for elaboration order.
- if ALIs.Table (Idread).Interface then
- Withs.Table (W).Interface := True;
+ if ALIs.Table (Idread).SAL_Interface then
+ Withs.Table (W).SAL_Interface := True;
Interface_Library_Unit := True;
-- Set the entry in the Interfaces hash table, so that other
@@ -313,7 +313,7 @@ package body ALI.Util is
-- set the flag in the entry of the Withs table.
elsif Interface_Library_Unit and then Interfaces.Get (Afile) then
- Withs.Table (W).Interface := True;
+ Withs.Table (W).SAL_Interface := True;
end if;
end loop;
end loop;
diff --git a/gcc/ada/ali.adb b/gcc/ada/ali.adb
index 0f182055571..4c8a08b05a8 100644
--- a/gcc/ada/ali.adb
+++ b/gcc/ada/ali.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -654,6 +654,7 @@ package body ALI is
Ofile_Full_Name => Full_Object_File_Name,
Queuing_Policy => ' ',
Restrictions => Restrictions_Initial,
+ SAL_Interface => False,
Sfile => No_Name,
Task_Dispatching_Policy => ' ',
Time_Slice_Value => -1,
@@ -661,7 +662,6 @@ package body ALI is
Unit_Exception_Table => False,
Ver => (others => ' '),
Ver_Len => 0,
- Interface => False,
Zero_Cost_Exceptions => False);
-- Now we acquire the input lines from the ALI file. Note that the
@@ -878,7 +878,7 @@ package body ALI is
-- Processing for SL
if C = 'L' then
- ALIs.Table (Id).Interface := True;
+ ALIs.Table (Id).SAL_Interface := True;
-- Processing for SS
@@ -1194,7 +1194,8 @@ package body ALI is
Units.Table (Units.Last).First_With := Withs.Last + 1;
Units.Table (Units.Last).First_Arg := First_Arg;
Units.Table (Units.Last).Elab_Position := 0;
- Units.Table (Units.Last).Interface := ALIs.Table (Id).Interface;
+ Units.Table (Units.Last).SAL_Interface := ALIs.Table (Id).
+ SAL_Interface;
Units.Table (Units.Last).Body_Needed_For_SAL := False;
if Debug_Flag_U then
@@ -1290,7 +1291,6 @@ package body ALI is
Fatal_Error_Ignore;
end if;
-
-- DE parameter (Dynamic elaboration checks)
elsif C = 'D' then
@@ -1376,7 +1376,6 @@ package body ALI is
Fatal_Error_Ignore;
end if;
-
-- PR/PU/PK parameters
elsif C = 'P' then
@@ -1459,7 +1458,7 @@ package body ALI is
Withs.Table (Withs.Last).Elaborate := False;
Withs.Table (Withs.Last).Elaborate_All := False;
Withs.Table (Withs.Last).Elab_All_Desirable := False;
- Withs.Table (Withs.Last).Interface := False;
+ Withs.Table (Withs.Last).SAL_Interface := False;
-- Generic case with no object file available
diff --git a/gcc/ada/ali.ads b/gcc/ada/ali.ads
index 48b1732f315..cab4b062365 100644
--- a/gcc/ada/ali.ads
+++ b/gcc/ada/ali.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -103,7 +103,7 @@ package ALI is
-- Length of characters stored in Ver. Not set if V lines are
-- ignored as a result of the Ignore_Lines parameter.
- Interface : Boolean;
+ SAL_Interface : Boolean;
-- Set True when this is an interface to a standalone library
First_Unit : Unit_Id;
@@ -332,7 +332,7 @@ package ALI is
-- Set True if IS qualifier appears in ALI file, indicating that
-- an Initialize_Scalars pragma applies to the unit.
- Interface : Boolean;
+ SAL_Interface : Boolean;
-- Set True when this is an interface to a standalone library
Body_Needed_For_SAL : Boolean;
@@ -475,7 +475,7 @@ package ALI is
Elab_All_Desirable : Boolean;
-- Indicates presence of ED parameter
- Interface : Boolean := False;
+ SAL_Interface : Boolean := False;
-- True if the Unit is an Interface of a Stand-Alone Library
end record;
diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb
index 149203a5ca8..8122d85068c 100644
--- a/gcc/ada/atree.adb
+++ b/gcc/ada/atree.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -191,7 +191,7 @@ package body Atree is
Unchecked_Conversion (Union_Id_Ptr, Flag_Word2_Ptr);
-- The following declarations are used to store flags 152-183 in the
- -- Field12 field of the fourth component of an extended (entity) node.
+ -- Field11 field of the fourth component of an extended (entity) node.
type Flag_Word3 is record
Flag152 : Boolean;
@@ -2960,11 +2960,16 @@ package body Atree is
return String_Id (Nodes.Table (N).Field3);
end Str3;
- function Char_Code2 (N : Node_Id) return Char_Code is
- begin
+ function Uint2 (N : Node_Id) return Uint is
pragma Assert (N in Nodes.First .. Nodes.Last);
- return Char_Code (Nodes.Table (N).Field2 - Char_Code_Bias);
- end Char_Code2;
+ U : constant Union_Id := Nodes.Table (N).Field2;
+ begin
+ if U = 0 then
+ return Uint_0;
+ else
+ return From_Union (U);
+ end if;
+ end Uint2;
function Uint3 (N : Node_Id) return Uint is
pragma Assert (N in Nodes.First .. Nodes.Last);
@@ -4858,6 +4863,12 @@ package body Atree is
Nodes.Table (N).Field3 := Union_Id (Val);
end Set_Str3;
+ procedure Set_Uint2 (N : Node_Id; Val : Uint) is
+ begin
+ pragma Assert (N in Nodes.First .. Nodes.Last);
+ Nodes.Table (N).Field2 := To_Union (Val);
+ end Set_Uint2;
+
procedure Set_Uint3 (N : Node_Id; Val : Uint) is
begin
pragma Assert (N in Nodes.First .. Nodes.Last);
@@ -4960,12 +4971,6 @@ package body Atree is
Nodes.Table (N + 3).Field8 := To_Union (Val);
end Set_Ureal21;
- procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code) is
- begin
- pragma Assert (N in Nodes.First .. Nodes.Last);
- Nodes.Table (N).Field2 := Union_Id (Val) + Char_Code_Bias;
- end Set_Char_Code2;
-
procedure Set_Flag4 (N : Node_Id; Val : Boolean) is
begin
pragma Assert (N in Nodes.First .. Nodes.Last);
diff --git a/gcc/ada/atree.ads b/gcc/ada/atree.ads
index aeee0f5ec6e..8b08b524a1f 100644
--- a/gcc/ada/atree.ads
+++ b/gcc/ada/atree.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -124,7 +124,6 @@ package Atree is
-- Field4
-- Field5 Five fields holding Union_Id values
- -- Char_CodeN Synonym for FieldN typed as Char_Code
-- ElistN Synonym for FieldN typed as Elist_Id
-- ListN Synonym for FieldN typed as List_Id
-- NameN Synonym for FieldN typed as Name_Id
@@ -133,14 +132,14 @@ package Atree is
-- UintN Synonym for FieldN typed as Uint (Empty = Uint_0)
-- UrealN Synonym for FieldN typed as Ureal
- -- Note: the actual usage of FieldN (i.e. whether it contains a Char_Code,
- -- Elist_Id, List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal), depends
- -- on the value in Nkind. Generally the access to this field is always via
- -- the functional interface, so the field names Char_CodeN, ElistN, ListN,
- -- NameN, NodeN, StrN, UintN and UrealN are used only in the bodies of the
- -- access functions (i.e. in the bodies of Sinfo and Einfo). These access
- -- functions contain debugging code that checks that the use is consistent
- -- with Nkind and Ekind values.
+ -- Note: the actual usage of FieldN (i.e. whether it contains a Elist_Id,
+ -- List_Id, Name_Id, Node_Id, String_Id, Uint or Ureal), depends on the
+ -- value in Nkind. Generally the access to this field is always via the
+ -- functional interface, so the field names ElistN, ListN, NameN, NodeN,
+ -- StrN, UintN and UrealN are used only in the bodies of the access
+ -- functions (i.e. in the bodies of Sinfo and Einfo). These access
+ -- functions contain debugging code that checks that the use is
+ -- consistent with Nkind and Ekind values.
-- However, in specialized circumstances (examples are the circuit in
-- generic instantiation to copy trees, and in the tree dump routine),
@@ -988,9 +987,6 @@ package Atree is
function Name2 (N : Node_Id) return Name_Id;
pragma Inline (Name2);
- function Char_Code2 (N : Node_Id) return Char_Code;
- pragma Inline (Char_Code2);
-
function Str3 (N : Node_Id) return String_Id;
pragma Inline (Str3);
@@ -999,6 +995,9 @@ package Atree is
-- Uint_0 is returned. This avoids the rather tricky requirement
-- of initializing all Uint fields in nodes and entities.
+ function Uint2 (N : Node_Id) return Uint;
+ pragma Inline (Uint2);
+
function Uint3 (N : Node_Id) return Uint;
pragma Inline (Uint3);
@@ -1910,12 +1909,12 @@ package Atree is
procedure Set_Name2 (N : Node_Id; Val : Name_Id);
pragma Inline (Set_Name2);
- procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code);
- pragma Inline (Set_Char_Code2);
-
procedure Set_Str3 (N : Node_Id; Val : String_Id);
pragma Inline (Set_Str3);
+ procedure Set_Uint2 (N : Node_Id; Val : Uint);
+ pragma Inline (Set_Uint2);
+
procedure Set_Uint3 (N : Node_Id; Val : Uint);
pragma Inline (Set_Uint3);
@@ -2780,9 +2779,9 @@ package Atree is
Field4 : Union_Id;
Field5 : Union_Id;
-- Five general use fields, which can contain Node_Id, List_Id,
- -- Elist_Id, String_Id, Name_Id, or Char_Code values depending
- -- on the values in Nkind and (for extended nodes), in Ekind.
- -- See packages Sinfo and Einfo for details of their use.
+ -- Elist_Id, String_Id, or Name_Id values depending on the
+ -- values in Nkind and (for extended nodes), in Ekind. See
+ -- packages Sinfo and Einfo for details of their use.
-- Extension (second component) of extended node
diff --git a/gcc/ada/atree.h b/gcc/ada/atree.h
index 3c40799f4bb..0d06969467e 100644
--- a/gcc/ada/atree.h
+++ b/gcc/ada/atree.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2003, 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- *
@@ -216,6 +216,46 @@ struct Flag_Word3
Boolean flag183 : 1;
};
+/* Structure used for extra flags in fifth component overlaying Field11 */
+struct Flag_Word4
+{
+ Boolean flag184 : 1;
+ Boolean flag185 : 1;
+ Boolean flag186 : 1;
+ Boolean flag187 : 1;
+ Boolean flag188 : 1;
+ Boolean flag189 : 1;
+ Boolean flag190 : 1;
+ Boolean flag191 : 1;
+
+ Boolean flag192 : 1;
+ Boolean flag193 : 1;
+ Boolean flag194 : 1;
+ Boolean flag195 : 1;
+ Boolean flag196 : 1;
+ Boolean flag197 : 1;
+ Boolean flag198 : 1;
+ Boolean flag199 : 1;
+
+ Boolean flag200 : 1;
+ Boolean flag201 : 1;
+ Boolean flag202 : 1;
+ Boolean flag203 : 1;
+ Boolean flag204 : 1;
+ Boolean flag205 : 1;
+ Boolean flag206 : 1;
+ Boolean flag207 : 1;
+
+ Boolean flag208 : 1;
+ Boolean flag209 : 1;
+ Boolean flag210 : 1;
+ Boolean flag211 : 1;
+ Boolean flag212 : 1;
+ Boolean flag213 : 1;
+ Boolean flag214 : 1;
+ Boolean flag215 : 1;
+};
+
struct Non_Extended
{
Source_Ptr sloc;
@@ -238,14 +278,15 @@ struct Extended
union
{
Int field11;
- struct Flag_Word3 fw3;
+ struct Flag_Word3 fw3;
+ struct Flag_Word4 fw4;
} X;
union
{
Int field12;
- struct Flag_Word fw;
- struct Flag_Word2 fw2;
+ struct Flag_Word fw;
+ struct Flag_Word2 fw2;
} U;
};
@@ -272,7 +313,6 @@ struct Node
that Node_Id values can be used as subscripts. */
extern struct Node *Nodes_Ptr;
-
#define Parent atree__parent
extern Node_Id Parent (Node_Id);
@@ -338,6 +378,10 @@ extern Node_Id Current_Error_Node;
#define Field21(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field8)
#define Field22(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field9)
#define Field23(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field10)
+#define Field24(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field6)
+#define Field25(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field7)
+#define Field26(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.field8)
+#define Field27(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.field9)
#define Node1(N) Field1 (N)
#define Node2(N) Field2 (N)
@@ -362,6 +406,10 @@ extern Node_Id Current_Error_Node;
#define Node21(N) Field21 (N)
#define Node22(N) Field22 (N)
#define Node23(N) Field23 (N)
+#define Node24(N) Field24 (N)
+#define Node25(N) Field25 (N)
+#define Node26(N) Field26 (N)
+#define Node27(N) Field27 (N)
#define List1(N) Field1 (N)
#define List2(N) Field2 (N)
@@ -388,6 +436,7 @@ extern Node_Id Current_Error_Node;
#define Str3(N) Field3 (N)
+#define Uint2(N) ((Field2 (N) == 0) ? Uint_0 : Field2 (N))
#define Uint3(N) ((Field3 (N) == 0) ? Uint_0 : Field3 (N))
#define Uint4(N) ((Field4 (N) == 0) ? Uint_0 : Field4 (N))
#define Uint5(N) ((Field5 (N) == 0) ? Uint_0 : Field5 (N))
@@ -599,3 +648,36 @@ extern Node_Id Current_Error_Node;
#define Flag181(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag181)
#define Flag182(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag182)
#define Flag183(N) (Nodes_Ptr[(N) - First_Node_Id + 3].V.EX.X.fw3.flag183)
+
+#define Flag184(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag184)
+#define Flag185(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag185)
+#define Flag186(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag186)
+#define Flag187(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag187)
+#define Flag188(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag188)
+#define Flag189(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag189)
+#define Flag190(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag190)
+#define Flag191(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag191)
+#define Flag192(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag192)
+#define Flag193(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag193)
+#define Flag194(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag194)
+#define Flag195(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag195)
+#define Flag196(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag196)
+#define Flag197(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag197)
+#define Flag198(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag198)
+#define Flag199(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag199)
+#define Flag200(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag200)
+#define Flag201(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag201)
+#define Flag202(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag202)
+#define Flag203(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag203)
+#define Flag204(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag204)
+#define Flag205(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag205)
+#define Flag206(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag206)
+#define Flag207(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag207)
+#define Flag208(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag208)
+#define Flag209(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag209)
+#define Flag210(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag210)
+#define Flag211(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag211)
+#define Flag212(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag212)
+#define Flag213(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag213)
+#define Flag214(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag214)
+#define Flag215(N) (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.X.fw4.flag215)
diff --git a/gcc/ada/binde.adb b/gcc/ada/binde.adb
index d90c75ee064..cc40af1964d 100644
--- a/gcc/ada/binde.adb
+++ b/gcc/ada/binde.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -770,7 +770,7 @@ package body Binde is
-- Skip also if no ALI file for this with, happens with certain
-- specialized generic files that do not get compiled.
- if not Withs.Table (W).Interface
+ if not Withs.Table (W).SAL_Interface
and then Withs.Table (W).Afile /= No_File
and then Generic_Separately_Compiled (Withs.Table (W).Sfile)
then
@@ -1011,7 +1011,7 @@ package body Binde is
-- there is a body and a spec, then spec must be elaborated first
-- Note that the corresponding spec immediately follows the body
- if not Units.Table (U).Interface
+ if not Units.Table (U).SAL_Interface
and then Units.Table (U).Utype = Is_Body
then
Build_Link (Corresponding_Spec (U), U, Spec_First);
@@ -1021,12 +1021,12 @@ package body Binde is
-- process WITH references for this unit ignoring generic units and
-- interfaces to stand-alone libraries.
- if not Units.Table (U).Interface then
+ if not Units.Table (U).SAL_Interface then
for
W in Units.Table (U).First_With .. Units.Table (U).Last_With
loop
if Withs.Table (W).Sfile /= No_File
- and then (not Withs.Table (W).Interface)
+ and then (not Withs.Table (W).SAL_Interface)
then
-- Check for special case of withing a unit that does not
-- exist any more. If the unit was completely missing we
diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb
index d2e0652fb79..49d73c4bcc2 100644
--- a/gcc/ada/bindgen.adb
+++ b/gcc/ada/bindgen.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -390,7 +390,7 @@ package body Bindgen is
-- Don't generate reference for stand alone library
- and then not U.Interface
+ and then not U.SAL_Interface
-- Don't generate reference for predefined file in No_Run_Time
-- mode, since we don't include the object files in this case
@@ -715,7 +715,7 @@ package body Bindgen is
-- Don't generate reference for stand alone library
- and then not U.Interface
+ and then not U.SAL_Interface
-- Don't generate reference for predefined file in No_Run_Time
-- mode, since we don't include the object files in this case
@@ -979,7 +979,7 @@ package body Bindgen is
-- to True, we do not need to test if this has already been
-- done, since it is quicker to set the flag than to test it.
- if not U.Interface and then U.Utype = Is_Body
+ if not U.SAL_Interface and then U.Utype = Is_Body
and then Units.Table (Unum_Spec).Set_Elab_Entity
then
Set_String (" E");
@@ -1004,7 +1004,7 @@ package body Bindgen is
-- The uname_E assignment is skipped if this is a separate spec,
-- since the assignment will be done when we process the body.
- elsif not U.Interface then
+ elsif not U.SAL_Interface then
if Force_Checking_Of_Elaboration_Flags or
Interface_Library_Unit or
(not Bind_Main_Program)
@@ -1097,7 +1097,7 @@ package body Bindgen is
-- to True, we do not need to test if this has already been
-- done, since it is quicker to set the flag than to test it.
- if not U.Interface and then U.Utype = Is_Body
+ if not U.SAL_Interface and then U.Utype = Is_Body
and then Units.Table (Unum_Spec).Set_Elab_Entity
then
Set_String (" ");
@@ -1118,7 +1118,7 @@ package body Bindgen is
-- The uname_E assignment is skipped if this is a separate spec,
-- since the assignment will be done when we process the body.
- elsif not U.Interface then
+ elsif not U.SAL_Interface then
Get_Name_String (U.Uname);
if Force_Checking_Of_Elaboration_Flags or
@@ -1270,7 +1270,7 @@ package body Bindgen is
Num := 0;
for A in ALIs.First .. ALIs.Last loop
- if not ALIs.Table (A).Interface
+ if not ALIs.Table (A).SAL_Interface
and then ALIs.Table (A).Unit_Exception_Table
then
Num := Num + 1;
@@ -1308,7 +1308,7 @@ package body Bindgen is
end if;
for A in ALIs.First .. ALIs.Last loop
- if not ALIs.Table (A).Interface
+ if not ALIs.Table (A).SAL_Interface
and then ALIs.Table (A).Unit_Exception_Table
then
Get_Decoded_Name_String_With_Brackets
@@ -1436,7 +1436,7 @@ package body Bindgen is
Num := 0;
for A in ALIs.First .. ALIs.Last loop
- if not ALIs.Table (A).Interface
+ if not ALIs.Table (A).SAL_Interface
and then ALIs.Table (A).Unit_Exception_Table
then
Num := Num + 1;
@@ -1466,7 +1466,7 @@ package body Bindgen is
Num2 := 0;
for A in ALIs.First .. ALIs.Last loop
- if not ALIs.Table (A).Interface
+ if not ALIs.Table (A).SAL_Interface
and then ALIs.Table (A).Unit_Exception_Table
then
Num2 := Num2 + 1;
@@ -1584,15 +1584,24 @@ package body Bindgen is
Write_Statement_Buffer;
end if;
+ if Opt.Default_Exit_Status /= 0
+ and then Bind_Main_Program
+ and then not Configurable_Run_Time_Mode
+ then
+ WBI (" procedure Set_Exit_Status (Status : Integer);");
+ WBI (" pragma Import (C, Set_Exit_Status, " &
+ """__gnat_set_exit_status"");");
+ WBI ("");
+ end if;
+
-- Initialize and Finalize
if not Cumulative_Restrictions.Set (No_Finalization) then
- WBI (" procedure initialize;");
+ WBI (" procedure initialize (Addr : System.Address);");
WBI (" pragma Import (C, initialize, ""__gnat_initialize"");");
WBI ("");
WBI (" procedure finalize;");
WBI (" pragma Import (C, finalize, ""__gnat_finalize"");");
- WBI ("");
end if;
-- Deal with declarations for main program case
@@ -1630,6 +1639,13 @@ package body Bindgen is
Write_Statement_Buffer;
WBI ("");
+
+ if Bind_Main_Program
+ and then not Suppress_Standard_Library_On_Target
+ then
+ WBI (" SEH : aliased array (1 .. 2) of Integer;");
+ WBI ("");
+ end if;
end if;
-- Generate a reference to Ada_Main_Program_Name. This symbol is
@@ -1670,8 +1686,26 @@ package body Bindgen is
WBI (" gnat_envp := System.Null_Address;");
end if;
+ if Opt.Default_Exit_Status /= 0
+ and then Bind_Main_Program
+ and then not Configurable_Run_Time_Mode
+ then
+ Set_String (" Set_Exit_Status (");
+ Set_Int (Opt.Default_Exit_Status);
+ Set_String (");");
+ Write_Statement_Buffer;
+ end if;
+
if not Cumulative_Restrictions.Set (No_Finalization) then
- WBI (" Initialize;");
+
+ if not No_Main_Subprogram
+ and then Bind_Main_Program
+ and then not Suppress_Standard_Library_On_Target
+ then
+ WBI (" Initialize (SEH'Address);");
+ else
+ WBI (" Initialize (System.Null_Address);");
+ end if;
end if;
WBI (" " & Ada_Init_Name.all & ";");
@@ -1758,6 +1792,13 @@ package body Bindgen is
WBI (" char *ensure_reference __attribute__ ((__unused__)) = " &
"__gnat_ada_main_program_name;");
WBI ("");
+
+ if not Suppress_Standard_Library_On_Target
+ and then not No_Main_Subprogram
+ then
+ WBI (" int SEH [2];");
+ WBI ("");
+ end if;
end if;
-- If main program is a function, generate result variable
@@ -1790,11 +1831,24 @@ package body Bindgen is
WBI (" gnat_envp = 0;");
end if;
+ if Opt.Default_Exit_Status /= 0
+ and then Bind_Main_Program
+ and then not Configurable_Run_Time_Mode
+ then
+ Set_String (" __gnat_set_exit_status (");
+ Set_Int (Opt.Default_Exit_Status);
+ Set_String (");");
+ Write_Statement_Buffer;
+ end if;
+
-- The __gnat_initialize routine is used only if we have a run-time
if not Suppress_Standard_Library_On_Target then
- WBI
- (" __gnat_initialize ();");
+ if not No_Main_Subprogram and then Bind_Main_Program then
+ WBI (" __gnat_initialize ((void *)SEH);");
+ else
+ WBI (" __gnat_initialize ((void *)0);");
+ end if;
end if;
WBI (" " & Ada_Init_Name.all & " ();");
@@ -1938,7 +1992,7 @@ package body Bindgen is
-- If not spec that has an associated body, then generate a
-- comment giving the name of the corresponding object file.
- if (not Units.Table (Elab_Order.Table (E)).Interface)
+ if (not Units.Table (Elab_Order.Table (E)).SAL_Interface)
and then Units.Table (Elab_Order.Table (E)).Utype /= Is_Spec
then
Get_Name_String
@@ -2502,7 +2556,7 @@ package body Bindgen is
end if;
if not Suppress_Standard_Library_On_Target then
- WBI ("extern void __gnat_initialize (void);");
+ WBI ("extern void __gnat_initialize (void *);");
WBI ("extern void __gnat_finalize (void);");
WBI ("extern void __gnat_install_handler (void);");
end if;
@@ -2530,7 +2584,6 @@ package body Bindgen is
WBI ("extern int gnat_argc;");
WBI ("extern char **gnat_argv;");
WBI ("extern char **gnat_envp;");
- WBI ("extern int gnat_exit_status;");
-- If configurable run time and no command line args, then the
-- generation of these variables is entirely suppressed.
@@ -2545,7 +2598,6 @@ package body Bindgen is
WBI ("int gnat_argc;");
WBI ("char **gnat_argv;");
WBI ("char **gnat_envp;");
- WBI ("int gnat_exit_status = 0;");
end if;
-- Similarly deal with exit status
diff --git a/gcc/ada/bindusg.adb b/gcc/ada/bindusg.adb
index e5bae217018..31b0ba823f7 100644
--- a/gcc/ada/bindusg.adb
+++ b/gcc/ada/bindusg.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -227,6 +227,11 @@ begin
Write_Str ("ject consistency only)");
Write_Eol;
+ -- Line for X switch
+
+ Write_Str (" -Xnnn Default exit status value = nnn");
+ Write_Eol;
+
-- Line for -z switch
Write_Str (" -z No main subprogram (zero main)");
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index b26e4d981db..6801837afc7 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -2591,19 +2591,28 @@ package body Checks is
then
case Msg_K is
when Components =>
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding " &
- "components", Expr);
+ Apply_Compile_Time_Constraint_Error
+ (N => Expr,
+ Msg => "(Ada 2005) NULL not allowed in"
+ & " null-excluding components?",
+ Reason => CE_Null_Not_Allowed,
+ Rep => False);
when Formals =>
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding formals",
- Expr);
+ Apply_Compile_Time_Constraint_Error
+ (N => Expr,
+ Msg => "(Ada 2005) NULL not allowed in"
+ & " null-excluding formals?",
+ Reason => CE_Null_Not_Allowed,
+ Rep => False);
when Objects =>
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding objects",
- Expr);
+ Apply_Compile_Time_Constraint_Error
+ (N => Expr,
+ Msg => "(Ada 2005) NULL not allowed in"
+ & " null-excluding objects?",
+ Reason => CE_Null_Not_Allowed,
+ Rep => False);
end case;
end if;
end Check_Null_Not_Allowed;
@@ -3478,6 +3487,15 @@ package body Checks is
Set_Do_Range_Check (N, True);
return;
end if;
+
+ -- Ditto if the prefix is an explicit dereference whose
+ -- designated type is unconstrained.
+
+ elsif Nkind (Prefix (P)) = N_Explicit_Dereference
+ and then not Is_Constrained (Atyp)
+ then
+ Set_Do_Range_Check (N, True);
+ return;
end if;
Indx := First_Index (Atyp);
diff --git a/gcc/ada/cstand.adb b/gcc/ada/cstand.adb
index 73afd401c2f..1f45f5e6d63 100644
--- a/gcc/ada/cstand.adb
+++ b/gcc/ada/cstand.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -195,13 +195,14 @@ package body CStand is
Binary_Ops : constant array (S_Binary_Ops) of Name_Id :=
-- There is one entry here for each binary operator, except for the
- -- case of concatenation, where there are two entries, one for a
- -- String result, and one for a Wide_String result.
+ -- case of concatenation, where there are three entries, one for a
+ -- String result, one for Wide_String, and one for Wide_Wide_String.
(Name_Op_Add,
Name_Op_And,
Name_Op_Concat,
Name_Op_Concat,
+ Name_Op_Concat,
Name_Op_Divide,
Name_Op_Eq,
Name_Op_Expon,
@@ -222,24 +223,25 @@ package body CStand is
-- This table has the corresponding result types. The entries are
-- ordered so they correspond to the Binary_Ops array above.
- (Universal_Integer, -- Add
- Standard_Boolean, -- And
- Standard_String, -- Concat (String)
- Standard_Wide_String, -- Concat (Wide_String)
- Universal_Integer, -- Divide
- Standard_Boolean, -- Eq
- Universal_Integer, -- Expon
- Standard_Boolean, -- Ge
- Standard_Boolean, -- Gt
- Standard_Boolean, -- Le
- Standard_Boolean, -- Lt
- Universal_Integer, -- Mod
- Universal_Integer, -- Multiply
- Standard_Boolean, -- Ne
- Standard_Boolean, -- Or
- Universal_Integer, -- Rem
- Universal_Integer, -- Subtract
- Standard_Boolean); -- Xor
+ (Universal_Integer, -- Add
+ Standard_Boolean, -- And
+ Standard_String, -- Concat (String)
+ Standard_Wide_String, -- Concat (Wide_String)
+ Standard_Wide_Wide_String, -- Concat (Wide_Wide_String)
+ Universal_Integer, -- Divide
+ Standard_Boolean, -- Eq
+ Universal_Integer, -- Expon
+ Standard_Boolean, -- Ge
+ Standard_Boolean, -- Gt
+ Standard_Boolean, -- Le
+ Standard_Boolean, -- Lt
+ Universal_Integer, -- Mod
+ Universal_Integer, -- Multiply
+ Standard_Boolean, -- Ne
+ Standard_Boolean, -- Or
+ Universal_Integer, -- Rem
+ Universal_Integer, -- Subtract
+ Standard_Boolean); -- Xor
Unary_Ops : constant array (S_Unary_Ops) of Name_Id :=
@@ -277,13 +279,20 @@ package body CStand is
-- For concatenation, we create a separate operator for each
-- array type. This simplifies the resolution of the component-
-- component concatenation operation. In Standard, we set the types
- -- of the formals for string and wide string concatenation.
+ -- of the formals for string, wide [wide]_string, concatenations.
Set_Etype (First_Entity (Standard_Op_Concat), Standard_String);
Set_Etype (Last_Entity (Standard_Op_Concat), Standard_String);
Set_Etype (First_Entity (Standard_Op_Concatw), Standard_Wide_String);
Set_Etype (Last_Entity (Standard_Op_Concatw), Standard_Wide_String);
+
+ Set_Etype (First_Entity (Standard_Op_Concatww),
+ Standard_Wide_Wide_String);
+
+ Set_Etype (Last_Entity (Standard_Op_Concatww),
+ Standard_Wide_Wide_String);
+
end Create_Operators;
---------------------
@@ -537,8 +546,8 @@ package body CStand is
B_Node := New_Node (N_Character_Literal, Stloc);
Set_Is_Static_Expression (B_Node);
Set_Chars (B_Node, No_Name);
- Set_Char_Literal_Value (B_Node, 16#00#);
- Set_Entity (B_Node, Empty);
+ Set_Char_Literal_Value (B_Node, Uint_0);
+ Set_Entity (B_Node, Empty);
Set_Etype (B_Node, Standard_Character);
Set_Low_Bound (R_Node, B_Node);
@@ -547,8 +556,8 @@ package body CStand is
B_Node := New_Node (N_Character_Literal, Stloc);
Set_Is_Static_Expression (B_Node);
Set_Chars (B_Node, No_Name);
- Set_Char_Literal_Value (B_Node, 16#FF#);
- Set_Entity (B_Node, Empty);
+ Set_Char_Literal_Value (B_Node, UI_From_Int (16#FF#));
+ Set_Entity (B_Node, Empty);
Set_Etype (B_Node, Standard_Character);
Set_High_Bound (R_Node, B_Node);
@@ -582,8 +591,8 @@ package body CStand is
B_Node := New_Node (N_Character_Literal, Stloc);
Set_Is_Static_Expression (B_Node);
Set_Chars (B_Node, No_Name); -- ???
- Set_Char_Literal_Value (B_Node, 16#0000#);
- Set_Entity (B_Node, Empty);
+ Set_Char_Literal_Value (B_Node, Uint_0);
+ Set_Entity (B_Node, Empty);
Set_Etype (B_Node, Standard_Wide_Character);
Set_Low_Bound (R_Node, B_Node);
@@ -592,8 +601,8 @@ package body CStand is
B_Node := New_Node (N_Character_Literal, Stloc);
Set_Is_Static_Expression (B_Node);
Set_Chars (B_Node, No_Name); -- ???
- Set_Char_Literal_Value (B_Node, 16#FFFF#);
- Set_Entity (B_Node, Empty);
+ Set_Char_Literal_Value (B_Node, UI_From_Int (16#FFFF#));
+ Set_Entity (B_Node, Empty);
Set_Etype (B_Node, Standard_Wide_Character);
Set_High_Bound (R_Node, B_Node);
@@ -601,6 +610,54 @@ package body CStand is
Set_Etype (R_Node, Standard_Wide_Character);
Set_Parent (R_Node, Standard_Wide_Character);
+ -- Create type definition for type Wide_Wide_Character. Note that we
+ -- do not set the Literals field, since type Wide_Wide_Character is
+ -- handled with special routines that do not need a literal list.
+
+ Tdef_Node := New_Node (N_Enumeration_Type_Definition, Stloc);
+ Set_Type_Definition (Parent (Standard_Wide_Wide_Character), Tdef_Node);
+
+ Set_Ekind (Standard_Wide_Wide_Character, E_Enumeration_Type);
+ Set_Etype (Standard_Wide_Wide_Character,
+ Standard_Wide_Wide_Character);
+ Init_Size (Standard_Wide_Wide_Character,
+ Standard_Wide_Wide_Character_Size);
+
+ Set_Elem_Alignment (Standard_Wide_Wide_Character);
+ Set_Is_Unsigned_Type (Standard_Wide_Wide_Character);
+ Set_Is_Character_Type (Standard_Wide_Wide_Character);
+ Set_Is_Known_Valid (Standard_Wide_Wide_Character);
+ Set_Size_Known_At_Compile_Time (Standard_Wide_Wide_Character);
+ Set_Is_Ada_2005 (Standard_Wide_Wide_Character);
+
+ -- Create the bounds for type Wide_Wide_Character
+
+ R_Node := New_Node (N_Range, Stloc);
+
+ -- Low bound for type Wide_Wide_Character
+
+ B_Node := New_Node (N_Character_Literal, Stloc);
+ Set_Is_Static_Expression (B_Node);
+ Set_Chars (B_Node, No_Name); -- ???
+ Set_Char_Literal_Value (B_Node, Uint_0);
+ Set_Entity (B_Node, Empty);
+ Set_Etype (B_Node, Standard_Wide_Wide_Character);
+ Set_Low_Bound (R_Node, B_Node);
+
+ -- High bound for type Wide_Wide_Character
+
+ B_Node := New_Node (N_Character_Literal, Stloc);
+ Set_Is_Static_Expression (B_Node);
+ Set_Chars (B_Node, No_Name); -- ???
+ Set_Char_Literal_Value (B_Node, UI_From_Int (16#7FFF_FFFF#));
+ Set_Entity (B_Node, Empty);
+ Set_Etype (B_Node, Standard_Wide_Wide_Character);
+ Set_High_Bound (R_Node, B_Node);
+
+ Set_Scalar_Range (Standard_Wide_Wide_Character, R_Node);
+ Set_Etype (R_Node, Standard_Wide_Wide_Character);
+ Set_Parent (R_Node, Standard_Wide_Wide_Character);
+
-- Create type definition node for type String
Tdef_Node := New_Node (N_Unconstrained_Array_Definition, Stloc);
@@ -609,9 +666,9 @@ package body CStand is
CompDef_Node : Node_Id;
begin
CompDef_Node := New_Node (N_Component_Definition, Stloc);
- Set_Aliased_Present (CompDef_Node, False);
- Set_Access_Definition (CompDef_Node, Empty);
- Set_Subtype_Indication (CompDef_Node, Identifier_For (S_Character));
+ Set_Aliased_Present (CompDef_Node, False);
+ Set_Access_Definition (CompDef_Node, Empty);
+ Set_Subtype_Indication (CompDef_Node, Identifier_For (S_Character));
Set_Component_Definition (Tdef_Node, CompDef_Node);
end;
@@ -637,6 +694,7 @@ package body CStand is
-- Create type definition node for type Wide_String
Tdef_Node := New_Node (N_Unconstrained_Array_Definition, Stloc);
+
declare
CompDef_Node : Node_Id;
begin
@@ -647,6 +705,7 @@ package body CStand is
Identifier_For (S_Wide_Character));
Set_Component_Definition (Tdef_Node, CompDef_Node);
end;
+
Set_Subtype_Marks (Tdef_Node, New_List);
Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
Set_Type_Definition (Parent (Standard_Wide_String), Tdef_Node);
@@ -665,6 +724,42 @@ package body CStand is
Set_Entity (E_Id, Standard_Positive);
Set_Etype (E_Id, Standard_Positive);
+ -- Create type definition node for type Wide_Wide_String
+
+ Tdef_Node := New_Node (N_Unconstrained_Array_Definition, Stloc);
+
+ declare
+ CompDef_Node : Node_Id;
+ begin
+ CompDef_Node := New_Node (N_Component_Definition, Stloc);
+ Set_Aliased_Present (CompDef_Node, False);
+ Set_Access_Definition (CompDef_Node, Empty);
+ Set_Subtype_Indication (CompDef_Node,
+ Identifier_For (S_Wide_Wide_Character));
+ Set_Component_Definition (Tdef_Node, CompDef_Node);
+ end;
+
+ Set_Subtype_Marks (Tdef_Node, New_List);
+ Append (Identifier_For (S_Positive), Subtype_Marks (Tdef_Node));
+ Set_Type_Definition (Parent (Standard_Wide_Wide_String), Tdef_Node);
+
+ Set_Ekind (Standard_Wide_Wide_String, E_String_Type);
+ Set_Etype (Standard_Wide_Wide_String,
+ Standard_Wide_Wide_String);
+ Set_Component_Type (Standard_Wide_Wide_String,
+ Standard_Wide_Wide_Character);
+ Set_Component_Size (Standard_Wide_Wide_String, Uint_32);
+ Init_Size_Align (Standard_Wide_Wide_String);
+ Set_Is_Ada_2005 (Standard_Wide_Wide_String);
+
+ -- Set index type of Wide_Wide_String
+
+ E_Id := First
+ (Subtype_Marks (Type_Definition (Parent (Standard_Wide_Wide_String))));
+ Set_First_Index (Standard_Wide_Wide_String, E_Id);
+ Set_Entity (E_Id, Standard_Positive);
+ Set_Etype (E_Id, Standard_Positive);
+
-- Create subtype declaration for Natural
Decl := New_Node (N_Subtype_Declaration, Stloc);
@@ -760,7 +855,7 @@ package body CStand is
Set_Is_Static_Expression (Expr_Decl);
Set_Chars (Expr_Decl, No_Name);
Set_Etype (Expr_Decl, Standard_Character);
- Set_Char_Literal_Value (Expr_Decl, Ccode);
+ Set_Char_Literal_Value (Expr_Decl, UI_From_Int (Int (Ccode)));
end;
Append (Decl, Decl_A);
@@ -1703,6 +1798,12 @@ package body CStand is
P (" -- See RM A.1(36) for details of this type");
Write_Eol;
+ P (" type Wide_Wide_Character is (...)");
+ Write_Str (" for Wide_Character'Size use ");
+ Write_Int (Standard_Wide_Wide_Character_Size);
+ P (";");
+ P (" -- See RM A.1(36) for details of this type");
+
P (" type String is array (Positive range <>) of Character;");
P (" pragma Pack (String);");
Write_Eol;
@@ -1712,6 +1813,11 @@ package body CStand is
P (" pragma Pack (Wide_String);");
Write_Eol;
+ P (" type Wide_Wide_String is array (Positive range <>)" &
+ " of Wide_Wide_Character;");
+ P (" pragma Pack (Wide_Wide_String);");
+ Write_Eol;
+
-- Here it's OK to use the Duration type of the host compiler since
-- the implementation of Duration in GNAT is target independent.
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index 39ab9634e75..8606bf0958a 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -209,7 +209,8 @@ package body Einfo is
-- Privals_Chain Elist23
-- Protected_Operation Node23
- -- (unused) Node24
+ -- Obsolescent_Warning Node24
+
-- (unused) Node25
-- (unused) Node26
-- (unused) Node27
@@ -391,6 +392,7 @@ package body Einfo is
-- Vax_Float Flag151
-- Entry_Accepted Flag152
+ -- Is_Obsolescent Flag153
-- Has_Per_Object_Constraint Flag154
-- Has_Private_Declaration Flag155
-- Referenced Flag156
@@ -424,10 +426,9 @@ package body Einfo is
-- Has_Contiguous_Rep Flag181
-- Has_Xref_Entry Flag182
-- Must_Be_On_Byte_Boundary Flag183
+ -- Has_Stream_Size_Clause Flag184
+ -- Is_Ada_2005 Flag185
- -- (unused) Flag153
- -- (unused) Flag184
- -- (unused) Flag185
-- (unused) Flag186
-- (unused) Flag187
-- (unused) Flag188
@@ -459,6 +460,36 @@ package body Einfo is
-- (unused) Flag214
-- (unused) Flag215
+ -----------------------
+ -- Local subprograms --
+ -----------------------
+
+ function Rep_Clause (Id : E; Rep_Name : Name_Id) return N;
+ -- Returns the attribute definition clause whose name is Rep_Name. Returns
+ -- Empty if not found.
+
+ ----------------
+ -- Rep_Clause --
+ ----------------
+
+ function Rep_Clause (Id : E; Rep_Name : Name_Id) return N is
+ Ritem : Node_Id;
+
+ begin
+ Ritem := First_Rep_Item (Id);
+ while Present (Ritem) loop
+ if Nkind (Ritem) = N_Attribute_Definition_Clause
+ and then Chars (Ritem) = Rep_Name
+ then
+ return Ritem;
+ else
+ Ritem := Next_Rep_Item (Ritem);
+ end if;
+ end loop;
+
+ return Empty;
+ end Rep_Clause;
+
--------------------------------
-- Attribute Access Functions --
--------------------------------
@@ -1238,6 +1269,12 @@ package body Einfo is
return Flag23 (Implementation_Base_Type (Id));
end Has_Storage_Size_Clause;
+ function Has_Stream_Size_Clause (Id : E) return B is
+ begin
+ pragma Assert (Is_Elementary_Type (Id));
+ return Flag184 (Id);
+ end Has_Stream_Size_Clause;
+
function Has_Subprogram_Descriptor (Id : E) return B is
begin
return Flag93 (Id);
@@ -1317,6 +1354,11 @@ package body Einfo is
return Flag69 (Id);
end Is_Access_Constant;
+ function Is_Ada_2005 (Id : E) return B is
+ begin
+ return Flag185 (Id);
+ end Is_Ada_2005;
+
function Is_Aliased (Id : E) return B is
begin
pragma Assert (Nkind (Id) in N_Entity);
@@ -1574,6 +1616,12 @@ package body Einfo is
return Flag178 (Id);
end Is_Null_Init_Proc;
+ function Is_Obsolescent (Id : E) return B is
+ begin
+ pragma Assert (Is_Subprogram (Id));
+ return Flag153 (Id);
+ end Is_Obsolescent;
+
function Is_Optional_Parameter (Id : E) return B is
begin
pragma Assert (Is_Formal (Id));
@@ -1881,6 +1929,12 @@ package body Einfo is
return Node17 (Id);
end Object_Ref;
+ function Obsolescent_Warning (Id : E) return N is
+ begin
+ pragma Assert (Is_Subprogram (Id));
+ return Node24 (Id);
+ end Obsolescent_Warning;
+
function Original_Access_Type (Id : E) return E is
begin
pragma Assert
@@ -3171,6 +3225,12 @@ package body Einfo is
Set_Flag23 (Id, V);
end Set_Has_Storage_Size_Clause;
+ procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True) is
+ begin
+ pragma Assert (Is_Elementary_Type (Id));
+ Set_Flag184 (Id, V);
+ end Set_Has_Stream_Size_Clause;
+
procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True) is
begin
Set_Flag93 (Id, V);
@@ -3254,6 +3314,11 @@ package body Einfo is
Set_Flag69 (Id, V);
end Set_Is_Access_Constant;
+ procedure Set_Is_Ada_2005 (Id : E; V : B := True) is
+ begin
+ Set_Flag185 (Id, V);
+ end Set_Is_Ada_2005;
+
procedure Set_Is_Aliased (Id : E; V : B := True) is
begin
pragma Assert (Nkind (Id) in N_Entity);
@@ -3528,6 +3593,12 @@ package body Einfo is
Set_Flag178 (Id, V);
end Set_Is_Null_Init_Proc;
+ procedure Set_Is_Obsolescent (Id : E; V : B := True) is
+ begin
+ pragma Assert (Is_Subprogram (Id));
+ Set_Flag153 (Id, V);
+ end Set_Is_Obsolescent;
+
procedure Set_Is_Optional_Parameter (Id : E; V : B := True) is
begin
pragma Assert (Is_Formal (Id));
@@ -3840,6 +3911,12 @@ package body Einfo is
Set_Node17 (Id, V);
end Set_Object_Ref;
+ procedure Set_Obsolescent_Warning (Id : E; V : N) is
+ begin
+ pragma Assert (Is_Subprogram (Id));
+ Set_Node24 (Id, V);
+ end Set_Obsolescent_Warning;
+
procedure Set_Original_Access_Type (Id : E; V : E) is
begin
pragma Assert
@@ -4421,21 +4498,8 @@ package body Einfo is
--------------------
function Address_Clause (Id : E) return N is
- Ritem : Node_Id;
-
begin
- Ritem := First_Rep_Item (Id);
- while Present (Ritem) loop
- if Nkind (Ritem) = N_Attribute_Definition_Clause
- and then Chars (Ritem) = Name_Address
- then
- return Ritem;
- else
- Ritem := Next_Rep_Item (Ritem);
- end if;
- end loop;
-
- return Empty;
+ return Rep_Clause (Id, Name_Address);
end Address_Clause;
----------------------
@@ -4443,35 +4507,20 @@ package body Einfo is
----------------------
function Alignment_Clause (Id : E) return N is
- Ritem : Node_Id;
-
begin
- Ritem := First_Rep_Item (Id);
- while Present (Ritem) loop
- if Nkind (Ritem) = N_Attribute_Definition_Clause
- and then Chars (Ritem) = Name_Alignment
- then
- return Ritem;
- else
- Ritem := Next_Rep_Item (Ritem);
- end if;
- end loop;
-
- return Empty;
+ return Rep_Clause (Id, Name_Alignment);
end Alignment_Clause;
----------------------
-- Ancestor_Subtype --
----------------------
- function Ancestor_Subtype (Id : E) return E is
+ function Ancestor_Subtype (Id : E) return E is
begin
-- If this is first subtype, or is a base type, then there is no
-- ancestor subtype, so we return Empty to indicate this fact.
- if Is_First_Subtype (Id)
- or else Id = Base_Type (Id)
- then
+ if Is_First_Subtype (Id) or else Id = Base_Type (Id) then
return Empty;
end if;
@@ -4623,7 +4672,7 @@ package body Einfo is
then
Full_D := Parent (Full_View (Id));
- -- The full view may have been rewritten as an object renaming.
+ -- The full view may have been rewritten as an object renaming
if Nkind (Full_D) = N_Object_Renaming_Declaration then
return Name (Full_D);
@@ -4779,7 +4828,7 @@ package body Einfo is
Ent := Next_Entity (Ent);
end if;
- -- Skip all hidden stored discriminants if any.
+ -- Skip all hidden stored discriminants if any
while Present (Ent) loop
exit when Ekind (Ent) = E_Discriminant
@@ -5583,7 +5632,7 @@ package body Einfo is
-- E_Discriminant d2
-- ...
- -- so it is critical not to go past the leading discriminants.
+ -- so it is critical not to go past the leading discriminants
D : E := Id;
@@ -5903,23 +5952,19 @@ package body Einfo is
-----------------
function Size_Clause (Id : E) return N is
- Ritem : Node_Id;
-
begin
- Ritem := First_Rep_Item (Id);
- while Present (Ritem) loop
- if Nkind (Ritem) = N_Attribute_Definition_Clause
- and then Chars (Ritem) = Name_Size
- then
- return Ritem;
- else
- Ritem := Next_Rep_Item (Ritem);
- end if;
- end loop;
-
- return Empty;
+ return Rep_Clause (Id, Name_Size);
end Size_Clause;
+ ------------------------
+ -- Stream_Size_Clause --
+ ------------------------
+
+ function Stream_Size_Clause (Id : E) return N is
+ begin
+ return Rep_Clause (Id, Name_Stream_Size);
+ end Stream_Size_Clause;
+
------------------
-- Subtype_Kind --
------------------
@@ -6216,6 +6261,7 @@ package body Einfo is
W ("Has_Small_Clause", Flag67 (Id));
W ("Has_Specified_Layout", Flag100 (Id));
W ("Has_Storage_Size_Clause", Flag23 (Id));
+ W ("Has_Stream_Size_Clause", Flag184 (Id));
W ("Has_Subprogram_Descriptor", Flag93 (Id));
W ("Has_Task", Flag30 (Id));
W ("Has_Unchecked_Union", Flag123 (Id));
@@ -6228,6 +6274,7 @@ package body Einfo is
W ("Is_AST_Entry", Flag132 (Id));
W ("Is_Abstract", Flag19 (Id));
W ("Is_Access_Constant", Flag69 (Id));
+ W ("Is_Ada_2005", Flag185 (Id));
W ("Is_Aliased", Flag15 (Id));
W ("Is_Asynchronous", Flag81 (Id));
W ("Is_Atomic", Flag85 (Id));
@@ -6275,6 +6322,7 @@ package body Einfo is
W ("Is_Machine_Code_Subprogram", Flag137 (Id));
W ("Is_Non_Static_Subtype", Flag109 (Id));
W ("Is_Null_Init_Proc", Flag178 (Id));
+ W ("Is_Obsolescent", Flag153 (Id));
W ("Is_Optional_Parameter", Flag134 (Id));
W ("Is_Overriding_Operation", Flag39 (Id));
W ("Is_Package_Body_Entity", Flag160 (Id));
@@ -7207,6 +7255,9 @@ package body Einfo is
procedure Write_Field24_Name (Id : Entity_Id) is
begin
case Ekind (Id) is
+ when Subprogram_Kind =>
+ Write_Str ("Obsolescent_Warning");
+
when others =>
Write_Str ("Field24??");
end case;
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index c61ce663a28..573539fa1ba 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -41,6 +41,10 @@ package Einfo is
-- This package defines the annotations to the abstract syntax tree that
-- are needed to support semantic processing of an Ada compilation.
+-- Note that after editing this spec and the corresponding body it is
+-- required to run ceinfo to check the consistentcy of spec and body.
+-- See ceinfo.adb for more information about the checks made.
+
-- These annotations are for the most part attributes of declared entities,
-- and they correspond to conventional symbol table information. Other
-- attributes include sets of meanings for overloaded names, possible
@@ -527,7 +531,7 @@ package Einfo is
-- Component_Size (Uint22) [implementation base type only]
-- Present in array types. It contains the component size value for
--- the array. A value of zero means that the value is not yet set.
+-- the array. A value of No_Uint means that the value is not yet set.
-- The value can be set by the use of a component size clause, or
-- by the front end in package Layout, or by the backend. A negative
-- value is used to represent a value which is not known at compile
@@ -1517,6 +1521,10 @@ package Einfo is
-- of access types, this flag is present only in the root type, since a
-- storage size clause cannot be given to a derived type.
+-- Has_Stream_Size_Clause (Flag184)
+-- This flag is set on types which have a Stream_Size clause attribute.
+-- Used to prevent multiple Stream_Size clauses for a given entity.
+
-- Has_Subprogram_Descriptor (Flag93)
-- This flag is set on entities for which zero-cost exception subprogram
-- descriptors can be generated (subprograms and library level package
@@ -1650,6 +1658,10 @@ package Einfo is
-- Is_Access_Type (synthesized)
-- Applies to all entities, true for access types and subtypes
+-- Is_Ada_2005 (Flag185)
+-- Applies to all entities, true if a valid pragma Ada_05 applies to the
+-- entity, indicating that the entity is Ada 2005 only.
+
-- Is_Aliased (Flag15)
-- Present in objects whose declarations carry the keyword aliased,
-- and on record components that have the keyword.
@@ -2091,6 +2103,10 @@ package Einfo is
-- Applies to all entities, true for entities representing objects,
-- including generic formal parameters.
+-- Is_Obsolescent (Flag153)
+-- Present in subprogram entities. Set if a valid pragma Obsolescent
+-- applies to the subprogram.
+
-- Is_Optional_Parameter (Flag134)
-- Present in parameter entities. Set if the parameter is specified as
-- optional by use of a First_Optional_Parameter argument to one of the
@@ -2649,6 +2665,11 @@ package Einfo is
-- Applies to subprograms and subprogram types. Yields the number of
-- formals as a value of type Pos.
+-- Obsolescent_Warning (Node24)
+-- Present in subprogram entities. Set non-empty only if the pragma
+-- Obsolescent had a string argument, in which case it records the
+-- contents of the corresponding string literal node.
+
-- Original_Access_Type (Node21)
-- Present in access to subprogram types. Anonymous access to protected
-- subprogram types are replaced by an occurrence of an internal access
@@ -3912,6 +3933,7 @@ package Einfo is
-- Has_Qualified_Name (Flag161)
-- Has_Unknown_Discriminants (Flag72)
-- Has_Xref_Entry (Flag182)
+ -- Is_Ada_2005 (Flag185)
-- Is_Bit_Packed_Array (Flag122) (base type only)
-- Is_Child_Unit (Flag73)
-- Is_Compilation_Unit (Flag149)
@@ -4297,6 +4319,7 @@ package Einfo is
-- Generic_Renamings (Elist23) (for an instance)
-- Inner_Instances (Elist23) (for a generic function)
-- Privals_Chain (Elist23) (for a protected function)
+ -- Obsolescent_Warning (Node24)
-- Body_Needed_For_SAL (Flag40)
-- Elaboration_Entity_Required (Flag174)
-- Function_Returns_With_DSP (Flag169)
@@ -4321,6 +4344,7 @@ package Einfo is
-- Is_Instantiated (Flag126) (generic case only)
-- Is_Intrinsic_Subprogram (Flag64)
-- Is_Machine_Code_Subprogram (Flag137) (non-generic case only)
+ -- Is_Obsolescent (Flag153)
-- Is_Overriding_Operation (Flag39) (non-generic case only)
-- Is_Private_Descendant (Flag53)
-- Is_Pure (Flag44)
@@ -4542,6 +4566,7 @@ package Einfo is
-- Generic_Renamings (Elist23) (for an instance)
-- Inner_Instances (Elist23) (for a generic procedure)
-- Privals_Chain (Elist23) (for a protected procedure)
+ -- Obsolescent_Warning (Node24)
-- Body_Needed_For_SAL (Flag40)
-- Elaboration_Entity_Required (Flag174)
-- Function_Returns_With_DSP (Flag169) (always False for procedure)
@@ -4566,6 +4591,7 @@ package Einfo is
-- Is_Intrinsic_Subprogram (Flag64)
-- Is_Machine_Code_Subprogram (Flag137) (non-generic case only)
-- Is_Null_Init_Proc (Flag178)
+ -- Is_Obsolescent (Flag153)
-- Is_Overriding_Operation (Flag39) (non-generic case only)
-- Is_Private_Descendant (Flag53)
-- Is_Pure (Flag44)
@@ -5114,6 +5140,7 @@ package Einfo is
function Has_Small_Clause (Id : E) return B;
function Has_Specified_Layout (Id : E) return B;
function Has_Storage_Size_Clause (Id : E) return B;
+ function Has_Stream_Size_Clause (Id : E) return B;
function Has_Subprogram_Descriptor (Id : E) return B;
function Has_Task (Id : E) return B;
function Has_Unchecked_Union (Id : E) return B;
@@ -5130,6 +5157,7 @@ package Einfo is
function Is_AST_Entry (Id : E) return B;
function Is_Abstract (Id : E) return B;
function Is_Access_Constant (Id : E) return B;
+ function Is_Ada_2005 (Id : E) return B;
function Is_Aliased (Id : E) return B;
function Is_Asynchronous (Id : E) return B;
function Is_Atomic (Id : E) return B;
@@ -5172,6 +5200,7 @@ package Einfo is
function Is_Machine_Code_Subprogram (Id : E) return B;
function Is_Non_Static_Subtype (Id : E) return B;
function Is_Null_Init_Proc (Id : E) return B;
+ function Is_Obsolescent (Id : E) return B;
function Is_Optional_Parameter (Id : E) return B;
function Is_Package_Body_Entity (Id : E) return B;
function Is_Packed (Id : E) return B;
@@ -5225,6 +5254,7 @@ package Einfo is
function Normalized_Position (Id : E) return U;
function Normalized_Position_Max (Id : E) return U;
function Object_Ref (Id : E) return E;
+ function Obsolescent_Warning (Id : E) return N;
function Original_Access_Type (Id : E) return E;
function Original_Array_Type (Id : E) return E;
function Original_Record_Component (Id : E) return E;
@@ -5385,6 +5415,7 @@ package Einfo is
function Root_Type (Id : E) return E;
function Scope_Depth_Set (Id : E) return B;
function Size_Clause (Id : E) return N;
+ function Stream_Size_Clause (Id : E) return N;
function Tag_Component (Id : E) return E;
function Type_High_Bound (Id : E) return N;
function Type_Low_Bound (Id : E) return N;
@@ -5583,6 +5614,7 @@ package Einfo is
procedure Set_Has_Small_Clause (Id : E; V : B := True);
procedure Set_Has_Specified_Layout (Id : E; V : B := True);
procedure Set_Has_Storage_Size_Clause (Id : E; V : B := True);
+ procedure Set_Has_Stream_Size_Clause (Id : E; V : B := True);
procedure Set_Has_Subprogram_Descriptor (Id : E; V : B := True);
procedure Set_Has_Task (Id : E; V : B := True);
procedure Set_Has_Unchecked_Union (Id : E; V : B := True);
@@ -5599,6 +5631,7 @@ package Einfo is
procedure Set_Is_AST_Entry (Id : E; V : B := True);
procedure Set_Is_Abstract (Id : E; V : B := True);
procedure Set_Is_Access_Constant (Id : E; V : B := True);
+ procedure Set_Is_Ada_2005 (Id : E; V : B := True);
procedure Set_Is_Aliased (Id : E; V : B := True);
procedure Set_Is_Asynchronous (Id : E; V : B := True);
procedure Set_Is_Atomic (Id : E; V : B := True);
@@ -5646,6 +5679,7 @@ package Einfo is
procedure Set_Is_Machine_Code_Subprogram (Id : E; V : B := True);
procedure Set_Is_Non_Static_Subtype (Id : E; V : B := True);
procedure Set_Is_Null_Init_Proc (Id : E; V : B := True);
+ procedure Set_Is_Obsolescent (Id : E; V : B := True);
procedure Set_Is_Optional_Parameter (Id : E; V : B := True);
procedure Set_Is_Overriding_Operation (Id : E; V : B := True);
procedure Set_Is_Package_Body_Entity (Id : E; V : B := True);
@@ -5699,6 +5733,7 @@ package Einfo is
procedure Set_Normalized_Position (Id : E; V : U);
procedure Set_Normalized_Position_Max (Id : E; V : U);
procedure Set_Object_Ref (Id : E; V : E);
+ procedure Set_Obsolescent_Warning (Id : E; V : N);
procedure Set_Original_Access_Type (Id : E; V : E);
procedure Set_Original_Array_Type (Id : E; V : E);
procedure Set_Original_Record_Component (Id : E; V : E);
@@ -6109,6 +6144,7 @@ package Einfo is
pragma Inline (Has_Small_Clause);
pragma Inline (Has_Specified_Layout);
pragma Inline (Has_Storage_Size_Clause);
+ pragma Inline (Has_Stream_Size_Clause);
pragma Inline (Has_Subprogram_Descriptor);
pragma Inline (Has_Task);
pragma Inline (Has_Unchecked_Union);
@@ -6125,6 +6161,7 @@ package Einfo is
pragma Inline (Is_AST_Entry);
pragma Inline (Is_Abstract);
pragma Inline (Is_Access_Constant);
+ pragma Inline (Is_Ada_2005);
pragma Inline (Is_Access_Type);
pragma Inline (Is_Aliased);
pragma Inline (Is_Array_Type);
@@ -6194,6 +6231,7 @@ package Einfo is
pragma Inline (Is_Named_Number);
pragma Inline (Is_Non_Static_Subtype);
pragma Inline (Is_Null_Init_Proc);
+ pragma Inline (Is_Obsolescent);
pragma Inline (Is_Numeric_Type);
pragma Inline (Is_Object);
pragma Inline (Is_Optional_Parameter);
@@ -6261,6 +6299,7 @@ package Einfo is
pragma Inline (Normalized_Position);
pragma Inline (Normalized_Position_Max);
pragma Inline (Object_Ref);
+ pragma Inline (Obsolescent_Warning);
pragma Inline (Original_Access_Type);
pragma Inline (Original_Array_Type);
pragma Inline (Original_Record_Component);
@@ -6468,6 +6507,7 @@ package Einfo is
pragma Inline (Set_Is_AST_Entry);
pragma Inline (Set_Is_Abstract);
pragma Inline (Set_Is_Access_Constant);
+ pragma Inline (Set_Is_Ada_2005);
pragma Inline (Set_Is_Aliased);
pragma Inline (Set_Is_Asynchronous);
pragma Inline (Set_Is_Atomic);
@@ -6515,6 +6555,7 @@ package Einfo is
pragma Inline (Set_Is_Machine_Code_Subprogram);
pragma Inline (Set_Is_Non_Static_Subtype);
pragma Inline (Set_Is_Null_Init_Proc);
+ pragma Inline (Set_Is_Obsolescent);
pragma Inline (Set_Is_Optional_Parameter);
pragma Inline (Set_Is_Overriding_Operation);
pragma Inline (Set_Is_Package_Body_Entity);
@@ -6568,6 +6609,7 @@ package Einfo is
pragma Inline (Set_Normalized_Position);
pragma Inline (Set_Normalized_Position_Max);
pragma Inline (Set_Object_Ref);
+ pragma Inline (Set_Obsolescent_Warning);
pragma Inline (Set_Original_Access_Type);
pragma Inline (Set_Original_Array_Type);
pragma Inline (Set_Original_Record_Component);
diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb
index 9751d2a2ceb..6ddda3f0d45 100644
--- a/gcc/ada/errout.adb
+++ b/gcc/ada/errout.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -1090,7 +1090,9 @@ package body Errout is
-- Source_Reference. This ensures outputting the proper name of
-- the source file in this situation.
- if Num_SRef_Pragmas (Main_Source_File) /= 0 then
+ if Main_Source_File = No_Source_File or else
+ Num_SRef_Pragmas (Main_Source_File) /= 0
+ then
Current_Error_Source_File := No_Source_File;
end if;
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index fa99d8bd1ad..7c965cd2a7f 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -497,12 +497,15 @@ package body Exp_Attr is
-- Start of processing for Expand_N_Attribute_Reference
begin
- -- Do required validity checking
+ -- Do required validity checking, if enabled. Do not apply check to
+ -- output parameters of an Asm instruction, since the value of this
+ -- is not set till after the attribute has been elaborated.
- if Validity_Checks_On and Validity_Check_Operands then
+ if Validity_Checks_On and then Validity_Check_Operands
+ and then Id /= Attribute_Asm_Output
+ then
declare
Expr : Node_Id;
-
begin
Expr := First (Expressions (N));
while Present (Expr) loop
@@ -1901,7 +1904,7 @@ package body Exp_Attr is
-- Now we need to get the entity for the call, and construct
-- a function call node, where we preset a reference to Dnn
-- as the controlling argument (doing an unchecked
- -- conversion to the classwide tagged type to make it
+ -- conversion to the class-wide tagged type to make it
-- look like a real tagged object).
Fname := Find_Prim_Op (Rtyp, TSS_Stream_Input);
@@ -2398,8 +2401,6 @@ package body Exp_Attr is
Make_Integer_Literal (Loc,
Intval => 1))))))));
-
-
end if;
Analyze_And_Resolve (N, Btyp);
@@ -3153,7 +3154,7 @@ package body Exp_Attr is
Rewrite (Prefix (N), New_Occurrence_Of (Entity (Pref), Loc));
return;
- -- For x'Size applied to an object of a class wide type, transform
+ -- For x'Size applied to an object of a class-wide type, transform
-- X'Size into a call to the primitive operation _Size applied to X.
elsif Is_Class_Wide_Type (Ptyp) then
@@ -3232,8 +3233,7 @@ package body Exp_Attr is
-- Common processing for record and array component case
if Siz /= 0 then
- Rewrite (N,
- Make_Integer_Literal (Loc, Siz));
+ Rewrite (N, Make_Integer_Literal (Loc, Siz));
Analyze_And_Resolve (N, Typ);
@@ -3364,6 +3364,29 @@ package body Exp_Attr is
end if;
end Storage_Size;
+ -----------------
+ -- Stream_Size --
+ -----------------
+
+ when Attribute_Stream_Size => Stream_Size : declare
+ Ptyp : constant Entity_Id := Etype (Pref);
+ Size : Int;
+
+ begin
+ -- If we have a Stream_Size clause for this type use it, otherwise
+ -- the Stream_Size if the size of the type.
+
+ if Has_Stream_Size_Clause (Ptyp) then
+ Size := UI_To_Int
+ (Static_Integer (Expression (Stream_Size_Clause (Ptyp))));
+ else
+ Size := UI_To_Int (Esize (Ptyp));
+ end if;
+
+ Rewrite (N, Make_Integer_Literal (Loc, Intval => Size));
+ Analyze_And_Resolve (N, Typ);
+ end Stream_Size;
+
----------
-- Succ --
----------
@@ -3998,6 +4021,39 @@ package body Exp_Attr is
Analyze_And_Resolve (N, Standard_Wide_String);
end Wide_Image;
+ ---------------------
+ -- Wide_Wide_Image --
+ ---------------------
+
+ -- We expand typ'Wide_Wide_Image (X) into
+
+ -- String_To_Wide_Wide_String
+ -- (typ'Image (X), Wide_Character_Encoding_Method)
+
+ -- This works in all cases because String_To_Wide_Wide_String converts
+ -- any wide character escape sequences resulting from the Image call to
+ -- the proper Wide_Character equivalent
+
+ -- not quite right for typ = Wide_Wide_Character ???
+
+ when Attribute_Wide_Wide_Image => Wide_Wide_Image :
+ begin
+ Rewrite (N,
+ Make_Function_Call (Loc,
+ Name => New_Reference_To
+ (RTE (RE_String_To_Wide_Wide_String), Loc),
+ Parameter_Associations => New_List (
+ Make_Attribute_Reference (Loc,
+ Prefix => Pref,
+ Attribute_Name => Name_Image,
+ Expressions => Exprs),
+
+ Make_Integer_Literal (Loc,
+ Intval => Int (Wide_Character_Encoding_Method)))));
+
+ Analyze_And_Resolve (N, Standard_Wide_Wide_String);
+ end Wide_Wide_Image;
+
----------------
-- Wide_Value --
----------------
@@ -4036,6 +4092,53 @@ package body Exp_Attr is
Analyze_And_Resolve (N, Typ);
end Wide_Value;
+ ---------------------
+ -- Wide_Wide_Value --
+ ---------------------
+
+ -- We expand typ'Wide_Value_Value (X) into
+
+ -- typ'Value
+ -- (Wide_Wide_String_To_String (X, Wide_Character_Encoding_Method))
+
+ -- Wide_Wide_String_To_String is a runtime function that converts its
+ -- wide string argument to String, converting any non-translatable
+ -- characters into appropriate escape sequences. This preserves the
+ -- required semantics of Wide_Wide_Value in all cases, and results in a
+ -- very simple implementation approach.
+
+ -- It's not quite right where typ = Wide_Wide_Character, because the
+ -- encoding method may not cover the whole character type ???
+
+ when Attribute_Wide_Wide_Value => Wide_Wide_Value :
+ begin
+ Rewrite (N,
+ Make_Attribute_Reference (Loc,
+ Prefix => Pref,
+ Attribute_Name => Name_Value,
+
+ Expressions => New_List (
+ Make_Function_Call (Loc,
+ Name =>
+ New_Reference_To (RTE (RE_Wide_Wide_String_To_String), Loc),
+
+ Parameter_Associations => New_List (
+ Relocate_Node (First (Exprs)),
+ Make_Integer_Literal (Loc,
+ Intval => Int (Wide_Character_Encoding_Method)))))));
+
+ Analyze_And_Resolve (N, Typ);
+ end Wide_Wide_Value;
+
+ ---------------------
+ -- Wide_Wide_Width --
+ ---------------------
+
+ -- Wide_Wide_Width attribute is handled in separate unit Exp_Imgv
+
+ when Attribute_Wide_Wide_Width =>
+ Exp_Imgv.Expand_Width_Attribute (N, Wide_Wide);
+
----------------
-- Wide_Width --
----------------
@@ -4043,7 +4146,7 @@ package body Exp_Attr is
-- Wide_Width attribute is handled in separate unit Exp_Imgv
when Attribute_Wide_Width =>
- Exp_Imgv.Expand_Width_Attribute (N, Wide => True);
+ Exp_Imgv.Expand_Width_Attribute (N, Wide);
-----------
-- Width --
@@ -4052,7 +4155,7 @@ package body Exp_Attr is
-- Width attribute is handled in separate unit Exp_Imgv
when Attribute_Width =>
- Exp_Imgv.Expand_Width_Attribute (N, Wide => False);
+ Exp_Imgv.Expand_Width_Attribute (N, Normal);
-----------
-- Write --
@@ -4318,7 +4421,6 @@ package body Exp_Attr is
New_Reference_To (Base_Type (Etype (Prefix (N))), Loc),
Attribute_Name => Cnam)),
Reason => CE_Overflow_Check_Failed));
-
end Expand_Pred_Succ;
------------------------
@@ -4354,7 +4456,6 @@ package body Exp_Attr is
end if;
return Proc;
-
end Find_Inherited_TSS;
----------------------------
diff --git a/gcc/ada/exp_ch11.adb b/gcc/ada/exp_ch11.adb
index 80ac70db61a..35084860c8c 100644
--- a/gcc/ada/exp_ch11.adb
+++ b/gcc/ada/exp_ch11.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -921,7 +921,9 @@ package body Exp_Ch11 is
-- Lang component: 'A'
Append_To (L,
- Make_Character_Literal (Loc, Name_uA, Get_Char_Code ('A')));
+ Make_Character_Literal (Loc,
+ Chars => Name_uA,
+ Char_Literal_Value => UI_From_Int (Character'Pos ('A'))));
-- Name_Length component: Nam'Length
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index a09f7f57288..1d027d05176 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -60,7 +60,6 @@ with Stand; use Stand;
with Snames; use Snames;
with Tbuild; use Tbuild;
with Ttypes; use Ttypes;
-with Uintp; use Uintp;
with Validsw; use Validsw;
package body Exp_Ch3 is
@@ -487,7 +486,9 @@ package body Exp_Ch3 is
return New_List (
Make_Assignment_Statement (Loc,
Name => Comp,
- Expression => Get_Simple_Init_Val (Comp_Type, Loc)));
+ Expression =>
+ Get_Simple_Init_Val
+ (Comp_Type, Loc, Component_Size (A_Type))));
else
return
@@ -567,11 +568,12 @@ package body Exp_Ch3 is
-- apply in this case), and we must generate a procedure (even if it is
-- null) to satisfy the call in this case.
- -- Exception: do not build an array init_proc for a type whose root type
- -- is Standard.String or Standard.Wide_String, since there is no place
- -- to put the code, and in any case we handle initialization of such
- -- types (in the Initialize_Scalars case, that's the only time the issue
- -- arises) in a special manner anyway which does not need an init_proc.
+ -- Exception: do not build an array init_proc for a type whose root
+ -- type is Standard.String or Standard.Wide_[Wide_]String, since there
+ -- is no place to put the code, and in any case we handle initialization
+ -- of such types (in the Initialize_Scalars case, that's the only time
+ -- the issue arises) in a special manner anyway which does not need an
+ -- init_proc.
if Has_Non_Null_Base_Init_Proc (Comp_Type)
or else Needs_Simple_Initialization (Comp_Type)
@@ -579,7 +581,8 @@ package body Exp_Ch3 is
or else (not Restriction_Active (No_Initialize_Scalars)
and then Is_Public (A_Type)
and then Root_Type (A_Type) /= Standard_String
- and then Root_Type (A_Type) /= Standard_Wide_String)
+ and then Root_Type (A_Type) /= Standard_Wide_String
+ and then Root_Type (A_Type) /= Standard_Wide_Wide_String)
then
Proc_Id :=
Make_Defining_Identifier (Loc, Make_Init_Proc_Name (A_Type));
@@ -654,6 +657,7 @@ package body Exp_Ch3 is
-- Nothing to do if we already built a master entity for this scope
if not Has_Master_Entity (Scope (T)) then
+
-- first build the master entity
-- _Master : constant Master_Id := Current_Master.all;
-- and insert it just before the current declaration
@@ -1996,7 +2000,8 @@ package body Exp_Ch3 is
elsif Component_Needs_Simple_Initialization (Typ) then
Stmts :=
- Build_Assignment (Id, Get_Simple_Init_Val (Typ, Loc));
+ Build_Assignment
+ (Id, Get_Simple_Init_Val (Typ, Loc, Esize (Id)));
-- Nothing needed for this case
@@ -2058,7 +2063,8 @@ package body Exp_Ch3 is
elsif Component_Needs_Simple_Initialization (Typ) then
Append_List_To (Statement_List,
- Build_Assignment (Id, Get_Simple_Init_Val (Typ, Loc)));
+ Build_Assignment
+ (Id, Get_Simple_Init_Val (Typ, Loc, Esize (Id))));
end if;
end if;
@@ -3403,7 +3409,7 @@ package body Exp_Ch3 is
elsif Needs_Simple_Initialization (Typ) then
Set_No_Initialization (N, False);
- Set_Expression (N, Get_Simple_Init_Val (Typ, Loc));
+ Set_Expression (N, Get_Simple_Init_Val (Typ, Loc, Esize (Def_Id)));
Analyze_And_Resolve (Expression (N), Typ);
end if;
@@ -3877,13 +3883,14 @@ package body Exp_Ch3 is
then
null;
- -- We do not need an init proc for string or wide string, since
- -- the only time these need initialization in normalize or
+ -- We do not need an init proc for string or wide [wide] string,
+ -- since the only time these need initialization in normalize or
-- initialize scalars mode, and these types are treated specially
-- and do not need initialization procedures.
elsif Root_Type (Base) = Standard_String
or else Root_Type (Base) = Standard_Wide_String
+ or else Root_Type (Base) = Standard_Wide_Wide_String
then
null;
@@ -4878,14 +4885,87 @@ package body Exp_Ch3 is
-------------------------
function Get_Simple_Init_Val
- (T : Entity_Id;
- Loc : Source_Ptr) return Node_Id
+ (T : Entity_Id;
+ Loc : Source_Ptr;
+ Size : Uint := No_Uint) return Node_Id
is
Val : Node_Id;
- Typ : Node_Id;
Result : Node_Id;
Val_RE : RE_Id;
+ Size_To_Use : Uint;
+ -- This is the size to be used for computation of the appropriate
+ -- initial value for the Normalize_Scalars and Initialize_Scalars case.
+
+ Lo_Bound : Uint;
+ Hi_Bound : Uint;
+ -- These are the values computed by the procedure Check_Subtype_Bounds
+
+ procedure Check_Subtype_Bounds;
+ -- This procedure examines the subtype T, and its ancestor subtypes
+ -- and derived types to determine the best known information about
+ -- the bounds of the subtype. After the call Lo_Bound is set either
+ -- to No_Uint if no information can be determined, or to a value which
+ -- represents a known low bound, i.e. a valid value of the subtype can
+ -- not be less than this value. Hi_Bound is similarly set to a known
+ -- high bound (valid value cannot be greater than this).
+
+ --------------------------
+ -- Check_Subtype_Bounds --
+ --------------------------
+
+ procedure Check_Subtype_Bounds is
+ ST1 : Entity_Id;
+ ST2 : Entity_Id;
+ Lo : Node_Id;
+ Hi : Node_Id;
+ Loval : Uint;
+ Hival : Uint;
+
+ begin
+ Lo_Bound := No_Uint;
+ Hi_Bound := No_Uint;
+
+ -- Loop to climb ancestor subtypes and derived types
+
+ ST1 := T;
+ loop
+ if not Is_Discrete_Type (ST1) then
+ return;
+ end if;
+
+ Lo := Type_Low_Bound (ST1);
+ Hi := Type_High_Bound (ST1);
+
+ if Compile_Time_Known_Value (Lo) then
+ Loval := Expr_Value (Lo);
+
+ if Lo_Bound = No_Uint or else Lo_Bound < Loval then
+ Lo_Bound := Loval;
+ end if;
+ end if;
+
+ if Compile_Time_Known_Value (Hi) then
+ Hival := Expr_Value (Hi);
+
+ if Hi_Bound = No_Uint or else Hi_Bound > Hival then
+ Hi_Bound := Hival;
+ end if;
+ end if;
+
+ ST2 := Ancestor_Subtype (ST1);
+
+ if No (ST2) then
+ ST2 := Etype (ST1);
+ end if;
+
+ exit when ST1 = ST2;
+ ST1 := ST2;
+ end loop;
+ end Check_Subtype_Bounds;
+
+ -- Start of processing for Get_Simple_Init_Val
+
begin
-- For a private type, we should always have an underlying type
-- (because this was already checked in Needs_Simple_Initialization).
@@ -4893,7 +4973,7 @@ package body Exp_Ch3 is
-- do an Unchecked_Convert to the private type.
if Is_Private_Type (T) then
- Val := Get_Simple_Init_Val (Underlying_Type (T), Loc);
+ Val := Get_Simple_Init_Val (Underlying_Type (T), Loc, Size);
-- A special case, if the underlying value is null, then qualify
-- it with the underlying type, so that the null is properly typed
@@ -4927,46 +5007,98 @@ package body Exp_Ch3 is
elsif Is_Scalar_Type (T) then
pragma Assert (Init_Or_Norm_Scalars);
+ -- Compute size of object. If it is given by the caller, we can
+ -- use it directly, otherwise we use Esize (T) as an estimate. As
+ -- far as we know this covers all cases correctly.
+
+ if Size = No_Uint or else Size <= Uint_0 then
+ Size_To_Use := UI_Max (Uint_1, Esize (T));
+ else
+ Size_To_Use := Size;
+ end if;
+
+ -- Maximum size to use is 64 bits, since we will create values
+ -- of type Unsigned_64 and the range must fit this type.
+
+ if Size_To_Use /= No_Uint and then Size_To_Use > Uint_64 then
+ Size_To_Use := Uint_64;
+ end if;
+
+ -- Check known bounds of subtype
+
+ Check_Subtype_Bounds;
+
-- Processing for Normalize_Scalars case
if Normalize_Scalars then
- -- First prepare a value (out of subtype range if possible)
+ -- If zero is invalid, it is a convenient value to use that is
+ -- for sure an appropriate invalid value in all situations.
+
+ if Lo_Bound /= No_Uint and then Lo_Bound > Uint_0 then
+ Val := Make_Integer_Literal (Loc, 0);
+
+ -- Cases where all one bits is the appropriate invalid value
+
+ -- For modular types, all 1 bits is either invalid or valid. If
+ -- it is valid, then there is nothing that can be done since there
+ -- are no invalid values (we ruled out zero already).
+
+ -- For signed integer types that have no negative values, either
+ -- there is room for negative values, or there is not. If there
+ -- is, then all 1 bits may be interpretecd as minus one, which is
+ -- certainly invalid. Alternatively it is treated as the largest
+ -- positive value, in which case the observation for modular types
+ -- still applies.
+
+ -- For float types, all 1-bits is a NaN (not a number), which is
+ -- certainly an appropriately invalid value.
- if Is_Real_Type (T) or else Is_Integer_Type (T) then
- Val :=
- Make_Attribute_Reference (Loc,
- Prefix => New_Occurrence_Of (Base_Type (T), Loc),
- Attribute_Name => Name_First);
+ elsif Is_Unsigned_Type (T)
+ or else Is_Floating_Point_Type (T)
+ or else Is_Enumeration_Type (T)
+ then
+ Val := Make_Integer_Literal (Loc, 2 ** Size_To_Use - 1);
+
+ -- Resolve as Unsigned_64, because the largest number we
+ -- can generate is out of range of universal integer.
+
+ Analyze_And_Resolve (Val, RTE (RE_Unsigned_64));
- elsif Is_Modular_Integer_Type (T) then
- Val :=
- Make_Attribute_Reference (Loc,
- Prefix => New_Occurrence_Of (Base_Type (T), Loc),
- Attribute_Name => Name_Last);
+ -- Case of signed types
else
- pragma Assert (Is_Enumeration_Type (T));
-
- if Esize (T) <= 8 then
- Typ := RTE (RE_Unsigned_8);
- elsif Esize (T) <= 16 then
- Typ := RTE (RE_Unsigned_16);
- elsif Esize (T) <= 32 then
- Typ := RTE (RE_Unsigned_32);
- else
- Typ := RTE (RE_Unsigned_64);
- end if;
+ declare
+ Signed_Size : constant Uint :=
+ UI_Min (Uint_63, Size_To_Use - 1);
+
+ begin
+ -- Normally we like to use the most negative number. The
+ -- one exception is when this number is in the known subtype
+ -- range and the largest positive number is not in the known
+ -- subtype range.
+
+ -- For this exceptional case, use largest positive value
- Val :=
- Make_Attribute_Reference (Loc,
- Prefix => New_Occurrence_Of (Typ, Loc),
- Attribute_Name => Name_Last);
+ if Lo_Bound /= No_Uint and then Hi_Bound /= No_Uint
+ and then Lo_Bound <= (-(2 ** Signed_Size))
+ and then Hi_Bound < 2 ** Signed_Size
+ then
+ Val := Make_Integer_Literal (Loc, 2 ** Signed_Size - 1);
+
+ -- Normal case of largest negative value
+
+ else
+ Val := Make_Integer_Literal (Loc, -(2 ** Signed_Size));
+ end if;
+ end;
end if;
-- Here for Initialize_Scalars case
else
+ -- For float types, use float values from System.Scalar_Values
+
if Is_Floating_Point_Type (T) then
if Root_Type (T) = Standard_Short_Float then
Val_RE := RE_IS_Isf;
@@ -4978,25 +5110,42 @@ package body Exp_Ch3 is
Val_RE := RE_IS_Ill;
end if;
- elsif Is_Unsigned_Type (Base_Type (T)) then
- if Esize (T) = 8 then
+ -- If zero is invalid, use zero values from System.Scalar_Values
+
+ elsif Lo_Bound /= No_Uint and then Lo_Bound > Uint_0 then
+ if Size_To_Use <= 8 then
+ Val_RE := RE_IS_Iz1;
+ elsif Size_To_Use <= 16 then
+ Val_RE := RE_IS_Iz2;
+ elsif Size_To_Use <= 32 then
+ Val_RE := RE_IS_Iz4;
+ else
+ Val_RE := RE_IS_Iz8;
+ end if;
+
+ -- For unsigned, use unsigned values from System.Scalar_Values
+
+ elsif Is_Unsigned_Type (T) then
+ if Size_To_Use <= 8 then
Val_RE := RE_IS_Iu1;
- elsif Esize (T) = 16 then
+ elsif Size_To_Use <= 16 then
Val_RE := RE_IS_Iu2;
- elsif Esize (T) = 32 then
+ elsif Size_To_Use <= 32 then
Val_RE := RE_IS_Iu4;
- else pragma Assert (Esize (T) = 64);
+ else
Val_RE := RE_IS_Iu8;
end if;
- else -- signed type
- if Esize (T) = 8 then
+ -- For signed, use signed values from System.Scalar_Values
+
+ else
+ if Size_To_Use <= 8 then
Val_RE := RE_IS_Is1;
- elsif Esize (T) = 16 then
+ elsif Size_To_Use <= 16 then
Val_RE := RE_IS_Is2;
- elsif Esize (T) = 32 then
+ elsif Size_To_Use <= 32 then
Val_RE := RE_IS_Is4;
- else pragma Assert (Esize (T) = 64);
+ else
Val_RE := RE_IS_Is8;
end if;
end if;
@@ -5004,11 +5153,11 @@ package body Exp_Ch3 is
Val := New_Occurrence_Of (RTE (Val_RE), Loc);
end if;
- -- The final expression is obtained by doing an unchecked
- -- conversion of this result to the base type of the
- -- required subtype. We use the base type to avoid the
- -- unchecked conversion from chopping bits, and then we
- -- set Kill_Range_Check to preserve the "bad" value.
+ -- The final expression is obtained by doing an unchecked conversion
+ -- of this result to the base type of the required subtype. We use
+ -- the base type to avoid the unchecked conversion from chopping
+ -- bits, and then we set Kill_Range_Check to preserve the "bad"
+ -- value.
Result := Unchecked_Convert_To (Base_Type (T), Val);
@@ -5022,11 +5171,13 @@ package body Exp_Ch3 is
return Result;
- -- String or Wide_String (must have Initialize_Scalars set)
+ -- String or Wide_[Wide]_String (must have Initialize_Scalars set)
elsif Root_Type (T) = Standard_String
or else
Root_Type (T) = Standard_Wide_String
+ or else
+ Root_Type (T) = Standard_Wide_Wide_String
then
pragma Assert (Init_Or_Norm_Scalars);
@@ -5037,7 +5188,8 @@ package body Exp_Ch3 is
Choices => New_List (
Make_Others_Choice (Loc)),
Expression =>
- Get_Simple_Init_Val (Component_Type (T), Loc))));
+ Get_Simple_Init_Val
+ (Component_Type (T), Loc, Esize (Root_Type (T))))));
-- Access type is initialized to null
@@ -5570,7 +5722,8 @@ package body Exp_Ch3 is
elsif Init_Or_Norm_Scalars
and then
(Root_Type (T) = Standard_String
- or else Root_Type (T) = Standard_Wide_String)
+ or else Root_Type (T) = Standard_Wide_String
+ or else Root_Type (T) = Standard_Wide_Wide_String)
and then
(not Is_Itype (T)
or else Nkind (Associated_Node_For_Itype (T)) /= N_Aggregate)
diff --git a/gcc/ada/exp_ch3.ads b/gcc/ada/exp_ch3.ads
index 27cd7d8c1a3..59f8ef71008 100644
--- a/gcc/ada/exp_ch3.ads
+++ b/gcc/ada/exp_ch3.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -28,6 +28,7 @@
with Types; use Types;
with Elists; use Elists;
+with Uintp; use Uintp;
package Exp_Ch3 is
@@ -96,10 +97,16 @@ package Exp_Ch3 is
function Get_Simple_Init_Val
(T : Entity_Id;
- Loc : Source_Ptr) return Node_Id;
+ Loc : Source_Ptr;
+ Size : Uint := No_Uint) return Node_Id;
-- For a type which Needs_Simple_Initialization (see above), prepares
-- the tree for an expression representing the required initial value.
-- Loc is the source location used in constructing this tree which is
- -- returned as the result of the call.
+ -- returned as the result of the call. The Size parameter indicates the
+ -- target size of the object if it is known (indicated by a value that
+ -- is not No_Uint and is greater than zero). If Size is not given (Size
+ -- set to No_Uint, or non-positive), then the Esize of T is used as an
+ -- estimate of the Size. The object size is needed to prepare a known
+ -- invalid value for use by Normalize_Scalars.
end Exp_Ch3;
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 0b6447aad4e..6305f5dd746 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -1733,7 +1733,7 @@ package body Exp_Ch6 is
and then Present (Controlling_Argument (N))
and then not Java_VM
then
- Expand_Dispatch_Call (N);
+ Expand_Dispatching_Call (N);
-- The following return is worrisome. Is it really OK to
-- skip all remaining processing in this procedure ???
diff --git a/gcc/ada/exp_dbug.adb b/gcc/ada/exp_dbug.adb
index f2284d408e8..f0f7f0a0ad4 100644
--- a/gcc/ada/exp_dbug.adb
+++ b/gcc/ada/exp_dbug.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1996-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 1996-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- --
@@ -793,8 +793,7 @@ package body Exp_Dbug is
elsif Nkind (Choice) = N_Character_Literal
and then No (Entity (Choice))
then
- Add_Uint_To_Buffer
- (UI_From_Int (Int (Char_Literal_Value (Choice))));
+ Add_Uint_To_Buffer (Char_Literal_Value (Choice));
else
declare
diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb
index fb8f6be31e0..9cc9fb0098e 100644
--- a/gcc/ada/exp_disp.adb
+++ b/gcc/ada/exp_disp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -142,11 +142,11 @@ package body Exp_Disp is
-- Check if the type has a private view or if the public view appears
-- in the visible part of a package spec.
- --------------------------
- -- Expand_Dispatch_Call --
- --------------------------
+ -----------------------------
+ -- Expand_Dispatching_Call --
+ -----------------------------
- procedure Expand_Dispatch_Call (Call_Node : Node_Id) is
+ procedure Expand_Dispatching_Call (Call_Node : Node_Id) is
Loc : constant Source_Ptr := Sloc (Call_Node);
Call_Typ : constant Entity_Id := Etype (Call_Node);
@@ -154,21 +154,25 @@ package body Exp_Disp is
Param_List : constant List_Id := Parameter_Associations (Call_Node);
Subp : Entity_Id := Entity (Name (Call_Node));
- CW_Typ : Entity_Id;
- New_Call : Node_Id;
- New_Call_Name : Node_Id;
- New_Params : List_Id := No_List;
- Param : Node_Id;
- Res_Typ : Entity_Id;
- Subp_Ptr_Typ : Entity_Id;
- Subp_Typ : Entity_Id;
- Typ : Entity_Id;
- Eq_Prim_Op : Entity_Id := Empty;
+ CW_Typ : Entity_Id;
+ New_Call : Node_Id;
+ New_Call_Name : Node_Id;
+ New_Params : List_Id := No_List;
+ Param : Node_Id;
+ Res_Typ : Entity_Id;
+ Subp_Ptr_Typ : Entity_Id;
+ Subp_Typ : Entity_Id;
+ Typ : Entity_Id;
+ Eq_Prim_Op : Entity_Id := Empty;
+ Controlling_Tag : Node_Id;
function New_Value (From : Node_Id) return Node_Id;
-- From is the original Expression. New_Value is equivalent to a call
-- to Duplicate_Subexpr with an explicit dereference when From is an
- -- access parameter
+ -- access parameter.
+
+ function Controlling_Type (Subp : Entity_Id) return Entity_Id;
+ -- Returns the tagged type for which Subp is a primitive subprogram
---------------
-- New_Value --
@@ -176,7 +180,6 @@ package body Exp_Disp is
function New_Value (From : Node_Id) return Node_Id is
Res : constant Node_Id := Duplicate_Subexpr (From);
-
begin
if Is_Access_Type (Etype (From)) then
return Make_Explicit_Dereference (Sloc (From), Res);
@@ -185,10 +188,45 @@ package body Exp_Disp is
end if;
end New_Value;
- -- Start of processing for Expand_Dispatch_Call
+ ----------------------
+ -- Controlling_Type --
+ ----------------------
+
+ function Controlling_Type (Subp : Entity_Id) return Entity_Id is
+ begin
+ if Ekind (Subp) = E_Function
+ and then Has_Controlling_Result (Subp)
+ then
+ return Base_Type (Etype (Subp));
+
+ else
+ declare
+ Formal : Entity_Id := First_Formal (Subp);
+
+ begin
+ while Present (Formal) loop
+ if Is_Controlling_Formal (Formal) then
+ if Is_Access_Type (Etype (Formal)) then
+ return Base_Type (Designated_Type (Etype (Formal)));
+ else
+ return Base_Type (Etype (Formal));
+ end if;
+ end if;
+
+ Next_Formal (Formal);
+ end loop;
+ end;
+ end if;
+
+ -- Controlling type not found (should never happen)
+
+ return Empty;
+ end Controlling_Type;
+
+ -- Start of processing for Expand_Dispatching_Call
begin
- -- If this is an inherited operation that was overriden, the body
+ -- If this is an inherited operation that was overridden, the body
-- that is being called is its alias.
if Present (Alias (Subp))
@@ -198,17 +236,31 @@ package body Exp_Disp is
Subp := Alias (Subp);
end if;
- -- Expand_Dispatch is called directly from the semantics, so we need
- -- a check to see whether expansion is active before proceeding
+ -- Expand_Dispatching_Call is called directly from the semantics,
+ -- so we need a check to see whether expansion is active before
+ -- proceeding.
if not Expander_Active then
return;
end if;
- -- Definition of the ClassWide Type and the Tagged type
+ -- Definition of the class-wide type and the tagged type
+
+ -- If the controlling argument is itself a tag rather than a tagged
+ -- object, then use the class-wide type associated with the subprogram's
+ -- controlling type. This case can occur when a call to an inherited
+ -- primitive has an actual that originated from a default parameter
+ -- given by a tag-indeterminate call and when there is no other
+ -- controlling argument providing the tag (AI-239 requires dispatching).
+ -- This capability of dispatching directly by tag is also needed by the
+ -- implementation of AI-260 (for the generic dispatching constructors).
- if Is_Access_Type (Etype (Ctrl_Arg)) then
+ if Etype (Ctrl_Arg) = RTE (RE_Tag) then
+ CW_Typ := Class_Wide_Type (Controlling_Type (Subp));
+
+ elsif Is_Access_Type (Etype (Ctrl_Arg)) then
CW_Typ := Designated_Type (Etype (Ctrl_Arg));
+
else
CW_Typ := Etype (Ctrl_Arg);
end if;
@@ -291,7 +343,7 @@ package body Exp_Disp is
elsif No (Find_Controlling_Arg (Param)) then
Append_To (New_Params, Relocate_Node (Param));
- -- No tag check for function dispatching on result it the
+ -- No tag check for function dispatching on result if the
-- Tag given by the context is this one
elsif Find_Controlling_Arg (Param) = Ctrl_Arg then
@@ -362,7 +414,7 @@ package body Exp_Disp is
if Etype (Subp) = Typ then
Res_Typ := CW_Typ;
else
- Res_Typ := Etype (Subp);
+ Res_Typ := Etype (Subp);
end if;
Subp_Typ := Create_Itype (E_Subprogram_Type, Call_Node);
@@ -389,9 +441,9 @@ package body Exp_Disp is
Set_Scope (New_Formal, Subp_Typ);
-- Change all the controlling argument types to be class-wide
- -- to avoid a recursion in dispatching
+ -- to avoid a recursion in dispatching.
- if Is_Controlling_Actual (Param) then
+ if Is_Controlling_Formal (New_Formal) then
Set_Etype (New_Formal, Etype (Param));
end if;
@@ -443,6 +495,20 @@ package body Exp_Disp is
Set_Etype (Subp_Ptr_Typ, Subp_Ptr_Typ);
Set_Directly_Designated_Type (Subp_Ptr_Typ, Subp_Typ);
+ -- If the controlling argument is a value of type Ada.Tag then
+ -- use it directly. Otherwise, the tag must be extracted from
+ -- the controlling object.
+
+ if Etype (Ctrl_Arg) = RTE (RE_Tag) then
+ Controlling_Tag := Duplicate_Subexpr (Ctrl_Arg);
+
+ else
+ Controlling_Tag :=
+ Make_Selected_Component (Loc,
+ Prefix => Duplicate_Subexpr_Move_Checks (Ctrl_Arg),
+ Selector_Name => New_Reference_To (DTC_Entity (Subp), Loc));
+ end if;
+
-- Generate:
-- Subp_Ptr_Typ!(Get_Prim_Op_Address (Ctrl._Tag, pos));
@@ -454,9 +520,7 @@ package body Exp_Disp is
-- Vptr
- Make_Selected_Component (Loc,
- Prefix => Duplicate_Subexpr_Move_Checks (Ctrl_Arg),
- Selector_Name => New_Reference_To (DTC_Entity (Subp), Loc)),
+ Controlling_Tag,
-- Position
@@ -468,11 +532,10 @@ package body Exp_Disp is
Name => New_Call_Name,
Parameter_Associations => New_Params);
- -- if this is a dispatching "=", we must first compare the tags so
+ -- If this is a dispatching "=", we must first compare the tags so
-- we generate: x.tag = y.tag and then x = y
if Subp = Eq_Prim_Op then
-
Param := First_Actual (Call_Node);
New_Call :=
Make_And_Then (Loc,
@@ -504,7 +567,7 @@ package body Exp_Disp is
Rewrite (Call_Node, New_Call);
Analyze_And_Resolve (Call_Node, Call_Typ);
- end Expand_Dispatch_Call;
+ end Expand_Dispatching_Call;
-------------
-- Fill_DT --
@@ -651,6 +714,11 @@ package body Exp_Disp is
-- or
-- DT_Ptr : Vtable_Ptr := Vtable_Ptr!(DT'Address); CPP case
+ -- According to the C++ ABI, the base of the vtable is located
+ -- after the following prologue: Offset_To_Top, Typeinfo_Ptr.
+ -- Hence, move the pointer to the base of the vtable down, after
+ -- this prologue.
+
Append_To (Result,
Make_Object_Declaration (Loc,
Defining_Identifier => DT_Ptr,
@@ -658,9 +726,15 @@ package body Exp_Disp is
Object_Definition => New_Reference_To (Generalized_Tag, Loc),
Expression =>
Unchecked_Convert_To (Generalized_Tag,
- Make_Attribute_Reference (Loc,
- Prefix => New_Reference_To (DT, Loc),
- Attribute_Name => Name_Address))));
+ Make_Op_Add (Loc,
+ Left_Opnd =>
+ Unchecked_Convert_To (RTE (RE_Storage_Offset),
+ Make_Attribute_Reference (Loc,
+ Prefix => New_Reference_To (DT, Loc),
+ Attribute_Name => Name_Address)),
+ Right_Opnd =>
+ Make_DT_Access_Action (Typ,
+ DT_Prologue_Size, No_List)))));
-- Generate code to define the boolean that controls registration, in
-- order to avoid multiple registrations for tagged types defined in
diff --git a/gcc/ada/exp_disp.ads b/gcc/ada/exp_disp.ads
index aedda2d7d01..34bcffc5c59 100644
--- a/gcc/ada/exp_disp.ads
+++ b/gcc/ada/exp_disp.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2001 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- --
@@ -76,7 +76,7 @@ package Exp_Disp is
-- Class case check that no pragma CPP_Virtual is missing and that the
-- DT_Position are coherent
- procedure Expand_Dispatch_Call (Call_Node : Node_Id);
+ procedure Expand_Dispatching_Call (Call_Node : Node_Id);
-- Expand the call to the operation through the dispatch table and perform
-- the required tag checks when appropriate. For CPP types the call is
-- done through the Vtable (tag checks are not relevant)
diff --git a/gcc/ada/exp_dist.adb b/gcc/ada/exp_dist.adb
index 63c6d3cb21f..4c756b13317 100644
--- a/gcc/ada/exp_dist.adb
+++ b/gcc/ada/exp_dist.adb
@@ -358,7 +358,7 @@ package body Exp_Dist is
-- Mapping between a RCI subprogram and the corresponding calling stubs
procedure Add_Stub_Type
- (Designated_Type : Entity_Id;
+ (Designated_Type : Entity_Id;
RACW_Type : Entity_Id;
Decls : List_Id;
Stub_Type : out Entity_Id;
@@ -551,10 +551,18 @@ package body Exp_Dist is
-- class-wide type before doing the real call using any of the RACW type
-- pointing on the designated type.
+ procedure Specific_Add_Obj_RPC_Receiver_Completion
+ (Loc : Source_Ptr;
+ Decls : List_Id;
+ RPC_Receiver : Entity_Id;
+ Stub_Elements : Stub_Structure);
+ -- Add the necessary code to Decls after the completion of generation
+ -- of the RACW RPC receiver described by Stub_Elements.
+
procedure Specific_Add_Receiving_Stubs_To_Declarations
(Pkg_Spec : Node_Id;
Decls : List_Id);
- -- Add receiving stubs to the declarative part
+ -- Add receiving stubs to the declarative part of an RCI unit
package GARLIC_Support is
@@ -611,6 +619,12 @@ package body Exp_Dist is
RACW_Type : Entity_Id := Empty;
Parent_Primitive : Entity_Id := Empty) return Node_Id;
+ procedure Add_Obj_RPC_Receiver_Completion
+ (Loc : Source_Ptr;
+ Decls : List_Id;
+ RPC_Receiver : Entity_Id;
+ Stub_Elements : Stub_Structure);
+
procedure Add_Receiving_Stubs_To_Declarations
(Pkg_Spec : Node_Id;
Decls : List_Id);
@@ -680,6 +694,12 @@ package body Exp_Dist is
RACW_Type : Entity_Id := Empty;
Parent_Primitive : Entity_Id := Empty) return Node_Id;
+ procedure Add_Obj_RPC_Receiver_Completion
+ (Loc : Source_Ptr;
+ Decls : List_Id;
+ RPC_Receiver : Entity_Id;
+ Stub_Elements : Stub_Structure);
+
procedure Add_Receiving_Stubs_To_Declarations
(Pkg_Spec : Node_Id;
Decls : List_Id);
@@ -1108,6 +1128,7 @@ package body Exp_Dist is
RPC_Receiver : Entity_Id;
RPC_Receiver_Statements : List_Id;
RPC_Receiver_Case_Alternatives : constant List_Id := New_List;
+ RPC_Receiver_Elsif_Parts : List_Id;
RPC_Receiver_Request : Entity_Id;
RPC_Receiver_Subp_Id : Entity_Id;
RPC_Receiver_Subp_Index : Entity_Id;
@@ -1145,6 +1166,20 @@ package body Exp_Dist is
Subp_Index => RPC_Receiver_Subp_Index,
Stmts => RPC_Receiver_Statements,
Decl => RPC_Receiver_Decl);
+
+ if Get_PCS_Name = Name_PolyORB_DSA then
+
+ -- For the case of PolyORB, we need to map a textual operation
+ -- name into a primitive index. Currently we do so using a
+ -- simple sequence of string comparisons.
+
+ RPC_Receiver_Elsif_Parts := New_List;
+ Append_To (RPC_Receiver_Statements,
+ Make_Implicit_If_Statement (Designated_Type,
+ Condition => New_Occurrence_Of (Standard_False, Loc),
+ Then_Statements => New_List,
+ Elsif_Parts => RPC_Receiver_Elsif_Parts));
+ end if;
end if;
-- Build callers, receivers for every primitive operations and a RPC
@@ -1238,6 +1273,26 @@ package body Exp_Dist is
-- Add a case alternative to the receiver
+ if Get_PCS_Name = Name_PolyORB_DSA then
+ Append_To (RPC_Receiver_Elsif_Parts,
+ Make_Elsif_Part (Loc,
+ Condition =>
+ Make_Function_Call (Loc,
+ Name =>
+ New_Occurrence_Of (
+ RTE (RE_Caseless_String_Eq), Loc),
+ Parameter_Associations => New_List (
+ New_Occurrence_Of (RPC_Receiver_Subp_Id, Loc),
+ Make_String_Literal (Loc, Subp_Str))),
+ Then_Statements => New_List (
+ Make_Assignment_Statement (Loc,
+ Name => New_Occurrence_Of (
+ RPC_Receiver_Subp_Index, Loc),
+ Expression =>
+ Make_Integer_Literal (Loc,
+ Current_Primitive_Number)))));
+ end if;
+
Append_To (RPC_Receiver_Case_Alternatives,
Make_Case_Statement_Alternative (Loc,
Discrete_Choices => New_List (
@@ -1275,21 +1330,8 @@ package body Exp_Dist is
Alternatives => RPC_Receiver_Case_Alternatives));
Append_To (Decls, RPC_Receiver_Decl);
-
- -- The RPC receiver body should not be the completion of the
- -- declaration recorded in the stub structure, because then the
- -- occurrences of the formal parameters within the body should
- -- refer to the entities from the declaration, not from the
- -- completion, to which we do not have easy access. Instead, the
- -- RPC receiver body acts as its own declaration, and the RPC
- -- receiver declaration is completed by a renaming-as-body.
-
- Append_To (Decls,
- Make_Subprogram_Renaming_Declaration (Loc,
- Specification =>
- Copy_Specification (Loc,
- Specification (Stub_Elements.RPC_Receiver_Decl)),
- Name => New_Occurrence_Of (RPC_Receiver, Loc)));
+ Specific_Add_Obj_RPC_Receiver_Completion (Loc,
+ Decls, RPC_Receiver, Stub_Elements);
end if;
-- Do not analyze RPC receiver at this stage since it will otherwise
@@ -2170,7 +2212,12 @@ package body Exp_Dist is
E : Entity_Id) return Node_Id
is
begin
- return Make_Integer_Literal (Loc, Get_Subprogram_Id (E));
+ case Get_PCS_Name is
+ when Name_PolyORB_DSA =>
+ return Make_String_Literal (Loc, Get_Subprogram_Id (E));
+ when others =>
+ return Make_Integer_Literal (Loc, Get_Subprogram_Id (E));
+ end case;
end Build_Subprogram_Id;
------------------------
@@ -2442,7 +2489,12 @@ package body Exp_Dist is
begin
if Nkind (Unit_Node) = N_Package_Declaration then
Spec := Specification (Unit_Node);
- Decls := Visible_Declarations (Spec);
+ Decls := Private_Declarations (Spec);
+
+ if No (Decls) then
+ Decls := Visible_Declarations (Spec);
+ end if;
+
New_Scope (Scope_Of_Spec (Spec));
Specific_Add_Receiving_Stubs_To_Declarations (Spec, Decls);
@@ -2497,6 +2549,32 @@ package body Exp_Dist is
procedure Add_RAS_Access_TSS (N : Node_Id);
-- Add a subprogram body for RAS Access TSS
+ -------------------------------------
+ -- Add_Obj_RPC_Receiver_Completion --
+ -------------------------------------
+
+ procedure Add_Obj_RPC_Receiver_Completion
+ (Loc : Source_Ptr;
+ Decls : List_Id;
+ RPC_Receiver : Entity_Id;
+ Stub_Elements : Stub_Structure) is
+ begin
+ -- The RPC receiver body should not be the completion of the
+ -- declaration recorded in the stub structure, because then the
+ -- occurrences of the formal parameters within the body should
+ -- refer to the entities from the declaration, not from the
+ -- completion, to which we do not have easy access. Instead, the
+ -- RPC receiver body acts as its own declaration, and the RPC
+ -- receiver declaration is completed by a renaming-as-body.
+
+ Append_To (Decls,
+ Make_Subprogram_Renaming_Declaration (Loc,
+ Specification =>
+ Copy_Specification (Loc,
+ Specification (Stub_Elements.RPC_Receiver_Decl)),
+ Name => New_Occurrence_Of (RPC_Receiver, Loc)));
+ end Add_Obj_RPC_Receiver_Completion;
+
-----------------------
-- Add_RACW_Features --
-----------------------
@@ -5051,6 +5129,52 @@ package body Exp_Dist is
procedure Add_RAS_Access_TSS (N : Node_Id);
-- Add a subprogram body for RAS Access TSS
+ -------------------------------------
+ -- Add_Obj_RPC_Receiver_Completion --
+ -------------------------------------
+
+ procedure Add_Obj_RPC_Receiver_Completion
+ (Loc : Source_Ptr;
+ Decls : List_Id;
+ RPC_Receiver : Entity_Id;
+ Stub_Elements : Stub_Structure)
+ is
+ Desig : constant Entity_Id :=
+ Etype (Designated_Type (Stub_Elements.RACW_Type));
+ begin
+ Append_To (Decls,
+ Make_Procedure_Call_Statement (Loc,
+ Name =>
+ New_Occurrence_Of (
+ RTE (RE_Register_Obj_Receiving_Stub), Loc),
+
+ Parameter_Associations => New_List (
+
+ -- Name
+
+ Make_String_Literal (Loc,
+ Full_Qualified_Name (Desig)),
+
+ -- Handler
+
+ Make_Attribute_Reference (Loc,
+ Prefix =>
+ New_Occurrence_Of (
+ Defining_Unit_Name (Parent (RPC_Receiver)), Loc),
+ Attribute_Name =>
+ Name_Access),
+
+ -- Receiver
+
+ Make_Attribute_Reference (Loc,
+ Prefix =>
+ New_Occurrence_Of (
+ Defining_Identifier (
+ Stub_Elements.RPC_Receiver_Decl), Loc),
+ Attribute_Name =>
+ Name_Access))));
+ end Add_Obj_RPC_Receiver_Completion;
+
-----------------------
-- Add_RACW_Features --
-----------------------
@@ -8137,6 +8261,9 @@ package body Exp_Dist is
elsif U_Type = Standard_Wide_Character then
Lib_RE := RE_FA_WC;
+ elsif U_Type = Standard_Wide_Wide_Character then
+ Lib_RE := RE_FA_WWC;
+
-- Floating point types
elsif U_Type = Standard_Short_Float then
@@ -8915,6 +9042,9 @@ package body Exp_Dist is
elsif U_Type = Standard_Wide_Character then
Lib_RE := RE_TA_WC;
+ elsif U_Type = Standard_Wide_Wide_Character then
+ Lib_RE := RE_TA_WWC;
+
-- Floating point types
elsif U_Type = Standard_Short_Float then
@@ -9619,6 +9749,9 @@ package body Exp_Dist is
elsif U_Type = Standard_Wide_Character then
Lib_RE := RE_TC_WC;
+ elsif U_Type = Standard_Wide_Wide_Character then
+ Lib_RE := RE_TC_WWC;
+
-- Floating point types
elsif U_Type = Standard_Short_Float then
@@ -10664,6 +10797,26 @@ package body Exp_Dist is
Set_TSS (Typ, Snam);
end Set_Renaming_TSS;
+ ----------------------------------------------
+ -- Specific_Add_Obj_RPC_Receiver_Completion --
+ ----------------------------------------------
+
+ procedure Specific_Add_Obj_RPC_Receiver_Completion
+ (Loc : Source_Ptr;
+ Decls : List_Id;
+ RPC_Receiver : Entity_Id;
+ Stub_Elements : Stub_Structure) is
+ begin
+ case Get_PCS_Name is
+ when Name_PolyORB_DSA =>
+ PolyORB_Support.Add_Obj_RPC_Receiver_Completion (Loc,
+ Decls, RPC_Receiver, Stub_Elements);
+ when others =>
+ GARLIC_Support.Add_Obj_RPC_Receiver_Completion (Loc,
+ Decls, RPC_Receiver, Stub_Elements);
+ end case;
+ end Specific_Add_Obj_RPC_Receiver_Completion;
+
--------------------------------
-- Specific_Add_RACW_Features --
--------------------------------
@@ -10674,8 +10827,7 @@ package body Exp_Dist is
Stub_Type : Entity_Id;
Stub_Type_Access : Entity_Id;
RPC_Receiver_Decl : Node_Id;
- Declarations : List_Id)
- is
+ Declarations : List_Id) is
begin
case Get_PCS_Name is
when Name_PolyORB_DSA =>
diff --git a/gcc/ada/exp_imgv.adb b/gcc/ada/exp_imgv.adb
index 5989cbc3b5c..65bcc3d3821 100644
--- a/gcc/ada/exp_imgv.adb
+++ b/gcc/ada/exp_imgv.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -194,6 +194,11 @@ package body Exp_Imgv is
-- tv = Wide_Character (Expr)
-- pm = Wide_Character_Encoding_Method
+ -- For types whose root type is Wide_Wide_Character
+ -- xx = Wide_Wide_haracter
+ -- tv = Wide_Wide_Character (Expr)
+ -- pm = Wide_Character_Encoding_Method
+
-- For floating-point types
-- xx = Floating_Point
-- tv = Long_Long_Float (Expr)
@@ -254,6 +259,10 @@ package body Exp_Imgv is
Imid := RE_Image_Wide_Character;
Tent := Rtyp;
+ elsif Rtyp = Standard_Wide_Wide_Character then
+ Imid := RE_Image_Wide_Wide_Character;
+ Tent := Rtyp;
+
elsif Is_Signed_Integer_Type (Rtyp) then
if Esize (Rtyp) <= Esize (Standard_Integer) then
Imid := RE_Image_Integer;
@@ -382,9 +391,11 @@ package body Exp_Imgv is
Prefix => New_Reference_To (Ptyp, Loc),
Attribute_Name => Name_Aft));
- -- For wide character, append encoding method
+ -- For wide [wide] character, append encoding method
- elsif Rtyp = Standard_Wide_Character then
+ elsif Rtyp = Standard_Wide_Character
+ or else Rtyp = Standard_Wide_Wide_Character
+ then
Append_To (Arglist,
Make_Integer_Literal (Loc,
Intval => Int (Wide_Character_Encoding_Method)));
@@ -445,6 +456,10 @@ package body Exp_Imgv is
-- Value_Wide_Character (X, Wide_Character_Encoding_Method)
+ -- For types derived from Wide_Wide_Character, typ'Value (X) expands into
+
+ -- Value_Wide_Wide_Character (X, Wide_Character_Encoding_Method)
+
-- For decimal types with size <= Integer'Size, typ'Value (X)
-- expands into
@@ -455,7 +470,7 @@ package body Exp_Imgv is
-- btyp?(Value_Long_Long_Decimal (X, typ'Scale))
-- For enumeration types other than those derived from types Boolean,
- -- Character, and Wide_Character in Standard, typ'Value (X) expands to:
+ -- Character, Wide_[Wide_]Character in Standard, typ'Value (X) expands to:
-- Enum'Val (Value_Enumeration_NN (typS, typI'Address, Num, X))
@@ -493,6 +508,12 @@ package body Exp_Imgv is
Make_Integer_Literal (Loc,
Intval => Int (Wide_Character_Encoding_Method)));
+ elsif Rtyp = Standard_Wide_Wide_Character then
+ Vid := RE_Value_Wide_Wide_Character;
+ Append_To (Args,
+ Make_Integer_Literal (Loc,
+ Intval => Int (Wide_Character_Encoding_Method)));
+
elsif Rtyp = Base_Type (Standard_Short_Short_Integer)
or else Rtyp = Base_Type (Standard_Short_Integer)
or else Rtyp = Base_Type (Standard_Integer)
@@ -624,20 +645,28 @@ package body Exp_Imgv is
-- Expand_Width_Attribute --
----------------------------
- -- The processing here also handles the case of Wide_Width. With the
+ -- The processing here also handles the case of Wide_[Wide_]Width. With the
-- exceptions noted, the processing is identical
-- For scalar types derived from Boolean, character and integer types
-- in package Standard. Note that the Width attribute is computed at
-- compile time for all cases except those involving non-static sub-
- -- types. For such subtypes, typ'Width and typ'Wide_Width expands into:
+ -- types. For such subtypes, typ'[Wide_[Wide_]]Width expands into:
-- Result_Type (xx (yy (Ptyp'First), yy (Ptyp'Last)))
-- where
-- For types whose root type is Character
- -- xx = Width_Character (Wide_Width_Character for Wide_Width case)
+ -- xx = Width_Character
+ -- yy = Character
+
+ -- For types whose root type is Wide_Character
+ -- xx = Wide_Width_Character
+ -- yy = Character
+
+ -- For types whose root type is Wide_Wide_Character
+ -- xx = Wide_Wide_Width_Character
-- yy = Character
-- For types whose root type is Boolean
@@ -664,8 +693,37 @@ package body Exp_Imgv is
-- Result_Type (Wide_Width_Wide_Character (
-- Wide_Character (typ'First),
-- Wide_Character (typ'Last));
+ -- Wide_Character_Encoding_Method);
+
+ -- and typ'Wide_Wide_Width expands into
+
+ -- Result_Type (Wide_Wide_Width_Wide_Character (
+ -- Wide_Character (typ'First),
+ -- Wide_Character (typ'Last));
+ -- Wide_Character_Encoding_Method);
+
+ -- For types derived from Wide_Wide_Character, typ'Width expands into
+
+ -- Result_Type (Width_Wide_Wide_Character (
+ -- Wide_Wide_Character (typ'First),
+ -- Wide_Wide_Character (typ'Last),
+ -- Wide_Character_Encoding_Method);
+
+ -- and typ'Wide_Width expands into:
+
+ -- Result_Type (Wide_Width_Wide_Wide_Character (
+ -- Wide_Wide_Character (typ'First),
+ -- Wide_Wide_Character (typ'Last));
+ -- Wide_Character_Encoding_Method);
- -- For real types, typ'Width and typ'Wide_Width expand into
+ -- and typ'Wide_Wide_Width expands into
+
+ -- Result_Type (Wide_Wide_Width_Wide_Wide_Char (
+ -- Wide_Wide_Character (typ'First),
+ -- Wide_Wide_Character (typ'Last));
+ -- Wide_Character_Encoding_Method);
+
+ -- For real types, typ'Width and typ'Wide_[Wide_]Width expand into
-- if Ptyp'First > Ptyp'Last then 0 else btyp'Width end if
@@ -690,11 +748,20 @@ package body Exp_Imgv is
-- typ'Pos (Typ'Last))
-- Wide_Character_Encoding_Method);
+ -- and typ'Wide_Wide_Width expands into:
+
+ -- Result_Type (Wide_Wide_Width_Enumeration_NN
+ -- (typS,
+ -- typI,
+ -- typ'Pos (typ'First),
+ -- typ'Pos (Typ'Last))
+ -- Wide_Character_Encoding_Method);
+
-- where typS and typI are the enumeration image strings and
-- indexes table, as described in Build_Enumeration_Image_Tables.
-- NN is 8/16/32 for depending on the element type for typI.
- procedure Expand_Width_Attribute (N : Node_Id; Wide : Boolean) is
+ procedure Expand_Width_Attribute (N : Node_Id; Attr : Atype := Normal) is
Loc : constant Source_Ptr := Sloc (N);
Typ : constant Entity_Id := Etype (N);
Pref : constant Node_Id := Prefix (N);
@@ -715,22 +782,33 @@ package body Exp_Imgv is
-- Types derived from Standard.Character
elsif Rtyp = Standard_Character then
- if not Wide then
- XX := RE_Width_Character;
- else
- XX := RE_Wide_Width_Character;
- end if;
+ case Attr is
+ when Normal => XX := RE_Width_Character;
+ when Wide => XX := RE_Wide_Width_Character;
+ when Wide_Wide => XX := RE_Wide_Wide_Width_Character;
+ end case;
YY := Rtyp;
-- Types derived from Standard.Wide_Character
elsif Rtyp = Standard_Wide_Character then
- if not Wide then
- XX := RE_Width_Wide_Character;
- else
- XX := RE_Wide_Width_Wide_Character;
- end if;
+ case Attr is
+ when Normal => XX := RE_Width_Wide_Character;
+ when Wide => XX := RE_Wide_Width_Wide_Character;
+ when Wide_Wide => XX := RE_Wide_Wide_Width_Wide_Character;
+ end case;
+
+ YY := Rtyp;
+
+ -- Types derived from Standard.Wide_Wide_Character
+
+ elsif Rtyp = Standard_Wide_Wide_Character then
+ case Attr is
+ when Normal => XX := RE_Width_Wide_Wide_Character;
+ when Wide => XX := RE_Wide_Width_Wide_Wide_Character;
+ when Wide_Wide => XX := RE_Wide_Wide_Width_Wide_Wide_Char;
+ end case;
YY := Rtyp;
@@ -781,24 +859,34 @@ package body Exp_Imgv is
Ttyp := Component_Type (Etype (Lit_Indexes (Rtyp)));
- if not Wide then
- if Ttyp = Standard_Integer_8 then
- XX := RE_Width_Enumeration_8;
- elsif Ttyp = Standard_Integer_16 then
- XX := RE_Width_Enumeration_16;
- else
- XX := RE_Width_Enumeration_32;
- end if;
-
- else
- if Ttyp = Standard_Integer_8 then
- XX := RE_Wide_Width_Enumeration_8;
- elsif Ttyp = Standard_Integer_16 then
- XX := RE_Wide_Width_Enumeration_16;
- else
- XX := RE_Wide_Width_Enumeration_32;
- end if;
- end if;
+ case Attr is
+ when Normal =>
+ if Ttyp = Standard_Integer_8 then
+ XX := RE_Width_Enumeration_8;
+ elsif Ttyp = Standard_Integer_16 then
+ XX := RE_Width_Enumeration_16;
+ else
+ XX := RE_Width_Enumeration_32;
+ end if;
+
+ when Wide =>
+ if Ttyp = Standard_Integer_8 then
+ XX := RE_Wide_Width_Enumeration_8;
+ elsif Ttyp = Standard_Integer_16 then
+ XX := RE_Wide_Width_Enumeration_16;
+ else
+ XX := RE_Wide_Width_Enumeration_32;
+ end if;
+
+ when Wide_Wide =>
+ if Ttyp = Standard_Integer_8 then
+ XX := RE_Wide_Wide_Width_Enumeration_8;
+ elsif Ttyp = Standard_Integer_16 then
+ XX := RE_Wide_Wide_Width_Enumeration_16;
+ else
+ XX := RE_Wide_Wide_Width_Enumeration_32;
+ end if;
+ end case;
Arglist :=
New_List (
@@ -826,9 +914,9 @@ package body Exp_Imgv is
Prefix => New_Reference_To (Ptyp, Loc),
Attribute_Name => Name_Last))));
- -- For enumeration'Wide_Width, add encoding method parameter
+ -- For enumeration'Wide_[Wide_]Width, add encoding method parameter
- if Wide then
+ if Attr /= Normal then
Append_To (Arglist,
Make_Integer_Literal (Loc,
Intval => Int (Wide_Character_Encoding_Method)));
@@ -857,9 +945,12 @@ package body Exp_Imgv is
Prefix => New_Reference_To (Ptyp, Loc),
Attribute_Name => Name_Last)));
- -- For Wide_Character'Width, add encoding method parameter
+ -- For Wide_[Wide_]Character'Width, add encoding method parameter
- if Rtyp = Standard_Wide_Character and then Wide then
+ if (Rtyp = Standard_Wide_Character
+ or else
+ Rtyp = Standard_Wide_Wide_Character)
+ and then Attr /= Normal then
Append_To (Arglist,
Make_Integer_Literal (Loc,
Intval => Int (Wide_Character_Encoding_Method)));
diff --git a/gcc/ada/exp_imgv.ads b/gcc/ada/exp_imgv.ads
index 7df2692a76f..5f601dd7fe8 100644
--- a/gcc/ada/exp_imgv.ads
+++ b/gcc/ada/exp_imgv.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2000 Free Software Foundation, Inc. --
+-- Copyright (C) 2000-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- --
@@ -78,8 +78,12 @@ package Exp_Imgv is
-- This procedure is called from Exp_Attr to expand an occurrence
-- of the attribute Value.
- procedure Expand_Width_Attribute (N : Node_Id; Wide : Boolean);
- -- This procedure is called from Exp_Attr to expand an occurrence of
- -- the attributes Width (Wide = False) or Wide_Width (Wide = True).
+ type Atype is (Normal, Wide, Wide_Wide);
+ -- Type of attribute in call to Expand_Width_Attribute
+
+ procedure Expand_Width_Attribute (N : Node_Id; Attr : Atype := Normal);
+ -- This procedure is called from Exp_Attr to expand an occurrence of the
+ -- attributes Width (Attr = Normal), or Wide_Width (Attr Wide), or
+ -- Wide_Wide_Width (Attr = Wide_Wide).
end Exp_Imgv;
diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb
index cbaef5b5a15..27ec905f1cd 100644
--- a/gcc/ada/exp_prag.adb
+++ b/gcc/ada/exp_prag.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -517,19 +517,22 @@ package body Exp_Prag is
Rewrite (Expression (Lang1),
Make_Character_Literal (Loc,
Chars => Name_uV,
- Char_Literal_Value => Get_Char_Code ('V')));
+ Char_Literal_Value =>
+ UI_From_Int (Character'Pos ('V'))));
Analyze (Expression (Lang1));
Rewrite (Expression (Lang2),
Make_Character_Literal (Loc,
Chars => Name_uM,
- Char_Literal_Value => Get_Char_Code ('M')));
+ Char_Literal_Value =>
+ UI_From_Int (Character'Pos ('M'))));
Analyze (Expression (Lang2));
Rewrite (Expression (Lang3),
Make_Character_Literal (Loc,
Chars => Name_uS,
- Char_Literal_Value => Get_Char_Code ('S')));
+ Char_Literal_Value =>
+ UI_From_Int (Character'Pos ('S'))));
Analyze (Expression (Lang3));
if Exception_Code (Id) /= No_Uint then
diff --git a/gcc/ada/exp_strm.adb b/gcc/ada/exp_strm.adb
index 9a5129efb9d..a38ce46007a 100644
--- a/gcc/ada/exp_strm.adb
+++ b/gcc/ada/exp_strm.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -24,19 +24,20 @@
-- --
------------------------------------------------------------------------------
-with Atree; use Atree;
-with Einfo; use Einfo;
-with Namet; use Namet;
-with Nlists; use Nlists;
-with Nmake; use Nmake;
-with Rtsfind; use Rtsfind;
-with Sinfo; use Sinfo;
-with Snames; use Snames;
-with Stand; use Stand;
-with Tbuild; use Tbuild;
-with Ttypes; use Ttypes;
-with Exp_Tss; use Exp_Tss;
-with Uintp; use Uintp;
+with Atree; use Atree;
+with Einfo; use Einfo;
+with Namet; use Namet;
+with Nlists; use Nlists;
+with Nmake; use Nmake;
+with Rtsfind; use Rtsfind;
+with Sem_Util; use Sem_Util;
+with Sinfo; use Sinfo;
+with Snames; use Snames;
+with Stand; use Stand;
+with Tbuild; use Tbuild;
+with Ttypes; use Ttypes;
+with Exp_Tss; use Exp_Tss;
+with Uintp; use Uintp;
package body Exp_Strm is
@@ -446,13 +447,22 @@ package body Exp_Strm is
U_Type : constant Entity_Id := Underlying_Type (P_Type);
Rt_Type : constant Entity_Id := Root_Type (U_Type);
FST : constant Entity_Id := First_Subtype (U_Type);
- P_Size : constant Uint := Esize (FST);
- Res : Node_Id;
Strm : constant Node_Id := First (Expressions (N));
Targ : constant Node_Id := Next (Strm);
+ P_Size : Uint;
+ Res : Node_Id;
Lib_RE : RE_Id;
begin
+ -- Compute the size of the stream element. This is either the size of
+ -- the first subtype or if given the size of the Stream_Size attribute.
+
+ if Is_Elementary_Type (FST) and then Has_Stream_Size_Clause (FST) then
+ P_Size := Static_Integer (Expression (Stream_Size_Clause (FST)));
+ else
+ P_Size := Esize (FST);
+ end if;
+
-- Check first for Boolean and Character. These are enumeration types,
-- but we treat them specially, since they may require special handling
-- in the transfer protocol. However, this special handling only applies
@@ -474,20 +484,24 @@ package body Exp_Strm is
then
Lib_RE := RE_I_WC;
+ elsif Rt_Type = Standard_Wide_Wide_Character
+ and then Has_Stream_Standard_Rep (U_Type)
+ then
+ Lib_RE := RE_I_WWC;
+
-- Floating point types
elsif Is_Floating_Point_Type (U_Type) then
-
- if Rt_Type = Standard_Short_Float then
+ if P_Size <= Standard_Short_Float_Size then
Lib_RE := RE_I_SF;
- elsif Rt_Type = Standard_Float then
+ elsif P_Size <= Standard_Float_Size then
Lib_RE := RE_I_F;
- elsif Rt_Type = Standard_Long_Float then
+ elsif P_Size <= Standard_Long_Float_Size then
Lib_RE := RE_I_LF;
- else pragma Assert (Rt_Type = Standard_Long_Long_Float);
+ else
Lib_RE := RE_I_LLF;
end if;
@@ -615,13 +629,22 @@ package body Exp_Strm is
U_Type : constant Entity_Id := Underlying_Type (P_Type);
Rt_Type : constant Entity_Id := Root_Type (U_Type);
FST : constant Entity_Id := First_Subtype (U_Type);
- P_Size : constant Uint := Esize (FST);
Strm : constant Node_Id := First (Expressions (N));
Item : constant Node_Id := Next (Strm);
+ P_Size : Uint;
Lib_RE : RE_Id;
Libent : Entity_Id;
begin
+ -- Compute the size of the stream element. This is either the size of
+ -- the first subtype or if given the size of the Stream_Size attribute.
+
+ if Is_Elementary_Type (FST) and then Has_Stream_Size_Clause (FST) then
+ P_Size := Static_Integer (Expression (Stream_Size_Clause (FST)));
+ else
+ P_Size := Esize (FST);
+ end if;
+
-- Find the routine to be called
-- Check for First Boolean and Character. These are enumeration types,
@@ -645,20 +668,21 @@ package body Exp_Strm is
then
Lib_RE := RE_W_WC;
+ elsif Rt_Type = Standard_Wide_Wide_Character
+ and then Has_Stream_Standard_Rep (U_Type)
+ then
+ Lib_RE := RE_W_WWC;
+
-- Floating point types
elsif Is_Floating_Point_Type (U_Type) then
-
- if Rt_Type = Standard_Short_Float then
+ if P_Size <= Standard_Short_Float_Size then
Lib_RE := RE_W_SF;
-
- elsif Rt_Type = Standard_Float then
+ elsif P_Size <= Standard_Float_Size then
Lib_RE := RE_W_F;
-
- elsif Rt_Type = Standard_Long_Float then
+ elsif P_Size <= Standard_Long_Float_Size then
Lib_RE := RE_W_LF;
-
- else pragma Assert (Rt_Type = Standard_Long_Long_Float);
+ else
Lib_RE := RE_W_LLF;
end if;
@@ -695,16 +719,12 @@ package body Exp_Strm is
then
if P_Size <= Standard_Short_Short_Integer_Size then
Lib_RE := RE_W_SSI;
-
elsif P_Size <= Standard_Short_Integer_Size then
Lib_RE := RE_W_SI;
-
elsif P_Size <= Standard_Integer_Size then
Lib_RE := RE_W_I;
-
elsif P_Size <= Standard_Long_Integer_Size then
Lib_RE := RE_W_LI;
-
else
Lib_RE := RE_W_LLI;
end if;
@@ -723,16 +743,12 @@ package body Exp_Strm is
then
if P_Size <= Standard_Short_Short_Integer_Size then
Lib_RE := RE_W_SSU;
-
elsif P_Size <= Standard_Short_Integer_Size then
Lib_RE := RE_W_SU;
-
elsif P_Size <= Standard_Integer_Size then
Lib_RE := RE_W_U;
-
elsif P_Size <= Standard_Long_Integer_Size then
Lib_RE := RE_W_LU;
-
else
Lib_RE := RE_W_LLU;
end if;
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 25522c4b509..162b939f125 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -489,7 +489,7 @@ package body Exp_Util is
Make_Character_Literal (Loc,
Chars => Name_Find,
Char_Literal_Value =>
- Char_Code (Character'Pos ('(')))));
+ UI_From_Int (Character'Pos ('(')))));
Append_To (Stats,
Make_Assignment_Statement (Loc,
@@ -548,7 +548,7 @@ package body Exp_Util is
Make_Character_Literal (Loc,
Chars => Name_Find,
Char_Literal_Value =>
- Char_Code (Character'Pos (',')))));
+ UI_From_Int (Character'Pos (',')))));
Append_To (Stats,
Make_Assignment_Statement (Loc,
@@ -571,7 +571,7 @@ package body Exp_Util is
Make_Character_Literal (Loc,
Chars => Name_Find,
Char_Literal_Value =>
- Char_Code (Character'Pos (')')))));
+ UI_From_Int (Character'Pos (')')))));
return Build_Task_Image_Function (Loc, Decls, Stats, Res);
end Build_Task_Array_Image;
@@ -870,7 +870,7 @@ package body Exp_Util is
Make_Character_Literal (Loc,
Chars => Name_Find,
Char_Literal_Value =>
- Char_Code (Character'Pos ('.')))));
+ UI_From_Int (Character'Pos ('.')))));
Append_To (Stats,
Make_Assignment_Statement (Loc,
@@ -1833,8 +1833,9 @@ package body Exp_Util is
N_Entry_Body |
N_Exception_Declaration |
N_Exception_Renaming_Declaration |
+ N_Formal_Abstract_Subprogram_Declaration |
+ N_Formal_Concrete_Subprogram_Declaration |
N_Formal_Object_Declaration |
- N_Formal_Subprogram_Declaration |
N_Formal_Type_Declaration |
N_Full_Type_Declaration |
N_Function_Instantiation |
diff --git a/gcc/ada/g-utf_32.adb b/gcc/ada/g-utf_32.adb
new file mode 100644
index 00000000000..5aa5b01ad71
--- /dev/null
+++ b/gcc/ada/g-utf_32.adb
@@ -0,0 +1,1622 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUNTIME COMPONENTS --
+-- --
+-- G N A T . U T F _ 3 2 --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 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- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+pragma Style_Checks (Off);
+-- Allow long lines in this unit
+
+package body GNAT.UTF_32 is
+
+ ----------------------
+ -- Character Tables --
+ ----------------------
+
+ -- Note these tables are derived from those given in AI-285. For details
+ -- see //www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00285.TXT?rev=1.22.
+
+ type UTF_32_Range is record
+ Lo : UTF_32;
+ Hi : UTF_32;
+ end record;
+
+ type UTF_32_Ranges is array (Positive range <>) of UTF_32_Range;
+
+ -- The following array includes all characters considered digits, i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Number, Decimal Digit (Nd)
+
+ UTF_32_Digits : constant UTF_32_Ranges := (
+ (16#00030#, 16#00039#), -- DIGIT ZERO .. DIGIT NINE
+ (16#00660#, 16#00669#), -- ARABIC-INDIC DIGIT ZERO .. ARABIC-INDIC DIGIT NINE
+ (16#006F0#, 16#006F9#), -- EXTENDED ARABIC-INDIC DIGIT ZERO .. EXTENDED ARABIC-INDIC DIGIT NINE
+ (16#00966#, 16#0096F#), -- DEVANAGARI DIGIT ZERO .. DEVANAGARI DIGIT NINE
+ (16#009E6#, 16#009EF#), -- BENGALI DIGIT ZERO .. BENGALI DIGIT NINE
+ (16#00A66#, 16#00A6F#), -- GURMUKHI DIGIT ZERO .. GURMUKHI DIGIT NINE
+ (16#00AE6#, 16#00AEF#), -- GUJARATI DIGIT ZERO .. GUJARATI DIGIT NINE
+ (16#00B66#, 16#00B6F#), -- ORIYA DIGIT ZERO .. ORIYA DIGIT NINE
+ (16#00BE7#, 16#00BEF#), -- TAMIL DIGIT ONE .. TAMIL DIGIT NINE
+ (16#00C66#, 16#00C6F#), -- TELUGU DIGIT ZERO .. TELUGU DIGIT NINE
+ (16#00CE6#, 16#00CEF#), -- KANNADA DIGIT ZERO .. KANNADA DIGIT NINE
+ (16#00D66#, 16#00D6F#), -- MALAYALAM DIGIT ZERO .. MALAYALAM DIGIT NINE
+ (16#00E50#, 16#00E59#), -- THAI DIGIT ZERO .. THAI DIGIT NINE
+ (16#00ED0#, 16#00ED9#), -- LAO DIGIT ZERO .. LAO DIGIT NINE
+ (16#00F20#, 16#00F29#), -- TIBETAN DIGIT ZERO .. TIBETAN DIGIT NINE
+ (16#01040#, 16#01049#), -- MYANMAR DIGIT ZERO .. MYANMAR DIGIT NINE
+ (16#01369#, 16#01371#), -- ETHIOPIC DIGIT ONE .. ETHIOPIC DIGIT NINE
+ (16#017E0#, 16#017E9#), -- KHMER DIGIT ZERO .. KHMER DIGIT NINE
+ (16#01810#, 16#01819#), -- MONGOLIAN DIGIT ZERO .. MONGOLIAN DIGIT NINE
+ (16#01946#, 16#0194F#), -- LIMBU DIGIT ZERO .. LIMBU DIGIT NINE
+ (16#0FF10#, 16#0FF19#), -- FULLWIDTH DIGIT ZERO .. FULLWIDTH DIGIT NINE
+ (16#104A0#, 16#104A9#), -- OSMANYA DIGIT ZERO .. OSMANYA DIGIT NINE
+ (16#1D7CE#, 16#1D7FF#)); -- MATHEMATICAL BOLD DIGIT ZERO .. MATHEMATICAL MONOSPACE DIGIT NINE
+
+ -- The following table includes all characters considered letters, i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Letter, Uppercase (Lu)
+ -- Letter, Lowercase (Ll)
+ -- Letter, Titlecase (Lt)
+ -- Letter, Modifier (Lm)
+ -- Letter, Other (Lo)
+ -- Number, Letter (Nl)
+
+ UTF_32_Letters : constant UTF_32_Ranges := (
+ (16#00041#, 16#0005A#), -- LATIN CAPITAL LETTER A .. LATIN CAPITAL LETTER Z
+ (16#00061#, 16#0007A#), -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+ (16#000AA#, 16#000AA#), -- FEMININE ORDINAL INDICATOR .. FEMININE ORDINAL INDICATOR
+ (16#000B5#, 16#000B5#), -- MICRO SIGN .. MICRO SIGN
+ (16#000BA#, 16#000BA#), -- MASCULINE ORDINAL INDICATOR .. MASCULINE ORDINAL INDICATOR
+ (16#000C0#, 16#000D6#), -- LATIN CAPITAL LETTER A WITH GRAVE .. LATIN CAPITAL LETTER O WITH DIAERESIS
+ (16#000D8#, 16#000F6#), -- LATIN CAPITAL LETTER O WITH STROKE .. LATIN SMALL LETTER O WITH DIAERESIS
+ (16#000F8#, 16#00236#), -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER T WITH CURL
+ (16#00250#, 16#002C1#), -- LATIN SMALL LETTER TURNED A .. MODIFIER LETTER REVERSED GLOTTAL STOP
+ (16#002C6#, 16#002D1#), -- MODIFIER LETTER CIRCUMFLEX ACCENT .. MODIFIER LETTER HALF TRIANGULAR COLON
+ (16#002E0#, 16#002E4#), -- MODIFIER LETTER SMALL GAMMA .. MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+ (16#002EE#, 16#002EE#), -- MODIFIER LETTER DOUBLE APOSTROPHE .. MODIFIER LETTER DOUBLE APOSTROPHE
+ (16#0037A#, 16#0037A#), -- GREEK YPOGEGRAMMENI .. GREEK YPOGEGRAMMENI
+ (16#00386#, 16#00386#), -- GREEK CAPITAL LETTER ALPHA WITH TONOS .. GREEK CAPITAL LETTER ALPHA WITH TONOS
+ (16#00388#, 16#0038A#), -- GREEK CAPITAL LETTER EPSILON WITH TONOS .. GREEK CAPITAL LETTER IOTA WITH TONOS
+ (16#0038C#, 16#0038C#), -- GREEK CAPITAL LETTER OMICRON WITH TONOS .. GREEK CAPITAL LETTER OMICRON WITH TONOS
+ (16#0038E#, 16#003A1#), -- GREEK CAPITAL LETTER UPSILON WITH TONOS .. GREEK CAPITAL LETTER RHO
+ (16#003A3#, 16#003CE#), -- GREEK CAPITAL LETTER SIGMA .. GREEK SMALL LETTER OMEGA WITH TONOS
+ (16#003D0#, 16#003F5#), -- GREEK BETA SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+ (16#003F7#, 16#003FB#), -- GREEK CAPITAL LETTER SHO .. GREEK SMALL LETTER SAN
+ (16#00400#, 16#00481#), -- CYRILLIC CAPITAL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER KOPPA
+ (16#0048A#, 16#004CE#), -- CYRILLIC CAPITAL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+ (16#004D0#, 16#004F5#), -- CYRILLIC CAPITAL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ (16#004F8#, 16#004F9#), -- CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ (16#00500#, 16#0050F#), -- CYRILLIC CAPITAL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI TJE
+ (16#00531#, 16#00556#), -- ARMENIAN CAPITAL LETTER AYB .. ARMENIAN CAPITAL LETTER FEH
+ (16#00559#, 16#00559#), -- ARMENIAN MODIFIER LETTER LEFT HALF RING .. ARMENIAN MODIFIER LETTER LEFT HALF RING
+ (16#00561#, 16#00587#), -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LIGATURE ECH YIWN
+ (16#005D0#, 16#005EA#), -- HEBREW LETTER ALEF .. HEBREW LETTER TAV
+ (16#005F0#, 16#005F2#), -- HEBREW LIGATURE YIDDISH DOUBLE VAV .. HEBREW LIGATURE YIDDISH DOUBLE YOD
+ (16#00621#, 16#0063A#), -- ARABIC LETTER HAMZA .. ARABIC LETTER GHAIN
+ (16#00640#, 16#0064A#), -- ARABIC TATWEEL .. ARABIC LETTER YEH
+ (16#0066E#, 16#0066F#), -- ARABIC LETTER DOTLESS BEH .. ARABIC LETTER DOTLESS QAF
+ (16#00671#, 16#006D3#), -- ARABIC LETTER ALEF WASLA .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+ (16#006D5#, 16#006D5#), -- ARABIC LETTER AE .. ARABIC LETTER AE
+ (16#006E5#, 16#006E6#), -- ARABIC SMALL WAW .. ARABIC SMALL YEH
+ (16#006EE#, 16#006EF#), -- ARABIC LETTER DAL WITH INVERTED V .. ARABIC LETTER REH WITH INVERTED V
+ (16#006FA#, 16#006FC#), -- ARABIC LETTER SHEEN WITH DOT BELOW .. ARABIC LETTER GHAIN WITH DOT BELOW
+ (16#006FF#, 16#006FF#), -- ARABIC LETTER HEH WITH INVERTED V .. ARABIC LETTER HEH WITH INVERTED V
+ (16#00710#, 16#00710#), -- SYRIAC LETTER ALAPH .. SYRIAC LETTER ALAPH
+ (16#00712#, 16#0072F#), -- SYRIAC LETTER BETH .. SYRIAC LETTER PERSIAN DHALATH
+ (16#0074D#, 16#0074F#), -- SYRIAC LETTER SOGDIAN ZHAIN .. SYRIAC LETTER SOGDIAN FE
+ (16#00780#, 16#007A5#), -- THAANA LETTER HAA .. THAANA LETTER WAAVU
+ (16#007B1#, 16#007B1#), -- THAANA LETTER NAA .. THAANA LETTER NAA
+ (16#00904#, 16#00939#), -- DEVANAGARI LETTER SHORT A .. DEVANAGARI LETTER HA
+ (16#0093D#, 16#0093D#), -- DEVANAGARI SIGN AVAGRAHA .. DEVANAGARI SIGN AVAGRAHA
+ (16#00950#, 16#00950#), -- DEVANAGARI OM .. DEVANAGARI OM
+ (16#00958#, 16#00961#), -- DEVANAGARI LETTER QA .. DEVANAGARI LETTER VOCALIC LL
+ (16#00985#, 16#0098C#), -- BENGALI LETTER A .. BENGALI LETTER VOCALIC L
+ (16#0098F#, 16#00990#), -- BENGALI LETTER E .. BENGALI LETTER AI
+ (16#00993#, 16#009A8#), -- BENGALI LETTER O .. BENGALI LETTER NA
+ (16#009AA#, 16#009B0#), -- BENGALI LETTER PA .. BENGALI LETTER RA
+ (16#009B2#, 16#009B2#), -- BENGALI LETTER LA .. BENGALI LETTER LA
+ (16#009B6#, 16#009B9#), -- BENGALI LETTER SHA .. BENGALI LETTER HA
+ (16#009BD#, 16#009BD#), -- BENGALI SIGN AVAGRAHA .. BENGALI SIGN AVAGRAHA
+ (16#009DC#, 16#009DD#), -- BENGALI LETTER RRA .. BENGALI LETTER RHA
+ (16#009DF#, 16#009E1#), -- BENGALI LETTER YYA .. BENGALI LETTER VOCALIC LL
+ (16#009F0#, 16#009F1#), -- BENGALI LETTER RA WITH MIDDLE DIAGONAL .. BENGALI LETTER RA WITH LOWER DIAGONAL
+ (16#00A05#, 16#00A0A#), -- GURMUKHI LETTER A .. GURMUKHI LETTER UU
+ (16#00A0F#, 16#00A10#), -- GURMUKHI LETTER EE .. GURMUKHI LETTER AI
+ (16#00A13#, 16#00A28#), -- GURMUKHI LETTER OO .. GURMUKHI LETTER NA
+ (16#00A2A#, 16#00A30#), -- GURMUKHI LETTER PA .. GURMUKHI LETTER RA
+ (16#00A32#, 16#00A33#), -- GURMUKHI LETTER LA .. GURMUKHI LETTER LLA
+ (16#00A35#, 16#00A36#), -- GURMUKHI LETTER VA .. GURMUKHI LETTER SHA
+ (16#00A38#, 16#00A39#), -- GURMUKHI LETTER SA .. GURMUKHI LETTER HA
+ (16#00A59#, 16#00A5C#), -- GURMUKHI LETTER KHHA .. GURMUKHI LETTER RRA
+ (16#00A5E#, 16#00A5E#), -- GURMUKHI LETTER FA .. GURMUKHI LETTER FA
+ (16#00A72#, 16#00A74#), -- GURMUKHI IRI .. GURMUKHI EK ONKAR
+ (16#00A85#, 16#00A8D#), -- GUJARATI LETTER A .. GUJARATI VOWEL CANDRA E
+ (16#00A8F#, 16#00A91#), -- GUJARATI LETTER E .. GUJARATI VOWEL CANDRA O
+ (16#00A93#, 16#00AA8#), -- GUJARATI LETTER O .. GUJARATI LETTER NA
+ (16#00AAA#, 16#00AB0#), -- GUJARATI LETTER PA .. GUJARATI LETTER RA
+ (16#00AB2#, 16#00AB3#), -- GUJARATI LETTER LA .. GUJARATI LETTER LLA
+ (16#00AB5#, 16#00AB9#), -- GUJARATI LETTER VA .. GUJARATI LETTER HA
+ (16#00ABD#, 16#00ABD#), -- GUJARATI SIGN AVAGRAHA .. GUJARATI SIGN AVAGRAHA
+ (16#00AD0#, 16#00AD0#), -- GUJARATI OM .. GUJARATI OM
+ (16#00AE0#, 16#00AE1#), -- GUJARATI LETTER VOCALIC RR .. GUJARATI LETTER VOCALIC LL
+ (16#00B05#, 16#00B0C#), -- ORIYA LETTER A .. ORIYA LETTER VOCALIC L
+ (16#00B0F#, 16#00B10#), -- ORIYA LETTER E .. ORIYA LETTER AI
+ (16#00B13#, 16#00B28#), -- ORIYA LETTER O .. ORIYA LETTER NA
+ (16#00B2A#, 16#00B30#), -- ORIYA LETTER PA .. ORIYA LETTER RA
+ (16#00B32#, 16#00B33#), -- ORIYA LETTER LA .. ORIYA LETTER LLA
+ (16#00B35#, 16#00B39#), -- ORIYA LETTER VA .. ORIYA LETTER HA
+ (16#00B3D#, 16#00B3D#), -- ORIYA SIGN AVAGRAHA .. ORIYA SIGN AVAGRAHA
+ (16#00B5C#, 16#00B5D#), -- ORIYA LETTER RRA .. ORIYA LETTER RHA
+ (16#00B5F#, 16#00B61#), -- ORIYA LETTER YYA .. ORIYA LETTER VOCALIC LL
+ (16#00B71#, 16#00B71#), -- ORIYA LETTER WA .. ORIYA LETTER WA
+ (16#00B83#, 16#00B83#), -- TAMIL SIGN VISARGA .. TAMIL SIGN VISARGA
+ (16#00B85#, 16#00B8A#), -- TAMIL LETTER A .. TAMIL LETTER UU
+ (16#00B8E#, 16#00B90#), -- TAMIL LETTER E .. TAMIL LETTER AI
+ (16#00B92#, 16#00B95#), -- TAMIL LETTER O .. TAMIL LETTER KA
+ (16#00B99#, 16#00B9A#), -- TAMIL LETTER NGA .. TAMIL LETTER CA
+ (16#00B9C#, 16#00B9C#), -- TAMIL LETTER JA .. TAMIL LETTER JA
+ (16#00B9E#, 16#00B9F#), -- TAMIL LETTER NYA .. TAMIL LETTER TTA
+ (16#00BA3#, 16#00BA4#), -- TAMIL LETTER NNA .. TAMIL LETTER TA
+ (16#00BA8#, 16#00BAA#), -- TAMIL LETTER NA .. TAMIL LETTER PA
+ (16#00BAE#, 16#00BB5#), -- TAMIL LETTER MA .. TAMIL LETTER VA
+ (16#00BB7#, 16#00BB9#), -- TAMIL LETTER SSA .. TAMIL LETTER HA
+ (16#00C05#, 16#00C0C#), -- TELUGU LETTER A .. TELUGU LETTER VOCALIC L
+ (16#00C0E#, 16#00C10#), -- TELUGU LETTER E .. TELUGU LETTER AI
+ (16#00C12#, 16#00C28#), -- TELUGU LETTER O .. TELUGU LETTER NA
+ (16#00C2A#, 16#00C33#), -- TELUGU LETTER PA .. TELUGU LETTER LLA
+ (16#00C35#, 16#00C39#), -- TELUGU LETTER VA .. TELUGU LETTER HA
+ (16#00C60#, 16#00C61#), -- TELUGU LETTER VOCALIC RR .. TELUGU LETTER VOCALIC LL
+ (16#00C85#, 16#00C8C#), -- KANNADA LETTER A .. KANNADA LETTER VOCALIC L
+ (16#00C8E#, 16#00C90#), -- KANNADA LETTER E .. KANNADA LETTER AI
+ (16#00C92#, 16#00CA8#), -- KANNADA LETTER O .. KANNADA LETTER NA
+ (16#00CAA#, 16#00CB3#), -- KANNADA LETTER PA .. KANNADA LETTER LLA
+ (16#00CB5#, 16#00CB9#), -- KANNADA LETTER VA .. KANNADA LETTER HA
+ (16#00CBD#, 16#00CBD#), -- KANNADA SIGN AVAGRAHA .. KANNADA SIGN AVAGRAHA
+ (16#00CDE#, 16#00CDE#), -- KANNADA LETTER FA .. KANNADA LETTER FA
+ (16#00CE0#, 16#00CE1#), -- KANNADA LETTER VOCALIC RR .. KANNADA LETTER VOCALIC LL
+ (16#00D05#, 16#00D0C#), -- MALAYALAM LETTER A .. MALAYALAM LETTER VOCALIC L
+ (16#00D0E#, 16#00D10#), -- MALAYALAM LETTER E .. MALAYALAM LETTER AI
+ (16#00D12#, 16#00D28#), -- MALAYALAM LETTER O .. MALAYALAM LETTER NA
+ (16#00D2A#, 16#00D39#), -- MALAYALAM LETTER PA .. MALAYALAM LETTER HA
+ (16#00D60#, 16#00D61#), -- MALAYALAM LETTER VOCALIC RR .. MALAYALAM LETTER VOCALIC LL
+ (16#00D85#, 16#00D96#), -- SINHALA LETTER AYANNA .. SINHALA LETTER AUYANNA
+ (16#00D9A#, 16#00DB1#), -- SINHALA LETTER ALPAPRAANA KAYANNA .. SINHALA LETTER DANTAJA NAYANNA
+ (16#00DB3#, 16#00DBB#), -- SINHALA LETTER SANYAKA DAYANNA .. SINHALA LETTER RAYANNA
+ (16#00DBD#, 16#00DBD#), -- SINHALA LETTER DANTAJA LAYANNA .. SINHALA LETTER DANTAJA LAYANNA
+ (16#00DC0#, 16#00DC6#), -- SINHALA LETTER VAYANNA .. SINHALA LETTER FAYANNA
+ (16#00E01#, 16#00E30#), -- THAI CHARACTER KO KAI .. THAI CHARACTER SARA A
+ (16#00E32#, 16#00E33#), -- THAI CHARACTER SARA AA .. THAI CHARACTER SARA AM
+ (16#00E40#, 16#00E46#), -- THAI CHARACTER SARA E .. THAI CHARACTER MAIYAMOK
+ (16#00E81#, 16#00E82#), -- LAO LETTER KO .. LAO LETTER KHO SUNG
+ (16#00E84#, 16#00E84#), -- LAO LETTER KHO TAM .. LAO LETTER KHO TAM
+ (16#00E87#, 16#00E88#), -- LAO LETTER NGO .. LAO LETTER CO
+ (16#00E8A#, 16#00E8A#), -- LAO LETTER SO TAM .. LAO LETTER SO TAM
+ (16#00E8D#, 16#00E8D#), -- LAO LETTER NYO .. LAO LETTER NYO
+ (16#00E94#, 16#00E97#), -- LAO LETTER DO .. LAO LETTER THO TAM
+ (16#00E99#, 16#00E9F#), -- LAO LETTER NO .. LAO LETTER FO SUNG
+ (16#00EA1#, 16#00EA3#), -- LAO LETTER MO .. LAO LETTER LO LING
+ (16#00EA5#, 16#00EA5#), -- LAO LETTER LO LOOT .. LAO LETTER LO LOOT
+ (16#00EA7#, 16#00EA7#), -- LAO LETTER WO .. LAO LETTER WO
+ (16#00EAA#, 16#00EAB#), -- LAO LETTER SO SUNG .. LAO LETTER HO SUNG
+ (16#00EAD#, 16#00EB0#), -- LAO LETTER O .. LAO VOWEL SIGN A
+ (16#00EB2#, 16#00EB3#), -- LAO VOWEL SIGN AA .. LAO VOWEL SIGN AM
+ (16#00EBD#, 16#00EBD#), -- LAO SEMIVOWEL SIGN NYO .. LAO SEMIVOWEL SIGN NYO
+ (16#00EC0#, 16#00EC4#), -- LAO VOWEL SIGN E .. LAO VOWEL SIGN AI
+ (16#00EC6#, 16#00EC6#), -- LAO KO LA .. LAO KO LA
+ (16#00EDC#, 16#00EDD#), -- LAO HO NO .. LAO HO MO
+ (16#00F00#, 16#00F00#), -- TIBETAN SYLLABLE OM .. TIBETAN SYLLABLE OM
+ (16#00F40#, 16#00F47#), -- TIBETAN LETTER KA .. TIBETAN LETTER JA
+ (16#00F49#, 16#00F6A#), -- TIBETAN LETTER NYA .. TIBETAN LETTER FIXED-FORM RA
+ (16#00F88#, 16#00F8B#), -- TIBETAN SIGN LCE TSA CAN .. TIBETAN SIGN GRU MED RGYINGS
+ (16#01000#, 16#01021#), -- MYANMAR LETTER KA .. MYANMAR LETTER A
+ (16#01023#, 16#01027#), -- MYANMAR LETTER I .. MYANMAR LETTER E
+ (16#01029#, 16#0102A#), -- MYANMAR LETTER O .. MYANMAR LETTER AU
+ (16#01050#, 16#01055#), -- MYANMAR LETTER SHA .. MYANMAR LETTER VOCALIC LL
+ (16#010A0#, 16#010C5#), -- GEORGIAN CAPITAL LETTER AN .. GEORGIAN CAPITAL LETTER HOE
+ (16#010D0#, 16#010F8#), -- GEORGIAN LETTER AN .. GEORGIAN LETTER ELIFI
+ (16#01100#, 16#01159#), -- HANGUL CHOSEONG KIYEOK .. HANGUL CHOSEONG YEORINHIEUH
+ (16#0115F#, 16#011A2#), -- HANGUL CHOSEONG FILLER .. HANGUL JUNGSEONG SSANGARAEA
+ (16#011A8#, 16#011F9#), -- HANGUL JONGSEONG KIYEOK .. HANGUL JONGSEONG YEORINHIEUH
+ (16#01200#, 16#01206#), -- ETHIOPIC SYLLABLE HA .. ETHIOPIC SYLLABLE HO
+ (16#01208#, 16#01246#), -- ETHIOPIC SYLLABLE LA .. ETHIOPIC SYLLABLE QO
+ (16#01248#, 16#01248#), -- ETHIOPIC SYLLABLE QWA .. ETHIOPIC SYLLABLE QWA
+ (16#0124A#, 16#0124D#), -- ETHIOPIC SYLLABLE QWI .. ETHIOPIC SYLLABLE QWE
+ (16#01250#, 16#01256#), -- ETHIOPIC SYLLABLE QHA .. ETHIOPIC SYLLABLE QHO
+ (16#01258#, 16#01258#), -- ETHIOPIC SYLLABLE QHWA .. ETHIOPIC SYLLABLE QHWA
+ (16#0125A#, 16#0125D#), -- ETHIOPIC SYLLABLE QHWI .. ETHIOPIC SYLLABLE QHWE
+ (16#01260#, 16#01286#), -- ETHIOPIC SYLLABLE BA .. ETHIOPIC SYLLABLE XO
+ (16#01288#, 16#01288#), -- ETHIOPIC SYLLABLE XWA .. ETHIOPIC SYLLABLE XWA
+ (16#0128A#, 16#0128D#), -- ETHIOPIC SYLLABLE XWI .. ETHIOPIC SYLLABLE XWE
+ (16#01290#, 16#012AE#), -- ETHIOPIC SYLLABLE NA .. ETHIOPIC SYLLABLE KO
+ (16#012B0#, 16#012B0#), -- ETHIOPIC SYLLABLE KWA .. ETHIOPIC SYLLABLE KWA
+ (16#012B2#, 16#012B5#), -- ETHIOPIC SYLLABLE KWI .. ETHIOPIC SYLLABLE KWE
+ (16#012B8#, 16#012BE#), -- ETHIOPIC SYLLABLE KXA .. ETHIOPIC SYLLABLE KXO
+ (16#012C0#, 16#012C0#), -- ETHIOPIC SYLLABLE KXWA .. ETHIOPIC SYLLABLE KXWA
+ (16#012C2#, 16#012C5#), -- ETHIOPIC SYLLABLE KXWI .. ETHIOPIC SYLLABLE KXWE
+ (16#012C8#, 16#012CE#), -- ETHIOPIC SYLLABLE WA .. ETHIOPIC SYLLABLE WO
+ (16#012D0#, 16#012D6#), -- ETHIOPIC SYLLABLE PHARYNGEAL A .. ETHIOPIC SYLLABLE PHARYNGEAL O
+ (16#012D8#, 16#012EE#), -- ETHIOPIC SYLLABLE ZA .. ETHIOPIC SYLLABLE YO
+ (16#012F0#, 16#0130E#), -- ETHIOPIC SYLLABLE DA .. ETHIOPIC SYLLABLE GO
+ (16#01310#, 16#01310#), -- ETHIOPIC SYLLABLE GWA .. ETHIOPIC SYLLABLE GWA
+ (16#01312#, 16#01315#), -- ETHIOPIC SYLLABLE GWI .. ETHIOPIC SYLLABLE GWE
+ (16#01318#, 16#0131E#), -- ETHIOPIC SYLLABLE GGA .. ETHIOPIC SYLLABLE GGO
+ (16#01320#, 16#01346#), -- ETHIOPIC SYLLABLE THA .. ETHIOPIC SYLLABLE TZO
+ (16#01348#, 16#0135A#), -- ETHIOPIC SYLLABLE FA .. ETHIOPIC SYLLABLE FYA
+ (16#013A0#, 16#013F4#), -- CHEROKEE LETTER A .. CHEROKEE LETTER YV
+ (16#01401#, 16#0166C#), -- CANADIAN SYLLABICS E .. CANADIAN SYLLABICS CARRIER TTSA
+ (16#0166F#, 16#01676#), -- CANADIAN SYLLABICS QAI .. CANADIAN SYLLABICS NNGAA
+ (16#01681#, 16#0169A#), -- OGHAM LETTER BEITH .. OGHAM LETTER PEITH
+ (16#016A0#, 16#016EA#), -- RUNIC LETTER FEHU FEOH FE F .. RUNIC LETTER X
+ (16#016EE#, 16#016F0#), -- RUNIC ARLAUG SYMBOL .. RUNIC BELGTHOR SYMBOL
+ (16#01700#, 16#0170C#), -- TAGALOG LETTER A .. TAGALOG LETTER YA
+ (16#0170E#, 16#01711#), -- TAGALOG LETTER LA .. TAGALOG LETTER HA
+ (16#01720#, 16#01731#), -- HANUNOO LETTER A .. HANUNOO LETTER HA
+ (16#01740#, 16#01751#), -- BUHID LETTER A .. BUHID LETTER HA
+ (16#01760#, 16#0176C#), -- TAGBANWA LETTER A .. TAGBANWA LETTER YA
+ (16#0176E#, 16#01770#), -- TAGBANWA LETTER LA .. TAGBANWA LETTER SA
+ (16#01780#, 16#017B3#), -- KHMER LETTER KA .. KHMER INDEPENDENT VOWEL QAU
+ (16#017D7#, 16#017D7#), -- KHMER SIGN LEK TOO .. KHMER SIGN LEK TOO
+ (16#017DC#, 16#017DC#), -- KHMER SIGN AVAKRAHASANYA .. KHMER SIGN AVAKRAHASANYA
+ (16#01820#, 16#01877#), -- MONGOLIAN LETTER A .. MONGOLIAN LETTER MANCHU ZHA
+ (16#01880#, 16#018A8#), -- MONGOLIAN LETTER ALI GALI ANUSVARA ONE .. MONGOLIAN LETTER MANCHU ALI GALI BHA
+ (16#01900#, 16#0191C#), -- LIMBU VOWEL-CARRIER LETTER .. LIMBU LETTER HA
+ (16#01950#, 16#0196D#), -- TAI LE LETTER KA .. TAI LE LETTER AI
+ (16#01970#, 16#01974#), -- TAI LE LETTER TONE-2 .. TAI LE LETTER TONE-6
+ (16#01D00#, 16#01D6B#), -- LATIN LETTER SMALL CAPITAL A .. LATIN SMALL LETTER UE
+ (16#01E00#, 16#01E9B#), -- LATIN CAPITAL LETTER A WITH RING BELOW .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ (16#01EA0#, 16#01EF9#), -- LATIN CAPITAL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER Y WITH TILDE
+ (16#01F00#, 16#01F15#), -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ (16#01F18#, 16#01F1D#), -- GREEK CAPITAL LETTER EPSILON WITH PSILI .. GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+ (16#01F20#, 16#01F45#), -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ (16#01F48#, 16#01F4D#), -- GREEK CAPITAL LETTER OMICRON WITH PSILI .. GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+ (16#01F50#, 16#01F57#), -- GREEK SMALL LETTER UPSILON WITH PSILI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ (16#01F59#, 16#01F59#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA
+ (16#01F5B#, 16#01F5B#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+ (16#01F5D#, 16#01F5D#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+ (16#01F5F#, 16#01F7D#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER OMEGA WITH OXIA
+ (16#01F80#, 16#01FB4#), -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+ (16#01FB6#, 16#01FBC#), -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI .. GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ (16#01FBE#, 16#01FBE#), -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+ (16#01FC2#, 16#01FC4#), -- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+ (16#01FC6#, 16#01FCC#), -- GREEK SMALL LETTER ETA WITH PERISPOMENI .. GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ (16#01FD0#, 16#01FD3#), -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+ (16#01FD6#, 16#01FDB#), -- GREEK SMALL LETTER IOTA WITH PERISPOMENI .. GREEK CAPITAL LETTER IOTA WITH OXIA
+ (16#01FE0#, 16#01FEC#), -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK CAPITAL LETTER RHO WITH DASIA
+ (16#01FF2#, 16#01FF4#), -- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+ (16#01FF6#, 16#01FFC#), -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI .. GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ (16#02071#, 16#02071#), -- SUPERSCRIPT LATIN SMALL LETTER I .. SUPERSCRIPT LATIN SMALL LETTER I
+ (16#0207F#, 16#0207F#), -- SUPERSCRIPT LATIN SMALL LETTER N .. SUPERSCRIPT LATIN SMALL LETTER N
+ (16#02102#, 16#02102#), -- DOUBLE-STRUCK CAPITAL C .. DOUBLE-STRUCK CAPITAL C
+ (16#02107#, 16#02107#), -- EULER CONSTANT .. EULER CONSTANT
+ (16#0210A#, 16#02113#), -- SCRIPT SMALL G .. SCRIPT SMALL L
+ (16#02115#, 16#02115#), -- DOUBLE-STRUCK CAPITAL N .. DOUBLE-STRUCK CAPITAL N
+ (16#02119#, 16#0211D#), -- DOUBLE-STRUCK CAPITAL P .. DOUBLE-STRUCK CAPITAL R
+ (16#02124#, 16#02124#), -- DOUBLE-STRUCK CAPITAL Z .. DOUBLE-STRUCK CAPITAL Z
+ (16#02126#, 16#02126#), -- OHM SIGN .. OHM SIGN
+ (16#02128#, 16#02128#), -- BLACK-LETTER CAPITAL Z .. BLACK-LETTER CAPITAL Z
+ (16#0212A#, 16#0212D#), -- KELVIN SIGN .. BLACK-LETTER CAPITAL C
+ (16#0212F#, 16#02131#), -- SCRIPT SMALL E .. SCRIPT CAPITAL F
+ (16#02133#, 16#02139#), -- SCRIPT CAPITAL M .. INFORMATION SOURCE
+ (16#0213D#, 16#0213F#), -- DOUBLE-STRUCK SMALL GAMMA .. DOUBLE-STRUCK CAPITAL PI
+ (16#02145#, 16#02149#), -- DOUBLE-STRUCK ITALIC CAPITAL D .. DOUBLE-STRUCK ITALIC SMALL J
+ (16#02160#, 16#02183#), -- ROMAN NUMERAL ONE .. ROMAN NUMERAL REVERSED ONE HUNDRED
+ (16#03005#, 16#03007#), -- IDEOGRAPHIC ITERATION MARK .. IDEOGRAPHIC NUMBER ZERO
+ (16#03021#, 16#03029#), -- HANGZHOU NUMERAL ONE .. HANGZHOU NUMERAL NINE
+ (16#03031#, 16#03035#), -- VERTICAL KANA REPEAT MARK .. VERTICAL KANA REPEAT MARK LOWER HALF
+ (16#03038#, 16#0303C#), -- HANGZHOU NUMERAL TEN .. MASU MARK
+ (16#03041#, 16#03096#), -- HIRAGANA LETTER SMALL A .. HIRAGANA LETTER SMALL KE
+ (16#0309D#, 16#0309F#), -- HIRAGANA ITERATION MARK .. HIRAGANA DIGRAPH YORI
+ (16#030A1#, 16#030FA#), -- KATAKANA LETTER SMALL A .. KATAKANA LETTER VO
+ (16#030FC#, 16#030FF#), -- KATAKANA-HIRAGANA PROLONGED SOUND MARK .. KATAKANA DIGRAPH KOTO
+ (16#03105#, 16#0312C#), -- BOPOMOFO LETTER B .. BOPOMOFO LETTER GN
+ (16#03131#, 16#0318E#), -- HANGUL LETTER KIYEOK .. HANGUL LETTER ARAEAE
+ (16#031A0#, 16#031B7#), -- BOPOMOFO LETTER BU .. BOPOMOFO FINAL LETTER H
+ (16#031F0#, 16#031FF#), -- KATAKANA LETTER SMALL KU .. KATAKANA LETTER SMALL RO
+ (16#03400#, 16#04DB5#), -- <CJK Ideograph Extension A, First> .. <CJK Ideograph Extension A, Last>
+ (16#04E00#, 16#09FA5#), -- <CJK Ideograph, First> .. <CJK Ideograph, Last>
+ (16#0A000#, 16#0A48C#), -- YI SYLLABLE IT .. YI SYLLABLE YYR
+ (16#0AC00#, 16#0D7A3#), -- <Hangul Syllable, First> .. <Hangul Syllable, Last>
+ (16#0F900#, 16#0FA2D#), -- CJK COMPATIBILITY IDEOGRAPH-F900 .. CJK COMPATIBILITY IDEOGRAPH-FA2D
+ (16#0FA30#, 16#0FA6A#), -- CJK COMPATIBILITY IDEOGRAPH-FA30 .. CJK COMPATIBILITY IDEOGRAPH-FA6A
+ (16#0FB00#, 16#0FB06#), -- LATIN SMALL LIGATURE FF .. LATIN SMALL LIGATURE ST
+ (16#0FB13#, 16#0FB17#), -- ARMENIAN SMALL LIGATURE MEN NOW .. ARMENIAN SMALL LIGATURE MEN XEH
+ (16#0FB1D#, 16#0FB1D#), -- HEBREW LETTER YOD WITH HIRIQ .. HEBREW LETTER YOD WITH HIRIQ
+ (16#0FB1F#, 16#0FB28#), -- HEBREW LIGATURE YIDDISH YOD YOD PATAH .. HEBREW LETTER WIDE TAV
+ (16#0FB2A#, 16#0FB36#), -- HEBREW LETTER SHIN WITH SHIN DOT .. HEBREW LETTER ZAYIN WITH DAGESH
+ (16#0FB38#, 16#0FB3C#), -- HEBREW LETTER TET WITH DAGESH .. HEBREW LETTER LAMED WITH DAGESH
+ (16#0FB3E#, 16#0FB3E#), -- HEBREW LETTER MEM WITH DAGESH .. HEBREW LETTER MEM WITH DAGESH
+ (16#0FB40#, 16#0FB41#), -- HEBREW LETTER NUN WITH DAGESH .. HEBREW LETTER SAMEKH WITH DAGESH
+ (16#0FB43#, 16#0FB44#), -- HEBREW LETTER FINAL PE WITH DAGESH .. HEBREW LETTER PE WITH DAGESH
+ (16#0FB46#, 16#0FBB1#), -- HEBREW LETTER TSADI WITH DAGESH .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+ (16#0FBD3#, 16#0FD3D#), -- ARABIC LETTER NG ISOLATED FORM .. ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+ (16#0FD50#, 16#0FD8F#), -- ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM .. ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+ (16#0FD92#, 16#0FDC7#), -- ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM .. ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+ (16#0FDF0#, 16#0FDFB#), -- ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM .. ARABIC LIGATURE JALLAJALALOUHOU
+ (16#0FE70#, 16#0FE74#), -- ARABIC FATHATAN ISOLATED FORM .. ARABIC KASRATAN ISOLATED FORM
+ (16#0FE76#, 16#0FEFC#), -- ARABIC FATHA ISOLATED FORM .. ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+ (16#0FF21#, 16#0FF3A#), -- FULLWIDTH LATIN CAPITAL LETTER A .. FULLWIDTH LATIN CAPITAL LETTER Z
+ (16#0FF41#, 16#0FF5A#), -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+ (16#0FF66#, 16#0FFBE#), -- HALFWIDTH KATAKANA LETTER WO .. HALFWIDTH HANGUL LETTER HIEUH
+ (16#0FFC2#, 16#0FFC7#), -- HALFWIDTH HANGUL LETTER A .. HALFWIDTH HANGUL LETTER E
+ (16#0FFCA#, 16#0FFCF#), -- HALFWIDTH HANGUL LETTER YEO .. HALFWIDTH HANGUL LETTER OE
+ (16#0FFD2#, 16#0FFD7#), -- HALFWIDTH HANGUL LETTER YO .. HALFWIDTH HANGUL LETTER YU
+ (16#0FFDA#, 16#0FFDC#), -- HALFWIDTH HANGUL LETTER EU .. HALFWIDTH HANGUL LETTER I
+ (16#10000#, 16#1000B#), -- LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE
+ (16#1000D#, 16#10026#), -- LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO
+ (16#10028#, 16#1003A#), -- LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO
+ (16#1003C#, 16#1003D#), -- LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE
+ (16#1003F#, 16#1004D#), -- LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO
+ (16#10050#, 16#1005D#), -- LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089
+ (16#10080#, 16#100FA#), -- LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305
+ (16#10300#, 16#1031E#), -- OLD ITALIC LETTER A .. OLD ITALIC LETTER UU
+ (16#10330#, 16#1034A#), -- GOTHIC LETTER AHSA .. GOTHIC LETTER NINE HUNDRED
+ (16#10380#, 16#1039D#), -- UGARITIC LETTER ALPA .. UGARITIC LETTER SSU
+ (16#10400#, 16#1049D#), -- DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO
+ (16#10800#, 16#10805#), -- CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA
+ (16#10808#, 16#10808#), -- CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO
+ (16#1080A#, 16#10835#), -- CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO
+ (16#10837#, 16#10838#), -- CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE
+ (16#1083C#, 16#1083C#), -- CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA
+ (16#1083F#, 16#1083F#), -- CYPRIOT SYLLABLE ZO .. CYPRIOT SYLLABLE ZO
+ (16#1D400#, 16#1D454#), -- MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G
+ (16#1D456#, 16#1D49C#), -- MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A
+ (16#1D49E#, 16#1D49F#), -- MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D
+ (16#1D4A2#, 16#1D4A2#), -- MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G
+ (16#1D4A5#, 16#1D4A6#), -- MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K
+ (16#1D4A9#, 16#1D4AC#), -- MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q
+ (16#1D4AE#, 16#1D4B9#), -- MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D
+ (16#1D4BB#, 16#1D4BB#), -- MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F
+ (16#1D4BD#, 16#1D4C3#), -- MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N
+ (16#1D4C5#, 16#1D505#), -- MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B
+ (16#1D507#, 16#1D50A#), -- MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G
+ (16#1D50D#, 16#1D514#), -- MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q
+ (16#1D516#, 16#1D51C#), -- MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y
+ (16#1D51E#, 16#1D539#), -- MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+ (16#1D53B#, 16#1D53E#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+ (16#1D540#, 16#1D544#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+ (16#1D546#, 16#1D546#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+ (16#1D54A#, 16#1D550#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+ (16#1D552#, 16#1D6A3#), -- MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL MONOSPACE SMALL Z
+ (16#1D6A8#, 16#1D6C0#), -- MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA
+ (16#1D6C2#, 16#1D6DA#), -- MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA
+ (16#1D6DC#, 16#1D6FA#), -- MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA
+ (16#1D6FC#, 16#1D714#), -- MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA
+ (16#1D716#, 16#1D734#), -- MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+ (16#1D736#, 16#1D74E#), -- MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA
+ (16#1D750#, 16#1D76E#), -- MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+ (16#1D770#, 16#1D788#), -- MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+ (16#1D78A#, 16#1D7A8#), -- MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+ (16#1D7AA#, 16#1D7C2#), -- MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+ (16#1D7C4#, 16#1D7C9#), -- MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+ (16#20000#, 16#2A6D6#), -- <CJK Ideograph Extension B, First> .. <CJK Ideograph Extension B, Last>
+ (16#2F800#, 16#2FA1D#)); -- CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+ -- The following table includes all characters considered spaces, i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Separator, Space (Zs)
+
+ UTF_32_Spaces : constant UTF_32_Ranges := (
+ (16#00020#, 16#00020#), -- SPACE .. SPACE
+ (16#000A0#, 16#000A0#), -- NO-BREAK SPACE .. NO-BREAK SPACE
+ (16#01680#, 16#01680#), -- OGHAM SPACE MARK .. OGHAM SPACE MARK
+ (16#0180E#, 16#0180E#), -- MONGOLIAN VOWEL SEPARATOR .. MONGOLIAN VOWEL SEPARATOR
+ (16#02000#, 16#0200B#), -- EN QUAD .. ZERO WIDTH SPACE
+ (16#0202F#, 16#0202F#), -- NARROW NO-BREAK SPACE .. NARROW NO-BREAK SPACE
+ (16#0205F#, 16#0205F#), -- MEDIUM MATHEMATICAL SPACE .. MEDIUM MATHEMATICAL SPACE
+ (16#03000#, 16#03000#)); -- IDEOGRAPHIC SPACE .. IDEOGRAPHIC SPACE
+
+ -- The following table includes all characters considered punctuation,
+ -- i.e. all characters from the Unicode table with categories:
+
+ -- Punctuation, Connector (Pc)
+
+ UTF_32_Punctuation : constant UTF_32_Ranges := (
+ (16#0005F#, 16#0005F#), -- LOW LINE .. LOW LINE
+ (16#0203F#, 16#02040#), -- UNDERTIE .. CHARACTER TIE
+ (16#02054#, 16#02054#), -- INVERTED UNDERTIE .. INVERTED UNDERTIE
+ (16#030FB#, 16#030FB#), -- KATAKANA MIDDLE DOT .. KATAKANA MIDDLE DOT
+ (16#0FE33#, 16#0FE34#), -- PRESENTATION FORM FOR VERTICAL LOW LINE .. PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+ (16#0FE4D#, 16#0FE4F#), -- DASHED LOW LINE .. WAVY LOW LINE
+ (16#0FF3F#, 16#0FF3F#), -- FULLWIDTH LOW LINE .. FULLWIDTH LOW LINE
+ (16#0FF65#, 16#0FF65#)); -- HALFWIDTH KATAKANA MIDDLE DOT .. HALFWIDTH KATAKANA MIDDLE DOT
+
+ -- The following table includes all characters considered as other format,
+ -- i.e. all characters from the Unicode table with categories:
+
+ -- Other, Format (Cf)
+
+ UTF_32_Other_Format : constant UTF_32_Ranges := (
+ (16#000AD#, 16#000AD#), -- SOFT HYPHEN .. SOFT HYPHEN
+ (16#00600#, 16#00603#), -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+ (16#006DD#, 16#006DD#), -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+ (16#0070F#, 16#0070F#), -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+ (16#017B4#, 16#017B5#), -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+ (16#0200C#, 16#0200F#), -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+ (16#0202A#, 16#0202E#), -- LEFT-TO-RIGHT EMBEDDING .. RIGHT-TO-LEFT OVERRIDE
+ (16#02060#, 16#02063#), -- WORD JOINER .. INVISIBLE SEPARATOR
+ (16#0206A#, 16#0206F#), -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+ (16#0FEFF#, 16#0FEFF#), -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+ (16#0FFF9#, 16#0FFFB#), -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+ (16#1D173#, 16#1D17A#), -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+ (16#E0001#, 16#E0001#), -- LANGUAGE TAG .. LANGUAGE TAG
+ (16#E0020#, 16#E007F#)); -- TAG SPACE .. CANCEL TAG
+
+ -- The following table includes all characters considered marks i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Mark, Nonspacing (Mn)
+ -- Mark, Spacing Combining (Mc)
+
+ UTF_32_Marks : constant UTF_32_Ranges := (
+ (16#00300#, 16#00357#), -- COMBINING GRAVE ACCENT .. COMBINING RIGHT HALF RING ABOVE
+ (16#0035D#, 16#0036F#), -- COMBINING DOUBLE BREVE .. COMBINING LATIN SMALL LETTER X
+ (16#00483#, 16#00486#), -- COMBINING CYRILLIC TITLO .. COMBINING CYRILLIC PSILI PNEUMATA
+ (16#00591#, 16#005A1#), -- HEBREW ACCENT ETNAHTA .. HEBREW ACCENT PAZER
+ (16#005A3#, 16#005B9#), -- HEBREW ACCENT MUNAH .. HEBREW POINT HOLAM
+ (16#005BB#, 16#005BD#), -- HEBREW POINT QUBUTS .. HEBREW POINT METEG
+ (16#005BF#, 16#005BF#), -- HEBREW POINT RAFE .. HEBREW POINT RAFE
+ (16#005C1#, 16#005C2#), -- HEBREW POINT SHIN DOT .. HEBREW POINT SIN DOT
+ (16#005C4#, 16#005C4#), -- HEBREW MARK UPPER DOT .. HEBREW MARK UPPER DOT
+ (16#00610#, 16#00615#), -- ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM .. ARABIC SMALL HIGH TAH
+ (16#0064B#, 16#00658#), -- ARABIC FATHATAN .. ARABIC MARK NOON GHUNNA
+ (16#00670#, 16#00670#), -- ARABIC LETTER SUPERSCRIPT ALEF .. ARABIC LETTER SUPERSCRIPT ALEF
+ (16#006D6#, 16#006DC#), -- ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA .. ARABIC SMALL HIGH SEEN
+ (16#006DF#, 16#006E4#), -- ARABIC SMALL HIGH ROUNDED ZERO .. ARABIC SMALL HIGH MADDA
+ (16#006E7#, 16#006E8#), -- ARABIC SMALL HIGH YEH .. ARABIC SMALL HIGH NOON
+ (16#006EA#, 16#006ED#), -- ARABIC EMPTY CENTRE LOW STOP .. ARABIC SMALL LOW MEEM
+ (16#00711#, 16#00711#), -- SYRIAC LETTER SUPERSCRIPT ALAPH .. SYRIAC LETTER SUPERSCRIPT ALAPH
+ (16#00730#, 16#0074A#), -- SYRIAC PTHAHA ABOVE .. SYRIAC BARREKH
+ (16#007A6#, 16#007B0#), -- THAANA ABAFILI .. THAANA SUKUN
+ (16#00901#, 16#00903#), -- DEVANAGARI SIGN CANDRABINDU .. DEVANAGARI SIGN VISARGA
+ (16#0093C#, 16#0093C#), -- DEVANAGARI SIGN NUKTA .. DEVANAGARI SIGN NUKTA
+ (16#0093E#, 16#0094D#), -- DEVANAGARI VOWEL SIGN AA .. DEVANAGARI SIGN VIRAMA
+ (16#00951#, 16#00954#), -- DEVANAGARI STRESS SIGN UDATTA .. DEVANAGARI ACUTE ACCENT
+ (16#00962#, 16#00963#), -- DEVANAGARI VOWEL SIGN VOCALIC L .. DEVANAGARI VOWEL SIGN VOCALIC LL
+ (16#00981#, 16#00983#), -- BENGALI SIGN CANDRABINDU .. BENGALI SIGN VISARGA
+ (16#009BC#, 16#009BC#), -- BENGALI SIGN NUKTA .. BENGALI SIGN NUKTA
+ (16#009BE#, 16#009C4#), -- BENGALI VOWEL SIGN AA .. BENGALI VOWEL SIGN VOCALIC RR
+ (16#009C7#, 16#009C8#), -- BENGALI VOWEL SIGN E .. BENGALI VOWEL SIGN AI
+ (16#009CB#, 16#009CD#), -- BENGALI VOWEL SIGN O .. BENGALI SIGN VIRAMA
+ (16#009D7#, 16#009D7#), -- BENGALI AU LENGTH MARK .. BENGALI AU LENGTH MARK
+ (16#009E2#, 16#009E3#), -- BENGALI VOWEL SIGN VOCALIC L .. BENGALI VOWEL SIGN VOCALIC LL
+ (16#00A01#, 16#00A03#), -- GURMUKHI SIGN ADAK BINDI .. GURMUKHI SIGN VISARGA
+ (16#00A3C#, 16#00A3C#), -- GURMUKHI SIGN NUKTA .. GURMUKHI SIGN NUKTA
+ (16#00A3E#, 16#00A42#), -- GURMUKHI VOWEL SIGN AA .. GURMUKHI VOWEL SIGN UU
+ (16#00A47#, 16#00A48#), -- GURMUKHI VOWEL SIGN EE .. GURMUKHI VOWEL SIGN AI
+ (16#00A4B#, 16#00A4D#), -- GURMUKHI VOWEL SIGN OO .. GURMUKHI SIGN VIRAMA
+ (16#00A70#, 16#00A71#), -- GURMUKHI TIPPI .. GURMUKHI ADDAK
+ (16#00A81#, 16#00A83#), -- GUJARATI SIGN CANDRABINDU .. GUJARATI SIGN VISARGA
+ (16#00ABC#, 16#00ABC#), -- GUJARATI SIGN NUKTA .. GUJARATI SIGN NUKTA
+ (16#00ABE#, 16#00AC5#), -- GUJARATI VOWEL SIGN AA .. GUJARATI VOWEL SIGN CANDRA E
+ (16#00AC7#, 16#00AC9#), -- GUJARATI VOWEL SIGN E .. GUJARATI VOWEL SIGN CANDRA O
+ (16#00ACB#, 16#00ACD#), -- GUJARATI VOWEL SIGN O .. GUJARATI SIGN VIRAMA
+ (16#00AE2#, 16#00AE3#), -- GUJARATI VOWEL SIGN VOCALIC L .. GUJARATI VOWEL SIGN VOCALIC LL
+ (16#00B01#, 16#00B03#), -- ORIYA SIGN CANDRABINDU .. ORIYA SIGN VISARGA
+ (16#00B3C#, 16#00B3C#), -- ORIYA SIGN NUKTA .. ORIYA SIGN NUKTA
+ (16#00B3E#, 16#00B43#), -- ORIYA VOWEL SIGN AA .. ORIYA VOWEL SIGN VOCALIC R
+ (16#00B47#, 16#00B48#), -- ORIYA VOWEL SIGN E .. ORIYA VOWEL SIGN AI
+ (16#00B4B#, 16#00B4D#), -- ORIYA VOWEL SIGN O .. ORIYA SIGN VIRAMA
+ (16#00B56#, 16#00B57#), -- ORIYA AI LENGTH MARK .. ORIYA AU LENGTH MARK
+ (16#00B82#, 16#00B82#), -- TAMIL SIGN ANUSVARA .. TAMIL SIGN ANUSVARA
+ (16#00BBE#, 16#00BC2#), -- TAMIL VOWEL SIGN AA .. TAMIL VOWEL SIGN UU
+ (16#00BC6#, 16#00BC8#), -- TAMIL VOWEL SIGN E .. TAMIL VOWEL SIGN AI
+ (16#00BCA#, 16#00BCD#), -- TAMIL VOWEL SIGN O .. TAMIL SIGN VIRAMA
+ (16#00BD7#, 16#00BD7#), -- TAMIL AU LENGTH MARK .. TAMIL AU LENGTH MARK
+ (16#00C01#, 16#00C03#), -- TELUGU SIGN CANDRABINDU .. TELUGU SIGN VISARGA
+ (16#00C3E#, 16#00C44#), -- TELUGU VOWEL SIGN AA .. TELUGU VOWEL SIGN VOCALIC RR
+ (16#00C46#, 16#00C48#), -- TELUGU VOWEL SIGN E .. TELUGU VOWEL SIGN AI
+ (16#00C4A#, 16#00C4D#), -- TELUGU VOWEL SIGN O .. TELUGU SIGN VIRAMA
+ (16#00C55#, 16#00C56#), -- TELUGU LENGTH MARK .. TELUGU AI LENGTH MARK
+ (16#00C82#, 16#00C83#), -- KANNADA SIGN ANUSVARA .. KANNADA SIGN VISARGA
+ (16#00CBC#, 16#00CBC#), -- KANNADA SIGN NUKTA .. KANNADA SIGN NUKTA
+ (16#00CBE#, 16#00CC4#), -- KANNADA VOWEL SIGN AA .. KANNADA VOWEL SIGN VOCALIC RR
+ (16#00CC6#, 16#00CC8#), -- KANNADA VOWEL SIGN E .. KANNADA VOWEL SIGN AI
+ (16#00CCA#, 16#00CCD#), -- KANNADA VOWEL SIGN O .. KANNADA SIGN VIRAMA
+ (16#00CD5#, 16#00CD6#), -- KANNADA LENGTH MARK .. KANNADA AI LENGTH MARK
+ (16#00D02#, 16#00D03#), -- MALAYALAM SIGN ANUSVARA .. MALAYALAM SIGN VISARGA
+ (16#00D3E#, 16#00D43#), -- MALAYALAM VOWEL SIGN AA .. MALAYALAM VOWEL SIGN VOCALIC R
+ (16#00D46#, 16#00D48#), -- MALAYALAM VOWEL SIGN E .. MALAYALAM VOWEL SIGN AI
+ (16#00D4A#, 16#00D4D#), -- MALAYALAM VOWEL SIGN O .. MALAYALAM SIGN VIRAMA
+ (16#00D57#, 16#00D57#), -- MALAYALAM AU LENGTH MARK .. MALAYALAM AU LENGTH MARK
+ (16#00D82#, 16#00D83#), -- SINHALA SIGN ANUSVARAYA .. SINHALA SIGN VISARGAYA
+ (16#00DCA#, 16#00DCA#), -- SINHALA SIGN AL-LAKUNA .. SINHALA SIGN AL-LAKUNA
+ (16#00DCF#, 16#00DD4#), -- SINHALA VOWEL SIGN AELA-PILLA .. SINHALA VOWEL SIGN KETTI PAA-PILLA
+ (16#00DD6#, 16#00DD6#), -- SINHALA VOWEL SIGN DIGA PAA-PILLA .. SINHALA VOWEL SIGN DIGA PAA-PILLA
+ (16#00DD8#, 16#00DDF#), -- SINHALA VOWEL SIGN GAETTA-PILLA .. SINHALA VOWEL SIGN GAYANUKITTA
+ (16#00DF2#, 16#00DF3#), -- SINHALA VOWEL SIGN DIGA GAETTA-PILLA .. SINHALA VOWEL SIGN DIGA GAYANUKITTA
+ (16#00E31#, 16#00E31#), -- THAI CHARACTER MAI HAN-AKAT .. THAI CHARACTER MAI HAN-AKAT
+ (16#00E34#, 16#00E3A#), -- THAI CHARACTER SARA I .. THAI CHARACTER PHINTHU
+ (16#00E47#, 16#00E4E#), -- THAI CHARACTER MAITAIKHU .. THAI CHARACTER YAMAKKAN
+ (16#00EB1#, 16#00EB1#), -- LAO VOWEL SIGN MAI KAN .. LAO VOWEL SIGN MAI KAN
+ (16#00EB4#, 16#00EB9#), -- LAO VOWEL SIGN I .. LAO VOWEL SIGN UU
+ (16#00EBB#, 16#00EBC#), -- LAO VOWEL SIGN MAI KON .. LAO SEMIVOWEL SIGN LO
+ (16#00EC8#, 16#00ECD#), -- LAO TONE MAI EK .. LAO NIGGAHITA
+ (16#00F18#, 16#00F19#), -- TIBETAN ASTROLOGICAL SIGN -KHYUD PA .. TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+ (16#00F35#, 16#00F35#), -- TIBETAN MARK NGAS BZUNG NYI ZLA .. TIBETAN MARK NGAS BZUNG NYI ZLA
+ (16#00F37#, 16#00F37#), -- TIBETAN MARK NGAS BZUNG SGOR RTAGS .. TIBETAN MARK NGAS BZUNG SGOR RTAGS
+ (16#00F39#, 16#00F39#), -- TIBETAN MARK TSA -PHRU .. TIBETAN MARK TSA -PHRU
+ (16#00F3E#, 16#00F3F#), -- TIBETAN SIGN YAR TSHES .. TIBETAN SIGN MAR TSHES
+ (16#00F71#, 16#00F84#), -- TIBETAN VOWEL SIGN AA .. TIBETAN MARK HALANTA
+ (16#00F86#, 16#00F87#), -- TIBETAN SIGN LCI RTAGS .. TIBETAN SIGN YANG RTAGS
+ (16#00F90#, 16#00F97#), -- TIBETAN SUBJOINED LETTER KA .. TIBETAN SUBJOINED LETTER JA
+ (16#00F99#, 16#00FBC#), -- TIBETAN SUBJOINED LETTER NYA .. TIBETAN SUBJOINED LETTER FIXED-FORM RA
+ (16#00FC6#, 16#00FC6#), -- TIBETAN SYMBOL PADMA GDAN .. TIBETAN SYMBOL PADMA GDAN
+ (16#0102C#, 16#01032#), -- MYANMAR VOWEL SIGN AA .. MYANMAR VOWEL SIGN AI
+ (16#01036#, 16#01039#), -- MYANMAR SIGN ANUSVARA .. MYANMAR SIGN VIRAMA
+ (16#01056#, 16#01059#), -- MYANMAR VOWEL SIGN VOCALIC R .. MYANMAR VOWEL SIGN VOCALIC LL
+ (16#01712#, 16#01714#), -- TAGALOG VOWEL SIGN I .. TAGALOG SIGN VIRAMA
+ (16#01732#, 16#01734#), -- HANUNOO VOWEL SIGN I .. HANUNOO SIGN PAMUDPOD
+ (16#01752#, 16#01753#), -- BUHID VOWEL SIGN I .. BUHID VOWEL SIGN U
+ (16#01772#, 16#01773#), -- TAGBANWA VOWEL SIGN I .. TAGBANWA VOWEL SIGN U
+ (16#017B6#, 16#017D3#), -- KHMER VOWEL SIGN AA .. KHMER SIGN BATHAMASAT
+ (16#017DD#, 16#017DD#), -- KHMER SIGN ATTHACAN .. KHMER SIGN ATTHACAN
+ (16#0180B#, 16#0180D#), -- MONGOLIAN FREE VARIATION SELECTOR ONE .. MONGOLIAN FREE VARIATION SELECTOR THREE
+ (16#018A9#, 16#018A9#), -- MONGOLIAN LETTER ALI GALI DAGALGA .. MONGOLIAN LETTER ALI GALI DAGALGA
+ (16#01920#, 16#0192B#), -- LIMBU VOWEL SIGN A .. LIMBU SUBJOINED LETTER WA
+ (16#01930#, 16#0193B#), -- LIMBU SMALL LETTER KA .. LIMBU SIGN SA-I
+ (16#020D0#, 16#020DC#), -- COMBINING LEFT HARPOON ABOVE .. COMBINING FOUR DOTS ABOVE
+ (16#020E1#, 16#020E1#), -- COMBINING LEFT RIGHT ARROW ABOVE .. COMBINING LEFT RIGHT ARROW ABOVE
+ (16#020E5#, 16#020EA#), -- COMBINING REVERSE SOLIDUS OVERLAY .. COMBINING LEFTWARDS ARROW OVERLAY
+ (16#0302A#, 16#0302F#), -- IDEOGRAPHIC LEVEL TONE MARK .. HANGUL DOUBLE DOT TONE MARK
+ (16#03099#, 16#0309A#), -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK .. COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ (16#0FB1E#, 16#0FB1E#), -- HEBREW POINT JUDEO-SPANISH VARIKA .. HEBREW POINT JUDEO-SPANISH VARIKA
+ (16#0FE00#, 16#0FE0F#), -- VARIATION SELECTOR-1 .. VARIATION SELECTOR-16
+ (16#0FE20#, 16#0FE23#), -- COMBINING LIGATURE LEFT HALF .. COMBINING DOUBLE TILDE RIGHT HALF
+ (16#1D165#, 16#1D169#), -- MUSICAL SYMBOL COMBINING STEM .. MUSICAL SYMBOL COMBINING TREMOLO-3
+ (16#1D16D#, 16#1D172#), -- MUSICAL SYMBOL COMBINING AUGMENTATION DOT .. MUSICAL SYMBOL COMBINING FLAG-5
+ (16#1D17B#, 16#1D182#), -- MUSICAL SYMBOL COMBINING ACCENT .. MUSICAL SYMBOL COMBINING LOURE
+ (16#1D185#, 16#1D18B#), -- MUSICAL SYMBOL COMBINING DOIT .. MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+ (16#1D1AA#, 16#1D1AD#), -- MUSICAL SYMBOL COMBINING DOWN BOW .. MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+ (16#E0100#, 16#E01EF#)); -- VARIATION SELECTOR-17 .. VARIATION SELECTOR-256
+
+ -- The following table includes all characters considered non-graphic,
+ -- i.e. all characters from the Unicode table with categories:
+
+ -- Other, Control (Cc)
+ -- Other, Private Use (Co)
+ -- Other, Surrogate (Cs)
+ -- Other, Format (Cf)
+ -- Separator, Line (Zl)
+ -- Separator, Paragraph (Zp)
+
+ -- In addition, the characters FFFE and FFFF are excluded. Note that the
+ -- defined Ada category of format effector is subsumed by the above set
+ -- of Unicode categories.
+
+ UTF_32_Non_Graphic : constant UTF_32_Ranges := (
+ (16#00000#, 16#0001F#), -- <control> .. <control>
+ (16#0007F#, 16#0009F#), -- <control> .. <control>
+ (16#000AD#, 16#000AD#), -- SOFT HYPHEN .. SOFT HYPHEN
+ (16#00600#, 16#00603#), -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+ (16#006DD#, 16#006DD#), -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+ (16#0070F#, 16#0070F#), -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+ (16#017B4#, 16#017B5#), -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+ (16#0200C#, 16#0200F#), -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+ (16#02028#, 16#0202E#), -- LINE SEPARATOR .. RIGHT-TO-LEFT OVERRIDE
+ (16#02060#, 16#02063#), -- WORD JOINER .. INVISIBLE SEPARATOR
+ (16#0206A#, 16#0206F#), -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+ (16#0D800#, 16#0F8FF#), -- <Non Private Use High Surrogate, First> .. <Private Use, Last>
+ (16#0FEFF#, 16#0FEFF#), -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+ (16#0FFF9#, 16#0FFFB#), -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+ (16#0FFFE#, 16#0FFFF#), -- excluded code positions
+ (16#1D173#, 16#1D17A#), -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+ (16#E0001#, 16#E0001#), -- LANGUAGE TAG .. LANGUAGE TAG
+ (16#E0020#, 16#E007F#), -- TAG SPACE .. CANCEL TAG
+ (16#F0000#, 16#FFFFD#), -- <Plane 15 Private Use, First> .. <Plane 15 Private Use, Last>
+ (16#100000#, 16#10FFFD#)); -- <Plane 16 Private Use, First> .. <Plane 16 Private Use, Last>
+
+ -- The following two tables define the mapping to upper case. The first
+ -- table gives the ranges of lower case letters. The corresponding entry
+ -- in Uppercase_Adjust shows the amount to be added (or subtracted) from
+ -- the code value to get the corresponding upper case letter.
+
+ -- Note that this folding is not reversible, for example lower case
+ -- dotless i folds to normal upper case I, and that cannot be reversed.
+
+ Lower_Case_Letters : constant UTF_32_Ranges := (
+ (16#00061#, 16#0007A#), -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+ (16#000B5#, 16#000B5#), -- MICRO SIGN .. MICRO SIGN
+ (16#000E0#, 16#000F6#), -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+ (16#000F8#, 16#000FE#), -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+ (16#000FF#, 16#000FF#), -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+ (16#00101#, 16#00101#), -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+ (16#00103#, 16#00103#), -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+ (16#00105#, 16#00105#), -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+ (16#00107#, 16#00107#), -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+ (16#00109#, 16#00109#), -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+ (16#0010B#, 16#0010B#), -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+ (16#0010D#, 16#0010D#), -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+ (16#0010F#, 16#0010F#), -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+ (16#00111#, 16#00111#), -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+ (16#00113#, 16#00113#), -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+ (16#00115#, 16#00115#), -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+ (16#00117#, 16#00117#), -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+ (16#00119#, 16#00119#), -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+ (16#0011B#, 16#0011B#), -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+ (16#0011D#, 16#0011D#), -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+ (16#0011F#, 16#0011F#), -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+ (16#00121#, 16#00121#), -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+ (16#00123#, 16#00123#), -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+ (16#00125#, 16#00125#), -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+ (16#00127#, 16#00127#), -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+ (16#00129#, 16#00129#), -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+ (16#0012B#, 16#0012B#), -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+ (16#0012D#, 16#0012D#), -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+ (16#0012F#, 16#0012F#), -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+ (16#00131#, 16#00131#), -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+ (16#00133#, 16#00133#), -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+ (16#00135#, 16#00135#), -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+ (16#00137#, 16#00137#), -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+ (16#0013A#, 16#0013A#), -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+ (16#0013C#, 16#0013C#), -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+ (16#0013E#, 16#0013E#), -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+ (16#00140#, 16#00140#), -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+ (16#00142#, 16#00142#), -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+ (16#00144#, 16#00144#), -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+ (16#00146#, 16#00146#), -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+ (16#00148#, 16#00148#), -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+ (16#0014B#, 16#0014B#), -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+ (16#0014D#, 16#0014D#), -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+ (16#0014F#, 16#0014F#), -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+ (16#00151#, 16#00151#), -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ (16#00153#, 16#00153#), -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+ (16#00155#, 16#00155#), -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+ (16#00157#, 16#00157#), -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+ (16#00159#, 16#00159#), -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+ (16#0015B#, 16#0015B#), -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+ (16#0015D#, 16#0015D#), -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+ (16#0015F#, 16#0015F#), -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+ (16#00161#, 16#00161#), -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+ (16#00163#, 16#00163#), -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+ (16#00165#, 16#00165#), -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+ (16#00167#, 16#00167#), -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+ (16#00169#, 16#00169#), -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+ (16#0016B#, 16#0016B#), -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+ (16#0016D#, 16#0016D#), -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+ (16#0016F#, 16#0016F#), -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+ (16#00171#, 16#00171#), -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ (16#00173#, 16#00173#), -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+ (16#00175#, 16#00175#), -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+ (16#00177#, 16#00177#), -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ (16#0017A#, 16#0017A#), -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+ (16#0017C#, 16#0017C#), -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+ (16#0017E#, 16#0017E#), -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+ (16#0017F#, 16#0017F#), -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+ (16#00183#, 16#00183#), -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+ (16#00185#, 16#00185#), -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+ (16#00188#, 16#00188#), -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+ (16#0018C#, 16#0018C#), -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+ (16#00192#, 16#00192#), -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+ (16#00195#, 16#00195#), -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+ (16#00199#, 16#00199#), -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+ (16#0019E#, 16#0019E#), -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+ (16#001A1#, 16#001A1#), -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+ (16#001A3#, 16#001A3#), -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+ (16#001A5#, 16#001A5#), -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+ (16#001A8#, 16#001A8#), -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+ (16#001AD#, 16#001AD#), -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+ (16#001B0#, 16#001B0#), -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+ (16#001B4#, 16#001B4#), -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+ (16#001B6#, 16#001B6#), -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+ (16#001B9#, 16#001B9#), -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+ (16#001BD#, 16#001BD#), -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+ (16#001BF#, 16#001BF#), -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+ (16#001C5#, 16#001C5#), -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ (16#001C6#, 16#001C6#), -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+ (16#001C8#, 16#001C8#), -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ (16#001C9#, 16#001C9#), -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+ (16#001CB#, 16#001CB#), -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ (16#001CC#, 16#001CC#), -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+ (16#001CE#, 16#001CE#), -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+ (16#001D0#, 16#001D0#), -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+ (16#001D2#, 16#001D2#), -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+ (16#001D4#, 16#001D4#), -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+ (16#001D6#, 16#001D6#), -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ (16#001D8#, 16#001D8#), -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ (16#001DA#, 16#001DA#), -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ (16#001DC#, 16#001DC#), -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ (16#001DD#, 16#001DD#), -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+ (16#001DF#, 16#001DF#), -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+ (16#001E1#, 16#001E1#), -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ (16#001E3#, 16#001E3#), -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+ (16#001E5#, 16#001E5#), -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+ (16#001E7#, 16#001E7#), -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+ (16#001E9#, 16#001E9#), -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+ (16#001EB#, 16#001EB#), -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+ (16#001ED#, 16#001ED#), -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ (16#001EF#, 16#001EF#), -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+ (16#001F2#, 16#001F2#), -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ (16#001F3#, 16#001F3#), -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+ (16#001F5#, 16#001F5#), -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+ (16#001F9#, 16#001F9#), -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+ (16#001FB#, 16#001FB#), -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+ (16#001FD#, 16#001FD#), -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+ (16#001FF#, 16#001FF#), -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ (16#00201#, 16#00201#), -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ (16#00203#, 16#00203#), -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+ (16#00205#, 16#00205#), -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ (16#00207#, 16#00207#), -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+ (16#00209#, 16#00209#), -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ (16#0020B#, 16#0020B#), -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+ (16#0020D#, 16#0020D#), -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ (16#0020F#, 16#0020F#), -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+ (16#00211#, 16#00211#), -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ (16#00213#, 16#00213#), -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+ (16#00215#, 16#00215#), -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ (16#00217#, 16#00217#), -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+ (16#00219#, 16#00219#), -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+ (16#0021B#, 16#0021B#), -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+ (16#0021D#, 16#0021D#), -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+ (16#0021F#, 16#0021F#), -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+ (16#00223#, 16#00223#), -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+ (16#00225#, 16#00225#), -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+ (16#00227#, 16#00227#), -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+ (16#00229#, 16#00229#), -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+ (16#0022B#, 16#0022B#), -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+ (16#0022D#, 16#0022D#), -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+ (16#0022F#, 16#0022F#), -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+ (16#00231#, 16#00231#), -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+ (16#00233#, 16#00233#), -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+ (16#00253#, 16#00253#), -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+ (16#00254#, 16#00254#), -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+ (16#00256#, 16#00257#), -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+ (16#00259#, 16#00259#), -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+ (16#0025B#, 16#0025B#), -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+ (16#00260#, 16#00260#), -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+ (16#00263#, 16#00263#), -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+ (16#00268#, 16#00268#), -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+ (16#00269#, 16#00269#), -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+ (16#0026F#, 16#0026F#), -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+ (16#00272#, 16#00272#), -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+ (16#00275#, 16#00275#), -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+ (16#00280#, 16#00280#), -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+ (16#00283#, 16#00283#), -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+ (16#00288#, 16#00288#), -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+ (16#0028A#, 16#0028B#), -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+ (16#00292#, 16#00292#), -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+ (16#003AC#, 16#003AC#), -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+ (16#003AD#, 16#003AF#), -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+ (16#003B1#, 16#003C1#), -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+ (16#003C2#, 16#003C2#), -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+ (16#003C3#, 16#003CB#), -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ (16#003CC#, 16#003CC#), -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+ (16#003CD#, 16#003CE#), -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+ (16#003D0#, 16#003D0#), -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+ (16#003D1#, 16#003D1#), -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+ (16#003D5#, 16#003D5#), -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+ (16#003D6#, 16#003D6#), -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+ (16#003D9#, 16#003D9#), -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+ (16#003DB#, 16#003DB#), -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+ (16#003DD#, 16#003DD#), -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+ (16#003DF#, 16#003DF#), -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+ (16#003E1#, 16#003E1#), -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+ (16#003E3#, 16#003E3#), -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+ (16#003E5#, 16#003E5#), -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+ (16#003E7#, 16#003E7#), -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+ (16#003E9#, 16#003E9#), -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+ (16#003EB#, 16#003EB#), -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+ (16#003ED#, 16#003ED#), -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+ (16#003EF#, 16#003EF#), -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+ (16#003F0#, 16#003F0#), -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+ (16#003F1#, 16#003F1#), -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+ (16#003F2#, 16#003F2#), -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+ (16#003F5#, 16#003F5#), -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+ (16#00430#, 16#0044F#), -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+ (16#00450#, 16#0045F#), -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+ (16#00461#, 16#00461#), -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+ (16#00463#, 16#00463#), -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+ (16#00465#, 16#00465#), -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+ (16#00467#, 16#00467#), -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+ (16#00469#, 16#00469#), -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+ (16#0046B#, 16#0046B#), -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+ (16#0046D#, 16#0046D#), -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+ (16#0046F#, 16#0046F#), -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+ (16#00471#, 16#00471#), -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+ (16#00473#, 16#00473#), -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+ (16#00475#, 16#00475#), -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+ (16#00477#, 16#00477#), -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ (16#00479#, 16#00479#), -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+ (16#0047B#, 16#0047B#), -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+ (16#0047D#, 16#0047D#), -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+ (16#0047F#, 16#0047F#), -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+ (16#00481#, 16#00481#), -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+ (16#0048B#, 16#0048B#), -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+ (16#0048D#, 16#0048D#), -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+ (16#0048F#, 16#0048F#), -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+ (16#00491#, 16#00491#), -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+ (16#00493#, 16#00493#), -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+ (16#00495#, 16#00495#), -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+ (16#00497#, 16#00497#), -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+ (16#00499#, 16#00499#), -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+ (16#0049B#, 16#0049B#), -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+ (16#0049D#, 16#0049D#), -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+ (16#0049F#, 16#0049F#), -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+ (16#004A1#, 16#004A1#), -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+ (16#004A3#, 16#004A3#), -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+ (16#004A5#, 16#004A5#), -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+ (16#004A7#, 16#004A7#), -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+ (16#004A9#, 16#004A9#), -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+ (16#004AB#, 16#004AB#), -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+ (16#004AD#, 16#004AD#), -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+ (16#004AF#, 16#004AF#), -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+ (16#004B1#, 16#004B1#), -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+ (16#004B3#, 16#004B3#), -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+ (16#004B5#, 16#004B5#), -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+ (16#004B7#, 16#004B7#), -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+ (16#004B9#, 16#004B9#), -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+ (16#004BB#, 16#004BB#), -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+ (16#004BD#, 16#004BD#), -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+ (16#004BF#, 16#004BF#), -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+ (16#004C2#, 16#004C2#), -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+ (16#004C4#, 16#004C4#), -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+ (16#004C6#, 16#004C6#), -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+ (16#004C8#, 16#004C8#), -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+ (16#004CA#, 16#004CA#), -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+ (16#004CC#, 16#004CC#), -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+ (16#004CE#, 16#004CE#), -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+ (16#004D1#, 16#004D1#), -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+ (16#004D3#, 16#004D3#), -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+ (16#004D5#, 16#004D5#), -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+ (16#004D7#, 16#004D7#), -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+ (16#004D9#, 16#004D9#), -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+ (16#004DB#, 16#004DB#), -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+ (16#004DD#, 16#004DD#), -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+ (16#004DF#, 16#004DF#), -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+ (16#004E1#, 16#004E1#), -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+ (16#004E3#, 16#004E3#), -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+ (16#004E5#, 16#004E5#), -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+ (16#004E7#, 16#004E7#), -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+ (16#004E9#, 16#004E9#), -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+ (16#004EB#, 16#004EB#), -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+ (16#004ED#, 16#004ED#), -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+ (16#004EF#, 16#004EF#), -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+ (16#004F1#, 16#004F1#), -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+ (16#004F3#, 16#004F3#), -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+ (16#004F5#, 16#004F5#), -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ (16#004F9#, 16#004F9#), -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ (16#00501#, 16#00501#), -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+ (16#00503#, 16#00503#), -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+ (16#00505#, 16#00505#), -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+ (16#00507#, 16#00507#), -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+ (16#00509#, 16#00509#), -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+ (16#0050B#, 16#0050B#), -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+ (16#0050D#, 16#0050D#), -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+ (16#0050F#, 16#0050F#), -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+ (16#00561#, 16#00586#), -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+ (16#01E01#, 16#01E01#), -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+ (16#01E03#, 16#01E03#), -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+ (16#01E05#, 16#01E05#), -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+ (16#01E07#, 16#01E07#), -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+ (16#01E09#, 16#01E09#), -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+ (16#01E0B#, 16#01E0B#), -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+ (16#01E0D#, 16#01E0D#), -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+ (16#01E0F#, 16#01E0F#), -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+ (16#01E11#, 16#01E11#), -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+ (16#01E13#, 16#01E13#), -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+ (16#01E15#, 16#01E15#), -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+ (16#01E17#, 16#01E17#), -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+ (16#01E19#, 16#01E19#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+ (16#01E1B#, 16#01E1B#), -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+ (16#01E1D#, 16#01E1D#), -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+ (16#01E1F#, 16#01E1F#), -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+ (16#01E21#, 16#01E21#), -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+ (16#01E23#, 16#01E23#), -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+ (16#01E25#, 16#01E25#), -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+ (16#01E27#, 16#01E27#), -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+ (16#01E29#, 16#01E29#), -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+ (16#01E2B#, 16#01E2B#), -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+ (16#01E2D#, 16#01E2D#), -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+ (16#01E2F#, 16#01E2F#), -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+ (16#01E31#, 16#01E31#), -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+ (16#01E33#, 16#01E33#), -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+ (16#01E35#, 16#01E35#), -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+ (16#01E37#, 16#01E37#), -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+ (16#01E39#, 16#01E39#), -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+ (16#01E3B#, 16#01E3B#), -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+ (16#01E3D#, 16#01E3D#), -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+ (16#01E3F#, 16#01E3F#), -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+ (16#01E41#, 16#01E41#), -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+ (16#01E43#, 16#01E43#), -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+ (16#01E45#, 16#01E45#), -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+ (16#01E47#, 16#01E47#), -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+ (16#01E49#, 16#01E49#), -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+ (16#01E4B#, 16#01E4B#), -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+ (16#01E4D#, 16#01E4D#), -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+ (16#01E4F#, 16#01E4F#), -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+ (16#01E51#, 16#01E51#), -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+ (16#01E53#, 16#01E53#), -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+ (16#01E55#, 16#01E55#), -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+ (16#01E57#, 16#01E57#), -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+ (16#01E59#, 16#01E59#), -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+ (16#01E5B#, 16#01E5B#), -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+ (16#01E5D#, 16#01E5D#), -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+ (16#01E5F#, 16#01E5F#), -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+ (16#01E61#, 16#01E61#), -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+ (16#01E63#, 16#01E63#), -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+ (16#01E65#, 16#01E65#), -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+ (16#01E67#, 16#01E67#), -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+ (16#01E69#, 16#01E69#), -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+ (16#01E6B#, 16#01E6B#), -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+ (16#01E6D#, 16#01E6D#), -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+ (16#01E6F#, 16#01E6F#), -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+ (16#01E71#, 16#01E71#), -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+ (16#01E73#, 16#01E73#), -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+ (16#01E75#, 16#01E75#), -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+ (16#01E77#, 16#01E77#), -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+ (16#01E79#, 16#01E79#), -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+ (16#01E7B#, 16#01E7B#), -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+ (16#01E7D#, 16#01E7D#), -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+ (16#01E7F#, 16#01E7F#), -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+ (16#01E81#, 16#01E81#), -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+ (16#01E83#, 16#01E83#), -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+ (16#01E85#, 16#01E85#), -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+ (16#01E87#, 16#01E87#), -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+ (16#01E89#, 16#01E89#), -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+ (16#01E8B#, 16#01E8B#), -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+ (16#01E8D#, 16#01E8D#), -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+ (16#01E8F#, 16#01E8F#), -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+ (16#01E91#, 16#01E91#), -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+ (16#01E93#, 16#01E93#), -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+ (16#01E95#, 16#01E95#), -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+ (16#01E9B#, 16#01E9B#), -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ (16#01EA1#, 16#01EA1#), -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+ (16#01EA3#, 16#01EA3#), -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+ (16#01EA5#, 16#01EA5#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+ (16#01EA7#, 16#01EA7#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+ (16#01EA9#, 16#01EA9#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ (16#01EAB#, 16#01EAB#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+ (16#01EAD#, 16#01EAD#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ (16#01EAF#, 16#01EAF#), -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+ (16#01EB1#, 16#01EB1#), -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+ (16#01EB3#, 16#01EB3#), -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+ (16#01EB5#, 16#01EB5#), -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+ (16#01EB7#, 16#01EB7#), -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+ (16#01EB9#, 16#01EB9#), -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+ (16#01EBB#, 16#01EBB#), -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+ (16#01EBD#, 16#01EBD#), -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+ (16#01EBF#, 16#01EBF#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+ (16#01EC1#, 16#01EC1#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ (16#01EC3#, 16#01EC3#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ (16#01EC5#, 16#01EC5#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+ (16#01EC7#, 16#01EC7#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ (16#01EC9#, 16#01EC9#), -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+ (16#01ECB#, 16#01ECB#), -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+ (16#01ECD#, 16#01ECD#), -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+ (16#01ECF#, 16#01ECF#), -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+ (16#01ED1#, 16#01ED1#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+ (16#01ED3#, 16#01ED3#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+ (16#01ED5#, 16#01ED5#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ (16#01ED7#, 16#01ED7#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+ (16#01ED9#, 16#01ED9#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ (16#01EDB#, 16#01EDB#), -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+ (16#01EDD#, 16#01EDD#), -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+ (16#01EDF#, 16#01EDF#), -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+ (16#01EE1#, 16#01EE1#), -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+ (16#01EE3#, 16#01EE3#), -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+ (16#01EE5#, 16#01EE5#), -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+ (16#01EE7#, 16#01EE7#), -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+ (16#01EE9#, 16#01EE9#), -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+ (16#01EEB#, 16#01EEB#), -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+ (16#01EED#, 16#01EED#), -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+ (16#01EEF#, 16#01EEF#), -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+ (16#01EF1#, 16#01EF1#), -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+ (16#01EF3#, 16#01EF3#), -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+ (16#01EF5#, 16#01EF5#), -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+ (16#01EF7#, 16#01EF7#), -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+ (16#01EF9#, 16#01EF9#), -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+ (16#01F00#, 16#01F07#), -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ (16#01F10#, 16#01F15#), -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ (16#01F20#, 16#01F27#), -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+ (16#01F30#, 16#01F37#), -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+ (16#01F40#, 16#01F45#), -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ (16#01F51#, 16#01F51#), -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+ (16#01F53#, 16#01F53#), -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+ (16#01F55#, 16#01F55#), -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+ (16#01F57#, 16#01F57#), -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ (16#01F60#, 16#01F67#), -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ (16#01F70#, 16#01F71#), -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+ (16#01F72#, 16#01F75#), -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+ (16#01F76#, 16#01F77#), -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+ (16#01F78#, 16#01F79#), -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+ (16#01F7A#, 16#01F7B#), -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+ (16#01F7C#, 16#01F7D#), -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+ (16#01F80#, 16#01F87#), -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ (16#01F90#, 16#01F97#), -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ (16#01FA0#, 16#01FA7#), -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ (16#01FB0#, 16#01FB1#), -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+ (16#01FB3#, 16#01FB3#), -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ (16#01FBE#, 16#01FBE#), -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+ (16#01FC3#, 16#01FC3#), -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ (16#01FD0#, 16#01FD1#), -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+ (16#01FE0#, 16#01FE1#), -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+ (16#01FE5#, 16#01FE5#), -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+ (16#01FF3#, 16#01FF3#), -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ (16#0FF41#, 16#0FF5A#), -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+ (16#10428#, 16#1044D#)); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+
+ Upper_Case_Adjust : constant array (Lower_Case_Letters'Range) of UTF_32 := (
+ -32, -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+ 743, -- MICRO SIGN .. MICRO SIGN
+ -32, -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+ -32, -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+ 121, -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+ -1, -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+ -1, -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+ -1, -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+ -1, -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+ -1, -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+ -1, -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+ -1, -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+ -1, -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+ -1, -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+ -1, -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+ -1, -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+ -1, -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+ -1, -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+ -1, -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+ -1, -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+ -1, -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+ -1, -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+ -232, -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+ -1, -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+ -1, -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+ -1, -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+ -1, -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+ -1, -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+ -1, -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+ -1, -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+ -1, -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+ -1, -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+ -1, -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+ -1, -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+ -1, -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+ -1, -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+ -1, -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ -1, -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+ -1, -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+ -1, -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+ -1, -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+ -1, -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+ -1, -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+ -1, -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+ -1, -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+ -1, -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+ -1, -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+ -1, -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+ -1, -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+ -1, -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+ -1, -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+ -1, -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ -1, -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+ -1, -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+ -1, -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+ -300, -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+ -1, -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+ -1, -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+ -1, -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+ -1, -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+ -1, -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+ 97, -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+ -1, -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+ 130, -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+ -1, -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+ -1, -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+ -1, -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+ -1, -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+ -1, -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+ -1, -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+ -1, -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+ -1, -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+ -1, -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+ -1, -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+ 56, -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+ -1, -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ -2, -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+ -1, -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ -2, -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+ -1, -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ -2, -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+ -1, -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+ -1, -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+ -1, -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+ -1, -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ -79, -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+ -1, -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+ -1, -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ -1, -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+ -1, -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+ -1, -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+ -1, -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+ -1, -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+ -1, -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ -1, -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+ -1, -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ -2, -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+ -1, -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+ -1, -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+ -1, -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+ -1, -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+ -1, -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ -1, -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+ -1, -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+ -1, -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+ -1, -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+ -1, -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+ -1, -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+ -1, -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+ -1, -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+ -1, -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+ -1, -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+ -1, -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+ -210, -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+ -206, -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+ -205, -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+ -202, -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+ -203, -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+ -205, -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+ -207, -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+ -209, -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+ -211, -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+ -211, -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+ -213, -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+ -214, -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+ -218, -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+ -218, -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+ -218, -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+ -217, -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+ -219, -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+ -38, -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+ -37, -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+ -32, -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+ -31, -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+ -32, -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ -64, -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+ -63, -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+ -62, -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+ -57, -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+ -47, -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+ -54, -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+ -1, -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+ -1, -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+ -1, -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+ -1, -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+ -1, -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+ -1, -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+ -1, -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+ -1, -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+ -1, -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+ -1, -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+ -1, -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+ -1, -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+ -86, -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+ -80, -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+ -79, -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+ -96, -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+ -32, -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+ -80, -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+ -1, -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+ -1, -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+ -1, -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+ -1, -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+ -1, -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+ -1, -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+ -1, -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+ -1, -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+ -1, -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+ -1, -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+ -1, -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+ -1, -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ -1, -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+ -1, -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+ -1, -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+ -1, -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+ -1, -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+ -1, -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+ -1, -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+ -1, -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+ -1, -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+ -1, -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+ -1, -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+ -1, -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+ -1, -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+ -1, -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+ -1, -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+ -1, -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+ -1, -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+ -1, -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+ -1, -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+ -1, -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+ -1, -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+ -1, -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+ -1, -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+ -1, -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+ -1, -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+ -1, -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+ -1, -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+ -1, -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+ -1, -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+ -1, -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+ -1, -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+ -1, -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+ -1, -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+ -1, -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+ -1, -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+ -1, -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+ -1, -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+ -1, -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+ -1, -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+ -1, -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+ -1, -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+ -1, -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+ -48, -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+ -1, -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+ -1, -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+ -1, -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+ -1, -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+ -1, -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+ -1, -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+ -1, -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+ -1, -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+ -1, -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+ -1, -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+ -1, -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+ -1, -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+ -1, -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+ -1, -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+ -1, -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+ -1, -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+ -1, -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+ -1, -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+ -1, -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+ -1, -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+ -1, -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+ -1, -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+ -1, -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+ -1, -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+ -1, -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+ -1, -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+ -1, -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+ -1, -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+ -1, -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+ -1, -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+ -1, -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+ -59, -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+ -1, -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ -1, -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ -1, -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+ -1, -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+ -1, -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+ -1, -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+ 8, -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ 8, -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ 74, -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+ 86, -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+ 100, -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+ 128, -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+ 112, -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+ 126, -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+ 8, -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+ 9, -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ -7205, -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+ 9, -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+ 8, -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+ 7, -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+ 9, -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ -32, -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+ -40); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+
+
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ function Range_Search (U : UTF_32; R : UTF_32_Ranges) return Natural;
+ -- Searches the given ranges (which must be in ascending order by Lo value)
+ -- and returns the index of the matching range in R if U matches one of the
+ -- ranges. If U matches none of the ranges, returns zero.
+
+ ---------------------
+ -- Is_UTF_32_Digit --
+ ---------------------
+
+ function Is_UTF_32_Digit (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Digits) /= 0;
+ end Is_UTF_32_Digit;
+
+ ----------------------
+ -- Is_UTF_32_Letter --
+ ----------------------
+
+ function Is_UTF_32_Letter (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Letters) /= 0;
+ end Is_UTF_32_Letter;
+
+ -------------------------------
+ -- Is_UTF_32_Line_Terminator --
+ -------------------------------
+
+ function Is_UTF_32_Line_Terminator (U : UTF_32) return Boolean is
+ begin
+ return U in 10 .. 13 -- Ascii.LF Ascii.VT Ascii.FF Ascii.CR
+ or else U = 16#02028# -- LINE SEPARATOR
+ or else U = 16#02029#; -- PARAGRAPH SEPARATOR
+ end Is_UTF_32_Line_Terminator;
+
+ --------------------
+ -- Is_UTF_32_Mark --
+ --------------------
+
+ function Is_UTF_32_Mark (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Marks) /= 0;
+ end Is_UTF_32_Mark;
+
+ ---------------------------
+ -- Is_UTF_32_Non_Graphic --
+ ---------------------------
+
+ function Is_UTF_32_Non_Graphic (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Non_Graphic) /= 0;
+ end Is_UTF_32_Non_Graphic;
+
+ ---------------------
+ -- Is_UTF_32_Other --
+ ---------------------
+
+ function Is_UTF_32_Other (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Other_Format) /= 0;
+ end Is_UTF_32_Other;
+
+ ---------------------------
+ -- Is_UTF_32_Punctuation --
+ ---------------------------
+
+ function Is_UTF_32_Punctuation (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Punctuation) /= 0;
+ end Is_UTF_32_Punctuation;
+
+ ---------------------
+ -- Is_UTF_32_Space --
+ ---------------------
+
+ function Is_UTF_32_Space (U : UTF_32) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Spaces) /= 0;
+ end Is_UTF_32_Space;
+
+ ------------------
+ -- Range_Search --
+ ------------------
+
+ function Range_Search (U : UTF_32; R : UTF_32_Ranges) return Natural is
+ Lo : Integer;
+ Hi : Integer;
+ Mid : Integer;
+
+ begin
+ Lo := R'First;
+ Hi := R'Last;
+
+ loop
+ Mid := (Lo + Hi) / 2;
+
+ if U < R (Mid).Lo then
+ Hi := Mid - 1;
+
+ if Hi < Lo then
+ return 0;
+ end if;
+
+ elsif R (Mid).Hi < U then
+ Lo := Mid + 1;
+
+ if Hi < Lo then
+ return 0;
+ end if;
+
+ else
+ return Mid;
+ end if;
+ end loop;
+ end Range_Search;
+
+ --------------------------
+ -- UTF_32_To_Upper_Case --
+ --------------------------
+
+ function UTF_32_To_Upper_Case (U : UTF_32) return UTF_32 is
+ Index : constant Integer := Range_Search (U, Lower_Case_Letters);
+ begin
+ if Index = 0 then
+ return U;
+ else
+ return U + Upper_Case_Adjust (Index);
+ end if;
+ end UTF_32_To_Upper_Case;
+
+end GNAT.UTF_32;
diff --git a/gcc/ada/g-utf_32.ads b/gcc/ada/g-utf_32.ads
new file mode 100644
index 00000000000..1da9cf68fb8
--- /dev/null
+++ b/gcc/ada/g-utf_32.ads
@@ -0,0 +1,124 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUNTIME COMPONENTS --
+-- --
+-- G N A T . U T F _ 3 2 --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 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- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This package is an internal package that provides basic character
+-- classification capabilities needed by the compiler for handling full
+-- 32-bit wide wide characters. We avoid the use of the actual type
+-- Wide_Wide_Character, since we want to use these routines in the compiler
+-- itself, and we want to be able to compile the compiler with old versions
+-- of GNAT that did not implement Wide_Wide_Character.
+
+-- This package is not available directly for use in application programs,
+-- but it serves as the basis for GNAT.Wide_Case_Utilities and
+-- GNAT.Wide_Wide_Case_Utilities, which can be used directly.
+
+package GNAT.UTF_32 is
+
+ type UTF_32 is mod 2 ** 32;
+ -- The actual allowed range is 16#00_0000# .. 16#01_FFFF#
+
+ function Is_UTF_32_Letter (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Letter);
+ -- Returns true iff U is a letter that can be used to start an identifier.
+ -- This means that it is in one of the following categories:
+ -- Letter, Uppercase (Lu)
+ -- Letter, Lowercase (Ll)
+ -- Letter, Titlecase (Lt)
+ -- Letter, Modifier (Lm)
+ -- Letter, Other (Lo)
+ -- Number, Letter (Nl)
+
+ function Is_UTF_32_Digit (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Digit);
+ -- Returns true iff U is a digit that can be used to extend an identifer,
+ -- which means it is in one of the following categories:
+ -- Number, Decimal_Digit (Nd)
+
+ function Is_UTF_32_Line_Terminator (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Line_Terminator);
+ -- Returns true iff U is an allowed line terminator for source programs,
+ -- which means it is in one of the following categories:
+ -- Separator, Line (Zl)
+ -- Separator, Paragraph (Zp)
+ -- or that it is a conventional line terminator (CR, LF, VT, FF)
+
+ function Is_UTF_32_Mark (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Mark);
+ -- Returns true iff U is a mark character which can be used to extend
+ -- an identifier. This means it is in one of the following categories:
+ -- Mark, Non-Spacing (Mn)
+ -- Mark, Spacing Combining (Mc)
+
+ function Is_UTF_32_Other (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Other);
+ -- Returns true iff U is an other format character, which means that it
+ -- can be used to extend an identifier, but is ignored for the purposes of
+ -- matching of identiers. This means that it is in one of the following
+ -- categories:
+ -- Other, Format (Cf)
+
+ function Is_UTF_32_Punctuation (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Punctuation);
+ -- Returns true iff U is a punctuation character that can be used to
+ -- separate pices of an identifier. This means that it is in one of the
+ -- following categories:
+ -- Punctuation, Connector (Pc)
+
+ function Is_UTF_32_Space (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Space);
+ -- Returns true iff U is considered a space to be ignored, which means
+ -- that it is in one of the following categories:
+ -- Separator, Space (Zs)
+
+ function Is_UTF_32_Non_Graphic (U : UTF_32) return Boolean;
+ pragma Inline (Is_UTF_32_Non_Graphic);
+ -- Returns true iff U is considered to be a non-graphic character,
+ -- which means that it is in one of the following categories:
+ -- Other, Control (Cc)
+ -- Other, Private Use (Co)
+ -- Other, Surrogate (Cs)
+ -- Other, Format (Cf)
+ -- Separator, Line (Zl)
+ -- Separator, Paragraph (Zp)
+ --
+ -- Note that the Ada category format effector is subsumed by the above
+ -- list of Unicode categories.
+
+ function UTF_32_To_Upper_Case (U : UTF_32) return UTF_32;
+ pragma Inline (UTF_32_To_Upper_Case);
+ -- If U represents a lower case letter, returns the corresponding upper
+ -- case letter, otherwise U is returned unchanged. The folding is locale
+ -- independent as defined by documents referenced in the note in section
+ -- 1 of ISO/IEC 10646:2003
+
+end GNAT.UTF_32;
diff --git a/gcc/ada/g-zstspl.ads b/gcc/ada/g-zstspl.ads
new file mode 100644
index 00000000000..8ec6e0cd85e
--- /dev/null
+++ b/gcc/ada/g-zstspl.ads
@@ -0,0 +1,46 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- G N A T . W I D E _ W I D E _ S T R I N G _ S P L I T --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2002-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- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- Useful wide_string-manipulation routines: given a set of separators, split
+-- a wide_string wherever the separators appear, and provide direct access
+-- to the resulting slices. See GNAT.Array_Split for full documentation.
+
+with Ada.Strings.Wide_Wide_Maps; use Ada.Strings;
+with GNAT.Array_Split;
+
+package GNAT.Wide_Wide_String_Split is new GNAT.Array_Split
+ (Element => Wide_Wide_Character,
+ Element_Sequence => Wide_Wide_String,
+ Element_Set => Wide_Wide_Maps.Wide_Wide_Character_Set,
+ To_Set => Wide_Wide_Maps.To_Set,
+ Is_In => Wide_Wide_Maps.Is_In);
diff --git a/gcc/ada/gnatbind.adb b/gcc/ada/gnatbind.adb
index a64990ec590..d13af031bc8 100644
--- a/gcc/ada/gnatbind.adb
+++ b/gcc/ada/gnatbind.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -120,7 +120,7 @@ procedure Gnatbind is
Max_Storage_At_Blocking => True,
-- Not checkable at compile time
- others => False);
+ others => False);
Additional_Restrictions_Listed : Boolean := False;
-- Set True if we have listed header for restrictions
@@ -337,8 +337,8 @@ procedure Gnatbind is
Opt.Bind_Alternate_Main_Name := True;
Opt.Alternate_Main_Name := new String'(Argv (3 .. Argv'Last));
- -- All other options are single character and are handled
- -- by Scan_Binder_Switches.
+ -- All other options are single character and are handled by
+ -- Scan_Binder_Switches.
else
Scan_Binder_Switches (Argv);
@@ -438,10 +438,10 @@ begin
Osint.Add_Default_Search_Dirs;
-- Carry out package initializations. These are initializations which
- -- might logically be performed at elaboration time, but Namet at
- -- least can't be done that way (because it is used in the Compiler),
- -- and we decide to be consistent. Like elaboration, the order in
- -- which these calls are made is in some cases important.
+ -- might logically be performed at elaboration time, but Namet at least
+ -- can't be done that way (because it is used in the Compiler), and we
+ -- decide to be consistent. Like elaboration, the order in which these
+ -- calls are made is in some cases important.
Csets.Initialize;
Namet.Initialize;
@@ -481,7 +481,7 @@ begin
Write_Str ("GNATBIND ");
Write_Str (Gnat_Version_String);
Write_Eol;
- Write_Str ("Copyright 1995-2004 Free Software Foundation, Inc.");
+ Write_Str ("Copyright 1995-2005 Free Software Foundation, Inc.");
Write_Eol;
end if;
@@ -562,7 +562,7 @@ begin
-- ALI files.
for Index in ALIs.First .. ALIs.Last loop
- ALIs.Table (Index).Interface := False;
+ ALIs.Table (Index).SAL_Interface := False;
end loop;
-- Add System.Standard_Library to list to ensure that these files are
@@ -654,7 +654,7 @@ begin
Write_Eol;
for J in Elab_Order.First .. Elab_Order.Last loop
- if not Units.Table (Elab_Order.Table (J)).Interface then
+ if not Units.Table (Elab_Order.Table (J)).SAL_Interface then
Write_Str (" ");
Write_Unit_Name
(Units.Table (Elab_Order.Table (J)).Uname);
@@ -680,7 +680,7 @@ begin
Total_Warnings := Total_Warnings + Warnings_Detected;
end;
- -- All done. Set proper exit status.
+ -- All done. Set proper exit status
Finalize_Binderr;
Namet.Finalize;
diff --git a/gcc/ada/gnatls.adb b/gcc/ada/gnatls.adb
index f8fec48d0e4..900b0ead18a 100644
--- a/gcc/ada/gnatls.adb
+++ b/gcc/ada/gnatls.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -52,11 +52,12 @@ procedure Gnatls is
-- Name of the env. variable that contains path name(s) of directories
-- where project files may reside.
+ -- NOTE : The following string may be used by other tools, such as GPS. So
+ -- it can only be modified if these other uses are checked and coordinated.
+
Project_Search_Path : constant String := "Project Search Path:";
-- Label displayed in verbose mode before the directories in the project
- -- search path.
- -- NOTE: This string may be used by other tools, such as GPS; so, it
- -- should not be modified inconsiderately.
+ -- search path. Do not modify without checking NOTE above.
No_Project_Default_Dir : constant String := "-";
@@ -549,6 +550,7 @@ procedure Gnatls is
-- Remove any encoding info (%s or %b)
Get_Name_String (N);
+
if Name_Len > 2
and then Name_Buffer (Name_Len - 1) = '%'
then
@@ -977,7 +979,7 @@ procedure Gnatls is
U.Internal or
U.Is_Generic or
U.Init_Scalars or
- U.Interface or
+ U.SAL_Interface or
U.Body_Needed_For_SAL or
U.Elaborate_Body
then
@@ -1032,8 +1034,8 @@ procedure Gnatls is
Write_Str (" Init_Scalars");
end if;
- if U.Interface then
- Write_Str (" Interface");
+ if U.SAL_Interface then
+ Write_Str (" SAL_Interface");
end if;
if U.Body_Needed_For_SAL then
@@ -1247,6 +1249,7 @@ procedure Gnatls is
-- Scan the file line by line
while Index < Buffer'Last loop
+
-- Find the end of line
Last := Index;
@@ -1448,10 +1451,9 @@ procedure Gnatls is
Output_Status (ST, Verbose => True);
Write_Eol;
end loop;
-
end Usage;
--- Start of processing for Gnatls
+-- Start of processing for Gnatls
begin
-- Initialize standard packages
@@ -1498,7 +1500,7 @@ begin
Write_Str ("GNATLS ");
Write_Str (Gnat_Version_String);
Write_Eol;
- Write_Str ("Copyright 1997-2004 Free Software Foundation, Inc.");
+ Write_Str ("Copyright 1997-2005 Free Software Foundation, Inc.");
Write_Eol;
Write_Eol;
Write_Str ("Source Search Path:");
@@ -1583,6 +1585,7 @@ begin
Add_Default_Dir := False;
elsif First /= Last or else Project_Path (First) /= '.' then
+
-- If the directory is ".", skip it as it is the current
-- directory and it is already the first directory in the
-- project path.
@@ -1755,7 +1758,6 @@ begin
Write_Str ("depends upon");
Write_Eol;
Write_Str (" ");
-
else
Write_Eol;
end if;
diff --git a/gcc/ada/i-c.adb b/gcc/ada/i-c.adb
index 844f016441e..da8e3146f66 100644
--- a/gcc/ada/i-c.adb
+++ b/gcc/ada/i-c.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -63,6 +63,32 @@ package body Interfaces.C is
return False;
end Is_Nul_Terminated;
+ -- Case of char16_array
+
+ function Is_Nul_Terminated (Item : char16_array) return Boolean is
+ begin
+ for J in Item'Range loop
+ if Item (J) = char16_nul then
+ return True;
+ end if;
+ end loop;
+
+ return False;
+ end Is_Nul_Terminated;
+
+ -- Case of char32_array
+
+ function Is_Nul_Terminated (Item : char32_array) return Boolean is
+ begin
+ for J in Item'Range loop
+ if Item (J) = char32_nul then
+ return True;
+ end if;
+ end loop;
+
+ return False;
+ end Is_Nul_Terminated;
+
------------
-- To_Ada --
------------
@@ -78,8 +104,7 @@ package body Interfaces.C is
function To_Ada
(Item : char_array;
- Trim_Nul : Boolean := True)
- return String
+ Trim_Nul : Boolean := True) return String
is
Count : Natural;
From : size_t;
@@ -119,10 +144,10 @@ package body Interfaces.C is
-- Convert char_array to String (procedure form)
procedure To_Ada
- (Item : char_array;
- Target : out String;
- Count : out Natural;
- Trim_Nul : Boolean := True)
+ (Item : char_array;
+ Target : out String;
+ Count : out Natural;
+ Trim_Nul : Boolean := True)
is
From : size_t;
To : Positive;
@@ -173,8 +198,7 @@ package body Interfaces.C is
function To_Ada
(Item : wchar_array;
- Trim_Nul : Boolean := True)
- return Wide_String
+ Trim_Nul : Boolean := True) return Wide_String
is
Count : Natural;
From : size_t;
@@ -214,13 +238,13 @@ package body Interfaces.C is
-- Convert wchar_array to Wide_String (procedure form)
procedure To_Ada
- (Item : wchar_array;
- Target : out Wide_String;
- Count : out Natural;
- Trim_Nul : Boolean := True)
+ (Item : wchar_array;
+ Target : out Wide_String;
+ Count : out Natural;
+ Trim_Nul : Boolean := True)
is
- From : size_t;
- To : Positive;
+ From : size_t;
+ To : Positive;
begin
if Trim_Nul then
@@ -254,7 +278,192 @@ package body Interfaces.C is
To := To + 1;
end loop;
end if;
+ end To_Ada;
+
+ -- Convert char16_t to Wide_Character
+
+ function To_Ada (Item : char16_t) return Wide_Character is
+ begin
+ return Wide_Character'Val (char16_t'Pos (Item));
+ end To_Ada;
+
+ -- Convert char16_array to Wide_String (function form)
+
+ function To_Ada
+ (Item : char16_array;
+ Trim_Nul : Boolean := True) return Wide_String
+ is
+ Count : Natural;
+ From : size_t;
+
+ begin
+ if Trim_Nul then
+ From := Item'First;
+
+ loop
+ if From > Item'Last then
+ raise Terminator_Error;
+ elsif Item (From) = char16_t'Val (0) then
+ exit;
+ else
+ From := From + 1;
+ end if;
+ end loop;
+
+ Count := Natural (From - Item'First);
+
+ else
+ Count := Item'Length;
+ end if;
+
+ declare
+ R : Wide_String (1 .. Count);
+
+ begin
+ for J in R'Range loop
+ R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
+ end loop;
+
+ return R;
+ end;
+ end To_Ada;
+
+ -- Convert char16_array to Wide_String (procedure form)
+
+ procedure To_Ada
+ (Item : char16_array;
+ Target : out Wide_String;
+ Count : out Natural;
+ Trim_Nul : Boolean := True)
+ is
+ From : size_t;
+ To : Positive;
+
+ begin
+ if Trim_Nul then
+ From := Item'First;
+ loop
+ if From > Item'Last then
+ raise Terminator_Error;
+ elsif Item (From) = char16_t'Val (0) then
+ exit;
+ else
+ From := From + 1;
+ end if;
+ end loop;
+
+ Count := Natural (From - Item'First);
+
+ else
+ Count := Item'Length;
+ end if;
+
+ if Count > Target'Length then
+ raise Constraint_Error;
+
+ else
+ From := Item'First;
+ To := Target'First;
+
+ for J in 1 .. Count loop
+ Target (To) := To_Ada (Item (From));
+ From := From + 1;
+ To := To + 1;
+ end loop;
+ end if;
+ end To_Ada;
+
+ -- Convert char32_t to Wide_Wide_Character
+
+ function To_Ada (Item : char32_t) return Wide_Wide_Character is
+ begin
+ return Wide_Wide_Character'Val (char32_t'Pos (Item));
+ end To_Ada;
+
+ -- Convert char32_array to Wide_Wide_String (function form)
+
+ function To_Ada
+ (Item : char32_array;
+ Trim_Nul : Boolean := True) return Wide_Wide_String
+ is
+ Count : Natural;
+ From : size_t;
+
+ begin
+ if Trim_Nul then
+ From := Item'First;
+
+ loop
+ if From > Item'Last then
+ raise Terminator_Error;
+ elsif Item (From) = char32_t'Val (0) then
+ exit;
+ else
+ From := From + 1;
+ end if;
+ end loop;
+
+ Count := Natural (From - Item'First);
+
+ else
+ Count := Item'Length;
+ end if;
+
+ declare
+ R : Wide_Wide_String (1 .. Count);
+
+ begin
+ for J in R'Range loop
+ R (J) := To_Ada (Item (size_t (J) + (Item'First - 1)));
+ end loop;
+ return R;
+ end;
+ end To_Ada;
+
+ -- Convert char32_array to Wide_Wide_String (procedure form)
+
+ procedure To_Ada
+ (Item : char32_array;
+ Target : out Wide_Wide_String;
+ Count : out Natural;
+ Trim_Nul : Boolean := True)
+ is
+ From : size_t;
+ To : Positive;
+
+ begin
+ if Trim_Nul then
+ From := Item'First;
+ loop
+ if From > Item'Last then
+ raise Terminator_Error;
+ elsif Item (From) = char32_t'Val (0) then
+ exit;
+ else
+ From := From + 1;
+ end if;
+ end loop;
+
+ Count := Natural (From - Item'First);
+
+ else
+ Count := Item'Length;
+ end if;
+
+ if Count > Target'Length then
+ raise Constraint_Error;
+
+ else
+ From := Item'First;
+ To := Target'First;
+
+ for J in 1 .. Count loop
+ Target (To) := To_Ada (Item (From));
+ From := From + 1;
+ To := To + 1;
+ end loop;
+ end if;
end To_Ada;
----------
@@ -272,8 +481,7 @@ package body Interfaces.C is
function To_C
(Item : String;
- Append_Nul : Boolean := True)
- return char_array
+ Append_Nul : Boolean := True) return char_array
is
begin
if Append_Nul then
@@ -292,12 +500,11 @@ package body Interfaces.C is
-- Append_Nul False
else
-
- -- A nasty case, if the string is null, we must return
- -- a null char_array. The lower bound of this array is
- -- required to be zero (RM B.3(50)) but that is of course
- -- impossible given that size_t is unsigned. According to
- -- Ada 2005 AI-258, the result is to raise Constraint_Error.
+ -- A nasty case, if the string is null, we must return a null
+ -- char_array. The lower bound of this array is required to be zero
+ -- (RM B.3(50)) but that is of course impossible given that size_t
+ -- is unsigned. According to Ada 2005 AI-258, the result is to raise
+ -- Constraint_Error.
if Item'Length = 0 then
raise Constraint_Error;
@@ -365,8 +572,7 @@ package body Interfaces.C is
function To_C
(Item : Wide_String;
- Append_Nul : Boolean := True)
- return wchar_array
+ Append_Nul : Boolean := True) return wchar_array
is
begin
if Append_Nul then
@@ -383,23 +589,105 @@ package body Interfaces.C is
end;
else
- -- A nasty case, if the string is null, we must return
- -- a null char_array. The lower bound of this array is
- -- required to be zero (RM B.3(50)) but that is of course
- -- impossible given that size_t is unsigned. This needs
- -- ARG resolution, but for now GNAT returns bounds 1 .. 0
+ -- A nasty case, if the string is null, we must return a null
+ -- wchar_array. The lower bound of this array is required to be zero
+ -- (RM B.3(50)) but that is of course impossible given that size_t
+ -- is unsigned. According to Ada 2005 AI-258, the result is to raise
+ -- Constraint_Error.
if Item'Length = 0 then
+ raise Constraint_Error;
+
+ else
declare
- R : wchar_array (1 .. 0);
+ R : wchar_array (0 .. Item'Length - 1);
begin
+ for J in size_t range 0 .. Item'Length - 1 loop
+ R (J) := To_C (Item (Integer (J) + Item'First));
+ end loop;
+
return R;
end;
+ end if;
+ end if;
+ end To_C;
+
+ -- Convert Wide_String to wchar_array (procedure form)
+
+ procedure To_C
+ (Item : Wide_String;
+ Target : out wchar_array;
+ Count : out size_t;
+ Append_Nul : Boolean := True)
+ is
+ To : size_t;
+
+ begin
+ if Target'Length < Item'Length then
+ raise Constraint_Error;
+
+ else
+ To := Target'First;
+ for From in Item'Range loop
+ Target (To) := To_C (Item (From));
+ To := To + 1;
+ end loop;
+
+ if Append_Nul then
+ if To > Target'Last then
+ raise Constraint_Error;
+ else
+ Target (To) := wide_nul;
+ Count := Item'Length + 1;
+ end if;
+
+ else
+ Count := Item'Length;
+ end if;
+ end if;
+ end To_C;
+
+ -- Convert Wide_Character to char16_t
+
+ function To_C (Item : Wide_Character) return char16_t is
+ begin
+ return char16_t'Val (Wide_Character'Pos (Item));
+ end To_C;
+
+ -- Convert Wide_String to char16_array (function form)
+
+ function To_C
+ (Item : Wide_String;
+ Append_Nul : Boolean := True) return char16_array
+ is
+ begin
+ if Append_Nul then
+ declare
+ R : char16_array (0 .. Item'Length);
+
+ begin
+ for J in Item'Range loop
+ R (size_t (J - Item'First)) := To_C (Item (J));
+ end loop;
+
+ R (R'Last) := char16_t'Val (0);
+ return R;
+ end;
+
+ else
+ -- A nasty case, if the string is null, we must return a null
+ -- char16_array. The lower bound of this array is required to be zero
+ -- (RM B.3(50)) but that is of course impossible given that size_t
+ -- is unsigned. According to Ada 2005 AI-258, the result is to raise
+ -- Constraint_Error.
+
+ if Item'Length = 0 then
+ raise Constraint_Error;
else
declare
- R : wchar_array (0 .. Item'Length - 1);
+ R : char16_array (0 .. Item'Length - 1);
begin
for J in size_t range 0 .. Item'Length - 1 loop
@@ -412,11 +700,11 @@ package body Interfaces.C is
end if;
end To_C;
- -- Convert Wide_String to wchar_array (procedure form)
+ -- Convert Wide_String to char16_array (procedure form)
procedure To_C
(Item : Wide_String;
- Target : out wchar_array;
+ Target : out char16_array;
Count : out size_t;
Append_Nul : Boolean := True)
is
@@ -437,7 +725,94 @@ package body Interfaces.C is
if To > Target'Last then
raise Constraint_Error;
else
- Target (To) := wide_nul;
+ Target (To) := char16_t'Val (0);
+ Count := Item'Length + 1;
+ end if;
+
+ else
+ Count := Item'Length;
+ end if;
+ end if;
+ end To_C;
+
+ -- Convert Wide_Character to char32_t
+
+ function To_C (Item : Wide_Wide_Character) return char32_t is
+ begin
+ return char32_t'Val (Wide_Wide_Character'Pos (Item));
+ end To_C;
+
+ -- Convert Wide_Wide_String to char32_array (function form)
+
+ function To_C
+ (Item : Wide_Wide_String;
+ Append_Nul : Boolean := True) return char32_array
+ is
+ begin
+ if Append_Nul then
+ declare
+ R : char32_array (0 .. Item'Length);
+
+ begin
+ for J in Item'Range loop
+ R (size_t (J - Item'First)) := To_C (Item (J));
+ end loop;
+
+ R (R'Last) := char32_t'Val (0);
+ return R;
+ end;
+
+ else
+ -- A nasty case, if the string is null, we must return a null
+ -- char32_array. The lower bound of this array is required to be zero
+ -- (RM B.3(50)) but that is of course impossible given that size_t
+ -- is unsigned. According to Ada 2005 AI-258, the result is to raise
+ -- Constraint_Error.
+
+ if Item'Length = 0 then
+ raise Constraint_Error;
+
+ else
+ declare
+ R : char32_array (0 .. Item'Length - 1);
+
+ begin
+ for J in size_t range 0 .. Item'Length - 1 loop
+ R (J) := To_C (Item (Integer (J) + Item'First));
+ end loop;
+
+ return R;
+ end;
+ end if;
+ end if;
+ end To_C;
+
+ -- Convert Wide_Wide_String to char32_array (procedure form)
+
+ procedure To_C
+ (Item : Wide_Wide_String;
+ Target : out char32_array;
+ Count : out size_t;
+ Append_Nul : Boolean := True)
+ is
+ To : size_t;
+
+ begin
+ if Target'Length < Item'Length then
+ raise Constraint_Error;
+
+ else
+ To := Target'First;
+ for From in Item'Range loop
+ Target (To) := To_C (Item (From));
+ To := To + 1;
+ end loop;
+
+ if Append_Nul then
+ if To > Target'Last then
+ raise Constraint_Error;
+ else
+ Target (To) := char32_t'Val (0);
Count := Item'Length + 1;
end if;
diff --git a/gcc/ada/i-c.ads b/gcc/ada/i-c.ads
index bcd77a897e4..f264850589e 100644
--- a/gcc/ada/i-c.ads
+++ b/gcc/ada/i-c.ads
@@ -6,32 +6,10 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 Free Software Foundation, Inc. --
--- --
--- This specification is derived from the Ada Reference Manual for use with --
--- GNAT. The copyright notice above, and the license provisions that follow --
--- apply solely to the contents of the part following the private keyword. --
--- --
--- 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- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
--- for more details. You should have received a copy of the GNU General --
--- Public License distributed with GNAT; see file COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
--- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit does not by itself cause the resulting executable to be --
--- covered by the GNU General Public License. This exception does not --
--- however invalidate any other reasons why the executable file might be --
--- covered by the GNU Public License. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- This specification is adapted from the Ada Reference Manual for use with --
+-- GNAT. In accordance with the copyright of that document, you can freely --
+-- copy and modify this specification, provided that if you redistribute a --
+-- modified version, any changes that you have made are clearly indicated. --
-- --
------------------------------------------------------------------------------
@@ -104,26 +82,24 @@ pragma Pure (C);
function Is_Nul_Terminated (Item : in char_array) return Boolean;
function To_C
- (Item : in String;
- Append_Nul : in Boolean := True)
- return char_array;
+ (Item : String;
+ Append_Nul : Boolean := True) return char_array;
function To_Ada
- (Item : in char_array;
- Trim_Nul : in Boolean := True)
- return String;
+ (Item : char_array;
+ Trim_Nul : Boolean := True) return String;
procedure To_C
- (Item : in String;
+ (Item : String;
Target : out char_array;
Count : out size_t;
- Append_Nul : in Boolean := True);
+ Append_Nul : Boolean := True);
procedure To_Ada
- (Item : in char_array;
+ (Item : char_array;
Target : out String;
Count : out Natural;
- Trim_Nul : in Boolean := True);
+ Trim_Nul : Boolean := True);
------------------------------------
-- Wide Character and Wide String --
@@ -134,37 +110,121 @@ pragma Pure (C);
wide_nul : constant wchar_t := wchar_t'First;
- function To_C (Item : in Wide_Character) return wchar_t;
- function To_Ada (Item : in wchar_t) return Wide_Character;
+ function To_C (Item : Wide_Character) return wchar_t;
+ function To_Ada (Item : wchar_t) return Wide_Character;
type wchar_array is array (size_t range <>) of aliased wchar_t;
- function Is_Nul_Terminated (Item : in wchar_array) return Boolean;
+ function Is_Nul_Terminated (Item : wchar_array) return Boolean;
function To_C
- (Item : in Wide_String;
- Append_Nul : in Boolean := True)
- return wchar_array;
+ (Item : Wide_String;
+ Append_Nul : Boolean := True) return wchar_array;
function To_Ada
- (Item : in wchar_array;
- Trim_Nul : in Boolean := True)
- return Wide_String;
+ (Item : wchar_array;
+ Trim_Nul : Boolean := True) return Wide_String;
procedure To_C
- (Item : in Wide_String;
+ (Item : Wide_String;
Target : out wchar_array;
Count : out size_t;
- Append_Nul : in Boolean := True);
+ Append_Nul : Boolean := True);
procedure To_Ada
- (Item : in wchar_array;
+ (Item : wchar_array;
Target : out Wide_String;
Count : out Natural;
- Trim_Nul : in Boolean := True);
+ Trim_Nul : Boolean := True);
Terminator_Error : exception;
-private
- -- No private declarations required
+ -- The remaining declarations are for Ada 2005 (AI-285)
+
+ -- ISO/IEC 10646:2003 compatible types defined by SC22/WG14 document N1010
+
+ type char16_t is new Wide_Character;
+ pragma Ada_05 (char16_t);
+
+ char16_nul : constant char16_t := char16_t'Val (0);
+ pragma Ada_05 (char16_nul);
+
+ function To_C (Item : Wide_Character) return char16_t;
+ pragma Ada_05 (To_C);
+
+ function To_Ada (Item : char16_t) return Wide_Character;
+ pragma Ada_05 (To_Ada);
+
+ type char16_array is array (size_t range <>) of aliased char16_t;
+ pragma Ada_05 (char16_array);
+
+ function Is_Nul_Terminated (Item : char16_array) return Boolean;
+ pragma Ada_05 (Is_Nul_Terminated);
+
+ function To_C
+ (Item : Wide_String;
+ Append_Nul : Boolean := True) return char16_array;
+ pragma Ada_05 (To_C);
+
+ function To_Ada
+ (Item : char16_array;
+ Trim_Nul : Boolean := True) return Wide_String;
+ pragma Ada_05 (To_Ada);
+
+ procedure To_C
+ (Item : Wide_String;
+ Target : out char16_array;
+ Count : out size_t;
+ Append_Nul : Boolean := True);
+ pragma Ada_05 (To_C);
+
+ procedure To_Ada
+ (Item : char16_array;
+ Target : out Wide_String;
+ Count : out Natural;
+ Trim_Nul : Boolean := True);
+ pragma Ada_05 (To_Ada);
+
+ type char32_t is new Wide_Wide_Character;
+ pragma Ada_05 (char32_t);
+
+ char32_nul : constant char32_t := char32_t'Val (0);
+ pragma Ada_05 (char32_nul);
+
+ function To_C (Item : Wide_Wide_Character) return char32_t;
+ pragma Ada_05 (To_C);
+
+ function To_Ada (Item : char32_t) return Wide_Wide_Character;
+ pragma Ada_05 (To_Ada);
+
+ type char32_array is array (size_t range <>) of aliased char32_t;
+ pragma Ada_05 (char32_array);
+
+ function Is_Nul_Terminated (Item : char32_array) return Boolean;
+ pragma Ada_05 (Is_Nul_Terminated);
+
+ function To_C
+ (Item : Wide_Wide_String;
+ Append_Nul : Boolean := True) return char32_array;
+ pragma Ada_05 (To_C);
+
+ function To_Ada
+ (Item : char32_array;
+ Trim_Nul : Boolean := True) return Wide_Wide_String;
+ pragma Ada_05 (To_Ada);
+
+ procedure To_C
+ (Item : Wide_Wide_String;
+ Target : out char32_array;
+ Count : out size_t;
+ Append_Nul : Boolean := True);
+ pragma Ada_05 (To_C);
+
+ procedure To_Ada
+ (Item : char32_array;
+ Target : out Wide_Wide_String;
+ Count : out Natural;
+ Trim_Nul : Boolean := True);
+ pragma Ada_05 (To_Ada);
+
end Interfaces.C;
diff --git a/gcc/ada/i-cpp.adb b/gcc/ada/i-cpp.adb
index 24015f10d0b..7eaa2197b9f 100644
--- a/gcc/ada/i-cpp.adb
+++ b/gcc/ada/i-cpp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -34,10 +34,33 @@
with Ada.Tags; use Ada.Tags;
with System; use System;
with System.Storage_Elements; use System.Storage_Elements;
-with Unchecked_Conversion;
package body Interfaces.CPP is
+-- Structure of the Dispatch Table
+
+-- +-----------------------+
+-- | Offset_To_Top |
+-- +-----------------------+
+-- | Typeinfo_Ptr/TSD_Ptr |----> Type Specific Data
+-- Tag ---> +-----------------------+ +-------------------+
+-- | table of | | inheritance depth |
+-- : primitive ops : +-------------------+
+-- | pointers | | expanded name |
+-- +-----------------------+ +-------------------+
+-- | external tag |
+-- +-------------------+
+-- | Hash table link |
+-- +-------------------+
+-- | Remotely Callable |
+-- +-------------------+
+-- | Rec Ctrler offset |
+-- +-------------------+
+-- | table of |
+-- : ancestor :
+-- | tags |
+-- +-------------------+
+
-- The declarations below need (extensive) comments ???
subtype Cstring is String (Positive);
@@ -57,27 +80,32 @@ package body Interfaces.CPP is
Pfn : System.Address;
end record;
- type Type_Specific_Data_Ptr is access all Type_Specific_Data;
type Vtable_Entry_Array is array (Positive range <>) of Vtable_Entry;
type VTable is record
- Prims_Ptr : Vtable_Entry_Array (Positive);
- TSD : Type_Specific_Data_Ptr;
+ -- Offset_To_Top : Integer;
+ -- Typeinfo_Ptr : System.Address; -- TSD is currently also here???
+ Prims_Ptr : Vtable_Entry_Array (Positive);
end record;
+ -- Note: See comment in a-tags.adb explaining why the components
+ -- Offset_To_Top and Typeinfo_Ptr have been commented out.
+ -- -----------------------------------------------------------------------
+ -- The size of the Prims_Ptr array actually depends on the tagged type to
+ -- which it applies. For each tagged type, the expander computes the
+ -- actual array size, allocates the Dispatch_Table record accordingly, and
+ -- generates code that displaces the base of the record after the
+ -- Typeinfo_Ptr component. For this reason the first two components have
+ -- been commented in the previous declaration. The access to these
+ -- components is done by means of local functions.
- --------------------------------------------------------
- -- Unchecked Conversions for Tag, Vtable_Ptr, and TSD --
- --------------------------------------------------------
-
- function To_Type_Specific_Data_Ptr is
- new Unchecked_Conversion (Address, Type_Specific_Data_Ptr);
+ ---------------------------
+ -- Unchecked Conversions --
+ ---------------------------
- function To_Address is
- new Unchecked_Conversion (Type_Specific_Data_Ptr, Address);
+ type Int_Ptr is access Integer;
- ---------------------------------------------
- -- Unchecked Conversions for String Fields --
- ---------------------------------------------
+ function To_Int_Ptr is
+ new Unchecked_Conversion (System.Address, Int_Ptr);
function To_Cstring_Ptr is
new Unchecked_Conversion (Address, Cstring_Ptr);
@@ -90,8 +118,20 @@ package body Interfaces.CPP is
-----------------------
function Length (Str : Cstring_Ptr) return Natural;
- -- Length of string represented by the given pointer (treating the
- -- string as a C-style string, which is Nul terminated).
+ -- Length of string represented by the given pointer (treating the string
+ -- as a C-style string, which is Nul terminated).
+
+ function Offset_To_Top (T : Vtable_Ptr) return Integer;
+ -- Returns the current value of the offset_to_top component available in
+ -- the prologue of the dispatch table.
+
+ function Typeinfo_Ptr (T : Vtable_Ptr) return System.Address;
+ -- Returns the current value of the typeinfo_ptr component available in
+ -- the prologue of the dispatch table.
+
+ pragma Unreferenced (Offset_To_Top);
+ pragma Unreferenced (Typeinfo_Ptr);
+ -- These functions will be used for full compatibility with the C++ ABI
-----------------------
-- CPP_CW_Membership --
@@ -101,9 +141,9 @@ package body Interfaces.CPP is
(Obj_Tag : Vtable_Ptr;
Typ_Tag : Vtable_Ptr) return Boolean
is
- Pos : constant Integer := Obj_Tag.TSD.Idepth - Typ_Tag.TSD.Idepth;
+ Pos : constant Integer := TSD (Obj_Tag).Idepth - TSD (Typ_Tag).Idepth;
begin
- return Pos >= 0 and then Obj_Tag.TSD.Ancestor_Tags (Pos) = Typ_Tag;
+ return Pos >= 0 and then TSD (Obj_Tag).Ancestor_Tags (Pos) = Typ_Tag;
end CPP_CW_Membership;
---------------------------
@@ -112,7 +152,7 @@ package body Interfaces.CPP is
function CPP_Get_Expanded_Name (T : Vtable_Ptr) return Address is
begin
- return To_Address (T.TSD.Expanded_Name);
+ return To_Address (TSD (T).Expanded_Name);
end CPP_Get_Expanded_Name;
--------------------------
@@ -121,7 +161,7 @@ package body Interfaces.CPP is
function CPP_Get_External_Tag (T : Vtable_Ptr) return Address is
begin
- return To_Address (T.TSD.External_Tag);
+ return To_Address (TSD (T).External_Tag);
end CPP_Get_External_Tag;
-------------------------------
@@ -130,7 +170,7 @@ package body Interfaces.CPP is
function CPP_Get_Inheritance_Depth (T : Vtable_Ptr) return Natural is
begin
- return T.TSD.Idepth;
+ return TSD (T).Idepth;
end CPP_Get_Inheritance_Depth;
-------------------------
@@ -170,8 +210,11 @@ package body Interfaces.CPP is
-----------------
function CPP_Get_TSD (T : Vtable_Ptr) return Address is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (T) - CPP_DT_Typeinfo_Ptr_Size);
begin
- return To_Address (T.TSD);
+ return TSD_Ptr.all;
end CPP_Get_TSD;
--------------------
@@ -198,21 +241,22 @@ package body Interfaces.CPP is
(Old_TSD : Address;
New_Tag : Vtable_Ptr)
is
- TSD : constant Type_Specific_Data_Ptr :=
- To_Type_Specific_Data_Ptr (Old_TSD);
+ Old_TSD_Ptr : constant Type_Specific_Data_Ptr :=
+ To_Type_Specific_Data_Ptr (Old_TSD);
- New_TSD : Type_Specific_Data renames New_Tag.TSD.all;
+ New_TSD_Ptr : constant Type_Specific_Data_Ptr :=
+ TSD (New_Tag);
begin
- if TSD /= null then
- New_TSD.Idepth := TSD.Idepth + 1;
- New_TSD.Ancestor_Tags (1 .. New_TSD.Idepth)
- := TSD.Ancestor_Tags (0 .. TSD.Idepth);
+ if Old_TSD_Ptr /= null then
+ New_TSD_Ptr.Idepth := Old_TSD_Ptr.Idepth + 1;
+ New_TSD_Ptr.Ancestor_Tags (1 .. New_TSD_Ptr.Idepth) :=
+ Old_TSD_Ptr.Ancestor_Tags (0 .. Old_TSD_Ptr.Idepth);
else
- New_TSD.Idepth := 0;
+ New_TSD_Ptr.Idepth := 0;
end if;
- New_TSD.Ancestor_Tags (0) := New_Tag;
+ New_TSD_Ptr.Ancestor_Tags (0) := New_Tag;
end CPP_Inherit_TSD;
---------------------------
@@ -221,7 +265,7 @@ package body Interfaces.CPP is
procedure CPP_Set_Expanded_Name (T : Vtable_Ptr; Value : Address) is
begin
- T.TSD.Expanded_Name := To_Cstring_Ptr (Value);
+ TSD (T).Expanded_Name := To_Cstring_Ptr (Value);
end CPP_Set_Expanded_Name;
--------------------------
@@ -230,7 +274,7 @@ package body Interfaces.CPP is
procedure CPP_Set_External_Tag (T : Vtable_Ptr; Value : Address) is
begin
- T.TSD.External_Tag := To_Cstring_Ptr (Value);
+ TSD (T).External_Tag := To_Cstring_Ptr (Value);
end CPP_Set_External_Tag;
-------------------------------
@@ -242,7 +286,7 @@ package body Interfaces.CPP is
Value : Natural)
is
begin
- T.TSD.Idepth := Value;
+ TSD (T).Idepth := Value;
end CPP_Set_Inheritance_Depth;
-----------------------------
@@ -285,8 +329,11 @@ package body Interfaces.CPP is
-----------------
procedure CPP_Set_TSD (T : Vtable_Ptr; Value : Address) is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (T) - CPP_DT_Typeinfo_Ptr_Size);
begin
- T.TSD := To_Type_Specific_Data_Ptr (Value);
+ TSD_Ptr.all := Value;
end CPP_Set_TSD;
--------------------
@@ -314,7 +361,7 @@ package body Interfaces.CPP is
-------------------
function Expanded_Name (T : Vtable_Ptr) return String is
- Result : constant Cstring_Ptr := T.TSD.Expanded_Name;
+ Result : constant Cstring_Ptr := TSD (T).Expanded_Name;
begin
return Result (1 .. Length (Result));
end Expanded_Name;
@@ -324,7 +371,7 @@ package body Interfaces.CPP is
------------------
function External_Tag (T : Vtable_Ptr) return String is
- Result : constant Cstring_Ptr := T.TSD.External_Tag;
+ Result : constant Cstring_Ptr := TSD (T).External_Tag;
begin
return Result (1 .. Length (Result));
end External_Tag;
@@ -344,4 +391,38 @@ package body Interfaces.CPP is
return Len - 1;
end Length;
+ ------------------
+ -- Offset_To_Top --
+ ------------------
+
+ function Offset_To_Top (T : Vtable_Ptr) return Integer is
+ use type System.Storage_Elements.Storage_Offset;
+
+ TSD_Ptr : constant Int_Ptr
+ := To_Int_Ptr (To_Address (T) - CPP_DT_Prologue_Size);
+ begin
+ return TSD_Ptr.all;
+ end Offset_To_Top;
+
+ ------------------
+ -- Typeinfo_Ptr --
+ ------------------
+
+ function Typeinfo_Ptr (T : Vtable_Ptr) return System.Address is
+ use type System.Storage_Elements.Storage_Offset;
+ TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (T) - CPP_DT_Typeinfo_Ptr_Size);
+ begin
+ return TSD_Ptr.all;
+ end Typeinfo_Ptr;
+
+ ---------
+ -- TSD --
+ ---------
+
+ function TSD (T : Vtable_Ptr) return Type_Specific_Data_Ptr is
+ begin
+ return To_Type_Specific_Data_Ptr (CPP_Get_TSD (T));
+ end TSD;
+
end Interfaces.CPP;
diff --git a/gcc/ada/i-cpp.ads b/gcc/ada/i-cpp.ads
index a53c38b2242..df39bdb4df0 100644
--- a/gcc/ada/i-cpp.ads
+++ b/gcc/ada/i-cpp.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -45,18 +45,25 @@
with System;
with System.Storage_Elements;
+with Unchecked_Conversion;
package Interfaces.CPP is
- package S renames System;
- package SSE renames System.Storage_Elements;
-
type Vtable_Ptr is private;
function Expanded_Name (T : Vtable_Ptr) return String;
function External_Tag (T : Vtable_Ptr) return String;
private
+ package S renames System;
+ package SSE renames System.Storage_Elements;
+
+ type Vtable;
+ type Vtable_Ptr is access all Vtable;
+
+ type Type_Specific_Data;
+ type Type_Specific_Data_Ptr is access all Type_Specific_Data;
+
-- These subprograms are in the private part. They are never accessed
-- directly except from compiler generated code, which has access to
-- private components of packages via the Rtsfind interface.
@@ -98,9 +105,14 @@ private
CPP_DT_Prologue_Size : constant SSE.Storage_Count :=
SSE.Storage_Count
- (1 * (Standard'Address_Size / S.Storage_Unit));
+ (2 * (Standard'Address_Size / S.Storage_Unit));
-- Size of the first part of the dispatch table
+ CPP_DT_Typeinfo_Ptr_Size : constant SSE.Storage_Count :=
+ SSE.Storage_Count
+ (Standard'Address_Size / System.Storage_Unit);
+ -- Size of the Typeinfo_Ptr field of the Dispatch Table.
+
CPP_DT_Entry_Size : constant SSE.Storage_Count :=
SSE.Storage_Count
(1 * (Standard'Address_Size / S.Storage_Unit));
@@ -174,8 +186,21 @@ private
-- compatible with MI.
-- (used for virtual function calls)
- type Vtable;
- type Vtable_Ptr is access all Vtable;
+ function TSD (T : Vtable_Ptr) return Type_Specific_Data_Ptr;
+ -- This function is conceptually equivalent to Get_TSD, but
+ -- returning a Type_Specific_Data_Ptr type (rather than an Address)
+ -- simplifies the implementation of the other subprograms.
+
+ type Addr_Ptr is access System.Address;
+
+ function To_Address is
+ new Unchecked_Conversion (Vtable_Ptr, System.Address);
+
+ function To_Addr_Ptr is
+ new Unchecked_Conversion (System.Address, Addr_Ptr);
+
+ function To_Type_Specific_Data_Ptr is
+ new Unchecked_Conversion (System.Address, Type_Specific_Data_Ptr);
pragma Inline (CPP_Set_Prim_Op_Address);
pragma Inline (CPP_Get_Prim_Op_Address);
@@ -192,5 +217,6 @@ private
pragma Inline (CPP_Set_Remotely_Callable);
pragma Inline (CPP_Get_Remotely_Callable);
pragma Inline (Displaced_This);
+ pragma Inline (TSD);
end Interfaces.CPP;
diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb
index d2e1d5daea3..2202ac3a14e 100644
--- a/gcc/ada/impunit.adb
+++ b/gcc/ada/impunit.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2000-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 2000-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- --
@@ -26,25 +26,29 @@
with Lib; use Lib;
with Namet; use Namet;
-with Opt; use Opt;
package body Impunit is
subtype File_Name_8 is String (1 .. 8);
type File_List is array (Nat range <>) of File_Name_8;
- -- The following is a giant string containing the concenated names
- -- of all non-implementation internal files, i.e. the complete list
- -- of files for internal units which a program may legitimately WITH.
+ ------------------
+ -- Ada 95 Units --
+ ------------------
- -- Note that this list should match the list of units documented in
- -- the "GNAT Library" section of the GNAT Reference Manual.
+ -- The following is a giant string list containing the names of all
+ -- non-implementation internal files, i.e. the complete list of files for
+ -- internal units which a program may legitimately WITH when operating in
+ -- either Ada 95 or Ada 05 mode.
- Non_Imp_File_Names : constant File_List := (
+ -- Note that this list should match the list of units documented in the
+ -- "GNAT Library" section of the GNAT Reference Manual.
- -----------------------------------------------
- -- Ada Hierarchy Units from Reference Manual --
- -----------------------------------------------
+ Non_Imp_File_Names_95 : constant File_List := (
+
+ ------------------------------------------------------
+ -- Ada Hierarchy Units from Ada-83 Reference Manual --
+ ------------------------------------------------------
"a-astaco", -- Ada.Asynchronous_Task_Control
"a-calend", -- Ada.Calendar
@@ -53,7 +57,6 @@ package body Impunit is
"a-chlat1", -- Ada.Characters.Latin_1
"a-comlin", -- Ada.Command_Line
"a-decima", -- Ada.Decimal
- "a-direct", -- Ada.Directories
"a-direio", -- Ada.Direct_IO
"a-dynpri", -- Ada.Dynamic_Priorities
"a-except", -- Ada.Exceptions
@@ -144,6 +147,7 @@ package body Impunit is
"a-cwila9", -- Ada.Characters.Wide_Latin_9
"a-diocst", -- Ada.Direct_IO.C_Streams
"a-einuoc", -- Ada.Exceptions.Is_Null_Occurrence
+ "a-elchha", -- Ada.Exceptions.Last_Chance_Handler
"a-exctra", -- Ada.Exceptions.Traceback
"a-siocst", -- Ada.Sequential_IO.C_Streams
"a-ssicst", -- Ada.Streams.Stream_IO.C_Streams
@@ -305,32 +309,126 @@ package body Impunit is
"s-wchcnv", -- System.Wch_Cnv
"s-wchcon"); -- System.Wch_Con
- -------------------------
- -- Implementation_Unit --
- -------------------------
+ --------------------
+ -- Ada 2005 Units --
+ --------------------
+
+ -- The following units should be used only in Ada 05 mode
+
+ Non_Imp_File_Names_05 : constant File_List := (
+
+ --------------------------------------------------------
+ -- Ada Hierarchy Units from Ada 2005 Reference Manual --
+ --------------------------------------------------------
+
+ "a-cdlili", -- Ada.Containers.Doubly_Linked_Lists
+ "a-cgaaso", -- Ada.Containers.Generic_Anonymous_Array_Sort
+ "a-cgarso", -- Ada.Containers.Generic_Array_Sort
+ "a-cgcaso", -- Ada.Containers.Generic_Constrained_Array_Sort
+ "a-chtgke", -- Ada.Containers.Hash_Tables.Generic_Keys
+ "a-chtgop", -- Ada.Containers.Hash_Tables.Generic_Operations
+ "a-cidlli", -- Ada.Containers.Indefinite_Doubly_Linked_Lists
+ "a-cihama", -- Ada.Containers.Indefinite_Hashed_Maps
+ "a-cihase", -- Ada.Containers.Indefinite_Hashed_Sets
+ "a-ciorma", -- Ada.Containers.Indefinite_Ordered_Maps
+ "a-ciormu", -- Ada.Containers.Indefinite_Ordered_Multisets
+ "a-ciorse", -- Ada.Containers.Indefinite_Ordered_Sets
+ "a-cohama", -- Ada.Containers.Hashed_Maps
+ "a-cohase", -- Ada.Containers.Hashed_Sets
+ "a-cohata", -- Ada.Containers.Hash_Tables
+ "a-coinve", -- Ada.Containers.Indefinite_Vectors
+ "a-contai", -- Ada.Containers
+ "a-convec", -- Ada.Containers.Vectors
+ "a-coorma", -- Ada.Containers.Ordered_Maps
+ "a-coormu", -- Ada.Containers.Ordered_Multisets
+ "a-coorse", -- Ada.Containers.Ordered_Sets
+ "a-coprnu", -- Ada.Containers.Prime_Numbers
+ "a-crbltr", -- Ada.Containers.Red_Black_Trees
+ "a-crbtgk", -- Ada.Containers.Red_Black_Trees.Generic_Keys
+ "a-crbtgo", -- Ada.Containers.Red_Black_Trees.Generic_Operations
+ "a-direct", -- Ada.Directories
+ "a-rbtgso", -- Ada.Containers.Red_Black_Trees.Generic_Set_Operations
+ "a-secain", -- Ada.Strings.Equal_Case_Insensitive
+ "a-shcain", -- Ada.Strings.Hash_Case_Insensitive
+ "a-slcain", -- Ada.Strings.Less_Case_Insensitive
+ "a-strhas", -- Ada.Strings.Hash
+ "a-stunha", -- Ada.Strings.Unbounded.Hash
+ "a-stwiha", -- Ada.Strings.Wide_Hash
+ "a-stzbou", -- Ada.Strings.Wide_Wide_Bounded
+ "a-stzfix", -- Ada.Strings.Wide_Wide_Fixed
+ "a-stzhas", -- Ada.Strings.Wide_Wide_Hash
+ "a-stzmap", -- Ada.Strings.Wide_Wide_Maps
+ "a-stzunb", -- Ada.Strings.Wide_Wide_Unbounded
+ "a-swunha", -- Ada.Strings.Wide_Unbounded.Hash
+ "a-szmzco", -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
+ "a-szunha", -- Ada.Strings.Wide_Wide_Unbounded.Hash
+ "a-tiunio", -- Ada.Text_IO.Unbounded_IO;
+ "a-wwunio", -- Ada.Wide_Text_IO.Wide_Unbounded_IO;
+ "a-zttest", -- Ada.Wide_Wide_Text_IO.Text_Streams
+ "a-ztexio", -- Ada.Wide_Wide_Text_IO
+ "a-zzunio", -- Ada.Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO
+
+ ------------------------------------------------------
+ -- RM Required Additions to Ada 2005 for GNAT Types --
+ ------------------------------------------------------
+
+ "a-lfztio", -- Ada.Long_Float_Wide_Wide_Text_IO
+ "a-liztio", -- Ada.Long_Integer_Wide_Wide_Text_IO
+ "a-llfzti", -- Ada.Long_Long_Float_Wide_Wide_Text_IO
+ "a-llizti", -- Ada.Long_Long_Integer_Wide_Wide_Text_IO
+ "a-sfztio", -- Ada.Short_Float_Wide_Wide_Text_IO
+ "a-siztio", -- Ada.Short_Integer_Wide_Wide_Text_IO
+ "a-ssizti", -- Ada.Short_Short_Integer_Wide_Wide_Text_IO
+ "a-ztcstr", -- Ada.Wide_Wide_Text_IO.C_Streams
+
+ ----------------------------------------
+ -- GNAT Defined Additions to Ada 2005 --
+ ----------------------------------------
+
+ "a-chzla1", -- Ada.Characters.Wide_Wide_Latin_1
+ "a-chzla9", -- Ada.Characters.Wide_Wide_Latin_9
+ "a-szuzti", -- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO
- function Implementation_Unit (U : Unit_Number_Type) return Boolean is
- Fname : constant File_Name_Type := Unit_File_Name (U);
+ ---------------------------
+ -- GNAT Special IO Units --
+ ---------------------------
- begin
- -- All units are OK in GNAT mode
+ -- See Ada 95 section for further information. These packages are for the
+ -- implementation of the Wide_Wide_Text_IO generic packages.
- if GNAT_Mode then
- return False;
- end if;
+ "a-ztdeio", -- Ada.Wide_Wide_Text_IO.Decimal_IO
+ "a-ztenio", -- Ada.Wide_Wide_Text_IO.Enumeration_IO
+ "a-ztfiio", -- Ada.Wide_Wide_Text_IO.Fixed_IO
+ "a-ztflio", -- Ada.Wide_Wide_Text_IO.Float_IO
+ "a-ztinio", -- Ada.Wide_Wide_Text_IO.Integer_IO
+ "a-ztmoio", -- Ada.Wide_Wide_Text_IO.Modular_IO
- -- If length of file name is greater than 12, definitely OK!
+ ------------------------
+ -- GNAT Library Units --
+ ------------------------
+
+ "g-zstspl"); -- GNAT.Wide_Wide_String_Split
+
+ ----------------------
+ -- Get_Kind_Of_Unit --
+ ----------------------
+
+ function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit is
+ Fname : constant File_Name_Type := Unit_File_Name (U);
+
+ begin
+ -- If length of file name is greater than 12, not predefined.
-- The value 12 here is an 8 char name with extension .ads.
if Length_Of_Name (Fname) > 12 then
- return False;
+ return Not_Predefined_Unit;
end if;
-- Otherwise test file name
Get_Name_String (Fname);
- -- Definitely OK if file name does not start with a- g- s- i-
+ -- Not predefined if file name does not start with a- g- s- i-
if Name_Len < 3
or else Name_Buffer (2) /= '-'
@@ -342,14 +440,14 @@ package body Impunit is
and then
Name_Buffer (1) /= 's')
then
- return False;
+ return Not_Predefined_Unit;
end if;
- -- Definitely OK if file name does not end in .ads. This can
+ -- Not predefined if file name does not end in .ads. This can
-- happen when non-standard file names are being used.
if Name_Buffer (Name_Len - 3 .. Name_Len) /= ".ads" then
- return False;
+ return Not_Predefined_Unit;
end if;
-- Otherwise normalize file name to 8 characters
@@ -360,42 +458,48 @@ package body Impunit is
Name_Buffer (Name_Len) := ' ';
end loop;
- -- Definitely OK if name is in list
+ -- See if name is in 95 list
- for J in Non_Imp_File_Names'Range loop
- if Name_Buffer (1 .. 8) = Non_Imp_File_Names (J) then
- return False;
+ for J in Non_Imp_File_Names_95'Range loop
+ if Name_Buffer (1 .. 8) = Non_Imp_File_Names_95 (J) then
+ return Ada_95_Unit;
end if;
end loop;
- -- Only remaining special possibilities are children of
- -- System.RPC and System.Garlic and special files of the
- -- form System.Aux...
+ -- See if name is in 05 list
+
+ for J in Non_Imp_File_Names_05'Range loop
+ if Name_Buffer (1 .. 8) = Non_Imp_File_Names_05 (J) then
+ return Ada_05_Unit;
+ end if;
+ end loop;
+
+ -- Only remaining special possibilities are children of System.RPC and
+ -- System.Garlic and special files of the form System.Aux...
Get_Name_String (Unit_Name (U));
if Name_Len > 12
and then Name_Buffer (1 .. 11) = "system.rpc."
then
- return False;
+ return Ada_95_Unit;
end if;
if Name_Len > 15
and then Name_Buffer (1 .. 14) = "system.garlic."
then
- return False;
+ return Ada_95_Unit;
end if;
if Name_Len > 11
and then Name_Buffer (1 .. 10) = "system.aux"
then
- return False;
+ return Ada_95_Unit;
end if;
-- All tests failed, this is definitely an implementation unit
- return True;
-
- end Implementation_Unit;
+ return Implementation_Unit;
+ end Get_Kind_Of_Unit;
end Impunit;
diff --git a/gcc/ada/impunit.ads b/gcc/ada/impunit.ads
index 02917ccd8d8..075772b7323 100644
--- a/gcc/ada/impunit.ads
+++ b/gcc/ada/impunit.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2000 Free Software Foundation, Inc. --
+-- Copyright (C) 2000-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- --
@@ -26,17 +26,36 @@
-- This package contains data and functions used to determine if a given
-- unit is an internal unit intended only for use by the implementation
--- and which should not be directly WITH'ed by user code.
+-- and which should not be directly WITH'ed by user code. It also checks
+-- for Ada 05 units that should only be WITH'ed in Ada 05 mode.
with Types; use Types;
package Impunit is
- function Implementation_Unit (U : Unit_Number_Type) return Boolean;
- -- Given the unit number of a unit, this function determines if it is a
- -- unit that is intended to be used only internally by the implementation.
- -- This is used for posting warnings for improper WITH's of such units
- -- (such WITH's are allowed without warnings only in GNAT_Mode set by
- -- the use of -gnatg). True is returned if a warning should be posted.
+ type Kind_Of_Unit is
+ (Implementation_Unit,
+ -- Unit from predefined library intended to be used only by the
+ -- compiler generated code, or from the implementation of the run time.
+ -- Use of such a unit generates a warning unless the client is compiled
+ -- with the -gnatg switch. If we are being super strict, this should be
+ -- an error for the case of Ada units, but that seems over strenuous.
+
+ Not_Predefined_Unit,
+ -- This is not a predefined unit, so no checks are needed
+
+ Ada_95_Unit,
+ -- This unit is defined in the Ada 95 RM, and can be freely with'ed
+ -- in both Ada 95 mode and Ada 05 mode. Note that in Ada 83 mode, no
+ -- child units are allowed, so you can't even name such a unit.
+
+ Ada_05_Unit);
+ -- This unit is defined in the Ada 05 RM. Withing this unit from a
+ -- Ada 95 mode program will generate a warning (again, strictly speaking
+ -- this should be an error, but that seems over-strenuous).
+
+ function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit;
+ -- Given the unit number of a unit, this function determines the type
+ -- of the unit, as defined above.
end Impunit;
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) := ' ';
diff --git a/gcc/ada/krunch.ads b/gcc/ada/krunch.ads
index 2cf94360cee..f4637fbc788 100644
--- a/gcc/ada/krunch.ads
+++ b/gcc/ada/krunch.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-1997 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- --
@@ -111,7 +111,12 @@
-- a-wtflio
--- This is the only irregularity required (so far!) to keep the file names
+-- More problems arise with Wide_Wide, so we replace this sequence by
+-- a z (which is not used much) and also (as in the Wide_Text_IO case),
+-- we replace the prefix ada.wide_wide_text_io- by a-zt- and then
+-- the normal crunching rules are applied.
+
+-- These are the only irregularity required (so far!) to keep the file names
-- unique in the standard predefined libraries.
procedure Krunch
diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb
index eae80ff022c..5afc12bf13f 100644
--- a/gcc/ada/lib-xref.adb
+++ b/gcc/ada/lib-xref.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2004, Free Software Foundation, Inc. --
+-- Copyright (C) 1998-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- --
@@ -261,10 +261,18 @@ package body Lib.Xref is
begin
pragma Assert (Nkind (E) in N_Entity);
+ -- Check for obsolescent reference to ASCII
+
if E = Standard_ASCII then
Check_Restriction (No_Obsolescent_Features, N);
end if;
+ -- Warn if reference to Ada 2005 entity not in Ada 2005 mode
+
+ if Is_Ada_2005 (E) and then Ada_Version < Ada_05 then
+ Error_Msg_NE ("& is only defined in Ada 2005?", N, E);
+ end if;
+
-- Never collect references if not in main source unit. However,
-- we omit this test if Typ is 'e' or 'k', since these entries are
-- really structural, and it is useful to have them in units
diff --git a/gcc/ada/mlib-prj.adb b/gcc/ada/mlib-prj.adb
index c33559c3968..03ca2d0ee96 100644
--- a/gcc/ada/mlib-prj.adb
+++ b/gcc/ada/mlib-prj.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2004, Ada Core Technologies, Inc. --
+-- Copyright (C) 2001-2005, Ada Core Technologies, 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- --
@@ -1419,19 +1419,19 @@ package body MLib.Prj is
Data := Projects.Table (For_Project);
declare
- Interface : String_List_Id := Data.Lib_Interface_ALIs;
- ALI : File_Name_Type;
+ Iface : String_List_Id := Data.Lib_Interface_ALIs;
+ ALI : File_Name_Type;
begin
- while Interface /= Nil_String loop
- ALI := String_Elements.Table (Interface).Value;
+ while Iface /= Nil_String loop
+ ALI := String_Elements.Table (Iface).Value;
Interface_ALIs.Set (ALI, True);
- Get_Name_String (String_Elements.Table (Interface).Value);
+ Get_Name_String (String_Elements.Table (Iface).Value);
Add_Argument (Name_Buffer (1 .. Name_Len));
- Interface := String_Elements.Table (Interface).Next;
+ Iface := String_Elements.Table (Iface).Next;
end loop;
- Interface := Data.Lib_Interface_ALIs;
+ Iface := Data.Lib_Interface_ALIs;
if not Opt.Quiet_Output then
@@ -1439,10 +1439,10 @@ package body MLib.Prj is
-- library that is needed by an interface should also be an
-- interface. If it is not the case, output a warning.
- while Interface /= Nil_String loop
- ALI := String_Elements.Table (Interface).Value;
+ while Iface /= Nil_String loop
+ ALI := String_Elements.Table (Iface).Value;
Process (ALI);
- Interface := String_Elements.Table (Interface).Next;
+ Iface := String_Elements.Table (Iface).Next;
end loop;
end if;
end;
diff --git a/gcc/ada/mlib.adb b/gcc/ada/mlib.adb
index df8796f30cd..65efb4c65a7 100644
--- a/gcc/ada/mlib.adb
+++ b/gcc/ada/mlib.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1999-2004, Ada Core Technologies, Inc. --
+-- Copyright (C) 1999-2005, Ada Core Technologies, 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- --
@@ -101,9 +101,9 @@ package body MLib is
To : Name_Id;
Interfaces : String_List)
is
- Success : Boolean := False;
- To_Dir : constant String := Get_Name_String (To);
- Interface : Boolean := False;
+ Success : Boolean := False;
+ To_Dir : constant String := Get_Name_String (To);
+ Is_Interface : Boolean := False;
procedure Verbose_Copy (Index : Positive);
-- In verbose mode, output a message that the indexed file is copied
@@ -154,11 +154,11 @@ package body MLib is
-- Check if this is one of the interface ALIs
- Interface := False;
+ Is_Interface := False;
for Index in Interfaces'Range loop
if File_Name = Interfaces (Index).all then
- Interface := True;
+ Is_Interface := True;
exit;
end if;
end loop;
@@ -167,7 +167,7 @@ package body MLib is
-- the interface indication at the end of the P line.
-- Do not copy ALI files that are not Interfaces.
- if Interface then
+ if Is_Interface then
Success := False;
Verbose_Copy (Index);
diff --git a/gcc/ada/namet.adb b/gcc/ada/namet.adb
index 8bd712754f9..d462d1152e5 100644
--- a/gcc/ada/namet.adb
+++ b/gcc/ada/namet.adb
@@ -273,9 +273,9 @@ package body Namet is
procedure Copy_One_Character;
-- Copy a character from Name_Buffer to New_Buf. Includes case
- -- of copying a Uhh or Whhhh sequence and decoding it.
+ -- of copying a Uhh,Whhhh,WWhhhhhhhh sequence and decoding it.
- function Hex (N : Natural) return Natural;
+ function Hex (N : Natural) return Word;
-- Scans past N digits using Old pointer and returns hex value
procedure Insert_Character (C : Character);
@@ -301,6 +301,15 @@ package body Namet is
Old := Old + 1;
Insert_Character (Character'Val (Hex (2)));
+ -- WW (wide wide character insertion)
+
+ elsif C = 'W'
+ and then Old < Name_Len
+ and then Name_Buffer (Old + 1) = 'W'
+ then
+ Old := Old + 2;
+ Widechar.Set_Wide (Char_Code (Hex (8)), New_Buf, New_Len);
+
-- W (wide character insertion)
elsif C = 'W'
@@ -323,8 +332,8 @@ package body Namet is
-- Hex --
---------
- function Hex (N : Natural) return Natural is
- T : Natural := 0;
+ function Hex (N : Natural) return Word is
+ T : Word := 0;
C : Character;
begin
@@ -492,7 +501,7 @@ package body Namet is
elsif Name_Buffer (1) = 'Q' then
Get_Decoded_Name_String (Id);
- -- Only remaining issue is U/W sequences
+ -- Only remaining issue is U/W/WW sequences
else
Get_Name_String (Id);
@@ -502,6 +511,8 @@ package body Namet is
if Name_Buffer (P + 1) in 'A' .. 'Z' then
P := P + 1;
+ -- Uhh encoding
+
elsif Name_Buffer (P) = 'U' then
for J in reverse P + 3 .. P + Name_Len loop
Name_Buffer (J + 3) := Name_Buffer (J);
@@ -516,22 +527,38 @@ package body Namet is
Name_Buffer (P + 5) := ']';
P := P + 6;
+ -- WWhhhhhhhh encoding
+
+ elsif Name_Buffer (P) = 'W'
+ and then P + 9 <= Name_Len
+ and then Name_Buffer (P + 1) = 'W'
+ and then Name_Buffer (P + 2) not in 'A' .. 'Z'
+ and then Name_Buffer (P + 2) /= '_'
+ then
+ Name_Buffer (P + 12 .. Name_Len + 2) :=
+ Name_Buffer (P + 10 .. Name_Len);
+ Name_Buffer (P) := '[';
+ Name_Buffer (P + 1) := '"';
+ Name_Buffer (P + 10) := '"';
+ Name_Buffer (P + 11) := ']';
+ Name_Len := Name_Len + 2;
+ P := P + 12;
+
+ -- Whhhh encoding
+
elsif Name_Buffer (P) = 'W'
and then P < Name_Len
and then Name_Buffer (P + 1) not in 'A' .. 'Z'
and then Name_Buffer (P + 1) /= '_'
then
- Name_Buffer (P + 8 .. P + Name_Len + 5) :=
+ Name_Buffer (P + 8 .. P + Name_Len + 3) :=
Name_Buffer (P + 5 .. Name_Len);
- Name_Buffer (P + 5) := Name_Buffer (P + 4);
- Name_Buffer (P + 4) := Name_Buffer (P + 3);
- Name_Buffer (P + 3) := Name_Buffer (P + 2);
- Name_Buffer (P + 2) := Name_Buffer (P + 1);
+ Name_Buffer (P + 2 .. P + 5) := Name_Buffer (P + 1 .. P + 4);
Name_Buffer (P) := '[';
Name_Buffer (P + 1) := '"';
Name_Buffer (P + 6) := '"';
Name_Buffer (P + 7) := ']';
- Name_Len := Name_Len + 5;
+ Name_Len := Name_Len + 3;
P := P + 8;
else
@@ -1135,19 +1162,25 @@ package body Namet is
procedure Store_Encoded_Character (C : Char_Code) is
- procedure Set_Hex_Chars (N : Natural);
+ procedure Set_Hex_Chars (C : Char_Code);
-- Stores given value, which is in the range 0 .. 255, as two hex
- -- digits (using lower case a-f) in Name_Buffer, incrementing Name_Len
+ -- digits (using lower case a-f) in Name_Buffer, incrementing Name_Len.
- procedure Set_Hex_Chars (N : Natural) is
- Hexd : constant String := "0123456789abcdef";
+ -------------------
+ -- Set_Hex_Chars --
+ -------------------
+ procedure Set_Hex_Chars (C : Char_Code) is
+ Hexd : constant String := "0123456789abcdef";
+ N : constant Natural := Natural (C);
begin
Name_Buffer (Name_Len + 1) := Hexd (N / 16 + 1);
Name_Buffer (Name_Len + 2) := Hexd (N mod 16 + 1);
Name_Len := Name_Len + 2;
end Set_Hex_Chars;
+ -- Start of processing for Store_Encoded_Character
+
begin
Name_Len := Name_Len + 1;
@@ -1159,16 +1192,24 @@ package body Namet is
Name_Buffer (Name_Len) := CC;
else
Name_Buffer (Name_Len) := 'U';
- Set_Hex_Chars (Natural (C));
+ Set_Hex_Chars (C);
end if;
end;
+ elsif In_Wide_Character_Range (C) then
+ Name_Buffer (Name_Len) := 'W';
+ Set_Hex_Chars (C / 256);
+ Set_Hex_Chars (C mod 256);
+
else
Name_Buffer (Name_Len) := 'W';
- Set_Hex_Chars (Natural (C) / 256);
- Set_Hex_Chars (Natural (C) mod 256);
+ Name_Len := Name_Len + 1;
+ Name_Buffer (Name_Len) := 'W';
+ Set_Hex_Chars (C / 2 ** 24);
+ Set_Hex_Chars ((C / 2 ** 16) mod 256);
+ Set_Hex_Chars ((C / 256) mod 256);
+ Set_Hex_Chars (C mod 256);
end if;
-
end Store_Encoded_Character;
--------------------------------------
diff --git a/gcc/ada/namet.ads b/gcc/ada/namet.ads
index bf4ec2cc261..3a3e5e03748 100644
--- a/gcc/ada/namet.ads
+++ b/gcc/ada/namet.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -48,17 +48,18 @@ package Namet is
-- The forms of the entries are as follows:
--- Identifiers Stored with upper case letters folded to lower case.
--- Upper half (16#80# bit set) and wide characters are
--- stored in an encoded form (Uhh for upper half and
--- Whhhh for wide characters, as provided by the routine
--- Store_Encoded_Character, where hh are hex digits for
--- the character code using lower case a-f). Normally
--- the use of U or W in other internal names is avoided,
--- but these letters may be used in internal names
--- (without this special meaning), if the appear as
--- the last character of the name, or they are followed
--- by an upper case letter or an underscore.
+-- Identifiers Stored with upper case letters folded to lower case. Upper
+-- half (16#80# bit set) and wide characters are stored
+-- in an encoded form (Uhh for upper half char, Whhhh
+-- for wide characters, WWhhhhhhhh as provided by the
+-- routine Store_Encoded_Character, where hh are hex
+-- digits for the character code using lower case a-f).
+-- Normally the use of U or W in other internal names is
+-- avoided, but these letters may be used in internal
+-- names (without this special meaning), if they appear
+-- as the last character of the name, or they are
+-- followed by an upper case letter (other than the WW
+-- sequence), or an underscore.
-- Operator symbols Stored with an initial letter O, and the remainder
@@ -73,7 +74,7 @@ package Namet is
-- Character literals Character literals have names that are used only for
-- debugging and error message purposes. The form is a
-- upper case Q followed by a single lower case letter,
--- or by a Uxx or Wxxxx encoding as described for
+-- or by a Uxx/Wxxxx/WWxxxxxxx encoding as described for
-- identifiers. The Set_Character_Literal_Name procedure
-- should be used to construct these encodings. Normally
-- the use of O in other internal names is avoided, but
@@ -83,9 +84,9 @@ package Namet is
-- underscore.
-- Unit names Stored with upper case letters folded to lower case,
--- using Uhh/Whhhh encoding as described for identifiers,
--- and a %s or %b suffix for specs/bodies. See package
--- Uname for further details.
+-- using Uhh/Whhhh/WWhhhhhhhh encoding as described for
+-- identifiers, and a %s or %b suffix for specs/bodies.
+-- See package Uname for further details.
-- File names Are stored in the form provided by Osint. Typically
-- they may include wide character escape sequences and
@@ -100,12 +101,12 @@ package Namet is
-- characters may appear for such entries.
-- Note: the encodings Uhh (upper half characters), Whhhh (wide characters),
--- and Qx (character literal names) are described in the spec, since they are
--- visible throughout the system (e.g. in debugging output). However, no code
--- should depend on these particular encodings, so it should be possible to
--- change the encodings by making changes only to the Namet specification (to
--- change these comments) and the body (which actually implements the
--- encodings).
+-- WWhhhhhhhh (wide wide characters) and Qx (character literal names) are
+-- described in the spec, since they are visible throughout the system (e.g.
+-- in debugging output). However, no code should depend on these particular
+-- encodings, so it should be possible to change the encodings by making
+-- changes only to the Namet specification (to change these comments) and the
+-- body (which actually implements the encodings).
-- The names are hashed so that a given name appears only once in the table,
-- except that names entered with Name_Enter as opposed to Name_Find are
@@ -188,13 +189,14 @@ package Namet is
procedure Get_Decoded_Name_String_With_Brackets (Id : Name_Id);
-- This routine is similar to Decoded_Name, except that the brackets
- -- notation (Uhh replaced by ["hh"], Whhhh replaced by ["hhhh"]) is used
- -- for all non-lower half characters, regardless of the setting of
- -- Opt.Wide_Character_Encoding_Method, and also in that characters in the
- -- range 16#80# .. 16#FF# are converted to brackets notation in all cases.
- -- This routine can be used when there is a requirement for a canonical
- -- representation not affected by the character set options (e.g. in the
- -- binder generation of symbols).
+ -- notation (Uhh replaced by ["hh"], Whhhh replaced by ["hhhh"],
+ -- WWhhhhhhhh replaced by ["hhhhhhhh"]) is used for all non-lower half
+ -- characters, regardless of how Opt.Wide_Character_Encoding_Method is
+ -- set, and also in that characters in the range 16#80# .. 16#FF# are
+ -- converted to brackets notation in all cases. This routine can be used
+ -- when there is a requirement for a canonical representation not affected
+ -- by the character set options (e.g. in the binder generation of
+ -- symbols).
function Get_Name_Table_Byte (Id : Name_Id) return Byte;
pragma Inline (Get_Name_Table_Byte);
@@ -328,11 +330,12 @@ package Namet is
-- Stores given character code at the end of Name_Buffer, updating the
-- value in Name_Len appropriately. Lower case letters and digits are
-- stored unchanged. Other 8-bit characters are stored using the Uhh
- -- encoding (hh = hex code), and other 16-bit wide-character values are
- -- stored using the Whhhh (hhhh = hex code) encoding. Note that this
- -- procedure does not fold upper case letters (they are stored using the
- -- Uhh encoding). If folding is required, it must be done by the caller
- -- prior to the call.
+ -- encoding (hh = hex code), other 16-bit wide character values are stored
+ -- using the Whhhh (hhhh = hex code) encoding, and other 32-bit wide wide
+ -- character values are stored using the WWhhhhhhhh (hhhhhhhh = hex code).
+ -- Note that this procedure does not fold upper case letters (they are
+ -- stored using the Uhh encoding). If folding is required, it must be done
+ -- by the caller prior to the call.
procedure Tree_Read;
-- Initializes internal tables from current tree file using the relevant
diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads
index e710275b74a..1627831ab17 100644
--- a/gcc/ada/opt.ads
+++ b/gcc/ada/opt.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -271,6 +271,11 @@ package Opt is
-- of the original source code. Causes debugging information to be
-- written with respect to the generated code file that is written.
+ Default_Exit_Status : Int := 0;
+ -- GNATBIND
+ -- Set the default exit status value. Set by the -Xnnn switch for the
+ -- binder.
+
Default_Sec_Stack_Size : Int := -1;
-- GNATBIND
-- Set to default secondary stack size in units of kilobytes. Set by
diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb
index e9fe5537136..7dcc6ba08e1 100644
--- a/gcc/ada/par-ch12.adb
+++ b/gcc/ada/par-ch12.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -808,8 +808,15 @@ package body Ch12 is
-----------------------------------------
-- FORMAL_SUBPROGRAM_DECLARATION ::=
+ -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION
+ -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION
+
+ -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::=
-- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
+ -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::=
+ -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT];
+
-- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
-- DEFAULT_NAME ::= NAME
@@ -817,32 +824,55 @@ package body Ch12 is
-- The caller has checked that the initial tokens are WITH FUNCTION or
-- WITH PROCEDURE, and the initial WITH has been scanned out.
- -- Note: we separate this into two procedures because the name is allowed
- -- to be an operator symbol for a function, but not for a procedure.
-
-- Error recovery: cannot raise Error_Resync
function P_Formal_Subprogram_Declaration return Node_Id is
- Def_Node : Node_Id;
+ Prev_Sloc : constant Source_Ptr := Prev_Token_Ptr;
+ Spec_Node : constant Node_Id := P_Subprogram_Specification;
+ Def_Node : Node_Id;
begin
- Def_Node := New_Node (N_Formal_Subprogram_Declaration, Prev_Token_Ptr);
- Set_Specification (Def_Node, P_Subprogram_Specification);
-
if Token = Tok_Is then
T_Is; -- past IS, skip extra IS or ";"
- if Token = Tok_Box then
+ if Token = Tok_Abstract then
+ Def_Node :=
+ New_Node (N_Formal_Abstract_Subprogram_Declaration, Prev_Sloc);
+ Scan; -- past ABSTRACT
+
+ if Ada_Version < Ada_05 then
+ Error_Msg_SP
+ ("formal abstract subprograms are an Ada 2005 extension");
+ Error_Msg_SP ("\unit must be compiled with -gnat05 switch");
+ end if;
+
+ else
+ Def_Node :=
+ New_Node (N_Formal_Concrete_Subprogram_Declaration, Prev_Sloc);
+ end if;
+
+ Set_Specification (Def_Node, Spec_Node);
+
+ if Token = Tok_Semicolon then
+ Scan; -- past ";"
+
+ elsif Token = Tok_Box then
Set_Box_Present (Def_Node, True);
Scan; -- past <>
+ T_Semicolon;
else
Set_Default_Name (Def_Node, P_Name);
+ T_Semicolon;
end if;
+ else
+ Def_Node :=
+ New_Node (N_Formal_Concrete_Subprogram_Declaration, Prev_Sloc);
+ Set_Specification (Def_Node, Spec_Node);
+ T_Semicolon;
end if;
- T_Semicolon;
return Def_Node;
end P_Formal_Subprogram_Declaration;
diff --git a/gcc/ada/par-ch2.adb b/gcc/ada/par-ch2.adb
index dd58e1f9cdc..8b843e56c88 100644
--- a/gcc/ada/par-ch2.adb
+++ b/gcc/ada/par-ch2.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -54,6 +54,21 @@ package body Ch2 is
-- All set if we do indeed have an identifier
if Token = Tok_Identifier then
+
+ -- Ada 2005 (AI-284): Compiling in Ada95 mode we notify
+ -- that interface, overriding, and synchronized are
+ -- new reserved words
+
+ if Ada_Version = Ada_95 then
+ if Token_Name = Name_Overriding
+ or else Token_Name = Name_Synchronized
+ or else (Token_Name = Name_Interface
+ and then Prev_Token /= Tok_Pragma)
+ then
+ Error_Msg_N ("& is a reserved word in Ada 2005?", Token_Node);
+ end if;
+ end if;
+
Ident_Node := Token_Node;
Scan; -- past Identifier
return Ident_Node;
@@ -251,9 +266,21 @@ package body Ch2 is
Style.Check_Pragma_Name;
end if;
- Ident_Node := P_Identifier;
+ -- Ada 2005 (AI-284): INTERFACE is a new reserved word but it is
+ -- allowed as a pragma name.
+
+ if Ada_Version >= Ada_05
+ and then Token = Tok_Interface
+ then
+ Pragma_Name := Name_Interface;
+ Ident_Node := Token_Node;
+ Scan; -- past INTERFACE
+ else
+ Ident_Node := P_Identifier;
+ Delete_Node (Ident_Node);
+ end if;
+
Set_Chars (Pragma_Node, Pragma_Name);
- Delete_Node (Ident_Node);
-- See if special INTERFACE/IMPORT check is required
diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb
index 440f6468637..5da4a3e10e1 100644
--- a/gcc/ada/par-ch3.adb
+++ b/gcc/ada/par-ch3.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -174,7 +174,20 @@ package body Ch3 is
-- separate declaration (but not use) of a reserved identifier.
if Token = Tok_Identifier then
- null;
+
+ -- Ada 2005 (AI-284): Compiling in Ada95 mode we notify
+ -- that interface, overriding, and synchronized are
+ -- new reserved words
+
+ if Ada_Version = Ada_95 then
+ if Token_Name = Name_Overriding
+ or else Token_Name = Name_Synchronized
+ or else (Token_Name = Name_Interface
+ and then Prev_Token /= Tok_Pragma)
+ then
+ Error_Msg_N ("& is a reserved word in Ada 2005?", Token_Node);
+ end if;
+ end if;
-- If we have a reserved identifier, manufacture an identifier with
-- a corresponding name after posting an appropriate error message
diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb
index d22c5243cee..3288aadec6a 100644
--- a/gcc/ada/par-prag.adb
+++ b/gcc/ada/par-prag.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -306,10 +306,13 @@ begin
-- This pragma must be processed at parse time, since we want to set
-- the Ada version properly at parse time to recognize the appropriate
- -- Ada version syntax.
+ -- Ada version syntax. However, it is only the zero argument form that
+ -- must be processed at parse time.
when Pragma_Ada_05 =>
- Ada_Version := Ada_05;
+ if Arg_Count = 0 then
+ Ada_Version := Ada_05;
+ end if;
-----------
-- Debug --
@@ -1060,7 +1063,6 @@ begin
Pragma_Normalize_Scalars |
Pragma_Optimize |
Pragma_Optional_Overriding |
- Pragma_Overriding |
Pragma_Pack |
Pragma_Passive |
Pragma_Polling |
diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb
index edf3a38155a..15a2fd1c86d 100644
--- a/gcc/ada/rtsfind.adb
+++ b/gcc/ada/rtsfind.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -159,7 +159,7 @@ package body Rtsfind is
-- A value of False means nothing special need be done. A value of
-- True indicates that this flag must be set to True. It is needed
-- only in the Text_IO_Kludge procedure, which may materialize an
- -- entity of Text_IO (or Wide_Text_IO) that was previously unknown.
+ -- entity of Text_IO (or [Wide_]Wide_Text_IO) that was previously unknown.
-- Id is the RE_Id value of the entity which was originally requested.
-- Id is used only for error message detail, and if it is RE_Null, then
-- the attempt to output the entity name is ignored.
@@ -248,6 +248,9 @@ package body Rtsfind is
elsif U_Id in Ada_Wide_Text_IO_Child then
Name_Buffer (17) := '.';
+
+ elsif U_Id in Ada_Wide_Wide_Text_IO_Child then
+ Name_Buffer (22) := '.';
end if;
elsif U_Id in Interfaces_Child then
@@ -435,7 +438,11 @@ package body Rtsfind is
return
Nkind (Prf) = N_Identifier
and then
- (Chars (Prf) = Name_Text_IO or else Chars (Prf) = Name_Wide_Text_IO)
+ (Chars (Prf) = Name_Text_IO
+ or else
+ Chars (Prf) = Name_Wide_Text_IO
+ or else
+ Chars (Prf) = Name_Wide_Wide_Text_IO)
and then
Nkind (Sel) = N_Identifier
and then
@@ -830,7 +837,7 @@ package body Rtsfind is
or else
E = RE_Params_Stream_Type
or else
- E = RE_RPC_Receiver)
+ E = RE_Request_Access)
then
declare
DSA_Implementation : constant Entity_Id :=
@@ -1143,6 +1150,14 @@ package body Rtsfind is
Name_Integer_IO => Ada_Wide_Text_IO_Integer_IO,
Name_Modular_IO => Ada_Wide_Text_IO_Modular_IO);
+ Wide_Wide_Name_Map : constant Name_Map_Type := Name_Map_Type'(
+ Name_Decimal_IO => Ada_Wide_Wide_Text_IO_Decimal_IO,
+ Name_Enumeration_IO => Ada_Wide_Wide_Text_IO_Enumeration_IO,
+ Name_Fixed_IO => Ada_Wide_Wide_Text_IO_Fixed_IO,
+ Name_Float_IO => Ada_Wide_Wide_Text_IO_Float_IO,
+ Name_Integer_IO => Ada_Wide_Wide_Text_IO_Integer_IO,
+ Name_Modular_IO => Ada_Wide_Wide_Text_IO_Modular_IO);
+
begin
-- Nothing to do if name is not identifier or a selected component
-- whose selector_name is not an identifier.
@@ -1161,7 +1176,7 @@ package body Rtsfind is
-- Nothing to do if name is not one of the Text_IO subpackages
-- Otherwise look through loaded units, and if we find Text_IO
- -- or Wide_Text_IO already loaded, then load the proper child.
+ -- or [Wide_]Wide_Text_IO already loaded, then load the proper child.
if Chrs in Text_IO_Package_Name then
for U in Main_Unit .. Last_Unit loop
@@ -1169,17 +1184,17 @@ package body Rtsfind is
if Name_Len = 12 then
- -- Here is where we do the loads if we find one of the
- -- units Ada.Text_IO or Ada.Wide_Text_IO. An interesting
- -- detail is that these units may already be used (i.e.
- -- their In_Use flags may be set). Normally when the In_Use
- -- flag is set, the Is_Potentially_Use_Visible flag of all
- -- entities in the package is set, but the new entity we
- -- are mysteriously adding was not there to have its flag
- -- set at the time. So that's why we pass the extra parameter
- -- to RTU_Find, to make sure the flag does get set now.
- -- Given that those generic packages are in fact child units,
- -- we must indicate that they are visible.
+ -- Here is where we do the loads if we find one of the units
+ -- Ada.Text_IO or Ada.[Wide_]Wide_Text_IO. An interesting
+ -- detail is that these units may already be used (i.e. their
+ -- In_Use flags may be set). Normally when the In_Use flag is
+ -- set, the Is_Potentially_Use_Visible flag of all entities in
+ -- the package is set, but the new entity we are mysteriously
+ -- adding was not there to have its flag set at the time. So
+ -- that's why we pass the extra parameter to RTU_Find, to make
+ -- sure the flag does get set now. Given that those generic
+ -- packages are in fact child units, we must indicate that
+ -- they are visible.
if Name_Buffer (1 .. 12) = "a-textio.ads" then
Load_RTU
@@ -1194,6 +1209,13 @@ package body Rtsfind is
Use_Setting => In_Use (Cunit_Entity (U)));
Set_Is_Visible_Child_Unit
(RT_Unit_Table (Wide_Name_Map (Chrs)).Entity);
+
+ elsif Name_Buffer (1 .. 12) = "a-ztexio.ads" then
+ Load_RTU
+ (Wide_Wide_Name_Map (Chrs),
+ Use_Setting => In_Use (Cunit_Entity (U)));
+ Set_Is_Visible_Child_Unit
+ (RT_Unit_Table (Wide_Wide_Name_Map (Chrs)).Entity);
end if;
end if;
end loop;
diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads
index 2faf0b91b70..ac1e94a7164 100644
--- a/gcc/ada/rtsfind.ads
+++ b/gcc/ada/rtsfind.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -69,6 +69,9 @@ package Rtsfind is
-- Names of the form Ada_Wide_Text_IO_xxx are second level children
-- of Ada.Wide_Text_IO.
+ -- Names of the form Ada_Wide_Wide_Text_IO_xxx are second level children
+ -- of Ada.Wide_Wide_Text_IO.
+
-- Names of the form Interfaces_xxx are first level children of
-- Interfaces_CPP refers to package Interfaces.CPP
@@ -156,6 +159,15 @@ package Rtsfind is
Ada_Wide_Text_IO_Integer_IO,
Ada_Wide_Text_IO_Modular_IO,
+ -- Children of Ada.Wide_Wide_Text_IO (for Text_IO_Kludge)
+
+ Ada_Wide_Wide_Text_IO_Decimal_IO,
+ Ada_Wide_Wide_Text_IO_Enumeration_IO,
+ Ada_Wide_Wide_Text_IO_Fixed_IO,
+ Ada_Wide_Wide_Text_IO_Float_IO,
+ Ada_Wide_Wide_Text_IO_Integer_IO,
+ Ada_Wide_Wide_Text_IO_Modular_IO,
+
-- Interfaces
Interfaces,
@@ -343,7 +355,7 @@ package Rtsfind is
System_Tasking_Stages);
subtype Ada_Child is RTU_Id
- range Ada_Calendar .. Ada_Wide_Text_IO_Modular_IO;
+ range Ada_Calendar .. Ada_Wide_Wide_Text_IO_Modular_IO;
-- Range of values for children or grand-children of Ada
subtype Ada_Calendar_Child is Ada_Child
@@ -373,6 +385,10 @@ package Rtsfind is
range Ada_Wide_Text_IO_Decimal_IO .. Ada_Wide_Text_IO_Modular_IO;
-- Range of values for children of Ada.Text_IO
+ subtype Ada_Wide_Wide_Text_IO_Child is Ada_Child
+ range Ada_Wide_Wide_Text_IO_Decimal_IO ..
+ Ada_Wide_Wide_Text_IO_Modular_IO;
+
subtype Interfaces_Child is RTU_Id
range Interfaces_CPP .. Interfaces_Packed_Decimal;
-- Range of values for children of Interfaces
@@ -700,6 +716,7 @@ package Rtsfind is
RE_Image_Unsigned, -- System.Img_Uns
RE_Image_Wide_Character, -- System.Img_WChar
+ RE_Image_Wide_Wide_Character, -- System.Img_WChar
RE_Bind_Interrupt_To_Entry, -- System.Interrupts
RE_Default_Interrupt_Priority, -- System.Interrupts
@@ -1033,7 +1050,6 @@ package Rtsfind is
RE_Do_Rpc, -- System.RPC
RE_Params_Stream_Type, -- System.RPC
RE_Partition_ID, -- System.RPC
- RE_RPC_Receiver, -- System.RPC
RE_To_PolyORB_String, -- System.PolyORB_Interface
RE_To_Standard_String, -- System.PolyORB_Interface
@@ -1103,6 +1119,7 @@ package Rtsfind is
RE_FA_SU, -- System.PolyORB_Interface
RE_FA_U, -- System.PolyORB_Interface
RE_FA_WC, -- System.PolyORB_Interface
+ RE_FA_WWC, -- System.PolyORB_Interface
RE_FA_String, -- System.PolyORB_Interface
RE_FA_ObjRef, -- System.PolyORB_Interface
@@ -1125,6 +1142,7 @@ package Rtsfind is
RE_TA_SU, -- System.PolyORB_Interface
RE_TA_U, -- System.PolyORB_Interface
RE_TA_WC, -- System.PolyORB_Interface
+ RE_TA_WWC, -- System.PolyORB_Interface
RE_TA_String, -- System.PolyORB_Interface
RE_TA_ObjRef, -- System.PolyORB_Interface
RE_TA_TC, -- System.PolyORB_Interface
@@ -1154,6 +1172,7 @@ package Rtsfind is
RE_TC_Void, -- System.PolyORB_Interface
RE_TC_Opaque, -- System.PolyORB_Interface,
RE_TC_WC, -- System.PolyORB_Interface
+ RE_TC_WWC, -- System.PolyORB_Interface
RE_TC_Array, -- System.PolyORB_Interface,
RE_TC_Sequence, -- System.PolyORB_Interface,
RE_TC_String, -- System.PolyORB_Interface,
@@ -1169,6 +1188,10 @@ package Rtsfind is
RE_IS_Iu2, -- System.Scalar_Values
RE_IS_Iu4, -- System.Scalar_Values
RE_IS_Iu8, -- System.Scalar_Values
+ RE_IS_Iz1, -- System.Scalar_Values
+ RE_IS_Iz2, -- System.Scalar_Values
+ RE_IS_Iz4, -- System.Scalar_Values
+ RE_IS_Iz8, -- System.Scalar_Values
RE_IS_Isf, -- System.Scalar_Values
RE_IS_Ifl, -- System.Scalar_Values
RE_IS_Ilf, -- System.Scalar_Values
@@ -1222,6 +1245,7 @@ package Rtsfind is
RE_I_SU, -- System.Stream_Attributes
RE_I_U, -- System.Stream_Attributes
RE_I_WC, -- System.Stream_Attributes
+ RE_I_WWC, -- System.Stream_Attributes
RE_W_AD, -- System.Stream_Attributes
RE_W_AS, -- System.Stream_Attributes
@@ -1242,6 +1266,7 @@ package Rtsfind is
RE_W_SU, -- System.Stream_Attributes
RE_W_U, -- System.Stream_Attributes
RE_W_WC, -- System.Stream_Attributes
+ RE_W_WWC, -- System.Stream_Attributes
RE_Block_Stream_Ops_OK, -- System.Stream_Attributes
@@ -1249,8 +1274,6 @@ package Rtsfind is
RE_Str_Concat_CC, -- System.String_Ops
RE_Str_Concat_CS, -- System.String_Ops
RE_Str_Concat_SC, -- System.String_Ops
- RE_Str_Normalize, -- System.String_Ops
- RE_Wide_Str_Normalize, -- System.String_Ops
RE_Str_Concat_3, -- System.String_Ops_Concat_3
@@ -1350,6 +1373,7 @@ package Rtsfind is
RE_Value_Unsigned, -- System.Val_Uns
RE_Value_Wide_Character, -- System.Val_WChar
+ RE_Value_Wide_Wide_Character, -- System.Val_WChar
RE_D, -- System.Vax_Float_Operations
RE_F, -- System.Vax_Float_Operations
@@ -1398,16 +1422,26 @@ package Rtsfind is
RE_Register_VMS_Exception, -- System.VMS_Exception_Table
RE_String_To_Wide_String, -- System.WCh_StW
+ RE_String_To_Wide_Wide_String, -- System.WCh_StW
RE_Wide_String_To_String, -- System.WCh_WtS
+ RE_Wide_Wide_String_To_String, -- System.WCh_WtS
RE_Wide_Width_Character, -- System.WWd_Char
+ RE_Wide_Wide_Width_Character, -- System.WWd_Char
+
+ RE_Wide_Wide_Width_Enumeration_8, -- System.WWd_Enum
+ RE_Wide_Wide_Width_Enumeration_16, -- System.WWd_Enum
+ RE_Wide_Wide_Width_Enumeration_32, -- System.WWd_Enum
RE_Wide_Width_Enumeration_8, -- System.WWd_Enum
RE_Wide_Width_Enumeration_16, -- System.WWd_Enum
RE_Wide_Width_Enumeration_32, -- System.WWd_Enum
+ RE_Wide_Wide_Width_Wide_Character, -- System.WWd_Wchar
+ RE_Wide_Wide_Width_Wide_Wide_Char, -- System.WWd_Wchar
RE_Wide_Width_Wide_Character, -- System.WWd_Wchar
+ RE_Wide_Width_Wide_Wide_Character, -- System.WWd_Wchar
RE_Width_Boolean, -- System.Wid_Bool
@@ -1422,6 +1456,7 @@ package Rtsfind is
RE_Width_Long_Long_Unsigned, -- System.Wid_LLU
RE_Width_Wide_Character, -- System.Wid_WChar
+ RE_Width_Wide_Wide_Character, -- System.Wid_WChar
RE_Protected_Entry_Body_Array, -- Tasking.Protected_Objects.Entries
RE_Protection_Entries, -- Tasking.Protected_Objects.Entries
@@ -1781,6 +1816,7 @@ package Rtsfind is
RE_Image_Unsigned => System_Img_Uns,
RE_Image_Wide_Character => System_Img_WChar,
+ RE_Image_Wide_Wide_Character => System_Img_WChar,
RE_Bind_Interrupt_To_Entry => System_Interrupts,
RE_Default_Interrupt_Priority => System_Interrupts,
@@ -2174,6 +2210,7 @@ package Rtsfind is
RE_FA_SU => System_PolyORB_Interface,
RE_FA_U => System_PolyORB_Interface,
RE_FA_WC => System_PolyORB_Interface,
+ RE_FA_WWC => System_PolyORB_Interface,
RE_FA_String => System_PolyORB_Interface,
RE_FA_ObjRef => System_PolyORB_Interface,
@@ -2196,6 +2233,7 @@ package Rtsfind is
RE_TA_SU => System_PolyORB_Interface,
RE_TA_U => System_PolyORB_Interface,
RE_TA_WC => System_PolyORB_Interface,
+ RE_TA_WWC => System_PolyORB_Interface,
RE_TA_String => System_PolyORB_Interface,
RE_TA_ObjRef => System_PolyORB_Interface,
RE_TA_TC => System_PolyORB_Interface,
@@ -2225,6 +2263,7 @@ package Rtsfind is
RE_TC_Void => System_PolyORB_Interface,
RE_TC_Opaque => System_PolyORB_Interface,
RE_TC_WC => System_PolyORB_Interface,
+ RE_TC_WWC => System_PolyORB_Interface,
RE_TC_Array => System_PolyORB_Interface,
RE_TC_Sequence => System_PolyORB_Interface,
RE_TC_String => System_PolyORB_Interface,
@@ -2240,7 +2279,6 @@ package Rtsfind is
RE_Do_Rpc => System_RPC,
RE_Params_Stream_Type => System_RPC,
RE_Partition_ID => System_RPC,
- RE_RPC_Receiver => System_RPC,
RE_IS_Is1 => System_Scalar_Values,
RE_IS_Is2 => System_Scalar_Values,
@@ -2250,6 +2288,10 @@ package Rtsfind is
RE_IS_Iu2 => System_Scalar_Values,
RE_IS_Iu4 => System_Scalar_Values,
RE_IS_Iu8 => System_Scalar_Values,
+ RE_IS_Iz1 => System_Scalar_Values,
+ RE_IS_Iz2 => System_Scalar_Values,
+ RE_IS_Iz4 => System_Scalar_Values,
+ RE_IS_Iz8 => System_Scalar_Values,
RE_IS_Isf => System_Scalar_Values,
RE_IS_Ifl => System_Scalar_Values,
RE_IS_Ilf => System_Scalar_Values,
@@ -2303,6 +2345,7 @@ package Rtsfind is
RE_I_SU => System_Stream_Attributes,
RE_I_U => System_Stream_Attributes,
RE_I_WC => System_Stream_Attributes,
+ RE_I_WWC => System_Stream_Attributes,
RE_W_AD => System_Stream_Attributes,
RE_W_AS => System_Stream_Attributes,
@@ -2323,12 +2366,10 @@ package Rtsfind is
RE_W_SU => System_Stream_Attributes,
RE_W_U => System_Stream_Attributes,
RE_W_WC => System_Stream_Attributes,
-
+ RE_W_WWC => System_Stream_Attributes,
RE_Block_Stream_Ops_OK => System_Stream_Attributes,
RE_Str_Concat => System_String_Ops,
- RE_Str_Normalize => System_String_Ops,
- RE_Wide_Str_Normalize => System_String_Ops,
RE_Str_Concat_CC => System_String_Ops,
RE_Str_Concat_CS => System_String_Ops,
RE_Str_Concat_SC => System_String_Ops,
@@ -2431,6 +2472,7 @@ package Rtsfind is
RE_Value_Unsigned => System_Val_Uns,
RE_Value_Wide_Character => System_Val_WChar,
+ RE_Value_Wide_Wide_Character => System_Val_WChar,
RE_D => System_Vax_Float_Operations,
RE_F => System_Vax_Float_Operations,
@@ -2479,16 +2521,27 @@ package Rtsfind is
RE_Register_VMS_Exception => System_VMS_Exception_Table,
RE_String_To_Wide_String => System_WCh_StW,
+ RE_String_To_Wide_Wide_String => System_WCh_StW,
RE_Wide_String_To_String => System_WCh_WtS,
+ RE_Wide_Wide_String_To_String => System_WCh_WtS,
+ RE_Wide_Wide_Width_Character => System_WWd_Char,
RE_Wide_Width_Character => System_WWd_Char,
+ RE_Wide_Wide_Width_Enumeration_8 => System_WWd_Enum,
+ RE_Wide_Wide_Width_Enumeration_16 => System_WWd_Enum,
+ RE_Wide_Wide_Width_Enumeration_32 => System_WWd_Enum,
+
RE_Wide_Width_Enumeration_8 => System_WWd_Enum,
RE_Wide_Width_Enumeration_16 => System_WWd_Enum,
RE_Wide_Width_Enumeration_32 => System_WWd_Enum,
+ RE_Wide_Wide_Width_Wide_Character => System_WWd_Wchar,
+ RE_Wide_Wide_Width_Wide_Wide_Char => System_WWd_Wchar,
+
RE_Wide_Width_Wide_Character => System_WWd_Wchar,
+ RE_Wide_Width_Wide_Wide_Character => System_WWd_Wchar,
RE_Width_Boolean => System_Wid_Bool,
@@ -2503,6 +2556,7 @@ package Rtsfind is
RE_Width_Long_Long_Unsigned => System_Wid_LLU,
RE_Width_Wide_Character => System_Wid_WChar,
+ RE_Width_Wide_Wide_Character => System_Wid_WChar,
RE_Protected_Entry_Body_Array =>
System_Tasking_Protected_Objects_Entries,
@@ -2754,13 +2808,13 @@ package Rtsfind is
-- with'ed automatically. The important result of this approach is that
-- Text_IO does not drag in all the code for the subpackages unless they
-- are used. Our test is a little crude, and could drag in stuff when it
- -- is not necessary, but that doesn't matter. Wide_Text_IO is handled in
- -- a similar manner.
+ -- is not necessary, but that doesn't matter. Wide_[Wide_]Text_IO is
+ -- handled in a similar manner.
function Is_Text_IO_Kludge_Unit (Nam : Node_Id) return Boolean;
- -- Returns True if the given Nam is an Expanded Name, whose Prefix is
- -- Ada, and whose selector is either Text_IO.xxx or Wide_Text_IO.xxx
- -- where xxx is one of the subpackages of Text_IO that is specially
- -- handled as described above for Text_IO_Kludge.
+ -- Returns True if the given Nam is an Expanded Name, whose Prefix is Ada,
+ -- and whose selector is either Text_IO.xxx or Wide_Text_IO.xxx or
+ -- Wide_Wide_Text_IO.xxx, where xxx is one of the subpackages of Text_IO
+ -- that is specially handled as described above for Text_IO_Kludge.
end Rtsfind;
diff --git a/gcc/ada/s-imgwch.adb b/gcc/ada/s-imgwch.adb
index 61bf08fa130..09d4e5844c4 100644
--- a/gcc/ada/s-imgwch.adb
+++ b/gcc/ada/s-imgwch.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003, 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- --
@@ -42,9 +42,8 @@ package body System.Img_WChar is
--------------------------
function Image_Wide_Character
- (V : Wide_Character;
- EM : WC_Encoding_Method)
- return String
+ (V : Wide_Character;
+ EM : WC_Encoding_Method) return String
is
Val : constant Natural := Wide_Character'Pos (V);
WS : Wide_String (1 .. 3);
@@ -79,7 +78,38 @@ package body System.Img_WChar is
return Wide_String_To_String (WS, EM);
end if;
-
end Image_Wide_Character;
+ -------------------------------
+ -- Image_Wide_Wide_Character --
+ -------------------------------
+
+ function Image_Wide_Wide_Character
+ (V : Wide_Wide_Character;
+ EM : WC_Encoding_Method) return String
+ is
+ Val : constant Natural := Wide_Wide_Character'Pos (V);
+ WS : Wide_Wide_String (1 .. 3);
+
+ begin
+ -- If in range of standard Wide_Character, then we use the
+ -- Wide_Character routine
+
+ if Val <= 16#FFFF# then
+ return Image_Wide_Character (Wide_Character'Val (Val), EM);
+
+ -- Otherwise return an appropriate escape sequence (i.e. one matching
+ -- the convention implemented by Scn.Wide_Wide_Char). The easiest thing
+ -- is to build a wide string for the result, and then use the
+ -- Wide_Wide_Value function to build the resulting String.
+
+ else
+ WS (1) := ''';
+ WS (2) := V;
+ WS (3) := ''';
+
+ return Wide_Wide_String_To_String (WS, EM);
+ end if;
+ end Image_Wide_Wide_Character;
+
end System.Img_WChar;
diff --git a/gcc/ada/s-imgwch.ads b/gcc/ada/s-imgwch.ads
index f6dc11fb477..fa472aa26d4 100644
--- a/gcc/ada/s-imgwch.ads
+++ b/gcc/ada/s-imgwch.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- 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- --
@@ -31,7 +31,7 @@
-- --
------------------------------------------------------------------------------
--- Wide_Character'Image
+-- Wide_[Wide_]Character'Image
with System.WCh_Con;
@@ -39,10 +39,18 @@ package System.Img_WChar is
pragma Pure (Img_WChar);
function Image_Wide_Character
- (V : Wide_Character;
- EM : System.WCh_Con.WC_Encoding_Method)
- return String;
- -- Computes Wode_Character'Image (V) and returns the computed result,
+ (V : Wide_Character;
+ EM : System.WCh_Con.WC_Encoding_Method) return String;
+ -- Computes Wide_Character'Image (V) and returns the computed result,
+ -- The argument EM is a constant representing the encoding method in use.
+ -- The encoding method used is guaranteed to be consistent across a
+ -- given program execution and to correspond to the method used in the
+ -- source programs.
+
+ function Image_Wide_Wide_Character
+ (V : Wide_Wide_Character;
+ EM : System.WCh_Con.WC_Encoding_Method) return String;
+ -- Computes Wide_Wide_Character'Image (V) and returns the computed result,
-- The argument EM is a constant representing the encoding method in use.
-- The encoding method used is guaranteed to be consistent across a
-- given program execution and to correspond to the method used in the
diff --git a/gcc/ada/s-scaval.adb b/gcc/ada/s-scaval.adb
index 97a5f87d9ba..b6ca08c16dd 100644
--- a/gcc/ada/s-scaval.adb
+++ b/gcc/ada/s-scaval.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2003-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- --
@@ -159,6 +159,11 @@ package body System.Scalar_Values is
IS_Iu4 := 16#FFFF_FFFF#;
IS_Iu8 := 16#FFFF_FFFF_FFFF_FFFF#;
+ IS_Iz1 := 16#00#;
+ IS_Iz2 := 16#0000#;
+ IS_Iz4 := 16#0000_0000#;
+ IS_Iz8 := 16#0000_0000_0000_0000#;
+
IV_Isf := IS_Iu4;
IV_Ifl := IS_Iu4;
IV_Ilf := IS_Iu8;
@@ -180,6 +185,11 @@ package body System.Scalar_Values is
IS_Iu4 := 16#0000_0000#;
IS_Iu8 := 16#0000_0000_0000_0000#;
+ IS_Iz1 := 16#00#;
+ IS_Iz2 := 16#0000#;
+ IS_Iz4 := 16#0000_0000#;
+ IS_Iz8 := 16#0000_0000_0000_0000#;
+
IV_Isf := 16#FF80_0000#;
IV_Ifl := 16#FF80_0000#;
IV_Ilf := 16#FFF0_0000_0000_0000#;
@@ -201,6 +211,11 @@ package body System.Scalar_Values is
IS_Iu4 := 16#FFFF_FFFF#;
IS_Iu8 := 16#FFFF_FFFF_FFFF_FFFF#;
+ IS_Iz1 := 16#FF#;
+ IS_Iz2 := 16#FFFF#;
+ IS_Iz4 := 16#FFFF_FFFF#;
+ IS_Iz8 := 16#FFFF_FFFF_FFFF_FFFF#;
+
IV_Isf := 16#7F80_0000#;
IV_Ifl := 16#7F80_0000#;
IV_Ilf := 16#7FF0_0000_0000_0000#;
@@ -238,6 +253,11 @@ package body System.Scalar_Values is
IS_Iu4 := IS_Is4;
IS_Iu8 := IS_Is8;
+ IS_Iz1 := IS_Is1;
+ IS_Iz2 := IS_Is2;
+ IS_Iz4 := IS_Is4;
+ IS_Iz8 := IS_Is8;
+
IV_Isf := IS_Is4;
IV_Ifl := IS_Is4;
IV_Ilf := IS_Is8;
@@ -259,8 +279,6 @@ package body System.Scalar_Values is
IV_Ill := To_ByteLF (IV_Ilf);
end;
end if;
-
-
end Initialize;
end System.Scalar_Values;
diff --git a/gcc/ada/s-scaval.ads b/gcc/ada/s-scaval.ads
index 9db3c9830d8..da8e809baea 100644
--- a/gcc/ada/s-scaval.ads
+++ b/gcc/ada/s-scaval.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2001-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -53,14 +53,27 @@ package System.Scalar_Values is
-- The explicit initializations here are not really required, since these
-- variables are always set by System.Scalar_Values.Initialize.
- IS_Is1 : Byte1 := 0; -- Initialize 1 byte signed
- IS_Is2 : Byte2 := 0; -- Initialize 2 byte signed
- IS_Is4 : Byte4 := 0; -- Initialize 4 byte signed
- IS_Is8 : Byte8 := 0; -- Initialize 8 byte signed
- IS_Iu1 : Byte1 := 0; -- Initialize 1 byte unsigned
- IS_Iu2 : Byte2 := 0; -- Initialize 2 byte unsigned
- IS_Iu4 : Byte4 := 0; -- Initialize 4 byte unsigned
- IS_Iu8 : Byte8 := 0; -- Initialize 8 byte unsigned
+ IS_Is1 : Byte1 := 0; -- Initialize 1 byte signed
+ IS_Is2 : Byte2 := 0; -- Initialize 2 byte signed
+ IS_Is4 : Byte4 := 0; -- Initialize 4 byte signed
+ IS_Is8 : Byte8 := 0; -- Initialize 8 byte signed
+ -- For the above cases, the undefined value (set by the binder -Sin switch)
+ -- is the largest negative number (1 followed by all zero bits).
+
+ IS_Iu1 : Byte1 := 0; -- Initialize 1 byte unsigned
+ IS_Iu2 : Byte2 := 0; -- Initialize 2 byte unsigned
+ IS_Iu4 : Byte4 := 0; -- Initialize 4 byte unsigned
+ IS_Iu8 : Byte8 := 0; -- Initialize 8 byte unsigned
+ -- For the above cases, the undefined value (set by the binder -Sin switch)
+ -- is the largest unsigned number (all 1 bits).
+
+ IS_Iz1 : Byte1 := 0; -- Initialize 1 byte zeroes
+ IS_Iz2 : Byte2 := 0; -- Initialize 2 byte zeroes
+ IS_Iz4 : Byte4 := 0; -- Initialize 4 byte zeroes
+ IS_Iz8 : Byte8 := 0; -- Initialize 8 byte zeroes
+ -- For the above cases, the undefined value (set by the binder -Sin switch)
+ -- is the zero (all 0 bits). This is used when zero is known to be an
+ -- invalid value.
-- The float definitions are aliased, because we use overlays to set them
diff --git a/gcc/ada/s-strops.adb b/gcc/ada/s-strops.adb
index 5440f72f53e..ae7e267cb9c 100644
--- a/gcc/ada/s-strops.adb
+++ b/gcc/ada/s-strops.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002 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- --
@@ -102,26 +102,4 @@ package body System.String_Ops is
end if;
end Str_Concat_SC;
- -------------------
- -- Str_Normalize --
- -------------------
-
- procedure Str_Normalize (A : in out String) is
- begin
- for J in A'Range loop
- A (J) := Character'Last;
- end loop;
- end Str_Normalize;
-
- ------------------------
- -- Wide_Str_Normalize --
- ------------------------
-
- procedure Wide_Str_Normalize (A : in out Wide_String) is
- begin
- for J in A'Range loop
- A (J) := Wide_Character'Last;
- end loop;
- end Wide_Str_Normalize;
-
end System.String_Ops;
diff --git a/gcc/ada/s-strops.ads b/gcc/ada/s-strops.ads
index aac2fd66f81..da5fcdfbddf 100644
--- a/gcc/ada/s-strops.ads
+++ b/gcc/ada/s-strops.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2002 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- --
@@ -49,12 +49,4 @@ pragma Pure (String_Ops);
function Str_Concat_CC (X, Y : Character) return String;
-- Concatenate two characters
- procedure Str_Normalize (A : in out String);
- -- Initialize String object if pragma Normalize_Scalars is in effect.
-
- procedure Wide_Str_Normalize (A : in out Wide_String);
- -- Ditto for Wide_String.
-
- pragma Inline (Str_Normalize);
- pragma Inline (Wide_Str_Normalize);
end System.String_Ops;
diff --git a/gcc/ada/s-valwch.adb b/gcc/ada/s-valwch.adb
index 5e75a979d5a..8d4604552dc 100644
--- a/gcc/ada/s-valwch.adb
+++ b/gcc/ada/s-valwch.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-1997, 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- --
@@ -31,6 +31,7 @@
-- --
------------------------------------------------------------------------------
+with Interfaces; use Interfaces;
with System.Val_Util; use System.Val_Util;
with System.WCh_Con; use System.WCh_Con;
with System.WCh_StW; use System.WCh_StW;
@@ -42,9 +43,27 @@ package body System.Val_WChar is
--------------------------
function Value_Wide_Character
- (Str : String;
- EM : WC_Encoding_Method)
- return Wide_Character
+ (Str : String;
+ EM : WC_Encoding_Method) return Wide_Character
+ is
+ WWC : constant Wide_Wide_Character :=
+ Value_Wide_Wide_Character (Str, EM);
+ WWV : constant Unsigned_32 := Wide_Wide_Character'Pos (WWC);
+ begin
+ if WWV > 16#FFFF# then
+ raise Constraint_Error;
+ else
+ return Wide_Character'Val (WWV);
+ end if;
+ end Value_Wide_Character;
+
+ -------------------------------
+ -- Value_Wide_Wide_Character --
+ -------------------------------
+
+ function Value_Wide_Wide_Character
+ (Str : String;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_Wide_Character
is
F : Natural;
L : Natural;
@@ -60,21 +79,20 @@ package body System.Val_WChar is
-- If just three characters, simple character case
if L - F = 2 then
- return Wide_Character'Val (Character'Pos (S (F + 1)));
+ return Wide_Wide_Character'Val (Character'Pos (S (F + 1)));
-- Otherwise must be a wide character in quotes. The easiest
- -- thing is to convert the string to a wide string and then
+ -- thing is to convert the string to a wide wide string and then
-- pick up the single character that it should contain.
else
declare
- WS : constant Wide_String :=
- String_To_Wide_String (S (F + 1 .. L - 1), EM);
+ WS : constant Wide_Wide_String :=
+ String_To_Wide_Wide_String (S (F + 1 .. L - 1), EM);
begin
if WS'Length /= 1 then
raise Constraint_Error;
-
else
return WS (WS'First);
end if;
@@ -84,29 +102,28 @@ package body System.Val_WChar is
-- the last two values of the type have language-defined names:
elsif S = "FFFE" then
- return Wide_Character'Val (16#FFFE#);
+ return Wide_Wide_Character'Val (16#FFFE#);
elsif S = "FFFF" then
- return Wide_Character'Val (16#FFFF#);
+ return Wide_Wide_Character'Val (16#FFFF#);
-- Otherwise must be a control character
else
for C in Character'Val (16#00#) .. Character'Val (16#1F#) loop
if S (F .. L) = Character'Image (C) then
- return Wide_Character'Val (Character'Pos (C));
+ return Wide_Wide_Character'Val (Character'Pos (C));
end if;
end loop;
for C in Character'Val (16#7F#) .. Character'Val (16#9F#) loop
if S (F .. L) = Character'Image (C) then
- return Wide_Character'Val (Character'Pos (C));
+ return Wide_Wide_Character'Val (Character'Pos (C));
end if;
end loop;
raise Constraint_Error;
end if;
-
- end Value_Wide_Character;
+ end Value_Wide_Wide_Character;
end System.Val_WChar;
diff --git a/gcc/ada/s-valwch.ads b/gcc/ada/s-valwch.ads
index d8d0a82e83e..5075f756c2e 100644
--- a/gcc/ada/s-valwch.ads
+++ b/gcc/ada/s-valwch.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- 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- --
@@ -31,15 +31,21 @@
-- --
------------------------------------------------------------------------------
+-- Processing for Wide_[Wide_]Value attribute
+
with System.WCh_Con;
package System.Val_WChar is
pragma Pure (Val_WChar);
function Value_Wide_Character
- (Str : String;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Wide_Character;
+ (Str : String;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_Character;
+ -- Computes Wide_Character'Value (Str).
+
+ function Value_Wide_Wide_Character
+ (Str : String;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_Wide_Character;
-- Computes Wide_Character'Value (Str).
end System.Val_WChar;
diff --git a/gcc/ada/s-wchcnv.adb b/gcc/ada/s-wchcnv.adb
index 3da16f854ea..77ee233b70f 100644
--- a/gcc/ada/s-wchcnv.adb
+++ b/gcc/ada/s-wchcnv.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2001 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- --
@@ -41,54 +41,70 @@ with System.WCh_JIS; use System.WCh_JIS;
package body System.WCh_Cnv is
- --------------------------------
- -- Char_Sequence_To_Wide_Char --
- --------------------------------
+ -----------------------------
+ -- Char_Sequence_To_UTF_32 --
+ -----------------------------
- function Char_Sequence_To_Wide_Char
- (C : Character;
- EM : WC_Encoding_Method)
- return Wide_Character
+ function Char_Sequence_To_UTF_32
+ (C : Character;
+ EM : WC_Encoding_Method) return UTF_32_Code
is
- B1 : Integer;
+ B1 : Unsigned_32;
C1 : Character;
- U : Unsigned_16;
- W : Unsigned_16;
+ U : Unsigned_32;
+ W : Unsigned_32;
procedure Get_Hex (N : Character);
-- If N is a hex character, then set B1 to 16 * B1 + character N.
-- Raise Constraint_Error if character N is not a hex character.
+ procedure Get_UTF_Byte;
+ pragma Inline (Get_UTF_Byte);
+ -- Used to interpret a 2#10xxxxxx# continuation byte in UTF-8 mode.
+ -- Reads a byte, and raises CE if the first two bits are not 10.
+ -- Otherwise shifts W 6 bits left and or's in the 6 xxxxxx bits.
+
-------------
-- Get_Hex --
-------------
procedure Get_Hex (N : Character) is
- B2 : constant Integer := Character'Pos (N);
-
+ B2 : constant Unsigned_32 := Character'Pos (N);
begin
if B2 in Character'Pos ('0') .. Character'Pos ('9') then
B1 := B1 * 16 + B2 - Character'Pos ('0');
-
elsif B2 in Character'Pos ('A') .. Character'Pos ('F') then
B1 := B1 * 16 + B2 - (Character'Pos ('A') - 10);
-
elsif B2 in Character'Pos ('a') .. Character'Pos ('f') then
B1 := B1 * 16 + B2 - (Character'Pos ('a') - 10);
-
else
raise Constraint_Error;
end if;
end Get_Hex;
- -- Start of processing for Char_Sequence_To_Wide_Char
+ ------------------
+ -- Get_UTF_Byte --
+ ------------------
+
+ procedure Get_UTF_Byte is
+ begin
+ U := Unsigned_32 (Character'Pos (In_Char));
+
+ if (U and 2#11000000#) /= 2#10_000000# then
+ raise Constraint_Error;
+ end if;
+
+ W := Shift_Left (W, 6) or (U and 2#00111111#);
+ end Get_UTF_Byte;
+
+ -- Start of processing for Char_Sequence_To_Wide
begin
case EM is
when WCEM_Hex =>
if C /= ASCII.ESC then
- return Wide_Character'Val (Character'Pos (C));
+ return Character'Pos (C);
else
B1 := 0;
@@ -97,82 +113,106 @@ package body System.WCh_Cnv is
Get_Hex (In_Char);
Get_Hex (In_Char);
- return Wide_Character'Val (B1);
+ return UTF_32_Code (B1);
end if;
when WCEM_Upper =>
if C > ASCII.DEL then
- return
- Wide_Character'Val
- (Integer (256 * Character'Pos (C)) +
- Character'Pos (In_Char));
+ return 256 * Character'Pos (C) + Character'Pos (In_Char);
else
- return Wide_Character'Val (Character'Pos (C));
+ return Character'Pos (C);
end if;
when WCEM_Shift_JIS =>
if C > ASCII.DEL then
- return Shift_JIS_To_JIS (C, In_Char);
+ return Wide_Character'Pos (Shift_JIS_To_JIS (C, In_Char));
else
- return Wide_Character'Val (Character'Pos (C));
+ return Character'Pos (C);
end if;
when WCEM_EUC =>
if C > ASCII.DEL then
- return EUC_To_JIS (C, In_Char);
+ return Wide_Character'Pos (EUC_To_JIS (C, In_Char));
else
- return Wide_Character'Val (Character'Pos (C));
+ return Character'Pos (C);
end if;
when WCEM_UTF8 =>
- if C > ASCII.DEL then
- -- 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
- -- 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ -- Note: for details of UTF8 encoding see RFC 3629
- U := Unsigned_16 (Character'Pos (C));
+ U := Unsigned_32 (Character'Pos (C));
- if (U and 2#11100000#) = 2#11000000# then
- W := Shift_Left (U and 2#00011111#, 6);
- U := Unsigned_16 (Character'Pos (In_Char));
+ -- 16#00_0000#-16#00_007F#: 0xxxxxxx
- if (U and 2#11000000#) /= 2#10000000# then
- raise Constraint_Error;
- end if;
+ if (U and 2#10000000#) = 2#00000000# then
+ return Character'Pos (C);
- W := W or (U and 2#00111111#);
+ -- 16#00_0080#-16#00_07FF#: 110xxxxx 10xxxxxx
- elsif (U and 2#11110000#) = 2#11100000# then
- W := Shift_Left (U and 2#00001111#, 12);
- U := Unsigned_16 (Character'Pos (In_Char));
+ elsif (U and 2#11100000#) = 2#110_00000# then
+ W := Shift_Left (U and 2#00011111#, 6);
+ U := Unsigned_32 (Character'Pos (In_Char));
- if (U and 2#11000000#) /= 2#10000000# then
- raise Constraint_Error;
- end if;
+ if (U and 2#11000000#) /= 2#10_000000# then
+ raise Constraint_Error;
+ end if;
- W := W or Shift_Left (U and 2#00111111#, 6);
- U := Unsigned_16 (Character'Pos (In_Char));
+ W := W or (U and 2#00111111#);
- if (U and 2#11000000#) /= 2#10000000# then
- raise Constraint_Error;
- end if;
+ return UTF_32_Code (W);
- W := W or (U and 2#00111111#);
+ -- 16#00_0800#-16#00_ffff#: 1110xxxx 10xxxxxx 10xxxxxx
- else
- raise Constraint_Error;
- end if;
+ elsif (U and 2#11110000#) = 2#1110_0000# then
+ W := U and 2#00001111#;
+ Get_UTF_Byte;
+ Get_UTF_Byte;
+ return UTF_32_Code (W);
+
+ -- 16#01_0000#-16#10_FFFF#: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+
+ elsif (U and 2#11111000#) = 2#11110_000# then
+ W := U and 2#00000111#;
+
+ for K in 1 .. 3 loop
+ Get_UTF_Byte;
+ end loop;
- return Wide_Character'Val (W);
+ return UTF_32_Code (W);
+
+ -- 16#0020_0000#-16#03FF_FFFF#: 111110xx 10xxxxxx 10xxxxxx
+ -- 10xxxxxx 10xxxxxx
+
+ elsif (U and 2#11111100#) = 2#111110_00# then
+ W := U and 2#00000011#;
+
+ for K in 1 .. 4 loop
+ Get_UTF_Byte;
+ end loop;
+
+ return UTF_32_Code (W);
+
+ -- 16#0400_0000#-16#7FFF_FFFF#: 1111110x 10xxxxxx 10xxxxxx
+ -- 10xxxxxx 10xxxxxx 10xxxxxx
+
+ elsif (U and 2#11111110#) = 2#1111110_0# then
+ W := U and 2#00000001#;
+
+ for K in 1 .. 5 loop
+ Get_UTF_Byte;
+ end loop;
+
+ return UTF_32_Code (W);
else
- return Wide_Character'Val (Character'Pos (C));
+ raise Constraint_Error;
end if;
when WCEM_Brackets =>
if C /= '[' then
- return Wide_Character'Val (Character'Pos (C));
+ return Character'Pos (C);
end if;
if In_Char /= '"' then
@@ -182,15 +222,33 @@ package body System.WCh_Cnv is
B1 := 0;
Get_Hex (In_Char);
Get_Hex (In_Char);
+
C1 := In_Char;
if C1 /= '"' then
Get_Hex (C1);
Get_Hex (In_Char);
+
C1 := In_Char;
if C1 /= '"' then
- raise Constraint_Error;
+ Get_Hex (C1);
+ Get_Hex (In_Char);
+
+ C1 := In_Char;
+
+ if C1 /= '"' then
+ Get_Hex (C1);
+ Get_Hex (In_Char);
+
+ if B1 > Unsigned_32 (UTF_32_Code'Last) then
+ raise Constraint_Error;
+ end if;
+
+ if In_Char /= '"' then
+ raise Constraint_Error;
+ end if;
+ end if;
end if;
end if;
@@ -198,23 +256,44 @@ package body System.WCh_Cnv is
raise Constraint_Error;
end if;
- return Wide_Character'Val (B1);
+ return UTF_32_Code (B1);
end case;
- end Char_Sequence_To_Wide_Char;
+ end Char_Sequence_To_UTF_32;
--------------------------------
- -- Wide_Char_To_Char_Sequence --
+ -- Char_Sequence_To_Wide_Char --
--------------------------------
- procedure Wide_Char_To_Char_Sequence
- (WC : Wide_Character;
- EM : WC_Encoding_Method)
+ function Char_Sequence_To_Wide_Char
+ (C : Character;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_Character
+ is
+ function Char_Sequence_To_UTF is new Char_Sequence_To_UTF_32 (In_Char);
+
+ U : constant UTF_32_Code := Char_Sequence_To_UTF (C, EM);
+
+ begin
+ if U > 16#FFFF# then
+ raise Constraint_Error;
+ else
+ return Wide_Character'Val (U);
+ end if;
+ end Char_Sequence_To_Wide_Char;
+
+ -----------------------------
+ -- UTF_32_To_Char_Sequence --
+ -----------------------------
+
+ procedure UTF_32_To_Char_Sequence
+ (Val : UTF_32_Code;
+ EM : System.WCh_Con.WC_Encoding_Method)
is
- Val : constant Natural := Wide_Character'Pos (WC);
- Hexc : constant array (0 .. 15) of Character := "0123456789ABCDEF";
+ Hexc : constant array (UTF_32_Code range 0 .. 15) of Character :=
+ "0123456789ABCDEF";
+
C1, C2 : Character;
- U : Unsigned_16;
+ U : Unsigned_32;
begin
case EM is
@@ -222,22 +301,21 @@ package body System.WCh_Cnv is
when WCEM_Hex =>
if Val < 256 then
Out_Char (Character'Val (Val));
-
- else
+ elsif Val <= 16#FFFF# then
Out_Char (ASCII.ESC);
Out_Char (Hexc (Val / (16**3)));
Out_Char (Hexc ((Val / (16**2)) mod 16));
Out_Char (Hexc ((Val / 16) mod 16));
Out_Char (Hexc (Val mod 16));
+ else
+ raise Constraint_Error;
end if;
when WCEM_Upper =>
if Val < 128 then
Out_Char (Character'Val (Val));
-
- elsif Val < 16#8000# then
+ elsif Val < 16#8000# or else Val > 16#FFFF# then
raise Constraint_Error;
-
else
Out_Char (Character'Val (Val / 256));
Out_Char (Character'Val (Val mod 256));
@@ -246,58 +324,136 @@ package body System.WCh_Cnv is
when WCEM_Shift_JIS =>
if Val < 128 then
Out_Char (Character'Val (Val));
- else
- JIS_To_Shift_JIS (WC, C1, C2);
+ elsif Val <= 16#FFFF# then
+ JIS_To_Shift_JIS (Wide_Character'Val (Val), C1, C2);
Out_Char (C1);
Out_Char (C2);
+ else
+ raise Constraint_Error;
end if;
when WCEM_EUC =>
if Val < 128 then
Out_Char (Character'Val (Val));
- else
- JIS_To_EUC (WC, C1, C2);
+ elsif Val <= 16#FFFF# then
+ JIS_To_EUC (Wide_Character'Val (Val), C1, C2);
Out_Char (C1);
Out_Char (C2);
+ else
+ raise Constraint_Error;
end if;
when WCEM_UTF8 =>
- U := Unsigned_16 (Val);
- -- 16#0000#-16#007f#: 2#0xxxxxxx#
- -- 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
- -- 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ -- Note: for details of UTF8 encoding see RFC 3629
+
+ U := Unsigned_32 (Val);
+
+ -- 16#00_0000#-16#00_007F#: 0xxxxxxx
- if U < 16#80# then
+ if U <= 16#00_007F# then
Out_Char (Character'Val (U));
- elsif U < 16#0800# then
+ -- 16#00_0080#-16#00_07FF#: 110xxxxx 10xxxxxx
+
+ elsif U <= 16#00_07FF# then
Out_Char (Character'Val (2#11000000# or Shift_Right (U, 6)));
Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
- else
+ -- 16#00_0800#-16#00_FFFF#: 1110xxxx 10xxxxxx 10xxxxxx
+
+ elsif U <= 16#00_FFFF# then
Out_Char (Character'Val (2#11100000# or Shift_Right (U, 12)));
Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
- and 2#00111111#)));
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
+
+ -- 16#01_0000#-16#10_FFFF#: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+
+ elsif U <= 16#10_FFFF# then
+ Out_Char (Character'Val (2#11110000# or Shift_Right (U, 18)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 12)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
+
+ -- 16#0020_0000#-16#03FF_FFFF#: 111110xx 10xxxxxx 10xxxxxx
+ -- 10xxxxxx 10xxxxxx
+
+ elsif U <= 16#03FF_FFFF# then
+ Out_Char (Character'Val (2#11111000# or Shift_Right (U, 24)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 18)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 12)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
+ and 2#00111111#)));
Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
+
+ -- 16#0400_0000#-16#7FFF_FFFF#: 1111110x 10xxxxxx 10xxxxxx
+ -- 10xxxxxx 10xxxxxx 10xxxxxx
+
+ elsif U <= 16#7FFF_FFFF# then
+ Out_Char (Character'Val (2#11111100# or Shift_Right (U, 30)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 24)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 18)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 12)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (Shift_Right (U, 6)
+ and 2#00111111#)));
+ Out_Char (Character'Val (2#10000000# or (U and 2#00111111#)));
+
+ else
+ raise Constraint_Error;
end if;
when WCEM_Brackets =>
-
if Val < 256 then
Out_Char (Character'Val (Val));
else
Out_Char ('[');
Out_Char ('"');
- Out_Char (Hexc (Val / (16**3)));
- Out_Char (Hexc ((Val / (16**2)) mod 16));
+
+ if Val > 16#FFFF# then
+ if Val > 16#00FF_FFFF# then
+ if Val > 16#7FFF_FFFF# then
+ raise Constraint_Error;
+ end if;
+
+ Out_Char (Hexc (Val / 16 ** 7));
+ Out_Char (Hexc ((Val / 16 ** 6) mod 16));
+ end if;
+
+ Out_Char (Hexc ((Val / 16 ** 5) mod 16));
+ Out_Char (Hexc ((Val / 16 ** 4) mod 16));
+ end if;
+
+ Out_Char (Hexc ((Val / 16 ** 3) mod 16));
+ Out_Char (Hexc ((Val / 16 ** 2) mod 16));
Out_Char (Hexc ((Val / 16) mod 16));
Out_Char (Hexc (Val mod 16));
+
Out_Char ('"');
Out_Char (']');
end if;
end case;
+ end UTF_32_To_Char_Sequence;
+
+ --------------------------------
+ -- Wide_Char_To_Char_Sequence --
+ --------------------------------
+
+ procedure Wide_Char_To_Char_Sequence
+ (WC : Wide_Character;
+ EM : System.WCh_Con.WC_Encoding_Method)
+ is
+ procedure UTF_To_Char_Sequence is new UTF_32_To_Char_Sequence (Out_Char);
+ begin
+ UTF_To_Char_Sequence (Wide_Character'Pos (WC), EM);
end Wide_Char_To_Char_Sequence;
end System.WCh_Cnv;
diff --git a/gcc/ada/s-wchcnv.ads b/gcc/ada/s-wchcnv.ads
index 65180ca2a57..e0bde89604a 100644
--- a/gcc/ada/s-wchcnv.ads
+++ b/gcc/ada/s-wchcnv.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -31,24 +31,23 @@
-- --
------------------------------------------------------------------------------
--- This package contains generic subprograms used for converting between
--- sequences of Character and Wide_Character. All access to wide character
--- sequences is isolated in this unit.
-
-- This unit may be used directly from an application program by providing
-- an appropriate WITH, and the interface can be expected to remain stable.
with System.WCh_Con;
package System.WCh_Cnv is
-pragma Pure (WCh_Cnv);
+ pragma Pure (WCh_Cnv);
+
+ type UTF_32_Code is range 0 .. 16#7FFF_FFFF#;
+ for UTF_32_Code'Size use 32;
+ -- Range of allowed UTF-32 encoding values
generic
with function In_Char return Character;
function Char_Sequence_To_Wide_Char
- (C : Character;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Wide_Character;
+ (C : Character;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_Character;
-- C is the first character of a sequence of one or more characters which
-- represent a wide character sequence. Calling the function In_Char for
-- additional characters as required, Char_To_Wide_Char returns the
@@ -57,6 +56,16 @@ pragma Pure (WCh_Cnv);
-- sequence for the given encoding method.
generic
+ with function In_Char return Character;
+ function Char_Sequence_To_UTF_32
+ (C : Character;
+ EM : System.WCh_Con.WC_Encoding_Method) return UTF_32_Code;
+ -- This is similar to the above, but the function returns a code from
+ -- the full UTF_32 code set, which covers the full range of possible
+ -- values in Wide_Wide_Character. The result can be converted to
+ -- Wide_Wide_Character form using Wide_Wide_Character'Val.
+
+ generic
with procedure Out_Char (C : Character);
procedure Wide_Char_To_Char_Sequence
(WC : Wide_Character;
@@ -66,4 +75,14 @@ pragma Pure (WCh_Cnv);
-- Constraint_Error is raised if the given wide character value is
-- not a valid value for the given encoding method.
+ generic
+ with procedure Out_Char (C : Character);
+ procedure UTF_32_To_Char_Sequence
+ (Val : UTF_32_Code;
+ EM : System.WCh_Con.WC_Encoding_Method);
+ -- This is similar to the above, but the input value is a code from the
+ -- full UTF_32 code set, which covers the full range of possible values
+ -- in Wide_Wide_Character. To convert a Wide_Wide_Character value, the
+ -- caller can use Wide_Wide_Character'Pos in the call.
+
end System.WCh_Cnv;
diff --git a/gcc/ada/s-wchcon.ads b/gcc/ada/s-wchcon.ads
index 3c08176edf6..eecfe9f34ee 100644
--- a/gcc/ada/s-wchcon.ads
+++ b/gcc/ada/s-wchcon.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -46,8 +46,8 @@ pragma Pure (WCh_Con);
-------------------------------------
-- A wide character encoding method is a method for uniquely representing
- -- a Wide_Character value using a one or more Character values. Three
- -- types of encoding method are supported by GNAT:
+ -- a Wide_Character or Wide_Wide_Character value using a one or more
+ -- Character values. Three types of encoding method are supported by GNAT:
-- An escape encoding method uses ESC as the first character of the
-- sequence, and subsequent characters determine the wide character
@@ -62,9 +62,10 @@ pragma Pure (WCh_Con);
-- Any character in the lower half (16#00# .. 16#7F#) represents
-- itself as a single character.
- -- The brackets notation, where a wide character is represented
- -- by the sequence ["xx"] or ["xxxx"] where xx are hexadecimal
- -- characters.
+ -- The brackets notation, where a wide character is represented by the
+ -- sequence ["xx"] or ["xxxx"] or ["xxxxxx"] where xx are hexadecimal
+ -- characters. Note that currently this is the only encoding that
+ -- supports the full UTF-32 range.
-- Note that GNAT does not currently support escape-in, escape-out
-- encoding methods, where an escape sequence is used to set a mode
@@ -130,25 +131,32 @@ pragma Pure (WCh_Con);
-- An ISO 10646-1 BMP/Unicode wide character is represented in
-- UCS Transformation Format 8 (UTF-8) as defined in Annex R of ISO
-- 10646-1/Am.2. Depending on the character value, a Unicode character
- -- is represented as the one, two, or three byte sequence
+ -- is represented as the one to six byte sequence.
--
- -- 16#0000#-16#007f#: 2#0xxxxxxx#
- -- 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
- -- 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ -- 16#0000_0000#-16#0000_007f#: 2#0xxxxxxx#
+ -- 16#0000_0080#-16#0000_07ff#: 2#110xxxxx# 2#10xxxxxx#
+ -- 16#0000_0800#-16#0000_ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
+ -- 16#0001_0000#-16#001F_FFFF#: 2#11110xxx# 2#10xxxxxx# 2#10xxxxxx#
+ -- 2#10xxxxxx#
+ -- 16#0020_0000#-16#03FF_FFFF#: 2#111110xx# 2#10xxxxxx# 2#10xxxxxx#
+ -- 2#10xxxxxx# 2#10xxxxxx#
+ -- 16#0400_0000#-16#7FFF_FFFF#: 2#1111110x# 2#10xxxxxx# 2#10xxxxxx#
+ -- 2#10xxxxxx# 2#10xxxxxx# 2#10xxxxxx#
--
- -- where the xxx bits correspond to the left-padded bits of the the
+ -- where the xxx bits correspond to the left-padded bits of the
-- 16-bit character value. Note that all lower half ASCII characters
-- are represented as ASCII bytes and all upper half characters and
- -- other wide characters are represented as sequences of upper-half
- -- (The full UTF-8 scheme allows for encoding 31-bit characters as
- -- 6-byte sequences, but in this implementation, all UTF-8 sequences
- -- of four or more bytes length will raise a Constraint_Error, as
- -- will all illegal UTF-8 sequences.)
+ -- other wide characters are represented as sequences of upper-half.
WCEM_Brackets : constant WC_Encoding_Method := 6;
- -- A wide character is represented as the sequence ["abcd"] where abcd
- -- are four hexadecimal characters. In this mode, the sequence ["ab"]
- -- is also recognized for the case of character codes in the range 0-255.
+ -- A wide character is represented using one of the following sequences:
+ --
+ -- ["xx"]
+ -- ["xxxx"]
+ -- ["xxxxxx"]
+ -- ["xxxxxxxx"]
+ --
+ -- where xx are hexadecimal digits representing the character code.
WC_Encoding_Letters : constant array (WC_Encoding_Method) of Character :=
(WCEM_Hex => 'h',
@@ -170,8 +178,8 @@ pragma Pure (WCh_Con);
-- Encoding methods using an upper half character (16#80#..16#FF) at
-- the start of the sequence.
- WC_Longest_Sequence : constant := 8;
- -- The longest number of characters that can be used for a wide
- -- character sequence for any of the active encoding methods.
+ WC_Longest_Sequence : constant := 10;
+ -- The longest number of characters that can be used for a wide character
+ -- or wide wide character sequence for any of the active encoding methods.
end System.WCh_Con;
diff --git a/gcc/ada/s-wchstw.adb b/gcc/ada/s-wchstw.adb
index 6e8d5cb7b72..0deb55631e2 100644
--- a/gcc/ada/s-wchstw.adb
+++ b/gcc/ada/s-wchstw.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- --
@@ -31,189 +31,142 @@
-- --
------------------------------------------------------------------------------
-with Interfaces; use Interfaces;
with System.WCh_Con; use System.WCh_Con;
-with System.WCh_JIS; use System.WCh_JIS;
+with System.WCh_Cnv; use System.WCh_Cnv;
package body System.WCh_StW is
- ---------------------------
- -- String_To_Wide_String --
- ---------------------------
-
- function String_To_Wide_String
- (S : String;
- EM : WC_Encoding_Method)
- return Wide_String
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ procedure Get_Next_Code
+ (S : String;
+ P : in out Natural;
+ V : out UTF_32_Code;
+ EM : WC_Encoding_Method);
+ -- Scans next character starting at S(P) and returns its value in V. On
+ -- exit P is updated past the last character read. Raises Constraint_Error
+ -- if the string is not well formed. Raises Constraint_Error if the code
+ -- value is greater than 16#7FFF_FFFF#. On entry P <= S'Last.
+
+ -------------------
+ -- Get_Next_Code --
+ -------------------
+
+ procedure Get_Next_Code
+ (S : String;
+ P : in out Natural;
+ V : out UTF_32_Code;
+ EM : WC_Encoding_Method)
is
- R : Wide_String (1 .. S'Length);
- RP : Natural;
- SP : Natural;
- U1 : Unsigned_16;
- U2 : Unsigned_16;
- U3 : Unsigned_16;
- U : Unsigned_16;
-
- Last : constant Natural := S'Last;
+ function In_Char return Character;
+ -- Function to return a character, bumping P, raises Constraint_Error
+ -- if P > S'Last on entry.
- function Get_Hex (C : Character) return Unsigned_16;
- -- Converts character from hex digit to value in range 0-15. The
- -- input must be in 0-9, A-F, or a-f, and no check is needed.
+ function Get_UTF_32 is new Char_Sequence_To_UTF_32 (In_Char);
+ -- Function to get next UFT_32 value.
- procedure Get_Hex_4;
- -- Translates four hex characters starting at S (SP) to a single
- -- wide character. Used in WCEM_Hex and WCEM_Brackets mode. SP
- -- is not modified by the call. The resulting wide character value
- -- is stored in R (RP). RP is not modified by the call.
+ -------------
+ -- In_Char --
+ -------------
- function Get_Hex (C : Character) return Unsigned_16 is
+ function In_Char return Character is
begin
- if C in '0' .. '9' then
- return Character'Pos (C) - Character'Pos ('0');
- elsif C in 'A' .. 'F' then
- return Character'Pos (C) - Character'Pos ('A') + 10;
+ if P > S'Last then
+ raise Constraint_Error;
else
- return Character'Pos (C) - Character'Pos ('a') + 10;
+ P := P + 1;
+ return S (P - 1);
end if;
- end Get_Hex;
+ end In_Char;
- procedure Get_Hex_4 is
- begin
- R (RP) := Wide_Character'Val (
- Get_Hex (S (SP + 3)) + 16 *
- (Get_Hex (S (SP + 2)) + 16 *
- (Get_Hex (S (SP + 1)) + 16 *
- (Get_Hex (S (SP + 0))))));
- end Get_Hex_4;
+ begin
+ -- Check for wide character encoding
- -- Start of processing for String_To_Wide_String
+ case EM is
+ when WCEM_Hex =>
+ if S (P) = ASCII.ESC then
+ V := Get_UTF_32 (In_Char, EM);
+ return;
+ end if;
+
+ when WCEM_Upper | WCEM_Shift_JIS | WCEM_EUC | WCEM_UTF8 =>
+ if S (P) >= Character'Val (16#80#) then
+ V := Get_UTF_32 (In_Char, EM);
+ return;
+ end if;
+
+ when WCEM_Brackets =>
+ if P + 2 <= S'Last
+ and then S (P) = '['
+ and then S (P + 1) = '"'
+ and then S (P + 2) /= '"'
+ then
+ V := Get_UTF_32 (In_Char, EM);
+ return;
+ end if;
+ end case;
+
+ -- If it is not a wide character code, just get it
+
+ V := Character'Pos (S (P));
+ P := P + 1;
+ end Get_Next_Code;
+
+ ---------------------------
+ -- String_To_Wide_String --
+ ---------------------------
+
+ function String_To_Wide_String
+ (S : String;
+ EM : WC_Encoding_Method) return Wide_String
+ is
+ R : Wide_String (1 .. S'Length);
+ RP : Natural;
+ SP : Natural;
+ V : UTF_32_Code;
begin
SP := S'First;
RP := 0;
+ while SP <= S'Last loop
+ Get_Next_Code (S, SP, V, EM);
- case EM is
+ if V > 16#FFFF# then
+ raise Constraint_Error;
+ end if;
- -- ESC-Hex representation
+ RP := RP + 1;
+ R (RP) := Wide_Character'Val (V);
+ end loop;
- when WCEM_Hex =>
- while SP <= Last - 4 loop
- RP := RP + 1;
-
- if S (SP) = ASCII.ESC then
- SP := SP + 1;
- Get_Hex_4;
- SP := SP + 4;
- else
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
- end if;
- end loop;
-
- -- Upper bit shift, internal code = external code
-
- when WCEM_Upper =>
- while SP < Last loop
- RP := RP + 1;
-
- if S (SP) >= Character'Val (16#80#) then
- U1 := Character'Pos (S (SP));
- U2 := Character'Pos (S (SP + 1));
- R (RP) := Wide_Character'Val (256 * U1 + U2);
- SP := SP + 2;
- else
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
- end if;
- end loop;
-
- -- Upper bit shift, shift-JIS
-
- when WCEM_Shift_JIS =>
- while SP < Last loop
- RP := RP + 1;
-
- if S (SP) >= Character'Val (16#80#) then
- R (RP) := Shift_JIS_To_JIS (S (SP), S (SP + 1));
- SP := SP + 2;
- else
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
- end if;
- end loop;
-
- -- Upper bit shift, EUC
-
- when WCEM_EUC =>
- while SP < Last loop
- RP := RP + 1;
-
- if S (SP) >= Character'Val (16#80#) then
- R (RP) := EUC_To_JIS (S (SP), S (SP + 1));
- SP := SP + 2;
- else
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
- end if;
- end loop;
-
- -- Upper bit shift, UTF-8
-
- when WCEM_UTF8 =>
- while SP < Last loop
- RP := RP + 1;
-
- if S (SP) >= Character'Val (16#80#) then
- U1 := Character'Pos (S (SP));
- U2 := Character'Pos (S (SP + 1));
-
- U := Shift_Left (U1 and 2#00011111#, 6) +
- (U2 and 2#00111111#);
- SP := SP + 2;
-
- if U1 >= 2#11100000# then
- U3 := Character'Pos (S (SP));
- U := Shift_Left (U, 6) + (U3 and 2#00111111#);
- SP := SP + 1;
- end if;
-
- R (RP) := Wide_Character'Val (U);
-
- else
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
- end if;
- end loop;
-
- -- Brackets representation
+ return R (1 .. RP);
+ end String_To_Wide_String;
- when WCEM_Brackets =>
- while SP <= Last - 7 loop
- RP := RP + 1;
-
- if S (SP) = '['
- and then S (SP + 1) = '"'
- and then S (SP + 2) /= '"'
- then
- SP := SP + 2;
- Get_Hex_4;
- SP := SP + 6;
-
- else
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
- end if;
- end loop;
+ --------------------------------
+ -- String_To_Wide_Wide_String --
+ --------------------------------
- end case;
+ function String_To_Wide_Wide_String
+ (S : String;
+ EM : WC_Encoding_Method) return Wide_Wide_String
+ is
+ R : Wide_Wide_String (1 .. S'Length);
+ RP : Natural;
+ SP : Natural;
+ V : UTF_32_Code;
- while SP <= Last loop
+ begin
+ SP := S'First;
+ RP := 0;
+ while SP <= S'Last loop
+ Get_Next_Code (S, SP, V, EM);
RP := RP + 1;
- R (RP) := Wide_Character'Val (Character'Pos (S (SP)));
- SP := SP + 1;
+ R (RP) := Wide_Wide_Character'Val (V);
end loop;
return R (1 .. RP);
- end String_To_Wide_String;
+ end String_To_Wide_Wide_String;
end System.WCh_StW;
diff --git a/gcc/ada/s-wchstw.ads b/gcc/ada/s-wchstw.ads
index c58066c1204..c1d33eb3f85 100644
--- a/gcc/ada/s-wchstw.ads
+++ b/gcc/ada/s-wchstw.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-1998 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- --
@@ -31,8 +31,8 @@
-- --
------------------------------------------------------------------------------
--- This package contains the routine used to convert strings to wide
--- strings for use by wide character attributes (value, image etc.)
+-- This package contains the routine used to convert strings to wide (wide)
+-- strings for use by wide (wide) character attributes (value, image etc.)
with System.WCh_Con;
@@ -40,9 +40,8 @@ package System.WCh_StW is
pragma Pure (WCh_StW);
function String_To_Wide_String
- (S : String;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Wide_String;
+ (S : String;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_String;
-- This routine simply takes its argument and converts it to wide string
-- format. In the context of the Wide_Image attribute, the argument is
-- the corresponding 'Image attribute. Any wide character escape sequences
@@ -57,4 +56,9 @@ pragma Pure (WCh_StW);
-- Note: in the WCEM_Brackets case, the brackets escape sequence is used
-- only for codes greater than 16#FF#.
+ function String_To_Wide_Wide_String
+ (S : String;
+ EM : System.WCh_Con.WC_Encoding_Method) return Wide_Wide_String;
+ -- Same function with Wide_Wide_String output
+
end System.WCh_StW;
diff --git a/gcc/ada/s-wchwts.adb b/gcc/ada/s-wchwts.adb
index c9894f7c038..21174aad370 100644
--- a/gcc/ada/s-wchwts.adb
+++ b/gcc/ada/s-wchwts.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- --
@@ -31,133 +31,94 @@
-- --
------------------------------------------------------------------------------
-with Interfaces; use Interfaces;
with System.WCh_Con; use System.WCh_Con;
-with System.WCh_JIS; use System.WCh_JIS;
+with System.WCh_Cnv; use System.WCh_Cnv;
package body System.WCh_WtS is
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ procedure Store_UTF_32_Character
+ (U : UTF_32_Code;
+ S : out String;
+ P : in out Integer;
+ EM : WC_Encoding_Method);
+ -- Stores the string representation of the wide or wide wide character
+ -- whose code is given as U, starting at S (P + 1). P is incremented to
+ -- point to the last character stored. Raises CE if character cannot be
+ -- stored using the given encoding method.
+
+ ----------------------------
+ -- Store_UTF_32_Character --
+ ----------------------------
+
+ procedure Store_UTF_32_Character
+ (U : UTF_32_Code;
+ S : out String;
+ P : in out Integer;
+ EM : WC_Encoding_Method)
+ is
+ procedure Out_Char (C : Character);
+ pragma Inline (Out_Char);
+ -- Procedure to increment P and store C at S (P)
+
+ procedure Store_Chars is new UTF_32_To_Char_Sequence (Out_Char);
+
+ --------------
+ -- Out_Char --
+ --------------
+
+ procedure Out_Char (C : Character) is
+ begin
+ P := P + 1;
+ S (P) := C;
+ end Out_Char;
+
+ begin
+ Store_Chars (U, EM);
+ end Store_UTF_32_Character;
+
---------------------------
-- Wide_String_To_String --
---------------------------
function Wide_String_To_String
- (S : Wide_String;
- EM : WC_Encoding_Method)
- return String
+ (S : Wide_String;
+ EM : WC_Encoding_Method) return String
is
R : String (1 .. 5 * S'Length); -- worst case length!
RP : Natural;
- C1 : Character;
- C2 : Character;
begin
RP := 0;
-
for SP in S'Range loop
- declare
- C : constant Wide_Character := S (SP);
- CV : constant Unsigned_16 := Wide_Character'Pos (C);
- Hex : constant array (Unsigned_16 range 0 .. 15) of Character :=
- "0123456789ABCDEF";
-
- begin
- if CV <= 127 then
- RP := RP + 1;
- R (RP) := Character'Val (CV);
-
- else
- case EM is
-
- -- Hex ESC sequence encoding
-
- when WCEM_Hex =>
- if CV <= 16#FF# then
- RP := RP + 1;
- R (RP) := Character'Val (CV);
-
- else
- R (RP + 1) := ASCII.ESC;
- R (RP + 2) := Hex (Shift_Right (CV, 12));
- R (RP + 3) := Hex (Shift_Right (CV, 8) and 16#000F#);
- R (RP + 4) := Hex (Shift_Right (CV, 4) and 16#000F#);
- R (RP + 5) := Hex (CV and 16#000F#);
- RP := RP + 5;
- end if;
-
- -- Upper bit shift (internal code = external code)
-
- when WCEM_Upper =>
- R (RP + 1) := Character'Val (Shift_Right (CV, 8));
- R (RP + 2) := Character'Val (CV and 16#FF#);
- RP := RP + 2;
-
- -- Upper bit shift (EUC)
-
- when WCEM_EUC =>
- JIS_To_EUC (C, C1, C2);
- R (RP + 1) := C1;
- R (RP + 2) := C2;
- RP := RP + 2;
-
- -- Upper bit shift (Shift-JIS)
-
- when WCEM_Shift_JIS =>
- JIS_To_Shift_JIS (C, C1, C2);
- R (RP + 1) := C1;
- R (RP + 2) := C2;
- RP := RP + 2;
-
- -- Upper bit shift (UTF-8)
-
- -- 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx#
- -- 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx#
-
- when WCEM_UTF8 =>
- if CV < 16#0800# then
- R (RP + 1) :=
- Character'Val (2#11000000# or Shift_Right (CV, 6));
- R (RP + 2) :=
- Character'Val (2#10000000# or (CV and 2#00111111#));
- RP := RP + 2;
-
- else
- R (RP + 1) :=
- Character'Val (2#11100000# or Shift_Right (CV, 12));
- R (RP + 2) :=
- Character'Val (2#10000000# or
- (Shift_Right (CV, 6) and
- 2#00111111#));
- R (RP + 3) :=
- Character'Val (2#10000000# or (CV and 2#00111111#));
- RP := RP + 3;
- end if;
-
- -- Brackets encoding
-
- when WCEM_Brackets =>
- if CV <= 16#FF# then
- RP := RP + 1;
- R (RP) := Character'Val (CV);
-
- else
- R (RP + 1) := '[';
- R (RP + 2) := '"';
- R (RP + 3) := Hex (Shift_Right (CV, 12));
- R (RP + 4) := Hex (Shift_Right (CV, 8) and 16#000F#);
- R (RP + 5) := Hex (Shift_Right (CV, 4) and 16#000F#);
- R (RP + 6) := Hex (CV and 16#000F#);
- R (RP + 7) := '"';
- R (RP + 8) := ']';
- RP := RP + 8;
- end if;
-
- end case;
- end if;
- end;
+ Store_UTF_32_Character (Wide_Character'Pos (S (SP)), R, RP, EM);
end loop;
return R (1 .. RP);
end Wide_String_To_String;
+ --------------------------------
+ -- Wide_Wide_Sring_To_String --
+ --------------------------------
+
+ function Wide_Wide_String_To_String
+ (S : Wide_Wide_String;
+ EM : WC_Encoding_Method) return String
+ is
+ R : String (1 .. 7 * S'Length); -- worst case length!
+ RP : Natural;
+
+ begin
+ RP := 0;
+
+ for SP in S'Range loop
+ Store_UTF_32_Character (Wide_Wide_Character'Pos (S (SP)), R, RP, EM);
+ end loop;
+
+ return R (1 .. RP);
+ end Wide_Wide_String_To_String;
+
end System.WCh_WtS;
diff --git a/gcc/ada/s-wchwts.ads b/gcc/ada/s-wchwts.ads
index 053d4132fca..936045992df 100644
--- a/gcc/ada/s-wchwts.ads
+++ b/gcc/ada/s-wchwts.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-1998 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- --
@@ -31,9 +31,10 @@
-- --
------------------------------------------------------------------------------
--- This package contains the routine used to convert wide strings to
--- strings for use by wide character attributes (value, image etc.) and
--- also by the numeric IO subpackages of Ada.Text_IO.Wide_Text_IO.
+-- This package contains the routine used to convert wide strings and wide
+-- wide stringsto strings for use by wide and wide wide character attributes
+-- (value, image etc.) and also by the numeric IO subpackages of
+-- Ada.Text_IO.Wide_Text_IO and Ada.Text_IO.Wide_Wide_Text_IO.
with System.WCh_Con;
@@ -41,9 +42,8 @@ package System.WCh_WtS is
pragma Pure (WCh_WtS);
function Wide_String_To_String
- (S : Wide_String;
- EM : System.WCh_Con.WC_Encoding_Method)
- return String;
+ (S : Wide_String;
+ EM : System.WCh_Con.WC_Encoding_Method) return String;
-- This routine simply takes its argument and converts it to a string,
-- using the internal compiler escape sequence convention (defined in
-- package Widechar) to translate characters that are out of range
@@ -56,4 +56,9 @@ pragma Pure (WCh_WtS);
-- Note: in the WCEM_Brackets case, we only use the brackets encoding
-- for characters greater than 16#FF#.
+ function Wide_Wide_String_To_String
+ (S : Wide_Wide_String;
+ EM : System.WCh_Con.WC_Encoding_Method) return String;
+ -- Same processing, except for Wide_Wide_String
+
end System.WCh_WtS;
diff --git a/gcc/ada/s-widwch.adb b/gcc/ada/s-widwch.adb
index a5eaa0451b3..3797bf52c99 100644
--- a/gcc/ada/s-widwch.adb
+++ b/gcc/ada/s-widwch.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-1998 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- --
@@ -41,15 +41,13 @@ package body System.Wid_WChar is
function Width_Wide_Character
(Lo, Hi : Wide_Character;
- EM : WC_Encoding_Method)
- return Natural
+ EM : WC_Encoding_Method) return Natural
is
W : Natural;
P : Natural;
begin
W := 0;
-
for C in Lo .. Hi loop
P := Wide_Character'Pos (C);
@@ -97,4 +95,64 @@ package body System.Wid_WChar is
return W;
end Width_Wide_Character;
+ -------------------------------
+ -- Width_Wide_Wide_Character --
+ -------------------------------
+
+ function Width_Wide_Wide_Character
+ (Lo, Hi : Wide_Wide_Character;
+ EM : WC_Encoding_Method) return Natural
+ is
+ W : Natural;
+ P : Natural;
+
+ begin
+ W := 0;
+ for C in Lo .. Hi loop
+ P := Wide_Wide_Character'Pos (C);
+
+ -- Here if we find a character in wide wide character range
+
+ if P > 16#FF# then
+ case EM is
+ when WCEM_Hex =>
+ return Natural'Max (W, 5);
+
+ when WCEM_Upper =>
+ return Natural'Max (W, 2);
+
+ when WCEM_Shift_JIS =>
+ return Natural'Max (W, 2);
+
+ when WCEM_EUC =>
+ return Natural'Max (W, 2);
+
+ when WCEM_UTF8 =>
+ if Hi > Wide_Wide_Character'Val (16#FFFF#) then
+ return Natural'Max (W, 4);
+ elsif Hi > Wide_Wide_Character'Val (16#07FF#) then
+ return Natural'Max (W, 3);
+ else
+ return Natural'Max (W, 2);
+ end if;
+
+ when WCEM_Brackets =>
+ return Natural'Max (W, 10);
+
+ end case;
+
+ -- If we are in character range then use length of character image
+
+ else
+ declare
+ S : constant String := Character'Image (Character'Val (P));
+ begin
+ W := Natural'Max (W, S'Length);
+ end;
+ end if;
+ end loop;
+
+ return W;
+ end Width_Wide_Wide_Character;
+
end System.Wid_WChar;
diff --git a/gcc/ada/s-widwch.ads b/gcc/ada/s-widwch.ads
index ab5649abf61..15c8705053d 100644
--- a/gcc/ada/s-widwch.ads
+++ b/gcc/ada/s-widwch.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992,1993,1994 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- --
@@ -31,7 +31,7 @@
-- --
------------------------------------------------------------------------------
--- This package contains the routine used for Wide_Character'Width
+-- This package contains the routines used for Wide_[Wide_]Character'Width
with System.WCh_Con;
@@ -40,10 +40,14 @@ pragma Pure (Wid_WChar);
function Width_Wide_Character
(Lo, Hi : Wide_Character;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
-- Compute Width attribute for non-static type derived from Wide_Character.
-- The arguments are the low and high bounds for the type. EM is the
-- wide-character encoding method.
+ function Width_Wide_Wide_Character
+ (Lo, Hi : Wide_Wide_Character;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
+ -- Same function for type derived from Wide_Wide_Character
+
end System.Wid_WChar;
diff --git a/gcc/ada/s-wwdcha.adb b/gcc/ada/s-wwdcha.adb
index 18928fdf848..82db6f39758 100644
--- a/gcc/ada/s-wwdcha.adb
+++ b/gcc/ada/s-wwdcha.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002 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- --
@@ -42,11 +42,9 @@ package body System.WWd_Char is
begin
W := 0;
-
for C in Lo .. Hi loop
declare
S : constant Wide_String := Character'Wide_Image (C);
-
begin
W := Natural'Max (W, S'Length);
end;
@@ -55,4 +53,24 @@ package body System.WWd_Char is
return W;
end Wide_Width_Character;
+ -------------------------------
+ -- Wide_Wide_Width_Character --
+ -------------------------------
+
+ function Wide_Wide_Width_Character (Lo, Hi : Character) return Natural is
+ W : Natural;
+
+ begin
+ W := 0;
+ for C in Lo .. Hi loop
+ declare
+ S : constant Wide_Wide_String := Character'Wide_Wide_Image (C);
+ begin
+ W := Natural'Max (W, S'Length);
+ end;
+ end loop;
+
+ return W;
+ end Wide_Wide_Width_Character;
+
end System.WWd_Char;
diff --git a/gcc/ada/s-wwdcha.ads b/gcc/ada/s-wwdcha.ads
index 9981cff710e..9431fb7f12d 100644
--- a/gcc/ada/s-wwdcha.ads
+++ b/gcc/ada/s-wwdcha.ads
@@ -6,8 +6,8 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992,1993,1994 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- --
-- ware Foundation; either version 2, or (at your option) any later ver- --
@@ -31,7 +31,7 @@
-- --
------------------------------------------------------------------------------
--- This package contains the routine used for Character'Wide_Width
+-- This package contains the routine used for Character'Wide_[Wide_]Width
package System.WWd_Char is
pragma Pure (WWd_Char);
@@ -40,4 +40,8 @@ pragma Pure (WWd_Char);
-- Compute Wide_Width attribute for non-static type derived from
-- Character. The arguments are the low and high bounds for the type.
+ function Wide_Wide_Width_Character (Lo, Hi : Character) return Natural;
+ -- Compute Wide_Wide_Width attribute for non-static type derived from
+ -- Character. The arguments are the low and high bounds for the type.
+
end System.WWd_Char;
diff --git a/gcc/ada/s-wwdenu.adb b/gcc/ada/s-wwdenu.adb
index 9a942591d2b..444d018da36 100644
--- a/gcc/ada/s-wwdenu.adb
+++ b/gcc/ada/s-wwdenu.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- --
@@ -38,6 +38,117 @@ with Unchecked_Conversion;
package body System.WWd_Enum is
+ -----------------------------------
+ -- Wide_Wide_Width_Enumeration_8 --
+ -----------------------------------
+
+ function Wide_Wide_Width_Enumeration_8
+ (Names : String;
+ Indexes : System.Address;
+ Lo, Hi : Natural;
+ EM : WC_Encoding_Method) return Natural
+ is
+ W : Natural;
+
+ type Natural_8 is range 0 .. 2 ** 7 - 1;
+ type Index_Table is array (Natural) of Natural_8;
+ type Index_Table_Ptr is access Index_Table;
+
+ function To_Index_Table_Ptr is
+ new Unchecked_Conversion (System.Address, Index_Table_Ptr);
+
+ IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+
+ begin
+ W := 0;
+ for J in Lo .. Hi loop
+ declare
+ WS : constant Wide_Wide_String :=
+ String_To_Wide_Wide_String
+ (Names (Natural (IndexesT (J)) ..
+ Natural (IndexesT (J + 1)) - 1), EM);
+ begin
+ W := Natural'Max (W, WS'Length);
+ end;
+ end loop;
+
+ return W;
+ end Wide_Wide_Width_Enumeration_8;
+
+ ------------------------------------
+ -- Wide_Wide_Width_Enumeration_16 --
+ ------------------------------------
+
+ function Wide_Wide_Width_Enumeration_16
+ (Names : String;
+ Indexes : System.Address;
+ Lo, Hi : Natural;
+ EM : WC_Encoding_Method) return Natural
+ is
+ W : Natural;
+
+ type Natural_16 is range 0 .. 2 ** 15 - 1;
+ type Index_Table is array (Natural) of Natural_16;
+ type Index_Table_Ptr is access Index_Table;
+
+ function To_Index_Table_Ptr is
+ new Unchecked_Conversion (System.Address, Index_Table_Ptr);
+
+ IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+
+ begin
+ W := 0;
+ for J in Lo .. Hi loop
+ declare
+ WS : constant Wide_Wide_String :=
+ String_To_Wide_Wide_String
+ (Names (Natural (IndexesT (J)) ..
+ Natural (IndexesT (J + 1)) - 1), EM);
+ begin
+ W := Natural'Max (W, WS'Length);
+ end;
+ end loop;
+
+ return W;
+ end Wide_Wide_Width_Enumeration_16;
+
+ ------------------------------------
+ -- Wide_Wide_Width_Enumeration_32 --
+ ------------------------------------
+
+ function Wide_Wide_Width_Enumeration_32
+ (Names : String;
+ Indexes : System.Address;
+ Lo, Hi : Natural;
+ EM : WC_Encoding_Method) return Natural
+ is
+ W : Natural;
+
+ type Natural_32 is range 0 .. 2 ** 31 - 1;
+ type Index_Table is array (Natural) of Natural_32;
+ type Index_Table_Ptr is access Index_Table;
+
+ function To_Index_Table_Ptr is
+ new Unchecked_Conversion (System.Address, Index_Table_Ptr);
+
+ IndexesT : constant Index_Table_Ptr := To_Index_Table_Ptr (Indexes);
+
+ begin
+ W := 0;
+ for J in Lo .. Hi loop
+ declare
+ WS : constant Wide_Wide_String :=
+ String_To_Wide_Wide_String
+ (Names (Natural (IndexesT (J)) ..
+ Natural (IndexesT (J + 1)) - 1), EM);
+ begin
+ W := Natural'Max (W, WS'Length);
+ end;
+ end loop;
+
+ return W;
+ end Wide_Wide_Width_Enumeration_32;
+
------------------------------
-- Wide_Width_Enumeration_8 --
------------------------------
@@ -46,8 +157,7 @@ package body System.WWd_Enum is
(Names : String;
Indexes : System.Address;
Lo, Hi : Natural;
- EM : WC_Encoding_Method)
- return Natural
+ EM : WC_Encoding_Method) return Natural
is
W : Natural;
@@ -62,14 +172,12 @@ package body System.WWd_Enum is
begin
W := 0;
-
for J in Lo .. Hi loop
declare
WS : constant Wide_String :=
- String_To_Wide_String
- (Names (Natural (IndexesT (J)) ..
- Natural (IndexesT (J + 1)) - 1), EM);
-
+ String_To_Wide_String
+ (Names (Natural (IndexesT (J)) ..
+ Natural (IndexesT (J + 1)) - 1), EM);
begin
W := Natural'Max (W, WS'Length);
end;
@@ -86,8 +194,7 @@ package body System.WWd_Enum is
(Names : String;
Indexes : System.Address;
Lo, Hi : Natural;
- EM : WC_Encoding_Method)
- return Natural
+ EM : WC_Encoding_Method) return Natural
is
W : Natural;
@@ -102,14 +209,12 @@ package body System.WWd_Enum is
begin
W := 0;
-
for J in Lo .. Hi loop
declare
WS : constant Wide_String :=
- String_To_Wide_String
- (Names (Natural (IndexesT (J)) ..
- Natural (IndexesT (J + 1)) - 1), EM);
-
+ String_To_Wide_String
+ (Names (Natural (IndexesT (J)) ..
+ Natural (IndexesT (J + 1)) - 1), EM);
begin
W := Natural'Max (W, WS'Length);
end;
@@ -126,8 +231,7 @@ package body System.WWd_Enum is
(Names : String;
Indexes : System.Address;
Lo, Hi : Natural;
- EM : WC_Encoding_Method)
- return Natural
+ EM : WC_Encoding_Method) return Natural
is
W : Natural;
@@ -142,14 +246,12 @@ package body System.WWd_Enum is
begin
W := 0;
-
for J in Lo .. Hi loop
declare
WS : constant Wide_String :=
- String_To_Wide_String
- (Names (Natural (IndexesT (J)) ..
- Natural (IndexesT (J + 1)) - 1), EM);
-
+ String_To_Wide_String
+ (Names (Natural (IndexesT (J)) ..
+ Natural (IndexesT (J + 1)) - 1), EM);
begin
W := Natural'Max (W, WS'Length);
end;
diff --git a/gcc/ada/s-wwdenu.ads b/gcc/ada/s-wwdenu.ads
index 9bb400fefb3..3c64764915d 100644
--- a/gcc/ada/s-wwdenu.ads
+++ b/gcc/ada/s-wwdenu.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- 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- --
@@ -31,7 +31,7 @@
-- --
------------------------------------------------------------------------------
--- This package contains the routine used for Enumeration_Type'Wide_Width
+-- This package contains routines used for Enumeration_Type'Wide_[Wide_]Width
with System.WCh_Con;
@@ -42,8 +42,7 @@ pragma Pure (WWd_Enum);
(Names : String;
Indexes : System.Address;
Lo, Hi : Natural;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
-- Used to compute Enum'Wide_Width where Enum is an enumeration subtype
-- other than those defined in package Standard. Names is a string with
-- a lower bound of 1 containing the characters of all the enumeration
@@ -65,8 +64,7 @@ pragma Pure (WWd_Enum);
(Names : String;
Indexes : System.Address;
Lo, Hi : Natural;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
-- Identical to Wide_Width_Enumeration_8 except that it handles types
-- using array (0 .. Num) of Natural_16 for the Indexes table.
@@ -74,9 +72,29 @@ pragma Pure (WWd_Enum);
(Names : String;
Indexes : System.Address;
Lo, Hi : Natural;
- EM : System.WCh_Con.WC_Encoding_Method)
- return Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
-- Identical to Wide_Width_Enumeration_8 except that it handles types
-- using array (0 .. Num) of Natural_32 for the Indexes table.
+ function Wide_Wide_Width_Enumeration_8
+ (Names : String;
+ Indexes : System.Address;
+ Lo, Hi : Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
+ -- Same function for Wide_Wide_Width attribute
+
+ function Wide_Wide_Width_Enumeration_16
+ (Names : String;
+ Indexes : System.Address;
+ Lo, Hi : Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
+ -- Same function for Wide_Wide_Width attribute
+
+ function Wide_Wide_Width_Enumeration_32
+ (Names : String;
+ Indexes : System.Address;
+ Lo, Hi : Natural;
+ EM : System.WCh_Con.WC_Encoding_Method) return Natural;
+ -- Same function for Wide_Wide_Width attribute
+
end System.WWd_Enum;
diff --git a/gcc/ada/s-wwdwch.adb b/gcc/ada/s-wwdwch.adb
index eb9d2fb6ac4..ac3d1e9cc45 100644
--- a/gcc/ada/s-wwdwch.adb
+++ b/gcc/ada/s-wwdwch.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002, 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- --
@@ -31,46 +31,147 @@
-- --
------------------------------------------------------------------------------
+with Interfaces; use Interfaces;
+
+with System.WWd_Char;
+
package body System.Wwd_WChar is
+ ------------------------------------
+ -- Wide_Wide_Width_Wide_Character --
+ ------------------------------------
+
+ -- This is the case where we are talking about the Wide_Wide_Image of
+ -- a Wide_Character, which is always the same character sequence as the
+ -- Wide_Image of the same Wide_Character.
+
+ function Wide_Wide_Width_Wide_Character
+ (Lo, Hi : Wide_Character) return Natural
+ is
+ begin
+ return Wide_Width_Wide_Character (Lo, Hi);
+ end Wide_Wide_Width_Wide_Character;
+
+ ------------------------------------
+ -- Wide_Wide_Width_Wide_Wide_Char --
+ ------------------------------------
+
+ function Wide_Wide_Width_Wide_Wide_Char
+ (Lo, Hi : Wide_Wide_Character) return Natural
+ is
+ W : Natural := 0;
+ LV : constant Unsigned_32 := Wide_Wide_Character'Pos (Lo);
+ HV : constant Unsigned_32 := Wide_Wide_Character'Pos (Hi);
+
+ begin
+ -- Return zero if empty range
+
+ if LV > HV then
+ return 0;
+ end if;
+
+ -- If any characters in normal character range, then use normal
+ -- Wide_Wide_Width attribute on this range to find out a starting point.
+ -- Otherwise start with zero.
+
+ if LV <= 255 then
+ W :=
+ System.WWd_Char.Wide_Wide_Width_Character
+ (Lo => Character'Val (LV),
+ Hi => Character'Val (Unsigned_32'Min (255, HV)));
+ else
+ W := 0;
+ end if;
+
+ -- Increase to at least 4 if FFFE or FFFF present. These correspond
+ -- to the special language defined names FFFE/FFFF for these values.
+
+ if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
+ W := Natural'Max (W, 4);
+ end if;
+
+ -- Increase to at least 3 if any wide characters, corresponding to
+ -- the normal ' character ' sequence. We know that the character fits.
+
+ if HV > 255 then
+ W := Natural'Max (W, 3);
+ end if;
+
+ return W;
+ end Wide_Wide_Width_Wide_Wide_Char;
+
-------------------------------
-- Wide_Width_Wide_Character --
-------------------------------
function Wide_Width_Wide_Character
- (Lo, Hi : Wide_Character)
- return Natural
+ (Lo, Hi : Wide_Character) return Natural
is
- W : Natural;
- P : Natural;
+ W : Natural := 0;
+ LV : constant Unsigned_32 := Wide_Character'Pos (Lo);
+ HV : constant Unsigned_32 := Wide_Character'Pos (Hi);
begin
- W := 0;
+ -- Return zero if empty range
- for C in Lo .. Hi loop
- P := Wide_Character'Pos (C);
+ if LV > HV then
+ return 0;
+ end if;
- -- If we are in wide character range, the length is always 3
- -- and we are done, since all remaining characters are the same.
+ -- If any characters in normal character range, then use normal
+ -- Wide_Wide_Width attribute on this range to find out a starting point.
+ -- Otherwise start with zero.
- if P > 255 then
- return Natural'Max (W, 3);
+ if LV <= 255 then
+ W :=
+ System.WWd_Char.Wide_Width_Character
+ (Lo => Character'Val (LV),
+ Hi => Character'Val (Unsigned_32'Min (255, HV)));
+ else
+ W := 0;
+ end if;
- -- If we are in character range then use length of character image
- -- Is this right, what about wide char encodings of 80-FF???
+ -- Increase to at least 4 if FFFE or FFFF present. These correspond
+ -- to the special language defined names FFFE/FFFF for these values.
- else
- declare
- S : constant Wide_String :=
- Character'Wide_Image (Character'Val (P));
+ if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
+ W := Natural'Max (W, 4);
+ end if;
- begin
- W := Natural'Max (W, S'Length);
- end;
- end if;
- end loop;
+ -- Increase to at least 3 if any wide characters, corresponding to
+ -- the normal 'character' sequence. We know that the character fits.
+
+ if HV > 255 then
+ W := Natural'Max (W, 3);
+ end if;
return W;
end Wide_Width_Wide_Character;
+ ------------------------------------
+ -- Wide_Width_Wide_Wide_Character --
+ ------------------------------------
+
+ -- This is a nasty case, because we get into the business of representing
+ -- out of range wide wide characters as wide strings. Let's let image do
+ -- the work here. Too bad if this takes lots of time. It's silly anyway!
+
+ function Wide_Width_Wide_Wide_Character
+ (Lo, Hi : Wide_Wide_Character) return Natural
+ is
+ W : Natural;
+
+ begin
+ W := 0;
+ for J in Lo .. Hi loop
+ declare
+ S : constant Wide_String := Wide_Wide_Character'Wide_Image (J);
+ begin
+ W := Natural'Max (W, S'Length);
+ end;
+ end loop;
+
+ return W;
+ end Wide_Width_Wide_Wide_Character;
+
end System.Wwd_WChar;
diff --git a/gcc/ada/s-wwdwch.ads b/gcc/ada/s-wwdwch.ads
index e8f06679804..b158be26292 100644
--- a/gcc/ada/s-wwdwch.ads
+++ b/gcc/ada/s-wwdwch.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992,1993,1994 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- --
@@ -31,16 +31,33 @@
-- --
------------------------------------------------------------------------------
--- This package contains the routine used for Wide_Character'Wide_Width
+-- This package contains routines for [Wide_]Wide_Character'[Wide_]Wide_Width
package System.Wwd_WChar is
pragma Pure (Wwd_WChar);
function Wide_Width_Wide_Character
- (Lo, Hi : Wide_Character)
- return Natural;
+ (Lo, Hi : Wide_Character) return Natural;
-- Compute Wide_Width attribute for non-static type derived from
-- Wide_Character. The arguments are the low and high bounds for
-- the type. EM is the wide-character encoding method.
+ function Wide_Width_Wide_Wide_Character
+ (Lo, Hi : Wide_Wide_Character) return Natural;
+ -- Compute Wide_Width attribute for non-static type derived from
+ -- Wide_Wide_Character. The arguments are the low and high bounds for
+ -- the type. EM is the wide-character encoding method.
+
+ function Wide_Wide_Width_Wide_Character
+ (Lo, Hi : Wide_Character) return Natural;
+ -- Compute Wide_Wide_Width attribute for non-static type derived from
+ -- Wide_Character. The arguments are the low and high bounds for
+ -- the type. EM is the wide-character encoding method.
+
+ function Wide_Wide_Width_Wide_Wide_Char
+ (Lo, Hi : Wide_Wide_Character) return Natural;
+ -- Compute Wide_Wide_Width attribute for non-static type derived from
+ -- Wide_Wide_Character. The arguments are the low and high bounds for
+ -- the type. EM is the wide-character encoding method.
+
end System.Wwd_WChar;
diff --git a/gcc/ada/scans.ads b/gcc/ada/scans.ads
index b8f5c397654..8c7870fbc57 100644
--- a/gcc/ada/scans.ads
+++ b/gcc/ada/scans.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -124,6 +124,7 @@ package Scans is
Tok_Constant, -- CONSTANT Eterm, Sterm
Tok_Do, -- DO Eterm, Sterm
Tok_Is, -- IS Eterm, Sterm
+ Tok_Interface, -- INTERFACE Eterm, Sterm
Tok_Limited, -- LIMITED Eterm, Sterm
Tok_Of, -- OF Eterm, Sterm
Tok_Out, -- OUT Eterm, Sterm
@@ -166,6 +167,8 @@ package Scans is
Tok_Task, -- TASK Eterm, Sterm, Declk, Deckn, After_SM
Tok_Type, -- TYPE Eterm, Sterm, Declk, Deckn, After_SM
Tok_Subtype, -- SUBTYPE Eterm, Sterm, Declk, Deckn, After_SM
+ Tok_Overriding, -- OVERRIDING Eterm, Sterm, Declk, Declk, After_SM
+ Tok_Synchronized, -- SYNCHRONIZED Eterm, Sterm, Declk, Deckn, After_SM
Tok_Use, -- USE Eterm, Sterm, Declk, Deckn, After_SM
Tok_Function, -- FUNCTION Eterm, Sterm, Cunit, Declk, After_SM
diff --git a/gcc/ada/scn.adb b/gcc/ada/scn.adb
index a60d28e1fe8..b83be649810 100644
--- a/gcc/ada/scn.adb
+++ b/gcc/ada/scn.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -33,6 +33,7 @@ with Rident; use Rident;
with Scans; use Scans;
with Sinfo; use Sinfo;
with Sinput; use Sinput;
+with Uintp; use Uintp;
package body Scn is
@@ -64,7 +65,7 @@ package body Scn is
case Token is
when Tok_Char_Literal =>
Token_Node := New_Node (N_Character_Literal, Token_Ptr);
- Set_Char_Literal_Value (Token_Node, Character_Code);
+ Set_Char_Literal_Value (Token_Node, UI_From_CC (Character_Code));
Set_Chars (Token_Node, Token_Name);
when Tok_Identifier =>
diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb
index 486fbffe45d..158524df989 100644
--- a/gcc/ada/scng.adb
+++ b/gcc/ada/scng.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -94,7 +94,13 @@ package body Scng is
procedure Accumulate_Checksum (C : Char_Code) is
begin
- Accumulate_Checksum (Character'Val (C / 256));
+ if C > 16#FFFF# then
+ Accumulate_Checksum (Character'Val (C / 2 ** 16));
+ Accumulate_Checksum (Character'Val ((C / 256) mod 256));
+ else
+ Accumulate_Checksum (Character'Val (C / 256));
+ end if;
+
Accumulate_Checksum (Character'Val (C mod 256));
end Accumulate_Checksum;
@@ -135,80 +141,103 @@ package body Scng is
(Unit : Unit_Number_Type;
Index : Source_File_Index)
is
+ procedure Set_Reserved (N : Name_Id; T : Token_Type);
+ pragma Inline (Set_Reserved);
+ -- Set given name as a reserved keyword (T is the corresponding token)
+
+ -------------
+ -- Set_NTB --
+ -------------
+
+ procedure Set_Reserved (N : Name_Id; T : Token_Type) is
+ begin
+ -- Set up Token_Type values in Names Table entries for reserved
+ -- keywords We use the Pos value of the Token_Type value. Note we
+ -- rely on the fact that Token_Type'Val (0) is not a reserved word!
+
+ Set_Name_Table_Byte (N, Token_Type'Pos (T));
+ end Set_Reserved;
+
+ -- Start of processing for Initialize_Scanner
+
begin
- -- Set up Token_Type values in Names Table entries for reserved keywords
- -- We use the Pos value of the Token_Type value. Note we are relying on
- -- the fact that Token_Type'Val (0) is not a reserved word!
-
- Set_Name_Table_Byte (Name_Abort, Token_Type'Pos (Tok_Abort));
- Set_Name_Table_Byte (Name_Abs, Token_Type'Pos (Tok_Abs));
- Set_Name_Table_Byte (Name_Abstract, Token_Type'Pos (Tok_Abstract));
- Set_Name_Table_Byte (Name_Accept, Token_Type'Pos (Tok_Accept));
- Set_Name_Table_Byte (Name_Access, Token_Type'Pos (Tok_Access));
- Set_Name_Table_Byte (Name_And, Token_Type'Pos (Tok_And));
- Set_Name_Table_Byte (Name_Aliased, Token_Type'Pos (Tok_Aliased));
- Set_Name_Table_Byte (Name_All, Token_Type'Pos (Tok_All));
- Set_Name_Table_Byte (Name_Array, Token_Type'Pos (Tok_Array));
- Set_Name_Table_Byte (Name_At, Token_Type'Pos (Tok_At));
- Set_Name_Table_Byte (Name_Begin, Token_Type'Pos (Tok_Begin));
- Set_Name_Table_Byte (Name_Body, Token_Type'Pos (Tok_Body));
- Set_Name_Table_Byte (Name_Case, Token_Type'Pos (Tok_Case));
- Set_Name_Table_Byte (Name_Constant, Token_Type'Pos (Tok_Constant));
- Set_Name_Table_Byte (Name_Declare, Token_Type'Pos (Tok_Declare));
- Set_Name_Table_Byte (Name_Delay, Token_Type'Pos (Tok_Delay));
- Set_Name_Table_Byte (Name_Delta, Token_Type'Pos (Tok_Delta));
- Set_Name_Table_Byte (Name_Digits, Token_Type'Pos (Tok_Digits));
- Set_Name_Table_Byte (Name_Do, Token_Type'Pos (Tok_Do));
- Set_Name_Table_Byte (Name_Else, Token_Type'Pos (Tok_Else));
- Set_Name_Table_Byte (Name_Elsif, Token_Type'Pos (Tok_Elsif));
- Set_Name_Table_Byte (Name_End, Token_Type'Pos (Tok_End));
- Set_Name_Table_Byte (Name_Entry, Token_Type'Pos (Tok_Entry));
- Set_Name_Table_Byte (Name_Exception, Token_Type'Pos (Tok_Exception));
- Set_Name_Table_Byte (Name_Exit, Token_Type'Pos (Tok_Exit));
- Set_Name_Table_Byte (Name_For, Token_Type'Pos (Tok_For));
- Set_Name_Table_Byte (Name_Function, Token_Type'Pos (Tok_Function));
- Set_Name_Table_Byte (Name_Generic, Token_Type'Pos (Tok_Generic));
- Set_Name_Table_Byte (Name_Goto, Token_Type'Pos (Tok_Goto));
- Set_Name_Table_Byte (Name_If, Token_Type'Pos (Tok_If));
- Set_Name_Table_Byte (Name_In, Token_Type'Pos (Tok_In));
- Set_Name_Table_Byte (Name_Is, Token_Type'Pos (Tok_Is));
- Set_Name_Table_Byte (Name_Limited, Token_Type'Pos (Tok_Limited));
- Set_Name_Table_Byte (Name_Loop, Token_Type'Pos (Tok_Loop));
- Set_Name_Table_Byte (Name_Mod, Token_Type'Pos (Tok_Mod));
- Set_Name_Table_Byte (Name_New, Token_Type'Pos (Tok_New));
- Set_Name_Table_Byte (Name_Not, Token_Type'Pos (Tok_Not));
- Set_Name_Table_Byte (Name_Null, Token_Type'Pos (Tok_Null));
- Set_Name_Table_Byte (Name_Of, Token_Type'Pos (Tok_Of));
- Set_Name_Table_Byte (Name_Or, Token_Type'Pos (Tok_Or));
- Set_Name_Table_Byte (Name_Others, Token_Type'Pos (Tok_Others));
- Set_Name_Table_Byte (Name_Out, Token_Type'Pos (Tok_Out));
- Set_Name_Table_Byte (Name_Package, Token_Type'Pos (Tok_Package));
- Set_Name_Table_Byte (Name_Pragma, Token_Type'Pos (Tok_Pragma));
- Set_Name_Table_Byte (Name_Private, Token_Type'Pos (Tok_Private));
- Set_Name_Table_Byte (Name_Procedure, Token_Type'Pos (Tok_Procedure));
- Set_Name_Table_Byte (Name_Protected, Token_Type'Pos (Tok_Protected));
- Set_Name_Table_Byte (Name_Raise, Token_Type'Pos (Tok_Raise));
- Set_Name_Table_Byte (Name_Range, Token_Type'Pos (Tok_Range));
- Set_Name_Table_Byte (Name_Record, Token_Type'Pos (Tok_Record));
- Set_Name_Table_Byte (Name_Rem, Token_Type'Pos (Tok_Rem));
- Set_Name_Table_Byte (Name_Renames, Token_Type'Pos (Tok_Renames));
- Set_Name_Table_Byte (Name_Requeue, Token_Type'Pos (Tok_Requeue));
- Set_Name_Table_Byte (Name_Return, Token_Type'Pos (Tok_Return));
- Set_Name_Table_Byte (Name_Reverse, Token_Type'Pos (Tok_Reverse));
- Set_Name_Table_Byte (Name_Select, Token_Type'Pos (Tok_Select));
- Set_Name_Table_Byte (Name_Separate, Token_Type'Pos (Tok_Separate));
- Set_Name_Table_Byte (Name_Subtype, Token_Type'Pos (Tok_Subtype));
- Set_Name_Table_Byte (Name_Tagged, Token_Type'Pos (Tok_Tagged));
- Set_Name_Table_Byte (Name_Task, Token_Type'Pos (Tok_Task));
- Set_Name_Table_Byte (Name_Terminate, Token_Type'Pos (Tok_Terminate));
- Set_Name_Table_Byte (Name_Then, Token_Type'Pos (Tok_Then));
- Set_Name_Table_Byte (Name_Type, Token_Type'Pos (Tok_Type));
- Set_Name_Table_Byte (Name_Until, Token_Type'Pos (Tok_Until));
- Set_Name_Table_Byte (Name_Use, Token_Type'Pos (Tok_Use));
- Set_Name_Table_Byte (Name_When, Token_Type'Pos (Tok_When));
- Set_Name_Table_Byte (Name_While, Token_Type'Pos (Tok_While));
- Set_Name_Table_Byte (Name_With, Token_Type'Pos (Tok_With));
- Set_Name_Table_Byte (Name_Xor, Token_Type'Pos (Tok_Xor));
+ -- Establish reserved words
+
+ Set_Reserved (Name_Abort, Tok_Abort);
+ Set_Reserved (Name_Abs, Tok_Abs);
+ Set_Reserved (Name_Abstract, Tok_Abstract);
+ Set_Reserved (Name_Accept, Tok_Accept);
+ Set_Reserved (Name_Access, Tok_Access);
+ Set_Reserved (Name_And, Tok_And);
+ Set_Reserved (Name_Aliased, Tok_Aliased);
+ Set_Reserved (Name_All, Tok_All);
+ Set_Reserved (Name_Array, Tok_Array);
+ Set_Reserved (Name_At, Tok_At);
+ Set_Reserved (Name_Begin, Tok_Begin);
+ Set_Reserved (Name_Body, Tok_Body);
+ Set_Reserved (Name_Case, Tok_Case);
+ Set_Reserved (Name_Constant, Tok_Constant);
+ Set_Reserved (Name_Declare, Tok_Declare);
+ Set_Reserved (Name_Delay, Tok_Delay);
+ Set_Reserved (Name_Delta, Tok_Delta);
+ Set_Reserved (Name_Digits, Tok_Digits);
+ Set_Reserved (Name_Do, Tok_Do);
+ Set_Reserved (Name_Else, Tok_Else);
+ Set_Reserved (Name_Elsif, Tok_Elsif);
+ Set_Reserved (Name_End, Tok_End);
+ Set_Reserved (Name_Entry, Tok_Entry);
+ Set_Reserved (Name_Exception, Tok_Exception);
+ Set_Reserved (Name_Exit, Tok_Exit);
+ Set_Reserved (Name_For, Tok_For);
+ Set_Reserved (Name_Function, Tok_Function);
+ Set_Reserved (Name_Generic, Tok_Generic);
+ Set_Reserved (Name_Goto, Tok_Goto);
+ Set_Reserved (Name_If, Tok_If);
+ Set_Reserved (Name_In, Tok_In);
+ Set_Reserved (Name_Is, Tok_Is);
+ Set_Reserved (Name_Limited, Tok_Limited);
+ Set_Reserved (Name_Loop, Tok_Loop);
+ Set_Reserved (Name_Mod, Tok_Mod);
+ Set_Reserved (Name_New, Tok_New);
+ Set_Reserved (Name_Not, Tok_Not);
+ Set_Reserved (Name_Null, Tok_Null);
+ Set_Reserved (Name_Of, Tok_Of);
+ Set_Reserved (Name_Or, Tok_Or);
+ Set_Reserved (Name_Others, Tok_Others);
+ Set_Reserved (Name_Out, Tok_Out);
+ Set_Reserved (Name_Package, Tok_Package);
+ Set_Reserved (Name_Pragma, Tok_Pragma);
+ Set_Reserved (Name_Private, Tok_Private);
+ Set_Reserved (Name_Procedure, Tok_Procedure);
+ Set_Reserved (Name_Protected, Tok_Protected);
+ Set_Reserved (Name_Raise, Tok_Raise);
+ Set_Reserved (Name_Range, Tok_Range);
+ Set_Reserved (Name_Record, Tok_Record);
+ Set_Reserved (Name_Rem, Tok_Rem);
+ Set_Reserved (Name_Renames, Tok_Renames);
+ Set_Reserved (Name_Requeue, Tok_Requeue);
+ Set_Reserved (Name_Return, Tok_Return);
+ Set_Reserved (Name_Reverse, Tok_Reverse);
+ Set_Reserved (Name_Select, Tok_Select);
+ Set_Reserved (Name_Separate, Tok_Separate);
+ Set_Reserved (Name_Subtype, Tok_Subtype);
+ Set_Reserved (Name_Tagged, Tok_Tagged);
+ Set_Reserved (Name_Task, Tok_Task);
+ Set_Reserved (Name_Terminate, Tok_Terminate);
+ Set_Reserved (Name_Then, Tok_Then);
+ Set_Reserved (Name_Type, Tok_Type);
+ Set_Reserved (Name_Until, Tok_Until);
+ Set_Reserved (Name_Use, Tok_Use);
+ Set_Reserved (Name_When, Tok_When);
+ Set_Reserved (Name_While, Tok_While);
+ Set_Reserved (Name_With, Tok_With);
+ Set_Reserved (Name_Xor, Tok_Xor);
+
+ -- Ada 2005 reserved words
+
+ Set_Reserved (Name_Interface, Tok_Interface);
+ Set_Reserved (Name_Overriding, Tok_Overriding);
+ Set_Reserved (Name_Synchronized, Tok_Synchronized);
-- Initialize scan control variables
@@ -246,10 +275,22 @@ package body Scng is
procedure Scan is
Start_Of_Comment : Source_Ptr;
+ -- Record start of comment position
+
+ Underline_Found : Boolean;
+ -- During scanning of an identifier, set to True if last character
+ -- scanned was an underline or other punctuation character. This
+ -- is used to flag the error of two underlines/punctuations in a
+ -- row or ending an identifier with a underline/punctuation. Here
+ -- punctuation means any UTF_32 character in the Unicode category
+ -- Punctuation,Connector.
+
+ Wptr : Source_Ptr;
+ -- Used to remember start of last wide character scanned
procedure Check_End_Of_Line;
- -- Called when end of line encountered. Checks that line is not
- -- too long, and that other style checks for the end of line are met.
+ -- Called when end of line encountered. Checks that line is not too
+ -- long, and that other style checks for the end of line are met.
function Double_Char_Token (C : Character) return Boolean;
-- This function is used for double character tokens like := or <>. It
@@ -262,8 +303,8 @@ package body Scng is
-- since we do not want a junk message for a case like &-space-&).
procedure Error_Illegal_Character;
- -- Give illegal character error, Scan_Ptr points to character.
- -- On return, Scan_Ptr is bumped past the illegal character.
+ -- Give illegal character error, Scan_Ptr points to character. On
+ -- return, Scan_Ptr is bumped past the illegal character.
procedure Error_Illegal_Wide_Character;
-- Give illegal wide character message. On return, Scan_Ptr is bumped
@@ -274,7 +315,8 @@ package body Scng is
-- Signal error of excessively long line
procedure Error_No_Double_Underline;
- -- Signal error of double underline character
+ -- Signal error of two underline or punctuation characters in a row.
+ -- Called with Scan_Ptr pointing to second underline/punctuation char.
procedure Nlit;
-- This is the procedure for scanning out numeric literals. On entry,
@@ -353,8 +395,7 @@ package body Scng is
procedure Error_Illegal_Wide_Character is
begin
- Error_Msg_S ("illegal wide character, check -gnatW switch");
- Scan_Ptr := Scan_Ptr + 1;
+ Error_Msg ("illegal wide character", Wptr);
end Error_Illegal_Wide_Character;
---------------------
@@ -374,7 +415,28 @@ package body Scng is
procedure Error_No_Double_Underline is
begin
- Error_Msg_S ("two consecutive underlines not permitted");
+ Underline_Found := False;
+
+ -- There are four cases, and we special case the messages
+
+ if Source (Scan_Ptr) = '_' then
+ if Source (Scan_Ptr - 1) = '_' then
+ Error_Msg_S
+ ("two consecutive underlines not permitted");
+ else
+ Error_Msg_S
+ ("underline cannot follow punctuation character");
+ end if;
+
+ else
+ if Source (Scan_Ptr - 1) = '_' then
+ Error_Msg_S
+ ("punctuation character cannot follow underline");
+ else
+ Error_Msg_S
+ ("two consecutive punctuation characters not permitted");
+ end if;
+ end if;
end Error_No_Double_Underline;
----------
@@ -425,13 +487,13 @@ package body Scng is
-- which the digit was expected on input, and is unchanged on return.
procedure Scan_Integer;
- -- Procedure to scan integer literal. On entry, Scan_Ptr points to
- -- a digit, on exit Scan_Ptr points past the last character of
- -- the integer.
+ -- Procedure to scan integer literal. On entry, Scan_Ptr points to a
+ -- digit, on exit Scan_Ptr points past the last character of the
+ -- integer.
--
- -- For each digit encountered, UI_Int_Value is multiplied by 10,
- -- and the value of the digit added to the result. In addition,
- -- the value in Scale is decremented by one for each actual digit
+ -- For each digit encountered, UI_Int_Value is multiplied by 10, and
+ -- the value of the digit added to the result. In addition, the
+ -- value in Scale is decremented by one for each actual digit
-- scanned.
--------------------------
@@ -464,6 +526,8 @@ package body Scng is
Scale := Scale - 1;
C := Source (Scan_Ptr);
+ -- Case of underline encountered
+
if C = '_' then
-- We do not accumulate the '_' in the checksum, so that
@@ -486,12 +550,9 @@ package body Scng is
exit when C not in '0' .. '9';
end if;
end loop;
-
end Scan_Integer;
- ----------------------------------
- -- Start of Processing for Nlit --
- ----------------------------------
+ -- Start of Processing for Nlit
begin
Base := 10;
@@ -503,8 +564,8 @@ package body Scng is
Point_Scanned := False;
UI_Num_Value := UI_Int_Value;
- -- Various possibilities now for continuing the literal are
- -- period, E/e (for exponent), or :/# (for based literal).
+ -- Various possibilities now for continuing the literal are period,
+ -- E/e (for exponent), or :/# (for based literal).
Scale := 0;
C := Source (Scan_Ptr);
@@ -534,11 +595,11 @@ package body Scng is
end if;
end loop;
- -- Based literal case. The base is the value we already scanned.
- -- In the case of colon, we insist that the following character
- -- is indeed an extended digit or a period. This catches a number
- -- of common errors, as well as catching the well known tricky
- -- bug otherwise arising from "x : integer range 1 .. 10:= 6;"
+ -- Based literal case. The base is the value we already scanned.
+ -- In the case of colon, we insist that the following character
+ -- is indeed an extended digit or a period. This catches a number
+ -- of common errors, as well as catching the well known tricky
+ -- bug otherwise arising from "x : integer range 1 .. 10:= 6;"
elsif C = '#'
or else (C = ':' and then
@@ -561,7 +622,6 @@ package body Scng is
end if;
end if;
-
Accumulate_Checksum (C);
Base_Char := C;
UI_Base := UI_Int_Value;
@@ -712,7 +772,7 @@ package body Scng is
Den => -UI_Scale,
Rbase => Base);
- -- Case of integer literal to be returned
+ -- Case of integer literal to be returned
else
Token := Tok_Integer_Literal;
@@ -720,9 +780,9 @@ package body Scng is
if UI_Scale = 0 then
Int_Literal_Value := UI_Num_Value;
- -- Avoid doing possibly expensive calculations in cases like
- -- parsing 163E800_000# when semantics will not be done anyway.
- -- This is especially useful when parsing garbled input.
+ -- Avoid doing possibly expensive calculations in cases like
+ -- parsing 163E800_000# when semantics will not be done anyway.
+ -- This is especially useful when parsing garbled input.
elsif Operating_Mode /= Check_Syntax
and then (Serious_Errors_Detected = 0 or else Try_Semantics)
@@ -731,15 +791,12 @@ package body Scng is
else
Int_Literal_Value := No_Uint;
-
end if;
-
end if;
Accumulate_Token_Checksum;
return;
-
end Nlit;
----------
@@ -762,8 +819,8 @@ package body Scng is
procedure Error_Bad_String_Char;
-- Signal bad character in string/character literal. On entry
- -- Scan_Ptr points to the improper character encountered during
- -- the scan. Scan_Ptr is not modified, so it still points to the bad
+ -- Scan_Ptr points to the improper character encountered during the
+ -- scan. Scan_Ptr is not modified, so it still points to the bad
-- character on return.
procedure Error_Unterminated_String;
@@ -773,11 +830,11 @@ package body Scng is
procedure Set_String;
-- Procedure used to distinguish between string and operator symbol.
- -- On entry the string has been scanned out, and its characters start
- -- at Token_Ptr and end one character before Scan_Ptr. On exit Token
- -- is set to Tok_String_Literal or Tok_Operator_Symbol as
- -- appropriate, and Token_Node is appropriately initialized.
- -- In addition, in the operator symbol case, Token_Name is
+ -- On entry the string has been scanned out, and its characters
+ -- start at Token_Ptr and end one character before Scan_Ptr. On exit
+ -- Token is set to Tok_String_Literal or Tok_Operator_Symbol as
+ -- appropriate, and Token_Node is appropriately initialized. In
+ -- addition, in the operator symbol case, Token_Name is
-- appropriately set.
---------------------------
@@ -981,9 +1038,9 @@ package body Scng is
end if;
- -- If it is an operator symbol, then Token_Name is set.
- -- If it is some other string value, then Token_Name still
- -- contains Error_Name.
+ -- If it is an operator symbol, then Token_Name is set. If it is
+ -- some other string value, then Token_Name still contains
+ -- Error_Name.
if Token_Name = Error_Name then
Token := Tok_String_Literal;
@@ -991,18 +1048,15 @@ package body Scng is
else
Token := Tok_Operator_Symbol;
end if;
-
end Set_String;
- ----------
- -- Slit --
- ----------
+ -- Start of processing for Slit
begin
-- On entry, Scan_Ptr points to the opening character of the string
- -- which is either a percent, double quote, or apostrophe
- -- (single quote). The latter case is an error detected by
- -- the character literal circuit.
+ -- which is either a percent, double quote, or apostrophe (single
+ -- quote). The latter case is an error detected by the character
+ -- literal circuit.
Delimiter := Source (Scan_Ptr);
Accumulate_Checksum (Delimiter);
@@ -1030,28 +1084,32 @@ package body Scng is
Scan_Ptr := Scan_Ptr + 1;
elsif (C = ESC
- and then
- Wide_Character_Encoding_Method
- in WC_ESC_Encoding_Method)
- or else
- (C in Upper_Half_Character
- and then
- Upper_Half_Encoding)
- or else
- (C = '['
- and then
- Source (Scan_Ptr + 1) = '"'
- and then
- Identifier_Char (Source (Scan_Ptr + 2)))
+ and then Wide_Character_Encoding_Method
+ in WC_ESC_Encoding_Method)
+ or else (C in Upper_Half_Character
+ and then Upper_Half_Encoding)
+ or else (C = '['
+ and then Source (Scan_Ptr + 1) = '"'
+ and then Identifier_Char (Source (Scan_Ptr + 2)))
then
+ Wptr := Scan_Ptr;
Scan_Wide (Source, Scan_Ptr, Code, Err);
- Accumulate_Checksum (Code);
if Err then
Error_Illegal_Wide_Character;
Code := Get_Char_Code (' ');
end if;
+ Accumulate_Checksum (Code);
+
+ if Ada_Version >= Ada_05
+ and then Is_UTF_32_Non_Graphic (Code)
+ then
+ Error_Msg
+ ("(Ada 2005) non-graphic character not permitted " &
+ "in string literal", Wptr);
+ end if;
+
else
Accumulate_Checksum (C);
@@ -1085,10 +1143,9 @@ package body Scng is
String_Literal_Id := End_String;
Set_String;
return;
-
end Slit;
- -- Start of body of Scan
+ -- Start of processing for Scan
begin
Prev_Token := Token;
@@ -1100,11 +1157,12 @@ package body Scng is
-- encountered and skipped, or some error situation, such as an
-- illegal character, is encountered.
+ <<Scan_Next_Character>>
+
loop
-- Skip past blanks, loop is opened up for speed
while Source (Scan_Ptr) = ' ' loop
-
if Source (Scan_Ptr + 1) /= ' ' then
Scan_Ptr := Scan_Ptr + 1;
exit;
@@ -1148,50 +1206,15 @@ package body Scng is
Token_Ptr := Scan_Ptr;
- -- Here begins the main case statement which transfers control on
- -- the basis of the non-blank character we have encountered.
+ -- Here begins the main case statement which transfers control on the
+ -- basis of the non-blank character we have encountered.
case Source (Scan_Ptr) is
-- Line terminator characters
- when CR | LF | FF | VT => Line_Terminator_Case : begin
-
- -- Check line too long
-
- Check_End_Of_Line;
-
- -- Set Token_Ptr, if End_Of_Line is a token, for the case when
- -- it is a physical line.
-
- if End_Of_Line_Is_Token then
- Token_Ptr := Scan_Ptr;
- end if;
-
- declare
- Physical : Boolean;
-
- begin
- Skip_Line_Terminators (Scan_Ptr, Physical);
-
- -- If we are at start of physical line, update scan pointers
- -- to reflect the start of the new line.
-
- if Physical then
- Current_Line_Start := Scan_Ptr;
- Start_Column := Set_Start_Column;
- First_Non_Blank_Location := Scan_Ptr;
-
- -- If End_Of_Line is a token, we return it as it is
- -- a physical line.
-
- if End_Of_Line_Is_Token then
- Token := Tok_End_Of_Line;
- return;
- end if;
- end if;
- end;
- end Line_Terminator_Case;
+ when CR | LF | FF | VT =>
+ goto Scan_Line_Terminator;
-- Horizontal tab, just skip past it
@@ -1199,15 +1222,14 @@ package body Scng is
if Style_Check then Style.Check_HT; end if;
Scan_Ptr := Scan_Ptr + 1;
- -- End of file character, treated as an end of file only if it
- -- is the last character in the buffer, otherwise it is ignored.
+ -- End of file character, treated as an end of file only if it is
+ -- the last character in the buffer, otherwise it is ignored.
when EOF =>
if Scan_Ptr = Source_Last (Current_Source_File) then
Check_End_Of_Line;
Token := Tok_EOF;
return;
-
else
Scan_Ptr := Scan_Ptr + 1;
end if;
@@ -1229,8 +1251,8 @@ package body Scng is
return;
end if;
- -- Asterisk (can be multiplication operator or double asterisk
- -- which is the exponentiation compound delimiter).
+ -- Asterisk (can be multiplication operator or double asterisk which
+ -- is the exponentiation compound delimiter).
when '*' =>
Accumulate_Checksum ('*');
@@ -1286,8 +1308,7 @@ package body Scng is
when '[' =>
if Source (Scan_Ptr + 1) = '"' then
- Name_Len := 0;
- goto Scan_Identifier;
+ goto Scan_Wide_Character;
else
Error_Msg_S ("illegal character, replaced by ""(""");
@@ -1313,9 +1334,9 @@ package body Scng is
if Style_Check then Style.Check_Comma; end if;
return;
- -- Dot, which is either an isolated period, or part of a double
- -- dot compound delimiter sequence. We also check for the case of
- -- a digit following the period, to give a better error message.
+ -- Dot, which is either an isolated period, or part of a double dot
+ -- compound delimiter sequence. We also check for the case of a
+ -- digit following the period, to give a better error message.
when '.' =>
Accumulate_Checksum ('.');
@@ -1430,6 +1451,15 @@ package body Scng is
loop
-- Scan to non graphic character (opened up for speed)
+ -- Note that we just eat left brackets, which means that
+ -- bracket notation cannot be used for end of line
+ -- characters in comments. This seems a reasonable choice,
+ -- since no one would ever use brackets notation in a real
+ -- program in this situation, and if we allow brackets
+ -- notation, we forbid some valid comments which contain a
+ -- brackets sequence that happens to match an end of line
+ -- character.
+
loop
exit when Source (Scan_Ptr) not in Graphic_Character;
Scan_Ptr := Scan_Ptr + 1;
@@ -1460,13 +1490,44 @@ package body Scng is
elsif Source (Scan_Ptr) = EOF then
exit;
+ -- If we have a wide character, we have to scan it out,
+ -- because it might be a legitimate line terminator
+
+ elsif (Source (Scan_Ptr) = ESC
+ and then Identifier_Char (ESC))
+ or else
+ (Source (Scan_Ptr) in Upper_Half_Character
+ and then Upper_Half_Encoding)
+ then
+ declare
+ Wptr : constant Source_Ptr := Scan_Ptr;
+ Code : Char_Code;
+ Err : Boolean;
+
+ begin
+ Scan_Wide (Source, Scan_Ptr, Code, Err);
+
+ -- If not well formed wide character, then just skip
+ -- past it and ignore it.
+
+ if Err then
+ Scan_Ptr := Wptr + 1;
+
+ -- If UTF_32 terminator, terminate comment scan
+
+ elsif Is_UTF_32_Line_Terminator (Code) then
+ Scan_Ptr := Wptr;
+ exit;
+ end if;
+ end;
+
-- Keep going if character in 80-FF range, or is ESC. These
-- characters are allowed in comments by RM-2.1(1), 2.7(2).
-- They are allowed even in Ada 83 mode according to the
-- approved AI. ESC was added to the AI in June 93.
elsif Source (Scan_Ptr) in Upper_Half_Character
- or else Source (Scan_Ptr) = ESC
+ or else Source (Scan_Ptr) = ESC
then
Scan_Ptr := Scan_Ptr + 1;
@@ -1475,7 +1536,6 @@ package body Scng is
else
Error_Illegal_Character;
end if;
-
end loop;
-- Note that, except when comments are tokens, we do NOT
@@ -1538,10 +1598,10 @@ package body Scng is
-- Here is where we make the test to distinguish the cases. Treat
-- as apostrophe if previous token is an identifier, right paren
-- or the reserved word "all" (latter case as in A.all'Address)
- -- (or the reserved word "project" in project files).
- -- Also treat it as apostrophe after a literal (this catches
- -- some legitimate cases, like A."abs"'Address, and also gives
- -- better error behavior for impossible cases like 123'xxx).
+ -- (or the reserved word "project" in project files). Also treat
+ -- it as apostrophe after a literal (this catches some legitimate
+ -- cases, like A."abs"'Address, and also gives better error
+ -- behavior for impossible cases like 123'xxx).
if Prev_Token = Tok_Identifier
or else Prev_Token = Tok_Right_Paren
@@ -1556,7 +1616,7 @@ package body Scng is
-- Otherwise the apostrophe starts a character literal
else
- -- Case of wide character literal with ESC or [ encoding
+ -- Case of wide character literal
if (Source (Scan_Ptr) = ESC
and then
@@ -1570,11 +1630,20 @@ package body Scng is
and then
Source (Scan_Ptr + 1) = '"')
then
+ Wptr := Scan_Ptr;
Scan_Wide (Source, Scan_Ptr, Code, Err);
Accumulate_Checksum (Code);
if Err then
Error_Illegal_Wide_Character;
+ Code := Character'Pos (' ');
+
+ elsif Ada_Version >= Ada_05
+ and then Is_UTF_32_Non_Graphic (Code)
+ then
+ Error_Msg
+ ("(Ada 2005) non-graphic character not permitted " &
+ "in character literal", Wptr);
end if;
if Source (Scan_Ptr) /= ''' then
@@ -1590,7 +1659,6 @@ package body Scng is
-- apostrophe instead since this gives better error recovery
elsif Source (Scan_Ptr + 1) /= ''' then
-
if Prev_Token = Tok_Range then
Token := Tok_Apostrophe;
return;
@@ -1722,7 +1790,6 @@ package body Scng is
Token := Tok_Vertical_Bar;
return;
end if;
-
end Exclamation_Case;
-- Plus
@@ -1750,6 +1817,7 @@ package body Scng is
when 'a' .. 'z' =>
Name_Len := 1;
+ Underline_Found := False;
Name_Buffer (1) := Source (Scan_Ptr);
Accumulate_Checksum (Name_Buffer (1));
Scan_Ptr := Scan_Ptr + 1;
@@ -1759,6 +1827,7 @@ package body Scng is
when 'A' .. 'Z' =>
Name_Len := 1;
+ Underline_Found := False;
Name_Buffer (1) :=
Character'Val (Character'Pos (Source (Scan_Ptr)) + 32);
Accumulate_Checksum (Name_Buffer (1));
@@ -1780,6 +1849,7 @@ package body Scng is
Name_Len := 1;
Name_Buffer (1) := '_';
Scan_Ptr := Scan_Ptr + 1;
+ Underline_Found := False;
goto Scan_Identifier;
-- Space (not possible, because we scanned past blanks)
@@ -1791,23 +1861,21 @@ package body Scng is
when Upper_Half_Character =>
- -- Wide character case. Note that Scan_Identifier will issue
- -- an appropriate message if wide characters are not allowed
- -- in identifiers.
+ -- Wide character case
if Upper_Half_Encoding then
- Name_Len := 0;
- goto Scan_Identifier;
+ goto Scan_Wide_Character;
-- Otherwise we have OK Latin-1 character
else
-- Upper half characters may possibly be identifier letters
- -- but can never be digits, so Identifier_Char can be used
- -- to test for a valid start of identifier character.
+ -- but can never be digits, so Identifier_Char can be used to
+ -- test for a valid start of identifier character.
if Identifier_Char (Source (Scan_Ptr)) then
Name_Len := 0;
+ Underline_Found := False;
goto Scan_Identifier;
else
Error_Illegal_Character;
@@ -1819,13 +1887,14 @@ package body Scng is
-- ESC character, possible start of identifier if wide characters
-- using ESC encoding are allowed in identifiers, which we can
-- tell by looking at the Identifier_Char flag for ESC, which is
- -- only true if these conditions are met.
+ -- only true if these conditions are met. In Ada 2005 mode, may
+ -- also be valid UTF_32 space or line terminator character.
if Identifier_Char (ESC) then
Name_Len := 0;
- goto Scan_Identifier;
+ goto Scan_Wide_Character;
else
- Error_Illegal_Wide_Character;
+ Error_Illegal_Character;
end if;
-- Invalid control characters
@@ -1839,6 +1908,7 @@ package body Scng is
-- Invalid graphic characters
when '#' | '$' | '?' | '@' | '`' | '\' | '^' | '~' =>
+
-- If Set_Special_Character has been called for this character,
-- set Scans.Special_Character and return a Special token.
@@ -1849,7 +1919,7 @@ package body Scng is
Scan_Ptr := Scan_Ptr + 1;
return;
- -- otherwise, this is an illegal character
+ -- Otherwise, this is an illegal character
else
Error_Illegal_Character;
@@ -1865,95 +1935,177 @@ package body Scng is
end loop;
- -- Identifier scanning routine. On entry, some initial characters
- -- of the identifier may have already been stored in Name_Buffer.
- -- If so, Name_Len has the number of characters stored. otherwise
- -- Name_Len is set to zero on entry.
+ -- Wide_Character scanning routine. On entry we have encountered the
+ -- initial character of a wide character sequence.
- <<Scan_Identifier>>
+ <<Scan_Wide_Character>>
- -- This loop scans as fast as possible past lower half letters
- -- and digits, which we expect to be the most common characters.
+ declare
+ Code : Char_Code;
+ Err : Boolean;
- loop
- if Source (Scan_Ptr) in 'a' .. 'z'
- or else Source (Scan_Ptr) in '0' .. '9'
- then
- Name_Buffer (Name_Len + 1) := Source (Scan_Ptr);
- Accumulate_Checksum (Source (Scan_Ptr));
+ begin
+ Wptr := Scan_Ptr;
+ Scan_Wide (Source, Scan_Ptr, Code, Err);
- elsif Source (Scan_Ptr) in 'A' .. 'Z' then
- Name_Buffer (Name_Len + 1) :=
- Character'Val (Character'Pos (Source (Scan_Ptr)) + 32);
- Accumulate_Checksum (Name_Buffer (Name_Len + 1));
- else
- exit;
- end if;
+ -- If bad wide character, signal error and continue scan
- -- Open out the loop a couple of times for speed
+ if Err then
+ Error_Illegal_Wide_Character;
+ goto Scan_Next_Character;
- if Source (Scan_Ptr + 1) in 'a' .. 'z'
- or else Source (Scan_Ptr + 1) in '0' .. '9'
- then
- Name_Buffer (Name_Len + 2) := Source (Scan_Ptr + 1);
- Accumulate_Checksum (Source (Scan_Ptr + 1));
+ -- If OK letter, reset scan ptr and go scan identifier
+
+ elsif Is_UTF_32_Letter (Code) then
+ Scan_Ptr := Wptr;
+ Name_Len := 0;
+ Underline_Found := False;
+ goto Scan_Identifier;
- elsif Source (Scan_Ptr + 1) in 'A' .. 'Z' then
- Name_Buffer (Name_Len + 2) :=
- Character'Val (Character'Pos (Source (Scan_Ptr + 1)) + 32);
- Accumulate_Checksum (Name_Buffer (Name_Len + 2));
+ -- If OK wide space, ignore and keep scanning (we do not include
+ -- any ignored spaces in checksum)
+
+ elsif Is_UTF_32_Space (Code) then
+ goto Scan_Next_Character;
+
+ -- If OK wide line terminator, terminate current line
+
+ elsif Is_UTF_32_Line_Terminator (Code) then
+ Scan_Ptr := Wptr;
+ goto Scan_Line_Terminator;
+
+ -- Punctuation is an error (at start of identifier)
+
+ elsif Is_UTF_32_Punctuation (Code) then
+ Error_Msg
+ ("identifier cannot start with punctuation", Wptr);
+ Scan_Ptr := Wptr;
+ Name_Len := 0;
+ Underline_Found := False;
+ goto Scan_Identifier;
+
+ -- Mark character is an error (at start of identifer)
+
+ elsif Is_UTF_32_Mark (Code) then
+ Error_Msg
+ ("identifier cannot start with mark character", Wptr);
+ Scan_Ptr := Wptr;
+ Name_Len := 0;
+ Underline_Found := False;
+ goto Scan_Identifier;
+
+ -- Other format character is an error (at start of identifer)
+
+ elsif Is_UTF_32_Other (Code) then
+ Error_Msg
+ ("identifier cannot start with other format character", Wptr);
+ Scan_Ptr := Wptr;
+ Name_Len := 0;
+ Underline_Found := False;
+ goto Scan_Identifier;
+
+ -- Extended digit character is an error. Could be bad start of
+ -- identifier or bad literal. Not worth doing too much to try to
+ -- distinguish these cases, but we will do a little bit.
+
+ elsif Is_UTF_32_Digit (Code) then
+ Error_Msg
+ ("identifier cannot start with digit character", Wptr);
+ Scan_Ptr := Wptr;
+ Name_Len := 0;
+ Underline_Found := False;
+ goto Scan_Identifier;
+
+ -- All other wide characters are illegal here
else
- Scan_Ptr := Scan_Ptr + 1;
- Name_Len := Name_Len + 1;
- exit;
+ Error_Illegal_Wide_Character;
+ goto Scan_Next_Character;
end if;
+ end;
- if Source (Scan_Ptr + 2) in 'a' .. 'z'
- or else Source (Scan_Ptr + 2) in '0' .. '9'
- then
- Name_Buffer (Name_Len + 3) := Source (Scan_Ptr + 2);
- Accumulate_Checksum (Source (Scan_Ptr + 2));
+ -- Routine to scan line terminator. On entry Scan_Ptr points to a
+ -- character which is one of FF,LR,CR,VT, or one of the wide characters
+ -- that is treated as a line termiantor.
- elsif Source (Scan_Ptr + 2) in 'A' .. 'Z' then
- Name_Buffer (Name_Len + 3) :=
- Character'Val (Character'Pos (Source (Scan_Ptr + 2)) + 32);
- Accumulate_Checksum (Name_Buffer (Name_Len + 3));
- else
- Scan_Ptr := Scan_Ptr + 2;
- Name_Len := Name_Len + 2;
- exit;
+ <<Scan_Line_Terminator>>
+
+ -- Check line too long
+
+ Check_End_Of_Line;
+
+ -- Set Token_Ptr, if End_Of_Line is a token, for the case when it is
+ -- a physical line.
+
+ if End_Of_Line_Is_Token then
+ Token_Ptr := Scan_Ptr;
+ end if;
+
+ declare
+ Physical : Boolean;
+
+ begin
+ Skip_Line_Terminators (Scan_Ptr, Physical);
+
+ -- If we are at start of physical line, update scan pointers to
+ -- reflect the start of the new line.
+
+ if Physical then
+ Current_Line_Start := Scan_Ptr;
+ Start_Column := Set_Start_Column;
+ First_Non_Blank_Location := Scan_Ptr;
+
+ -- If End_Of_Line is a token, we return it as it is a
+ -- physical line.
+
+ if End_Of_Line_Is_Token then
+ Token := Tok_End_Of_Line;
+ return;
+ end if;
end if;
+ end;
+
+ goto Scan_Next_Character;
- if Source (Scan_Ptr + 3) in 'a' .. 'z'
- or else Source (Scan_Ptr + 3) in '0' .. '9'
+ -- Identifier scanning routine. On entry, some initial characters of
+ -- the identifier may have already been stored in Name_Buffer. If so,
+ -- Name_Len has the number of characters stored. otherwise Name_Len is
+ -- set to zero on entry. Underline_Found is also set False on entry.
+
+ <<Scan_Identifier>>
+
+ -- This loop scans as fast as possible past lower half letters and
+ -- digits, which we expect to be the most common characters.
+
+ loop
+ if Source (Scan_Ptr) in 'a' .. 'z'
+ or else Source (Scan_Ptr) in '0' .. '9'
then
- Name_Buffer (Name_Len + 4) := Source (Scan_Ptr + 3);
- Accumulate_Checksum (Source (Scan_Ptr + 3));
+ Name_Buffer (Name_Len + 1) := Source (Scan_Ptr);
+ Accumulate_Checksum (Source (Scan_Ptr));
- elsif Source (Scan_Ptr + 3) in 'A' .. 'Z' then
- Name_Buffer (Name_Len + 4) :=
- Character'Val (Character'Pos (Source (Scan_Ptr + 3)) + 32);
- Accumulate_Checksum (Name_Buffer (Name_Len + 4));
+ elsif Source (Scan_Ptr) in 'A' .. 'Z' then
+ Name_Buffer (Name_Len + 1) :=
+ Character'Val (Character'Pos (Source (Scan_Ptr)) + 32);
+ Accumulate_Checksum (Name_Buffer (Name_Len + 1));
else
- Scan_Ptr := Scan_Ptr + 3;
- Name_Len := Name_Len + 3;
exit;
end if;
- Scan_Ptr := Scan_Ptr + 4;
- Name_Len := Name_Len + 4;
+ Underline_Found := False;
+ Scan_Ptr := Scan_Ptr + 1;
+ Name_Len := Name_Len + 1;
end loop;
-- If we fall through, then we have encountered either an underline
-- character, or an extended identifier character (i.e. one from the
- -- upper half), or a wide character, or an identifier terminator.
- -- The initial test speeds us up in the most common case where we
- -- have an identifier terminator. Note that ESC is an identifier
- -- character only if a wide character encoding method that uses
- -- ESC encoding is active, so if we find an ESC character we know
- -- that we have a wide character.
+ -- upper half), or a wide character, or an identifier terminator. The
+ -- initial test speeds us up in the most common case where we have
+ -- an identifier terminator. Note that ESC is an identifier character
+ -- only if a wide character encoding method that uses ESC encoding
+ -- is active, so if we find an ESC character we know that we have a
+ -- wide character.
if Identifier_Char (Source (Scan_Ptr)) then
@@ -1962,22 +2114,10 @@ package body Scng is
if Source (Scan_Ptr) = '_' then
Accumulate_Checksum ('_');
- -- Check error case of identifier ending with underscore
- -- In this case we ignore the underscore and do not store it.
-
- if not Identifier_Char (Source (Scan_Ptr + 1)) then
- Error_Msg_S ("identifier cannot end with underline");
- Scan_Ptr := Scan_Ptr + 1;
-
- -- Check error case of two underscores. In this case we do
- -- not store the first underscore (we will store the second)
-
- elsif Source (Scan_Ptr + 1) = '_' then
- Error_No_Double_Underline;
-
- -- Normal case of legal underscore
-
+ if Underline_Found then
+ Error_No_Double_Underline;
else
+ Underline_Found := True;
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := '_';
end if;
@@ -1994,6 +2134,7 @@ package body Scng is
Store_Encoded_Character
(Get_Char_Code (Fold_Lower (Source (Scan_Ptr))));
Scan_Ptr := Scan_Ptr + 1;
+ Underline_Found := False;
goto Scan_Identifier;
-- Left bracket not followed by a quote terminates an identifier.
@@ -2014,12 +2155,12 @@ package body Scng is
-- encoding into the name table entry for the identifier.
declare
- Sptr : constant Source_Ptr := Scan_Ptr;
- Code : Char_Code;
- Err : Boolean;
- Chr : Character;
+ Code : Char_Code;
+ Err : Boolean;
+ Chr : Character;
begin
+ Wptr := Scan_Ptr;
Scan_Wide (Source, Scan_Ptr, Code, Err);
-- If error, signal error
@@ -2037,19 +2178,16 @@ package body Scng is
Accumulate_Checksum (Chr);
Store_Encoded_Character
(Get_Char_Code (Fold_Lower (Chr)));
+ Underline_Found := False;
- -- Character is not normal identifier character, store
- -- it in encoded form.
+ -- Here if not a normal identifier character
else
- Accumulate_Checksum (Code);
- Store_Encoded_Character (Code);
-
-- Make sure we are allowing wide characters in
-- identifiers. Note that we allow wide character
- -- notation for an OK identifier character. This
- -- in particular allows bracket or other notation
- -- to be used for upper half letters.
+ -- notation for an OK identifier character. This in
+ -- particular allows bracket or other notation to be
+ -- used for upper half letters.
-- Wide characters are always allowed in Ada 2005
@@ -2057,32 +2195,110 @@ package body Scng is
and then Ada_Version < Ada_05
then
Error_Msg
- ("wide character not allowed in identifier", Sptr);
+ ("wide character not allowed in identifier", Wptr);
+ end if;
+
+ -- If OK letter, store it folding to upper case. Note
+ -- that we include the folded letter in the checksum.
+
+ if Is_UTF_32_Letter (Code) then
+ Code := UTF_32_To_Upper_Case (Code);
+ Accumulate_Checksum (Code);
+ Store_Encoded_Character (Code);
+ Underline_Found := False;
+
+ -- If OK extended digit or mark, then store it
+
+ elsif Is_UTF_32_Digit (Code)
+ or else Is_UTF_32_Mark (Code)
+ then
+ Accumulate_Checksum (Code);
+ Store_Encoded_Character (Code);
+ Underline_Found := False;
+
+ -- Wide punctuation is also stored, but counts as an
+ -- underline character for error checking purposes.
+
+ elsif Is_UTF_32_Punctuation (Code) then
+ Accumulate_Checksum (Code);
+
+ if Underline_Found then
+ declare
+ Cend : constant Source_Ptr := Scan_Ptr;
+ begin
+ Scan_Ptr := Wptr;
+ Error_No_Double_Underline;
+ Scan_Ptr := Cend;
+ end;
+
+ else
+ Store_Encoded_Character (Code);
+ Underline_Found := True;
+ end if;
+
+ -- Wide character in Unicode cateogory "Other, Format"
+ -- is accepted in an identifier, but is ignored and not
+ -- stored. It seems reasonable to exclude it from the
+ -- checksum.
+
+ elsif Is_UTF_32_Other (Code) then
+ null;
+
+ -- Wide character in category Separator,Space terminates
+
+ elsif Is_UTF_32_Space (Code) then
+ goto Scan_Identifier_Complete;
+
+ -- Any other wide character is not acceptable
+
+ else
+ Error_Msg
+ ("invalid wide character in identifier", Wptr);
end if;
end if;
- end;
- goto Scan_Identifier;
+ goto Scan_Identifier;
+ end;
end if;
end if;
- -- Scan of identifier is complete. The identifier is stored in
- -- Name_Buffer, and Scan_Ptr points past the last character.
+ -- Scan of identifier is complete. The identifier is stored in
+ -- Name_Buffer, and Scan_Ptr points past the last character.
+ <<Scan_Identifier_Complete>>
Token_Name := Name_Find;
+ -- Check for identifier ending with underline or punctuation char
+
+ if Underline_Found then
+ Underline_Found := False;
+
+ if Source (Scan_Ptr - 1) = '_' then
+ Error_Msg
+ ("identifier cannot end with underline", Scan_Ptr - 1);
+ else
+ Error_Msg
+ ("identifier cannot end with punctuation character", Wptr);
+ end if;
+ end if;
+
-- Here is where we check if it was a keyword
if Get_Name_Table_Byte (Token_Name) /= 0
and then (Ada_Version >= Ada_95
or else Token_Name not in Ada_95_Reserved_Words)
+ and then (Ada_Version >= Ada_05
+ or else Token_Name not in Ada_2005_Reserved_Words)
then
Token := Token_Type'Val (Get_Name_Table_Byte (Token_Name));
- -- Deal with possible style check for non-lower case keyword,
- -- but we don't treat ACCESS, DELTA, DIGITS, RANGE as keywords
- -- for this purpose if they appear as attribute designators.
- -- Actually we only check the first character for speed.
+ -- Deal with possible style check for non-lower case keyword, but
+ -- we don't treat ACCESS, DELTA, DIGITS, RANGE as keywords for
+ -- this purpose if they appear as attribute designators. Actually
+ -- we only check the first character for speed.
+
+ -- Ada 2005 (AI-284): Do not apply the style check in case of
+ -- "pragma Interface"
if Style_Check
and then Source (Token_Ptr) <= 'Z'
@@ -2092,14 +2308,18 @@ package body Scng is
and then Token /= Tok_Delta
and then Token /= Tok_Digits
and then Token /= Tok_Range))
+ and then (Token /= Tok_Interface
+ or else
+ (Token = Tok_Interface
+ and then Prev_Token /= Tok_Pragma))
then
Style.Non_Lower_Case_Keyword;
end if;
- -- We must reset Token_Name since this is not an identifier
- -- and if we leave Token_Name set, the parser gets confused
- -- because it thinks it is dealing with an identifier instead
- -- of the corresponding keyword.
+ -- We must reset Token_Name since this is not an identifier and
+ -- if we leave Token_Name set, the parser gets confused because
+ -- it thinks it is dealing with an identifier instead of the
+ -- corresponding keyword.
Token_Name := No_Name;
Accumulate_Token_Checksum;
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
index 44c80e0910f..aa7cddff6a1 100644
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -837,7 +837,10 @@ package body Sem_Aggr is
C := Get_String_Char (Str, J);
Set_Character_Literal_Name (C);
- C_Node := Make_Character_Literal (P, Name_Find, C);
+ C_Node :=
+ Make_Character_Literal (P,
+ Chars => Name_Find,
+ Char_Literal_Value => UI_From_CC (C));
Set_Etype (C_Node, Any_Character);
Append_To (Exprs, C_Node);
@@ -915,8 +918,10 @@ package body Sem_Aggr is
if Number_Dimensions (Typ) = 1
and then
(Root_Type (Component_Type (Typ)) = Standard_Character
- or else
- Root_Type (Component_Type (Typ)) = Standard_Wide_Character)
+ or else
+ Root_Type (Component_Type (Typ)) = Standard_Wide_Character
+ or else
+ Root_Type (Component_Type (Typ)) = Standard_Wide_Wide_Character)
and then No (Component_Associations (N))
and then not Is_Limited_Composite (Typ)
and then not Is_Private_Composite (Typ)
@@ -939,7 +944,7 @@ package body Sem_Aggr is
Expr := First (Expressions (N));
while Present (Expr) loop
- Store_String_Char (Char_Literal_Value (Expr));
+ Store_String_Char (UI_To_CC (Char_Literal_Value (Expr)));
Next (Expr);
end loop;
@@ -1672,7 +1677,9 @@ package body Sem_Aggr is
-- Ada 2005 (AI-231)
- Check_Can_Never_Be_Null (N, Expression (Assoc));
+ if Ada_Version >= Ada_05 then
+ Check_Can_Never_Be_Null (Etype (N), Expression (Assoc));
+ end if;
-- Ada 2005 (AI-287): In case of default initialized component
-- we delay the resolution to the expansion phase
@@ -1798,7 +1805,11 @@ package body Sem_Aggr is
while Present (Expr) loop
Nb_Elements := Nb_Elements + 1;
- Check_Can_Never_Be_Null (N, Expr); -- Ada 2005 (AI-231)
+ -- Ada 2005 (AI-231)
+
+ if Ada_Version >= Ada_05 then
+ Check_Can_Never_Be_Null (Etype (N), Expr);
+ end if;
if not Resolve_Aggr_Expr (Expr, Single_Elmt => True) then
return Failure;
@@ -1810,8 +1821,12 @@ package body Sem_Aggr is
if Others_Present then
Assoc := Last (Component_Associations (N));
- Check_Can_Never_Be_Null
- (N, Expression (Assoc)); -- Ada 2005 (AI-231)
+ -- Ada 2005 (AI-231)
+
+ if Ada_Version >= Ada_05 then
+ Check_Can_Never_Be_Null
+ (Etype (N), Expression (Assoc));
+ end if;
-- Ada 2005 (AI-287): In case of default initialized component
-- we delay the resolution to the expansion phase.
@@ -2051,6 +2066,9 @@ package body Sem_Aggr is
-- less which ancestor). It is not possible to determine the
-- required components of the extension part.
+ -- This check implements AI-306, which in fact was motivated
+ -- by an ACT query to the ARG after this test was added.
+
Error_Msg_N ("ancestor part must be statically tagged", A);
else
Resolve_Record_Aggregate (N, Typ);
@@ -2358,13 +2376,9 @@ package body Sem_Aggr is
-- Ada 2005 (AI-231)
if Ada_Version >= Ada_05
- and then Present (Expression (Assoc))
and then Nkind (Expression (Assoc)) = N_Null
- and then Can_Never_Be_Null (Compon)
then
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding " &
- "components", Expression (Assoc));
+ Check_Can_Never_Be_Null (Compon, Expression (Assoc));
end if;
-- We need to duplicate the expression when several
@@ -2679,13 +2693,8 @@ package body Sem_Aggr is
-- Ada 2005 (AI-231)
- if Ada_Version >= Ada_05
- and then Nkind (Positional_Expr) = N_Null
- and then Can_Never_Be_Null (Discrim)
- then
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding " &
- "components", Positional_Expr);
+ if Ada_Version >= Ada_05 then
+ Check_Can_Never_Be_Null (Discrim, Positional_Expr);
end if;
Next (Positional_Expr);
@@ -2921,13 +2930,8 @@ package body Sem_Aggr is
-- Ada 2005 (AI-231)
- if Ada_Version >= Ada_05
- and then Nkind (Positional_Expr) = N_Null
- and then Can_Never_Be_Null (Component)
- then
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding components",
- Positional_Expr);
+ if Ada_Version >= Ada_05 then
+ Check_Can_Never_Be_Null (Component, Positional_Expr);
end if;
if Present (Get_Value (Component, Component_Associations (N))) then
@@ -3081,12 +3085,17 @@ package body Sem_Aggr is
procedure Check_Can_Never_Be_Null (N : Node_Id; Expr : Node_Id) is
begin
- if Ada_Version >= Ada_05
- and then Nkind (Expr) = N_Null
- and then Can_Never_Be_Null (Etype (N))
+ pragma Assert (Ada_Version >= Ada_05);
+
+ if Nkind (Expr) = N_Null
+ and then Can_Never_Be_Null (N)
then
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding components", Expr);
+ Apply_Compile_Time_Constraint_Error
+ (N => Expr,
+ Msg => "(Ada 2005) NULL not allowed in"
+ & " null-excluding components?",
+ Reason => CE_Null_Not_Allowed,
+ Rep => False);
end if;
end Check_Can_Never_Be_Null;
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index 553fb7138a1..8780f6b08f8 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -3458,6 +3458,22 @@ package body Sem_Attr is
when Attribute_Storage_Unit =>
Standard_Attribute (Ttypes.System_Storage_Unit);
+ -----------------
+ -- Stream_Size --
+ -----------------
+
+ when Attribute_Stream_Size =>
+ Check_E0;
+ Check_Type;
+
+ if Is_Entity_Name (P)
+ and then Is_Elementary_Type (Entity (P))
+ then
+ Set_Etype (N, Universal_Integer);
+ else
+ Error_Attr ("invalid prefix for % attribute", P);
+ end if;
+
----------
-- Succ --
----------
@@ -3801,6 +3817,19 @@ package body Sem_Attr is
Validate_Non_Static_Attribute_Function_Call;
end Wide_Image;
+ ---------------------
+ -- Wide_Wide_Image --
+ ---------------------
+
+ when Attribute_Wide_Wide_Image => Wide_Wide_Image :
+ begin
+ Check_Scalar_Type;
+ Set_Etype (N, Standard_Wide_Wide_String);
+ Check_E1;
+ Resolve (E1, P_Base_Type);
+ Validate_Non_Static_Attribute_Function_Call;
+ end Wide_Wide_Image;
+
----------------
-- Wide_Value --
----------------
@@ -3817,6 +3846,31 @@ package body Sem_Attr is
Validate_Non_Static_Attribute_Function_Call;
end Wide_Value;
+ ---------------------
+ -- Wide_Wide_Value --
+ ---------------------
+
+ when Attribute_Wide_Wide_Value => Wide_Wide_Value :
+ begin
+ Check_E1;
+ Check_Scalar_Type;
+
+ -- Set Etype before resolving expression because expansion
+ -- of expression may require enclosing type.
+
+ Set_Etype (N, P_Type);
+ Validate_Non_Static_Attribute_Function_Call;
+ end Wide_Wide_Value;
+
+ ---------------------
+ -- Wide_Wide_Width --
+ ---------------------
+
+ when Attribute_Wide_Wide_Width =>
+ Check_E0;
+ Check_Scalar_Type;
+ Set_Etype (N, Universal_Integer);
+
----------------
-- Wide_Width --
----------------
@@ -4919,12 +4973,12 @@ package body Sem_Attr is
when Attribute_Enum_Rep =>
- -- For an enumeration type with a non-standard representation
- -- use the Enumeration_Rep field of the proper constant. Note
- -- that this would not work for types Character/Wide_Character,
- -- since no real entities are created for the enumeration
- -- literals, but that does not matter since these two types
- -- do not have non-standard representations anyway.
+ -- For an enumeration type with a non-standard representation use
+ -- the Enumeration_Rep field of the proper constant. Note that this
+ -- will not work for types Character/Wide_[Wide-]Character, since no
+ -- real entities are created for the enumeration literals, but that
+ -- does not matter since these two types do not have non-standard
+ -- representations anyway.
if Is_Enumeration_Type (P_Type)
and then Has_Non_Standard_Rep (P_Type)
@@ -5653,11 +5707,23 @@ package body Sem_Attr is
-- Remainder --
---------------
- when Attribute_Remainder =>
- Fold_Ureal (N,
- Eval_Fat.Remainder
- (P_Root_Type, Expr_Value_R (E1), Expr_Value_R (E2)),
- Static);
+ when Attribute_Remainder => Remainder : declare
+ X : constant Ureal := Expr_Value_R (E1);
+ Y : constant Ureal := Expr_Value_R (E2);
+
+ begin
+ if UR_Is_Zero (Y) then
+ Apply_Compile_Time_Constraint_Error
+ (N, "division by zero in Remainder",
+ CE_Overflow_Check_Failed,
+ Warn => not Static);
+
+ Check_Expressions;
+ return;
+ end if;
+
+ Fold_Ureal (N, Eval_Fat.Remainder (P_Root_Type, X, Y), Static);
+ end Remainder;
-----------
-- Round --
@@ -5832,7 +5898,7 @@ package body Sem_Attr is
-- Size_Clause field for a subtype when Has_Size_Clause
-- is False. Consider:
- -- type x is range 1 .. 64; g
+ -- type x is range 1 .. 64;
-- for x'size use 12;
-- subtype y is x range 0 .. 3;
@@ -5893,6 +5959,13 @@ package body Sem_Attr is
Fold_Ureal (N, Small_Value (P_Type), True);
end if;
+ -----------------
+ -- Stream_Size --
+ -----------------
+
+ when Attribute_Stream_Size =>
+ null;
+
----------
-- Succ --
----------
@@ -6100,6 +6173,22 @@ package body Sem_Attr is
when Attribute_Wide_Image =>
null;
+ ---------------------
+ -- Wide_Wide_Image --
+ ---------------------
+
+ -- Wide_Wide_Image is a scalar attribute but is never static, because it
+ -- is not a static function (having a non-scalar argument (RM 4.9(22)).
+
+ when Attribute_Wide_Wide_Image =>
+ null;
+
+ ---------------------
+ -- Wide_Wide_Width --
+ ---------------------
+
+ -- Processing for Wide_Wide_Width is combined with Width
+
----------------
-- Wide_Width --
----------------
@@ -6110,9 +6199,11 @@ package body Sem_Attr is
-- Width --
-----------
- -- This processing also handles the case of Wide_Width
+ -- This processing also handles the case of Wide_[Wide_]Width
- when Attribute_Width | Attribute_Wide_Width => Width :
+ when Attribute_Width |
+ Attribute_Wide_Width |
+ Attribute_Wide_Wide_Width => Width :
begin
if Compile_Time_Known_Bounds (P_Type) then
@@ -6193,10 +6284,11 @@ package body Sem_Attr is
W := 0;
-- Width for types derived from Standard.Character
- -- and Standard.Wide_Character.
+ -- and Standard.Wide_[Wide_]Character.
elsif R = Standard_Character
- or else R = Standard_Wide_Character
+ or else R = Standard_Wide_Character
+ or else R = Standard_Wide_Wide_Character
then
W := 0;
@@ -6207,6 +6299,8 @@ package body Sem_Attr is
-- Assume all wide-character escape sequences are
-- same length, so we can quit when we reach one.
+ -- Is this right for UTF-8?
+
if J > 255 then
if Id = Attribute_Wide_Width then
W := Int'Max (W, 3);
@@ -6299,8 +6393,8 @@ package body Sem_Attr is
Get_Decoded_Name_String (Chars (L));
Wt := Nat (Name_Len);
- -- For Wide_Width, use encoded name, and then
- -- adjust for the encoding.
+ -- For Wide_[Wide_]Width, use encoded name, and
+ -- then adjust for the encoding.
else
Get_Name_String (Chars (L));
@@ -6386,11 +6480,11 @@ package body Sem_Attr is
Attribute_Value |
Attribute_Wchar_T_Size |
Attribute_Wide_Value |
+ Attribute_Wide_Wide_Value |
Attribute_Word_Size |
Attribute_Write =>
raise Program_Error;
-
end case;
-- At the end of the case, one more check. If we did a static evaluation
@@ -7348,6 +7442,9 @@ package body Sem_Attr is
when Attribute_Wide_Value =>
Resolve (First (Expressions (N)), Standard_Wide_String);
+ when Attribute_Wide_Wide_Value =>
+ Resolve (First (Expressions (N)), Standard_Wide_Wide_String);
+
when others => null;
end case;
end case;
diff --git a/gcc/ada/sem_case.adb b/gcc/ada/sem_case.adb
index b06ab1e2919..a113ac91e19 100644
--- a/gcc/ada/sem_case.adb
+++ b/gcc/ada/sem_case.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1996-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 1996-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- --
@@ -267,11 +267,12 @@ package body Sem_Case is
C : Int;
begin
- -- For character, or wide character. If we are in 7-bit ASCII graphic
+ -- For character, or wide [wide] character. If 7-bit ASCII graphic
-- range, then build and return appropriate character literal name
if Rtp = Standard_Character
or else Rtp = Standard_Wide_Character
+ or else Rtp = Standard_Wide_Wide_Character
then
C := UI_To_Int (Value);
@@ -429,11 +430,13 @@ package body Sem_Case is
if Root_Type (Choice_Type) = Standard_Character
or else
Root_Type (Choice_Type) = Standard_Wide_Character
+ or else
+ Root_Type (Choice_Type) = Standard_Wide_Wide_Character
then
Set_Character_Literal_Name (Char_Code (UI_To_Int (Value)));
Lit := New_Node (N_Character_Literal, Loc);
Set_Chars (Lit, Name_Find);
- Set_Char_Literal_Value (Lit, Char_Code (UI_To_Int (Value)));
+ Set_Char_Literal_Value (Lit, Value);
Set_Etype (Lit, Choice_Type);
Set_Is_Static_Expression (Lit, True);
return Lit;
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 5d9e5caa34d..a9700fb1dcc 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -1692,14 +1692,26 @@ package body Sem_Ch10 is
if Implementation_Unit_Warnings
and then Current_Sem_Unit = Main_Unit
- and then Implementation_Unit (Get_Source_Unit (U))
and then not Intunit
and then not Implicit_With (N)
+ and then not GNAT_Mode
then
- Error_Msg_N ("& is an internal 'G'N'A'T unit?", Name (N));
- Error_Msg_N
- ("\use of this unit is non-portable and version-dependent?",
- Name (N));
+ declare
+ U_Kind : constant Kind_Of_Unit :=
+ Get_Kind_Of_Unit (Get_Source_Unit (U));
+
+ begin
+ if U_Kind = Implementation_Unit then
+ Error_Msg_N ("& is an internal 'G'N'A'T unit?", Name (N));
+ Error_Msg_N
+ ("\use of this unit is non-portable " &
+ "and version-dependent?",
+ Name (N));
+
+ elsif U_Kind = Ada_05_Unit and then Ada_Version = Ada_95 then
+ Error_Msg_N ("& is an Ada 2005 unit?", Name (N));
+ end if;
+ end;
end if;
end if;
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 588ce993dfb..04e2f8d567b 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -51,6 +51,7 @@ with Sem_Ch7; use Sem_Ch7;
with Sem_Ch8; use Sem_Ch8;
with Sem_Ch10; use Sem_Ch10;
with Sem_Ch13; use Sem_Ch13;
+with Sem_Disp; use Sem_Disp;
with Sem_Elab; use Sem_Elab;
with Sem_Elim; use Sem_Elim;
with Sem_Eval; use Sem_Eval;
@@ -261,7 +262,11 @@ package body Sem_Ch12 is
T : Entity_Id;
Def : Node_Id);
- -- All the following need comments???
+ -- The following subprograms create abbreviated declarations for formal
+ -- scalar types. We introduce an anonymous base of the proper class for
+ -- each of them, and define the formals as constrained first subtypes of
+ -- their bases. The bounds are expressions that are non-static in the
+ -- generic.
procedure Analyze_Formal_Decimal_Fixed_Point_Type
(T : Entity_Id; Def : Node_Id);
@@ -879,7 +884,7 @@ package body Sem_Ch12 is
case Nkind (Formal) is
when N_Formal_Subprogram_Declaration =>
- exit when Kind = N_Formal_Subprogram_Declaration
+ exit when Kind in N_Formal_Subprogram_Declaration
and then
Chars
(Defining_Unit_Name (Specification (Formal))) =
@@ -900,7 +905,7 @@ package body Sem_Ch12 is
-- unrecognized pragmas.
exit when
- Kind /= N_Formal_Subprogram_Declaration
+ Kind not in N_Formal_Subprogram_Declaration
and then Kind /= N_Subprogram_Declaration
and then Kind /= N_Freeze_Entity
and then Kind /= N_Null_Statement
@@ -1038,7 +1043,7 @@ package body Sem_Ch12 is
then
Temp_Formal := First (Formals);
while Present (Temp_Formal) loop
- if Nkind (Temp_Formal) =
+ if Nkind (Temp_Formal) in
N_Formal_Subprogram_Declaration
and then Temp_Formal /= Formal
and then
@@ -1279,6 +1284,7 @@ package body Sem_Ch12 is
Set_Delta_Value (T, Delta_Val);
Set_Small_Value (T, Delta_Val);
Set_Scalar_Range (T, Scalar_Range (Base));
+ Set_Is_Constrained (T);
Check_Restriction (No_Fixed_Point, Def);
end Analyze_Formal_Decimal_Fixed_Point_Type;
@@ -1357,12 +1363,17 @@ package body Sem_Ch12 is
Lo : Node_Id;
Hi : Node_Id;
+ Base : constant Entity_Id :=
+ New_Internal_Entity
+ (E_Floating_Point_Type, Current_Scope, Sloc (Def), 'G');
begin
- Enter_Name (T);
- Set_Ekind (T, E_Enumeration_Type);
- Set_Etype (T, T);
- Init_Size (T, 8);
- Init_Alignment (T);
+ Enter_Name (T);
+ Set_Ekind (T, E_Enumeration_Subtype);
+ Set_Etype (T, Base);
+ Init_Size (T, 8);
+ Init_Alignment (T);
+ Set_Is_Generic_Type (T);
+ Set_Is_Constrained (T);
-- For semantic analysis, the bounds of the type must be set to some
-- non-static value. The simplest is to create attribute nodes for
@@ -1386,6 +1397,14 @@ package body Sem_Ch12 is
Low_Bound => Lo,
High_Bound => Hi));
+ Set_Ekind (Base, E_Enumeration_Type);
+ Set_Etype (Base, Base);
+ Init_Size (Base, 8);
+ Init_Alignment (Base);
+ Set_Is_Generic_Type (Base);
+ Set_Scalar_Range (Base, Scalar_Range (T));
+ Set_Parent (Base, Parent (Def));
+
end Analyze_Formal_Discrete_Type;
----------------------------------
@@ -1404,12 +1423,13 @@ package body Sem_Ch12 is
-- the generic itself.
Enter_Name (T);
- Set_Ekind (T, E_Floating_Point_Subtype);
- Set_Etype (T, Base);
- Set_Size_Info (T, (Standard_Float));
- Set_RM_Size (T, RM_Size (Standard_Float));
- Set_Digits_Value (T, Digits_Value (Standard_Float));
- Set_Scalar_Range (T, Scalar_Range (Standard_Float));
+ Set_Ekind (T, E_Floating_Point_Subtype);
+ Set_Etype (T, Base);
+ Set_Size_Info (T, (Standard_Float));
+ Set_RM_Size (T, RM_Size (Standard_Float));
+ Set_Digits_Value (T, Digits_Value (Standard_Float));
+ Set_Scalar_Range (T, Scalar_Range (Standard_Float));
+ Set_Is_Constrained (T);
Set_Is_Generic_Type (Base);
Set_Etype (Base, Base);
@@ -1562,6 +1582,7 @@ package body Sem_Ch12 is
Make_Range (Loc,
Low_Bound => Make_Real_Literal (Loc, Ureal_1),
High_Bound => Make_Real_Literal (Loc, Ureal_1)));
+ Set_Is_Constrained (T);
Set_Is_Generic_Type (Base);
Set_Etype (Base, Base);
@@ -1773,11 +1794,12 @@ package body Sem_Ch12 is
begin
Enter_Name (T);
- Set_Ekind (T, E_Signed_Integer_Subtype);
- Set_Etype (T, Base);
- Set_Size_Info (T, Standard_Integer);
- Set_RM_Size (T, RM_Size (Standard_Integer));
- Set_Scalar_Range (T, Scalar_Range (Standard_Integer));
+ Set_Ekind (T, E_Signed_Integer_Subtype);
+ Set_Etype (T, Base);
+ Set_Size_Info (T, Standard_Integer);
+ Set_RM_Size (T, RM_Size (Standard_Integer));
+ Set_Scalar_Range (T, Scalar_Range (Standard_Integer));
+ Set_Is_Constrained (T);
Set_Is_Generic_Type (Base);
Set_Size_Info (Base, Standard_Integer);
@@ -1811,6 +1833,25 @@ package body Sem_Ch12 is
Set_Is_Formal_Subprogram (Nam);
Set_Has_Completion (Nam);
+ if Nkind (N) = N_Formal_Abstract_Subprogram_Declaration then
+ Set_Is_Abstract (Nam);
+ Set_Is_Dispatching_Operation (Nam);
+
+ declare
+ Ctrl_Type : constant Entity_Id := Find_Dispatching_Type (Nam);
+
+ begin
+ if not Present (Ctrl_Type) then
+ Error_Msg_N
+ ("abstract formal subprogram must have a controlling type",
+ N);
+
+ else
+ Check_Controlling_Formals (Ctrl_Type, Nam);
+ end if;
+ end;
+ end if;
+
-- Default name is resolved at the point of instantiation
if Box_Present (N) then
@@ -6966,10 +7007,12 @@ package body Sem_Ch12 is
-- The generic instantiation freezes the actual. This can only be
-- done once the actual is resolved, in the analysis of the renaming
- -- declaration. To indicate that must be done, we set the corresponding
- -- spec of the node to point to the formal subprogram entity.
+ -- declaration. To make the formal subprogram entity available, we set
+ -- Corresponding_Formal_Spec to point to the formal subprogram entity.
+ -- This is also needed in Analyze_Subprogram_Renaming for the processing
+ -- of formal abstract subprograms.
- Set_Corresponding_Spec (Decl_Node, Analyzed_S);
+ Set_Corresponding_Formal_Spec (Decl_Node, Analyzed_S);
-- We cannot analyze the renaming declaration, and thus find the
-- actual, until the all the actuals are assembled in the instance.
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index e620044b762..dbd1c7eef06 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -1,12 +1,12 @@
------------------------------------------------------------------------------
--- c --
+-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- S E M _ C H 1 3 --
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -301,7 +301,6 @@ package body Sem_Ch13 is
then
Error_Msg_N ("cannot specify attribute for subtype", Nam);
return;
-
end if;
-- Switch on particular attribute
@@ -1364,6 +1363,45 @@ package body Sem_Ch13 is
end if;
end Storage_Pool;
+ -----------------
+ -- Stream_Size --
+ -----------------
+
+ when Attribute_Stream_Size => Stream_Size : declare
+ Size : constant Uint := Static_Integer (Expr);
+
+ begin
+ if Has_Stream_Size_Clause (U_Ent) then
+ Error_Msg_N ("Stream_Size already given for &", Nam);
+
+ elsif Is_Elementary_Type (U_Ent) then
+ if Size /= System_Storage_Unit
+ and then
+ Size /= System_Storage_Unit * 2
+ and then
+ Size /= System_Storage_Unit * 4
+ and then
+ Size /= System_Storage_Unit * 8
+ then
+ Error_Msg_Uint_1 := UI_From_Int (System_Storage_Unit);
+ Error_Msg_N
+ ("stream size for elementary type must be a"
+ & " power of 2 and at least ^", N);
+
+ elsif RM_Size (U_Ent) > Size then
+ Error_Msg_Uint_1 := RM_Size (U_Ent);
+ Error_Msg_N
+ ("stream size for elementary type must be a"
+ & " power of 2 and at least ^", N);
+ end if;
+
+ Set_Has_Stream_Size_Clause (U_Ent);
+
+ else
+ Error_Msg_N ("Stream_Size cannot be given for &", Nam);
+ end if;
+ end Stream_Size;
+
----------------
-- Value_Size --
----------------
@@ -1499,7 +1537,6 @@ package body Sem_Ch13 is
when others =>
Error_Msg_N
("attribute& cannot be set with definition clause", N);
-
end case;
-- The test for the type being frozen must be performed after
@@ -1669,10 +1706,11 @@ package body Sem_Ch13 is
Error_Msg_N ("duplicate enumeration rep clause ignored", N);
return;
- -- Don't allow rep clause if root type is standard [wide_]character
+ -- Don't allow rep clause for standard [wide_[wide_]]character
elsif Root_Type (Enumtype) = Standard_Character
or else Root_Type (Enumtype) = Standard_Wide_Character
+ or else Root_Type (Enumtype) = Standard_Wide_Wide_Character
then
Error_Msg_N ("enumeration rep clause not allowed for this type", N);
return;
diff --git a/gcc/ada/sem_ch2.adb b/gcc/ada/sem_ch2.adb
index 7015fbd2096..091d087c831 100644
--- a/gcc/ada/sem_ch2.adb
+++ b/gcc/ada/sem_ch2.adb
@@ -32,6 +32,7 @@ with Rident; use Rident;
with Sem_Ch8; use Sem_Ch8;
with Sinfo; use Sinfo;
with Stand; use Stand;
+with Uintp; use Uintp;
package body Sem_Ch2 is
@@ -51,7 +52,7 @@ package body Sem_Ch2 is
Set_Is_Static_Expression (N);
if Comes_From_Source (N)
- and then not In_Character_Range (Char_Literal_Value (N))
+ and then not In_Character_Range (UI_To_CC (Char_Literal_Value (N)))
then
Check_Restriction (No_Wide_Characters, N);
end if;
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 65a0ae94591..7ac6e268b2d 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -1970,8 +1970,9 @@ package body Sem_Ch3 is
Remove_Side_Effects (E);
end if;
- if T = Standard_Wide_Character
+ if T = Standard_Wide_Character or else T = Standard_Wide_Wide_Character
or else Root_Type (T) = Standard_Wide_String
+ or else Root_Type (T) = Standard_Wide_Wide_String
then
Check_Restriction (No_Wide_Characters, Object_Definition (N));
end if;
@@ -3705,6 +3706,7 @@ package body Sem_Ch3 is
if Root_Type (Parent_Type) = Standard_Character
or else Root_Type (Parent_Type) = Standard_Wide_Character
+ or else Root_Type (Parent_Type) = Standard_Wide_Wide_Character
then
Derived_Standard_Character (N, Parent_Type, Derived_Type);
@@ -4122,10 +4124,12 @@ package body Sem_Ch3 is
begin
if Ekind (Parent_Type) in Record_Kind
- or else (Ekind (Parent_Type) in Enumeration_Kind
- and then Root_Type (Parent_Type) /= Standard_Character
- and then Root_Type (Parent_Type) /= Standard_Wide_Character
- and then not Is_Generic_Type (Root_Type (Parent_Type)))
+ or else
+ (Ekind (Parent_Type) in Enumeration_Kind
+ and then Root_Type (Parent_Type) /= Standard_Character
+ and then Root_Type (Parent_Type) /= Standard_Wide_Character
+ and then Root_Type (Parent_Type) /= Standard_Wide_Wide_Character
+ and then not Is_Generic_Type (Root_Type (Parent_Type)))
then
Full_N := New_Copy_Tree (N);
Insert_After (N, Full_N);
@@ -10192,7 +10196,9 @@ package body Sem_Ch3 is
end if;
if Typ = Standard_Wide_Character
+ or else Typ = Standard_Wide_Wide_Character
or else Typ = Standard_Wide_String
+ or else Typ = Standard_Wide_Wide_String
then
Check_Restriction (No_Wide_Characters, S);
end if;
@@ -12707,6 +12713,12 @@ package body Sem_Ch3 is
Rewrite (S, New_Copy_Tree (Subtype_Mark (S)));
+ -- Set Ekind of orphan itype, to prevent cascaded errors.
+
+ if Present (Def_Id) then
+ Set_Ekind (Def_Id, Ekind (Any_Type));
+ end if;
+
-- Make recursive call, having got rid of the bogus constraint
return Process_Subtype (S, Related_Nod, Related_Id, Suffix);
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index 2a4cf9d7ef8..3f16dca9396 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -410,8 +410,10 @@ package body Sem_Ch5 is
and then Can_Never_Be_Null (Entity (Lhs)))
or else Can_Never_Be_Null (Etype (Lhs)))
then
- Error_Msg_N
- ("(Ada 2005) NULL not allowed in null-excluding objects", Lhs);
+ Apply_Compile_Time_Constraint_Error
+ (N => Lhs,
+ Msg => "(Ada 2005) NULL not allowed in null-excluding objects?",
+ Reason => CE_Null_Not_Allowed);
end if;
if Is_Scalar_Type (T1) then
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index bc069fa4065..45a20158507 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -79,9 +79,14 @@ package body Sem_Ch6 is
-- Local Subprograms --
-----------------------
+ procedure Analyze_Return_Type (N : Node_Id);
+ -- Subsidiary to Process_Formals: analyze subtype mark in function
+ -- specification, in a context where the formals are visible and hide
+ -- outer homographs.
+
procedure Analyze_Generic_Subprogram_Body (N : Node_Id; Gen_Id : Entity_Id);
- -- Analyze a generic subprogram body. N is the body to be analyzed,
- -- and Gen_Id is the defining entity Id for the corresponding spec.
+ -- Analyze a generic subprogram body. N is the body to be analyzed, and
+ -- Gen_Id is the defining entity Id for the corresponding spec.
procedure Build_Body_To_Inline (N : Node_Id; Subp : Entity_Id);
-- If a subprogram has pragma Inline and inlining is active, use generic
@@ -133,35 +138,34 @@ package body Sem_Ch6 is
(HSS : Node_Id;
Mode : Character;
Err : out Boolean);
- -- Called to check for missing return statements in a function body,
- -- or for returns present in a procedure body which has No_Return set.
- -- L is the handled statement sequence for the subprogram body. This
- -- procedure checks all flow paths to make sure they either have a
- -- return (Mode = 'F') or do not have a return (Mode = 'P'). The flag
- -- Err is set if there are any control paths not explicitly terminated
- -- by a return in the function case, and is True otherwise.
+ -- Called to check for missing return statements in a function body, or
+ -- for returns present in a procedure body which has No_Return set. L is
+ -- the handled statement sequence for the subprogram body. This procedure
+ -- checks all flow paths to make sure they either have return (Mode = 'F')
+ -- or do not have a return (Mode = 'P'). The flag Err is set if there are
+ -- any control paths not explicitly terminated by a return in the function
+ -- case, and is True otherwise.
function Conforming_Types
(T1 : Entity_Id;
T2 : Entity_Id;
Ctype : Conformance_Type;
Get_Inst : Boolean := False) return Boolean;
- -- Check that two formal parameter types conform, checking both
- -- for equality of base types, and where required statically
- -- matching subtypes, depending on the setting of Ctype.
+ -- Check that two formal parameter types conform, checking both for
+ -- equality of base types, and where required statically matching
+ -- subtypes, depending on the setting of Ctype.
procedure Enter_Overloaded_Entity (S : Entity_Id);
- -- This procedure makes S, a new overloaded entity, into the first
- -- visible entity with that name.
+ -- This procedure makes S, a new overloaded entity, into the first visible
+ -- entity with that name.
procedure Install_Entity (E : Entity_Id);
-- Make single entity visible. Used for generic formals as well
procedure Install_Formals (Id : Entity_Id);
- -- On entry to a subprogram body, make the formals visible. Note
- -- that simply placing the subprogram on the scope stack is not
- -- sufficient: the formals must become the current entities for
- -- their names.
+ -- On entry to a subprogram body, make the formals visible. Note that
+ -- simply placing the subprogram on the scope stack is not sufficient:
+ -- the formals must become the current entities for their names.
function Is_Non_Overriding_Operation
(Prev_E : Entity_Id;
@@ -181,8 +185,8 @@ package body Sem_Ch6 is
-- have no parameters, or those for which defaults exist for all parameters
procedure Reference_Body_Formals (Spec : Entity_Id; Bod : Entity_Id);
- -- If there is a separate spec for a subprogram or generic subprogram,
- -- the formals of the body are treated as references to the corresponding
+ -- If there is a separate spec for a subprogram or generic subprogram, the
+ -- formals of the body are treated as references to the corresponding
-- formals of the spec. This reference does not count as an actual use of
-- the formal, in order to diagnose formals that are unused in the body.
@@ -228,6 +232,18 @@ package body Sem_Ch6 is
begin
Analyze (P);
+ -- A call of the form A.B (X) may be an Ada05 call, which is rewritten
+ -- as B(A, X). If the rewriting is successful, the call has been
+ -- analyzed and we just return.
+
+ if Nkind (P) = N_Selected_Component
+ and then Name (N) /= P
+ and then Is_Rewrite_Substitution (N)
+ and then Present (Etype (N))
+ then
+ return;
+ end if;
+
-- If error analyzing name, then set Any_Type as result type and return
if Etype (P) = Any_Type then
@@ -265,9 +281,9 @@ package body Sem_Ch6 is
Spec : Node_Id;
begin
- -- Copy body and disable expansion while analyzing the generic
- -- For a stub, do not copy the stub (which would load the proper body),
- -- this will be done when the proper body is analyzed.
+ -- Copy body and disable expansion while analyzing the generic For a
+ -- stub, do not copy the stub (which would load the proper body), this
+ -- will be done when the proper body is analyzed.
if Nkind (N) /= N_Subprogram_Body_Stub then
New_N := Copy_Generic_Node (N, Empty, Instantiating => False);
@@ -379,10 +395,10 @@ package body Sem_Ch6 is
return;
end if;
- -- If this is a compilation unit, it must be made visible
- -- explicitly, because the compilation of the declaration,
- -- unlike other library unit declarations, does not. If it
- -- is not a unit, the following is redundant but harmless.
+ -- If this is a compilation unit, it must be made visible explicitly,
+ -- because the compilation of the declaration, unlike other library
+ -- unit declarations, does not. If it is not a unit, the following
+ -- is redundant but harmless.
Set_Is_Immediately_Visible (Gen_Id);
Reference_Body_Formals (Gen_Id, Body_Id);
@@ -394,8 +410,8 @@ package body Sem_Ch6 is
Save_Global_References (Original_Node (N));
- -- Prior to exiting the scope, include generic formals again
- -- (if any are present) in the set of local entities.
+ -- Prior to exiting the scope, include generic formals again (if any
+ -- are present) in the set of local entities.
if Present (First_Ent) then
Set_First_Entity (Gen_Id, First_Ent);
@@ -420,12 +436,12 @@ package body Sem_Ch6 is
-- Analyze_Operator_Symbol --
-----------------------------
- -- An operator symbol such as "+" or "and" may appear in context where
- -- the literal denotes an entity name, such as "+"(x, y) or in a
- -- context when it is just a string, as in (conjunction = "or"). In
- -- these cases the parser generates this node, and the semantics does
- -- the disambiguation. Other such case are actuals in an instantiation,
- -- the generic unit in an instantiation, and pragma arguments.
+ -- An operator symbol such as "+" or "and" may appear in context where the
+ -- literal denotes an entity name, such as "+"(x, y) or in context when it
+ -- is just a string, as in (conjunction = "or"). In these cases the parser
+ -- generates this node, and the semantics does the disambiguation. Other
+ -- such case are actuals in an instantiation, the generic unit in an
+ -- instantiation, and pragma arguments.
procedure Analyze_Operator_Symbol (N : Node_Id) is
Par : constant Node_Id := Parent (N);
@@ -561,9 +577,9 @@ package body Sem_Ch6 is
and then Present (Actuals)
and then No (Next (First (Actuals)))
then
- -- Can be call to parameterless entry family. What appears to be
- -- the sole argument is in fact the entry index. Rewrite prefix
- -- of node accordingly. Source representation is unchanged by this
+ -- Can be call to parameterless entry family. What appears to be the
+ -- sole argument is in fact the entry index. Rewrite prefix of node
+ -- accordingly. Source representation is unchanged by this
-- transformation.
New_N :=
@@ -585,9 +601,9 @@ package body Sem_Ch6 is
Error_Msg_N ("expect access to procedure in call", P);
end if;
- -- The name can be a selected component or an indexed component
- -- that yields an access to subprogram. Such a prefix is legal if
- -- the call has parameter associations.
+ -- The name can be a selected component or an indexed component that
+ -- yields an access to subprogram. Such a prefix is legal if the call
+ -- has parameter associations.
elsif Is_Access_Type (Etype (P))
and then Ekind (Designated_Type (Etype (P))) = E_Subprogram_Type
@@ -598,15 +614,14 @@ package body Sem_Ch6 is
Error_Msg_N ("missing explicit dereference in call ", N);
end if;
- -- If not an access to subprogram, then the prefix must resolve to
- -- the name of an entry, entry family, or protected operation.
+ -- If not an access to subprogram, then the prefix must resolve to the
+ -- name of an entry, entry family, or protected operation.
- -- For the case of a simple entry call, P is a selected component
- -- where the prefix is the task and the selector name is the entry.
- -- A call to a protected procedure will have the same syntax. If
- -- the protected object contains overloaded operations, the entity
- -- may appear as a function, the context will select the operation
- -- whose type is Void.
+ -- For the case of a simple entry call, P is a selected component where
+ -- the prefix is the task and the selector name is the entry. A call to
+ -- a protected procedure will have the same syntax. If the protected
+ -- object contains overloaded operations, the entity may appear as a
+ -- function, the context will select the operation whose type is Void.
elsif Nkind (P) = N_Selected_Component
and then (Ekind (Entity (Selector_Name (P))) = E_Entry
@@ -622,9 +637,9 @@ package body Sem_Ch6 is
and then Present (Actuals)
and then No (Next (First (Actuals)))
then
- -- Can be call to parameterless entry family. What appears to be
- -- the sole argument is in fact the entry index. Rewrite prefix
- -- of node accordingly. Source representation is unchanged by this
+ -- Can be call to parameterless entry family. What appears to be the
+ -- sole argument is in fact the entry index. Rewrite prefix of node
+ -- accordingly. Source representation is unchanged by this
-- transformation.
New_N :=
@@ -720,9 +735,9 @@ package body Sem_Ch6 is
Apply_Constraint_Check (Expr, R_Type);
- -- ??? A real run-time accessibility check is needed
- -- in cases involving dereferences of access parameters.
- -- For now we just check the static cases.
+ -- ??? A real run-time accessibility check is needed in cases
+ -- involving dereferences of access parameters. For now we just
+ -- check the static cases.
if Is_Return_By_Reference_Type (Etype (Scope_Id))
and then Object_Access_Level (Expr)
@@ -766,6 +781,34 @@ package body Sem_Ch6 is
Check_Unreachable_Code (N);
end Analyze_Return_Statement;
+ -------------------------
+ -- Analyze_Return_Type --
+ -------------------------
+
+ procedure Analyze_Return_Type (N : Node_Id) is
+ Designator : constant Entity_Id := Defining_Entity (N);
+ Typ : Entity_Id := Empty;
+
+ begin
+ if Subtype_Mark (N) /= Error then
+ Find_Type (Subtype_Mark (N));
+ Typ := Entity (Subtype_Mark (N));
+ Set_Etype (Designator, Typ);
+
+ if Ekind (Typ) = E_Incomplete_Type
+ or else (Is_Class_Wide_Type (Typ)
+ and then
+ Ekind (Root_Type (Typ)) = E_Incomplete_Type)
+ then
+ Error_Msg_N
+ ("invalid use of incomplete type", Subtype_Mark (N));
+ end if;
+
+ else
+ Set_Etype (Designator, Any_Type);
+ end if;
+ end Analyze_Return_Type;
+
-----------------------------
-- Analyze_Subprogram_Body --
-----------------------------
@@ -831,13 +874,13 @@ package body Sem_Ch6 is
Trace_Scope (N, Body_Id, " Analyze subprogram");
- -- Generic subprograms are handled separately. They always have
- -- a generic specification. Determine whether current scope has
- -- a previous declaration.
+ -- Generic subprograms are handled separately. They always have a
+ -- generic specification. Determine whether current scope has a
+ -- previous declaration.
- -- If the subprogram body is defined within an instance of the
- -- same name, the instance appears as a package renaming, and
- -- will be hidden within the subprogram.
+ -- If the subprogram body is defined within an instance of the same
+ -- name, the instance appears as a package renaming, and will be hidden
+ -- within the subprogram.
if Present (Prev_Id)
and then not Is_Overloadable (Prev_Id)
@@ -853,18 +896,18 @@ package body Sem_Ch6 is
return;
else
- -- Previous entity conflicts with subprogram name.
- -- Attempting to enter name will post error.
+ -- Previous entity conflicts with subprogram name. Attempting to
+ -- enter name will post error.
Enter_Name (Body_Id);
return;
end if;
- -- Non-generic case, find the subprogram declaration, if one was
- -- seen, or enter new overloaded entity in the current scope.
- -- If the current_entity is the body_id itself, the unit is being
- -- analyzed as part of the context of one of its subunits. No need
- -- to redo the analysis.
+ -- Non-generic case, find the subprogram declaration, if one was seen,
+ -- or enter new overloaded entity in the current scope. If the
+ -- Current_Entity is the Body_Id itself, the unit is being analyzed as
+ -- part of the context of one of its subunits. No need to redo the
+ -- analysis.
elsif Prev_Id = Body_Id
and then Has_Completion (Body_Id)
@@ -885,13 +928,13 @@ package body Sem_Ch6 is
return;
end if;
- -- A subprogram body should cause freezing of its own
- -- declaration, but if there was no previous explicit
- -- declaration, then the subprogram will get frozen too
- -- late (there may be code within the body that depends
- -- on the subprogram having been frozen, such as uses of
- -- extra formals), so we force it to be frozen here.
- -- Same holds if the body and the spec are compilation units.
+ -- A subprogram body should cause freezing of its own declaration,
+ -- but if there was no previous explicit declaration, then the
+ -- subprogram will get frozen too late (there may be code within
+ -- the body that depends on the subprogram having been frozen,
+ -- such as uses of extra formals), so we force it to be frozen
+ -- here. Same holds if the body and the spec are compilation
+ -- units.
if No (Spec_Id) then
Freeze_Before (N, Body_Id);
@@ -904,18 +947,23 @@ package body Sem_Ch6 is
end if;
end if;
- -- Do not inline any subprogram that contains nested subprograms,
- -- since the backend inlining circuit seems to generate uninitialized
+ -- Do not inline any subprogram that contains nested subprograms, since
+ -- the backend inlining circuit seems to generate uninitialized
-- references in this case. We know this happens in the case of front
- -- end ZCX support, but it also appears it can happen in other cases
- -- as well. The backend often rejects attempts to inline in the case
- -- of nested procedures anyway, so little if anything is lost by this.
+ -- end ZCX support, but it also appears it can happen in other cases as
+ -- well. The backend often rejects attempts to inline in the case of
+ -- nested procedures anyway, so little if anything is lost by this.
+ -- Note that this is test is for the benefit of the back-end. There is
+ -- a separate test for front-end inlining that also rejects nested
+ -- subprograms.
-- Do not do this test if errors have been detected, because in some
-- error cases, this code blows up, and we don't need it anyway if
-- there have been errors, since we won't get to the linker anyway.
- if Serious_Errors_Detected = 0 then
+ if Comes_From_Source (Body_Id)
+ and then Serious_Errors_Detected = 0
+ then
P_Ent := Body_Id;
loop
P_Ent := Scope (P_Ent);
@@ -952,9 +1000,9 @@ package body Sem_Ch6 is
begin
Formal := First_Formal (Body_Id);
- -- The protected operation always has at least one formal,
- -- namely the object itself, but it is only placed in the
- -- parameter list if expansion is enabled.
+ -- The protected operation always has at least one formal, namely
+ -- the object itself, but it is only placed in the parameter list
+ -- if expansion is enabled.
if Present (Formal)
or else Expander_Active
@@ -1006,9 +1054,9 @@ package body Sem_Ch6 is
Spec_Id := Defining_Unit_Name (New_Spec);
-- Indicate that the entity comes from source, to ensure that
- -- cross-reference information is properly generated.
- -- The body itself is rewritten during expansion, and the
- -- body entity will not appear in calls to the operation.
+ -- cross-reference information is properly generated. The body
+ -- itself is rewritten during expansion, and the body entity will
+ -- not appear in calls to the operation.
Set_Comes_From_Source (Spec_Id, True);
Analyze (Decl);
@@ -1211,9 +1259,9 @@ package body Sem_Ch6 is
if Present (Spec_Id) then
- -- If a parent unit is categorized, the context of a subunit
- -- must conform to the categorization. Conversely, if a child
- -- unit is categorized, the parents themselves must conform.
+ -- If a parent unit is categorized, the context of a subunit must
+ -- conform to the categorization. Conversely, if a child unit is
+ -- categorized, the parents themselves must conform.
if Nkind (Parent (N)) = N_Subunit then
Validate_Categorization_Dependency (N, Spec_Id);
@@ -1274,11 +1322,11 @@ package body Sem_Ch6 is
Check_Returns (HSS, 'P', Missing_Ret);
end if;
- -- Now we are going to check for variables that are never modified
- -- in the body of the procedure. We omit these checks if the first
- -- statement of the procedure raises an exception. In particular
- -- this deals with the common idiom of a stubbed function, which
- -- might appear as something like
+ -- Now we are going to check for variables that are never modified in
+ -- the body of the procedure. We omit these checks if the first
+ -- statement of the procedure raises an exception. In particular this
+ -- deals with the common idiom of a stubbed function, which might
+ -- appear as something like
-- function F (A : Integer) return Some_Type;
-- X : Some_Type;
@@ -1288,16 +1336,16 @@ package body Sem_Ch6 is
-- end F;
-- Here the purpose of X is simply to satisfy the (annoying)
- -- requirement in Ada that there be at least one return, and
- -- we certainly do not want to go posting warnings on X that
- -- it is not initialized!
+ -- requirement in Ada that there be at least one return, and we
+ -- certainly do not want to go posting warnings on X that it is not
+ -- initialized!
declare
Stm : Node_Id := First (Statements (HSS));
begin
- -- Skip an initial label (for one thing this occurs when we
- -- are in front end ZCX mode, but in any case it is irrelevant).
+ -- Skip an initial label (for one thing this occurs when we are in
+ -- front end ZCX mode, but in any case it is irrelevant).
if Nkind (Stm) = N_Label then
Next (Stm);
@@ -1477,7 +1525,6 @@ package body Sem_Ch6 is
function Analyze_Subprogram_Specification (N : Node_Id) return Entity_Id is
Designator : constant Entity_Id := Defining_Entity (N);
Formals : constant List_Id := Parameter_Specifications (N);
- Typ : Entity_Id;
begin
Generate_Definition (Designator);
@@ -1486,34 +1533,23 @@ package body Sem_Ch6 is
Set_Ekind (Designator, E_Function);
Set_Mechanism (Designator, Default_Mechanism);
- if Subtype_Mark (N) /= Error then
- Find_Type (Subtype_Mark (N));
- Typ := Entity (Subtype_Mark (N));
- Set_Etype (Designator, Typ);
-
- if Ekind (Typ) = E_Incomplete_Type
- or else (Is_Class_Wide_Type (Typ)
- and then
- Ekind (Root_Type (Typ)) = E_Incomplete_Type)
- then
- Error_Msg_N
- ("invalid use of incomplete type", Subtype_Mark (N));
- end if;
-
- else
- Set_Etype (Designator, Any_Type);
- end if;
-
else
Set_Ekind (Designator, E_Procedure);
Set_Etype (Designator, Standard_Void_Type);
end if;
+ -- Introduce new scope for analysis of the formals and of the
+ -- return type.
+
+ Set_Scope (Designator, Current_Scope);
+
if Present (Formals) then
- Set_Scope (Designator, Current_Scope);
New_Scope (Designator);
Process_Formals (Formals, N);
End_Scope;
+
+ elsif Nkind (N) = N_Function_Specification then
+ Analyze_Return_Type (N);
end if;
if Nkind (N) = N_Function_Specification then
@@ -1524,7 +1560,13 @@ package body Sem_Ch6 is
May_Need_Actuals (Designator);
if Is_Abstract (Etype (Designator))
- and then Nkind (Parent (N)) /= N_Abstract_Subprogram_Declaration
+ and then Nkind (Parent (N))
+ /= N_Abstract_Subprogram_Declaration
+ and then (Nkind (Parent (N)))
+ /= N_Formal_Abstract_Subprogram_Declaration
+ and then (Nkind (Parent (N)) /= N_Subprogram_Renaming_Declaration
+ or else not Is_Entity_Name (Name (Parent (N)))
+ or else not Is_Abstract (Entity (Name (Parent (N)))))
then
Error_Msg_N
("function that returns abstract type must be abstract", N);
@@ -1549,9 +1591,9 @@ package body Sem_Ch6 is
-- Check for declarations that make inlining not worthwhile
function Has_Excluded_Statement (Stats : List_Id) return Boolean;
- -- Check for statements that make inlining not worthwhile: any
- -- tasking statement, nested at any level. Keep track of total
- -- number of elementary statements, as a measure of acceptable size.
+ -- Check for statements that make inlining not worthwhile: any tasking
+ -- statement, nested at any level. Keep track of total number of
+ -- elementary statements, as a measure of acceptable size.
function Has_Pending_Instantiation return Boolean;
-- If some enclosing body contains instantiations that appear before
@@ -1563,8 +1605,8 @@ package body Sem_Ch6 is
procedure Remove_Pragmas;
-- A pragma Unreferenced that mentions a formal parameter has no
-- meaning when the body is inlined and the formals are rewritten.
- -- Remove it from body to inline. The analysis of the non-inlined
- -- body will handle the pragma properly.
+ -- Remove it from body to inline. The analysis of the non-inlined body
+ -- will handle the pragma properly.
function Uses_Secondary_Stack (Bod : Node_Id) return Boolean;
-- If the body of the subprogram includes a call that returns an
@@ -1579,14 +1621,17 @@ package body Sem_Ch6 is
D : Node_Id;
function Is_Unchecked_Conversion (D : Node_Id) return Boolean;
- -- Nested subprograms make a given body ineligible for inlining,
- -- but we make an exception for instantiations of unchecked
- -- conversion. The body has not been analyzed yet, so we check
- -- the name, and verify that the visible entity with that name is
- -- the predefined unit.
+ -- Nested subprograms make a given body ineligible for inlining, but
+ -- we make an exception for instantiations of unchecked conversion.
+ -- The body has not been analyzed yet, so check the name, and verify
+ -- that the visible entity with that name is the predefined unit.
+
+ -----------------------------
+ -- Is_Unchecked_Conversion --
+ -----------------------------
function Is_Unchecked_Conversion (D : Node_Id) return Boolean is
- Id : constant Node_Id := Name (D);
+ Id : constant Node_Id := Name (D);
Conv : Entity_Id;
begin
@@ -1681,7 +1726,6 @@ package body Sem_Ch6 is
elsif Nkind (S) = N_Case_Statement then
E := First (Alternatives (S));
-
while Present (E) loop
if Has_Excluded_Statement (Statements (E)) then
return True;
@@ -1697,7 +1741,6 @@ package body Sem_Ch6 is
if Present (Elsif_Parts (S)) then
E := First (Elsif_Parts (S));
-
while Present (E) loop
if Has_Excluded_Statement (Then_Statements (E)) then
return True;
@@ -1989,13 +2032,12 @@ package body Sem_Ch6 is
New_Formal : Entity_Id;
procedure Conformance_Error (Msg : String; N : Node_Id := New_Id);
- -- Post error message for conformance error on given node.
- -- Two messages are output. The first points to the previous
- -- declaration with a general "no conformance" message.
- -- The second is the detailed reason, supplied as Msg. The
- -- parameter N provide information for a possible & insertion
- -- in the message, and also provides the location for posting
- -- the message in the absence of a specified Err_Loc location.
+ -- Post error message for conformance error on given node. Two messages
+ -- are output. The first points to the previous declaration with a
+ -- general "no conformance" message. The second is the detailed reason,
+ -- supplied as Msg. The parameter N provide information for a possible
+ -- & insertion in the message, and also provides the location for
+ -- posting the message in the absence of a specified Err_Loc location.
-----------------------
-- Conformance_Error --
@@ -2043,8 +2085,8 @@ package body Sem_Ch6 is
begin
Conforms := True;
- -- We need a special case for operators, since they don't
- -- appear explicitly.
+ -- We need a special case for operators, since they don't appear
+ -- explicitly.
if Ctype = Type_Conformant then
if Ekind (New_Id) = E_Operator
@@ -2171,8 +2213,8 @@ package body Sem_Ch6 is
if Ctype = Fully_Conformant then
- -- We have checked already that names match.
- -- Check default expressions for in parameters
+ -- We have checked already that names match. Check default
+ -- expressions for in parameters
if Parameter_Mode (Old_Formal) = E_In_Parameter then
declare
@@ -2183,11 +2225,11 @@ package body Sem_Ch6 is
begin
if NewD or OldD then
- -- The old default value has been analyzed because
- -- the current full declaration will have frozen
- -- everything before. The new default values have not
- -- been analyzed, so analyze them now before we check
- -- for conformance.
+ -- The old default value has been analyzed because the
+ -- current full declaration will have frozen everything
+ -- before. The new default values have not been
+ -- analyzed, so analyze them now before we check for
+ -- conformance.
if NewD then
New_Scope (New_Id);
@@ -2284,6 +2326,10 @@ package body Sem_Ch6 is
-- If T is not yet frozen and needs a delayed freeze, then the
-- subprogram itself must be delayed.
+ ---------------------
+ -- Possible_Freeze --
+ ---------------------
+
procedure Possible_Freeze (T : Entity_Id) is
begin
if Has_Delayed_Freeze (T)
@@ -2361,12 +2407,11 @@ package body Sem_Ch6 is
New_Discr_Type : Entity_Id;
procedure Conformance_Error (Msg : String; N : Node_Id);
- -- Post error message for conformance error on given node.
- -- Two messages are output. The first points to the previous
- -- declaration with a general "no conformance" message.
- -- The second is the detailed reason, supplied as Msg. The
- -- parameter N provide information for a possible & insertion
- -- in the message.
+ -- Post error message for conformance error on given node. Two messages
+ -- are output. The first points to the previous declaration with a
+ -- general "no conformance" message. The second is the detailed reason,
+ -- supplied as Msg. The parameter N provide information for a possible
+ -- & insertion in the message.
-----------------------
-- Conformance_Error --
@@ -2386,9 +2431,9 @@ package body Sem_Ch6 is
New_Discr_Id := Defining_Identifier (New_Discr);
- -- The subtype mark of the discriminant on the full type
- -- has not been analyzed so we do it here. For an access
- -- discriminant a new type is created.
+ -- The subtype mark of the discriminant on the full type has not
+ -- been analyzed so we do it here. For an access discriminant a new
+ -- type is created.
if Nkind (Discriminant_Type (New_Discr)) = N_Access_Definition then
New_Discr_Type :=
@@ -2405,8 +2450,8 @@ package body Sem_Ch6 is
Conformance_Error ("type of & does not match!", New_Discr_Id);
return;
else
- -- Treat the new discriminant as an occurrence of the old
- -- one, for navigation purposes, and fill in some semantic
+ -- Treat the new discriminant as an occurrence of the old one,
+ -- for navigation purposes, and fill in some semantic
-- information, for completeness.
Generate_Reference (Old_Discr, New_Discr_Id, 'r');
@@ -2434,8 +2479,8 @@ package body Sem_Ch6 is
-- The old default value has been analyzed and expanded,
-- because the current full declaration will have frozen
- -- everything before. The new default values have not
- -- been expanded, so expand now to check conformance.
+ -- everything before. The new default values have not been
+ -- expanded, so expand now to check conformance.
if NewD then
Analyze_Per_Use_Expression
@@ -2927,6 +2972,10 @@ package body Sem_Ch6 is
-- This is used to check if S1 > S2 in the sense required by this
-- test, for example nameab < namec, but name2 < name10.
+ -----------------------------
+ -- Subprogram_Name_Greater --
+ -----------------------------
+
function Subprogram_Name_Greater (S1, S2 : String) return Boolean is
L1, L2 : Positive;
N1, N2 : Natural;
@@ -3019,7 +3068,6 @@ package body Sem_Ch6 is
Err_Loc : Node_Id := Empty)
is
Result : Boolean;
-
begin
Check_Conformance
(New_Id, Old_Id, Subtype_Conformant, True, Result, Err_Loc);
@@ -3035,7 +3083,6 @@ package body Sem_Ch6 is
Err_Loc : Node_Id := Empty)
is
Result : Boolean;
-
begin
Check_Conformance
(New_Id, Old_Id, Type_Conformant, True, Result, Err_Loc);
@@ -3101,9 +3148,9 @@ package body Sem_Ch6 is
begin
-- The context is an instance association for a formal
- -- access-to-subprogram type; the formal parameter types
- -- require mapping because they may denote other formal
- -- parameters of the generic unit.
+ -- access-to-subprogram type; the formal parameter types require
+ -- mapping because they may denote other formal parameters of the
+ -- generic unit.
if Get_Inst then
Type_1 := Get_Instance_Of (T1);
@@ -3196,21 +3243,21 @@ package body Sem_Ch6 is
end if;
-- The context is an instance association for a formal
- -- access-to-subprogram type; formal access parameter
- -- designated types require mapping because they may
- -- denote other formal parameters of the generic unit.
+ -- access-to-subprogram type; formal access parameter designated
+ -- types require mapping because they may denote other formal
+ -- parameters of the generic unit.
if Get_Inst then
Desig_1 := Get_Instance_Of (Desig_1);
Desig_2 := Get_Instance_Of (Desig_2);
end if;
- -- It is possible for a Class_Wide_Type to be introduced for
- -- an incomplete type, in which case there is a separate class_
- -- wide type for the full view. The types conform if their
- -- Etypes conform, i.e. one may be the full view of the other.
- -- This can only happen in the context of an access parameter,
- -- other uses of an incomplete Class_Wide_Type are illegal.
+ -- It is possible for a Class_Wide_Type to be introduced for an
+ -- incomplete type, in which case there is a separate class_ wide
+ -- type for the full view. The types conform if their Etypes
+ -- conform, i.e. one may be the full view of the other. This can
+ -- only happen in the context of an access parameter, other uses
+ -- of an incomplete Class_Wide_Type are illegal.
if Is_Class_Wide_Type (Desig_1)
and then Is_Class_Wide_Type (Desig_2)
@@ -3252,9 +3299,9 @@ package body Sem_Ch6 is
P_Formal : Entity_Id := Empty;
function Add_Extra_Formal (Typ : Entity_Id) return Entity_Id;
- -- Add an extra formal, associated with the current Formal. The
- -- extra formal is added to the list of extra formals, and also
- -- returned as the result. These formals are always of mode IN.
+ -- Add an extra formal, associated with the current Formal. The extra
+ -- formal is added to the list of extra formals, and also returned as
+ -- the result. These formals are always of mode IN.
----------------------
-- Add_Extra_Formal --
@@ -3273,9 +3320,9 @@ package body Sem_Ch6 is
return Empty;
end if;
- -- A little optimization. Never generate an extra formal for
- -- the _init operand of an initialization procedure, since it
- -- could never be used.
+ -- A little optimization. Never generate an extra formal for the
+ -- _init operand of an initialization procedure, since it could
+ -- never be used.
if Chars (Formal) = Name_uInit then
return Empty;
@@ -3296,9 +3343,9 @@ package body Sem_Ch6 is
-- Start of processing for Create_Extra_Formals
begin
- -- If this is a derived subprogram then the subtypes of the
- -- parent subprogram's formal parameters will be used to
- -- to determine the need for extra formals.
+ -- If this is a derived subprogram then the subtypes of the parent
+ -- subprogram's formal parameters will be used to to determine the need
+ -- for extra formals.
if Is_Overloadable (E) and then Present (Alias (E)) then
P_Formal := First_Formal (Alias (E));
@@ -3311,9 +3358,9 @@ package body Sem_Ch6 is
Next_Formal (Formal);
end loop;
- -- If Extra_formals where already created, don't do it again
- -- This situation may arise for subprogram types created as part
- -- of dispatching calls (see Expand_Dispatch_Call)
+ -- If Extra_formals where already created, don't do it again. This
+ -- situation may arise for subprogram types created as part of
+ -- dispatching calls (see Expand_Dispatching_Call)
if Present (Last_Extra) and then
Present (Extra_Formal (Last_Extra))
@@ -3381,10 +3428,9 @@ package body Sem_Ch6 is
(not Present (P_Formal)
or else Present (Extra_Accessibility (P_Formal)))
then
- -- Temporary kludge: for now we avoid creating the extra
- -- formal for access parameters of protected operations
- -- because of problem with the case of internal protected
- -- calls. ???
+ -- Temporary kludge: for now we avoid creating the extra formal
+ -- for access parameters of protected operations because of
+ -- problem with the case of internal protected calls. ???
if Nkind (Parent (Parent (Parent (E)))) /= N_Protected_Definition
and then Nkind (Parent (Parent (Parent (E)))) /= N_Protected_Body
@@ -3449,8 +3495,8 @@ package body Sem_Ch6 is
if Debug_Flag_E then
Write_Str ("New overloaded entity chain: ");
Write_Name (Chars (S));
- E := S;
+ E := S;
while Present (E) loop
Write_Str (" "); Write_Int (Int (E));
E := Homonym (E);
@@ -3710,8 +3756,8 @@ package body Sem_Ch6 is
if Paren_Count (E1) /= Paren_Count (E2) then
return False;
- -- If same entities are referenced, then they are conformant
- -- even if they have different forms (RM 8.3.1(19-20)).
+ -- If same entities are referenced, then they are conformant even if
+ -- they have different forms (RM 8.3.1(19-20)).
elsif Is_Entity_Name (E1) and then Is_Entity_Name (E2) then
if Present (Entity (E1)) then
@@ -3987,8 +4033,8 @@ package body Sem_Ch6 is
S2 : constant Node_Id := Original_Node (Given_S2);
function Conforming_Bounds (B1, B2 : Node_Id) return Boolean;
- -- Special-case for a bound given by a discriminant, which in the
- -- body is replaced with the discriminal of the enclosing type.
+ -- Special-case for a bound given by a discriminant, which in the body
+ -- is replaced with the discriminal of the enclosing type.
function Conforming_Ranges (R1, R2 : Node_Id) return Boolean;
-- Check both bounds
@@ -4081,15 +4127,15 @@ package body Sem_Ch6 is
function Get_Generic_Parent_Type (F_Typ : Entity_Id) return Entity_Id;
-- If F_Type is a derived type associated with a generic actual
- -- subtype, then return its Generic_Parent_Type attribute, else
- -- return Empty.
+ -- subtype, then return its Generic_Parent_Type attribute, else return
+ -- Empty.
function Types_Correspond
(P_Type : Entity_Id;
N_Type : Entity_Id) return Boolean;
- -- Returns true if and only if the types (or designated types
- -- in the case of anonymous access types) are the same or N_Type
- -- is derived directly or indirectly from P_Type.
+ -- Returns true if and only if the types (or designated types in the
+ -- case of anonymous access types) are the same or N_Type is derived
+ -- directly or indirectly from P_Type.
-----------------------------
-- Get_Generic_Parent_Type --
@@ -4103,11 +4149,11 @@ package body Sem_Ch6 is
if Is_Derived_Type (F_Typ)
and then Nkind (Parent (F_Typ)) = N_Full_Type_Declaration
then
- -- The tree must be traversed to determine the parent
- -- subtype in the generic unit, which unfortunately isn't
- -- always available via semantic attributes. ???
- -- (Note: The use of Original_Node is needed for cases
- -- where a full derived type has been rewritten.)
+ -- The tree must be traversed to determine the parent subtype in
+ -- the generic unit, which unfortunately isn't always available
+ -- via semantic attributes. ??? (Note: The use of Original_Node
+ -- is needed for cases where a full derived type has been
+ -- rewritten.)
Indic := Subtype_Indication
(Type_Definition (Original_Node (Parent (F_Typ))));
@@ -4165,10 +4211,10 @@ package body Sem_Ch6 is
-- Start of processing for Is_Non_Overriding_Operation
begin
- -- In the case where both operations are implicit derived
- -- subprograms then neither overrides the other. This can
- -- only occur in certain obscure cases (e.g., derivation
- -- from homographs created in a generic instantiation).
+ -- In the case where both operations are implicit derived subprograms
+ -- then neither overrides the other. This can only occur in certain
+ -- obscure cases (e.g., derivation from homographs created in a generic
+ -- instantiation).
if Present (Alias (Prev_E)) and then Present (Alias (New_E)) then
return True;
@@ -4179,8 +4225,8 @@ package body Sem_Ch6 is
and then Comes_From_Source (New_E)
then
-- We examine the formals and result subtype of the inherited
- -- operation, to determine whether their type is derived from
- -- (the instance of) a generic type.
+ -- operation, to determine whether their type is derived from (the
+ -- instance of) a generic type.
Formal := First_Formal (Prev_E);
@@ -4248,9 +4294,9 @@ package body Sem_Ch6 is
Next_Entity (N_Formal);
end loop;
- -- Found a matching primitive operation belonging to
- -- the formal ancestor type, so the new subprogram
- -- is overriding.
+ -- Found a matching primitive operation belonging to the
+ -- formal ancestor type, so the new subprogram is
+ -- overriding.
if not Present (P_Formal)
and then not Present (N_Formal)
@@ -4266,8 +4312,8 @@ package body Sem_Ch6 is
Next_Elmt (Prim_Elt);
end loop;
- -- If no match found, then the new subprogram does
- -- not override in the generic (nor in the instance).
+ -- If no match found, then the new subprogram does not
+ -- override in the generic (nor in the instance).
return True;
end;
@@ -4379,7 +4425,6 @@ package body Sem_Ch6 is
function Mode_Conformant (New_Id, Old_Id : Entity_Id) return Boolean is
Result : Boolean;
-
begin
Check_Conformance (New_Id, Old_Id, Mode_Conformant, False, Result);
return Result;
@@ -4406,7 +4451,7 @@ package body Sem_Ch6 is
-- set when freezing entities, so we must examine the place of the
-- declaration in the tree, and recognize wrapper packages as well.
- procedure Maybe_Primitive_Operation (Overriding : Boolean := False);
+ procedure Maybe_Primitive_Operation (Is_Overriding : Boolean := False);
-- If the subprogram being analyzed is a primitive operation of
-- the type of one of its formals, set the corresponding flag.
@@ -4442,7 +4487,7 @@ package body Sem_Ch6 is
-- Maybe_Primitive_Operation --
-------------------------------
- procedure Maybe_Primitive_Operation (Overriding : Boolean := False) is
+ procedure Maybe_Primitive_Operation (Is_Overriding : Boolean := False) is
Formal : Entity_Id;
F_Typ : Entity_Id;
B_Typ : Entity_Id;
@@ -4473,7 +4518,7 @@ package body Sem_Ch6 is
then
if Is_Abstract (T)
and then Is_Abstract (S)
- and then (not Overriding or else not Is_Abstract (E))
+ and then (not Is_Overriding or else not Is_Abstract (E))
then
Error_Msg_N ("abstract subprograms must be visible "
& "('R'M 3.9.3(10))!", S);
@@ -4481,7 +4526,7 @@ package body Sem_Ch6 is
elsif Ekind (S) = E_Function
and then Is_Tagged_Type (T)
and then T = Base_Type (Etype (S))
- and then not Overriding
+ and then not Is_Overriding
then
Error_Msg_N
("private function with tagged result must"
@@ -4544,15 +4589,15 @@ package body Sem_Ch6 is
if not Comes_From_Source (S) then
null;
- -- If the subprogram is at library level, it is not a
- -- primitive operation.
+ -- If the subprogram is at library level, it is not primitive
+ -- operation.
elsif Current_Scope = Standard_Standard then
null;
elsif (Ekind (Current_Scope) = E_Package
and then not In_Package_Body (Current_Scope))
- or else Overriding
+ or else Is_Overriding
then
-- For function, check return type
@@ -4628,9 +4673,9 @@ package body Sem_Ch6 is
Check_Dispatching_Operation (S, Empty);
-- If the subprogram is implicit it is hidden by the previous
- -- declaration. However if it is dispatching, it must appear in
- -- the dispatch table anyway, because it can be dispatched to
- -- even if it cannot be called directly.
+ -- declaration. However if it is dispatching, it must appear in the
+ -- dispatch table anyway, because it can be dispatched to even if it
+ -- cannot be called directly.
elsif Present (Alias (S))
and then not Comes_From_Source (S)
@@ -4659,8 +4704,8 @@ package body Sem_Ch6 is
-- E exists and is overloadable
else
- -- Loop through E and its homonyms to determine if any of them
- -- is the candidate for overriding by S.
+ -- Loop through E and its homonyms to determine if any of them is
+ -- the candidate for overriding by S.
while Present (E) loop
@@ -4673,25 +4718,25 @@ package body Sem_Ch6 is
elsif Type_Conformant (E, S) then
- -- If the old and new entities have the same profile and
- -- one is not the body of the other, then this is an error,
- -- unless one of them is implicitly declared.
+ -- If the old and new entities have the same profile and one
+ -- is not the body of the other, then this is an error, unless
+ -- one of them is implicitly declared.
-- There are some cases when both can be implicit, for example
-- when both a literal and a function that overrides it are
-- inherited in a derivation, or when an inhertited operation
-- of a tagged full type overrides the ineherited operation of
- -- a private extension. Ada 83 had a special rule for the
- -- the literal case. In Ada95, the later implicit operation
- -- hides the former, and the literal is always the former.
- -- In the odd case where both are derived operations declared
- -- at the same point, both operations should be declared,
- -- and in that case we bypass the following test and proceed
- -- to the next part (this can only occur for certain obscure
- -- cases involving homographs in instances and can't occur for
+ -- a private extension. Ada 83 had a special rule for the the
+ -- literal case. In Ada95, the later implicit operation hides
+ -- the former, and the literal is always the former. In the
+ -- odd case where both are derived operations declared at the
+ -- same point, both operations should be declared, and in that
+ -- case we bypass the following test and proceed to the next
+ -- part (this can only occur for certain obscure cases
+ -- involving homographs in instances and can't occur for
-- dispatching operations ???). Note that the following
- -- condition is less than clear. For example, it's not at
- -- all clear why there's a test for E_Entry here. ???
+ -- condition is less than clear. For example, it's not at all
+ -- clear why there's a test for E_Entry here. ???
if Present (Alias (S))
and then (No (Alias (E))
@@ -4701,8 +4746,8 @@ package body Sem_Ch6 is
(Ekind (E) = E_Entry
or else Ekind (E) /= E_Enumeration_Literal)
then
- -- When an derived operation is overloaded it may be due
- -- to the fact that the full view of a private extension
+ -- When an derived operation is overloaded it may be due to
+ -- the fact that the full view of a private extension
-- re-inherits. It has to be dealt with.
if Is_Package (Current_Scope)
@@ -4799,17 +4844,17 @@ package body Sem_Ch6 is
then
-- For nondispatching derived operations that are
-- overridden by a subprogram declared in the private
- -- part of a package, we retain the derived subprogram
- -- but mark it as not immediately visible. If the
- -- derived operation was declared in the visible part
- -- then this ensures that it will still be visible
- -- outside the package with the proper signature
- -- (calls from outside must also be directed to this
- -- version rather than the overriding one, unlike the
- -- dispatching case). Calls from inside the package
- -- will still resolve to the overriding subprogram
- -- since the derived one is marked as not visible
- -- within the package.
+ -- part of a package, we retain the derived
+ -- subprogram but mark it as not immediately visible.
+ -- If the derived operation was declared in the
+ -- visible part then this ensures that it will still
+ -- be visible outside the package with the proper
+ -- signature (calls from outside must also be
+ -- directed to this version rather than the
+ -- overriding one, unlike the dispatching case).
+ -- Calls from inside the package will still resolve
+ -- to the overriding subprogram since the derived one
+ -- is marked as not visible within the package.
-- If the private operation is dispatching, we achieve
-- the overriding by keeping the implicit operation
@@ -4868,9 +4913,9 @@ package body Sem_Ch6 is
if Is_Dispatching_Operation (E) then
- -- An overriding dispatching subprogram inherits
- -- the convention of the overridden subprogram
- -- (by AI-117).
+ -- An overriding dispatching subprogram inherits the
+ -- convention of the overridden subprogram (by
+ -- AI-117).
Set_Convention (S, Convention (E));
@@ -4879,7 +4924,7 @@ package body Sem_Ch6 is
Check_Dispatching_Operation (S, Empty);
end if;
- Maybe_Primitive_Operation (Overriding => True);
+ Maybe_Primitive_Operation (Is_Overriding => True);
goto Check_Inequality;
end;
@@ -4932,10 +4977,10 @@ package body Sem_Ch6 is
Enter_Overloaded_Entity (S);
Maybe_Primitive_Operation;
- -- If S is a derived operation for an untagged type then
- -- by definition it's not a dispatching operation (even
- -- if the parent operation was dispatching), so we don't
- -- call Check_Dispatching_Operation in that case.
+ -- If S is a derived operation for an untagged type then by
+ -- definition it's not a dispatching operation (even if the parent
+ -- operation was dispatching), so we don't call
+ -- Check_Dispatching_Operation in that case.
if not Present (Derived_Type)
or else Is_Tagged_Type (Derived_Type)
@@ -4944,11 +4989,10 @@ package body Sem_Ch6 is
end if;
end if;
- -- If this is a user-defined equality operator that is not
- -- a derived subprogram, create the corresponding inequality.
- -- If the operation is dispatching, the expansion is done
- -- elsewhere, and we do not create an explicit inequality
- -- operation.
+ -- If this is a user-defined equality operator that is not a derived
+ -- subprogram, create the corresponding inequality. If the operation is
+ -- dispatching, the expansion is done elsewhere, and we do not create
+ -- an explicit inequality operation.
<<Check_Inequality>>
if Chars (S) = Name_Op_Eq
@@ -4975,9 +5019,9 @@ package body Sem_Ch6 is
Ptype : Entity_Id;
function Is_Class_Wide_Default (D : Node_Id) return Boolean;
- -- Check whether the default has a class-wide type. After analysis
- -- the default has the type of the formal, so we must also check
- -- explicitly for an access attribute.
+ -- Check whether the default has a class-wide type. After analysis the
+ -- default has the type of the formal, so we must also check explicitly
+ -- for an access attribute.
---------------------------
-- Is_Class_Wide_Default --
@@ -5163,6 +5207,14 @@ package body Sem_Ch6 is
Next (Param_Spec);
end loop;
+ -- If this is the formal part of a function specification, analyze the
+ -- subtype mark in the context where the formals are visible but not
+ -- yet usable, and may hide outer homographs.
+
+ if Nkind (Related_Nod) = N_Function_Specification then
+ Analyze_Return_Type (Related_Nod);
+ end if;
+
-- Now set the kind (mode) of each formal
Param_Spec := First (T);
@@ -5259,32 +5311,32 @@ package body Sem_Ch6 is
if Is_Constrained (T) then
AS_Needed := False;
- -- If we have unknown discriminants, then we do not need an
- -- actual subtype, or more accurately we cannot figure it out!
- -- Note that all class-wide types have unknown discriminants.
+ -- If we have unknown discriminants, then we do not need an actual
+ -- subtype, or more accurately we cannot figure it out! Note that
+ -- all class-wide types have unknown discriminants.
elsif Has_Unknown_Discriminants (T) then
AS_Needed := False;
- -- At this stage we have an unconstrained type that may need
- -- an actual subtype. For sure the actual subtype is needed
- -- if we have an unconstrained array type.
+ -- At this stage we have an unconstrained type that may need an
+ -- actual subtype. For sure the actual subtype is needed if we have
+ -- an unconstrained array type.
elsif Is_Array_Type (T) then
AS_Needed := True;
-- The only other case which needs an actual subtype is an
- -- unconstrained record type which is an IN parameter (we
- -- cannot generate actual subtypes for the OUT or IN OUT case,
- -- since an assignment can change the discriminant values.
- -- However we exclude the case of initialization procedures,
- -- since discriminants are handled very specially in this context,
- -- see the section entitled "Handling of Discriminants" in Einfo.
- -- We also exclude the case of Discrim_SO_Functions (functions
- -- used in front end layout mode for size/offset values), since
- -- in such functions only discriminants are referenced, and not
- -- only are such subtypes not needed, but they cannot always
- -- be generated, because of order of elaboration issues.
+ -- unconstrained record type which is an IN parameter (we cannot
+ -- generate actual subtypes for the OUT or IN OUT case, since an
+ -- assignment can change the discriminant values. However we exclude
+ -- the case of initialization procedures, since discriminants are
+ -- handled very specially in this context, see the section entitled
+ -- "Handling of Discriminants" in Einfo. We also exclude the case of
+ -- Discrim_SO_Functions (functions used in front end layout mode for
+ -- size/offset values), since in such functions only discriminants
+ -- are referenced, and not only are such subtypes not needed, but
+ -- they cannot always be generated, because of order of elaboration
+ -- issues.
elsif Is_Record_Type (T)
and then Ekind (Formal) = E_In_Parameter
@@ -5323,9 +5375,9 @@ package body Sem_Ch6 is
Prepend (Decl, Statements (Handled_Statement_Sequence (N)));
Mark_Rewrite_Insertion (Decl);
else
- -- If the accept statement has no body, there will be
- -- no reference to the actuals, so no need to compute
- -- actual subtypes.
+ -- If the accept statement has no body, there will be no
+ -- reference to the actuals, so no need to compute actual
+ -- subtypes.
return;
end if;
@@ -5336,8 +5388,8 @@ package body Sem_Ch6 is
Mark_Rewrite_Insertion (Decl);
end if;
- -- The declaration uses the bounds of an existing object,
- -- and therefore needs no constraint checks.
+ -- The declaration uses the bounds of an existing object, and
+ -- therefore needs no constraint checks.
Analyze (Decl, Suppress => All_Checks);
@@ -5397,8 +5449,8 @@ package body Sem_Ch6 is
end if;
-- Set Is_Known_Non_Null for access parameters since the language
- -- guarantees that access parameters are always non-null. We also
- -- set Can_Never_Be_Null, since there is no way to change the value.
+ -- guarantees that access parameters are always non-null. We also set
+ -- Can_Never_Be_Null, since there is no way to change the value.
if Nkind (Parameter_Type (Spec)) = N_Access_Definition then
@@ -5423,9 +5475,9 @@ package body Sem_Ch6 is
procedure Set_Formal_Validity (Formal_Id : Entity_Id) is
begin
- -- If no validity checking, then we cannot assume anything about
- -- the validity of parameters, since we do not know there is any
- -- checking of the validity on the call side.
+ -- If no validity checking, then we cannot assume anything about the
+ -- validity of parameters, since we do not know there is any checking
+ -- of the validity on the call side.
if not Validity_Checks_On then
return;
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index 7c9e607becb..f5090e44441 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -49,6 +49,7 @@ with Sem_Ch3; use Sem_Ch3;
with Sem_Ch4; use Sem_Ch4;
with Sem_Ch6; use Sem_Ch6;
with Sem_Ch12; use Sem_Ch12;
+with Sem_Disp; use Sem_Disp;
with Sem_Res; use Sem_Res;
with Sem_Util; use Sem_Util;
with Sem_Type; use Sem_Type;
@@ -1170,8 +1171,7 @@ package body Sem_Ch8 is
end if;
-- Check whether this declaration corresponds to the instantiation
- -- of a formal subprogram. This is indicated by the presence of a
- -- Corresponding_Spec that is the instantiation declaration.
+ -- of a formal subprogram.
-- If this is an instantiation, the corresponding actual is frozen
-- and error messages can be made more precise. If this is a default
@@ -1182,9 +1182,9 @@ package body Sem_Ch8 is
-- is determined in Find_Renamed_Entity. If the entity is an operator,
-- Find_Renamed_Entity applies additional visibility checks.
- if Present (Corresponding_Spec (N)) then
+ if Present (Corresponding_Formal_Spec (N)) then
Is_Actual := True;
- Inst_Node := Unit_Declaration_Node (Corresponding_Spec (N));
+ Inst_Node := Unit_Declaration_Node (Corresponding_Formal_Spec (N));
if Is_Entity_Name (Nam)
and then Present (Entity (Nam))
@@ -1244,8 +1244,6 @@ package body Sem_Ch8 is
New_S := Analyze_Subprogram_Specification (Spec);
end if;
- Set_Corresponding_Spec (N, Empty);
-
else
-- Renamed entity must be analyzed first, to avoid being hidden by
-- new name (which might be the same in a generic instance).
@@ -1460,6 +1458,48 @@ package body Sem_Ch8 is
Set_Has_Delayed_Freeze (New_S, False);
end if;
+ -- If the renaming corresponds to an association for an abstract
+ -- formal subprogram, then various attributes must be set to
+ -- indicate that the renaming is an abstract dispatching operation
+ -- with a controlling type.
+
+ if Is_Actual
+ and then Is_Abstract (Corresponding_Formal_Spec (N))
+ then
+ -- Mark the renaming as abstract here, so Find_Dispatching_Type
+ -- see it as corresponding to a generic association for a
+ -- formal abstract subprogram
+
+ Set_Is_Abstract (New_S);
+
+ declare
+ New_S_Ctrl_Type : constant Entity_Id :=
+ Find_Dispatching_Type (New_S);
+ Old_S_Ctrl_Type : constant Entity_Id :=
+ Find_Dispatching_Type (Old_S);
+
+ begin
+ if Old_S_Ctrl_Type /= New_S_Ctrl_Type then
+ Error_Msg_NE
+ ("actual must be dispatching subprogram for type&",
+ Nam, New_S_Ctrl_Type);
+
+ else
+ Set_Is_Dispatching_Operation (New_S);
+ Check_Controlling_Formals (New_S_Ctrl_Type, New_S);
+
+ -- In the case where the actual in the formal subprogram
+ -- is itself a formal abstract subprogram association,
+ -- there's no dispatch table component or position to
+ -- inherit.
+
+ if Present (DTC_Entity (Old_S)) then
+ Set_DTC_Entity (New_S, DTC_Entity (Old_S));
+ Set_DT_Position (New_S, DT_Position (Old_S));
+ end if;
+ end if;
+ end;
+ end if;
end if;
if not Is_Actual
@@ -1488,8 +1528,12 @@ package body Sem_Ch8 is
Set_Has_Delayed_Freeze (New_S, False);
Freeze_Before (N, New_S);
+ -- An abstract subprogram is only allowed as an actual in the case
+ -- where the formal subprogram is also abstract.
+
if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function)
and then Is_Abstract (Old_S)
+ and then not Is_Abstract (Corresponding_Formal_Spec (N))
then
Error_Msg_N
("abstract subprogram not allowed as generic actual", Nam);
@@ -1816,9 +1860,7 @@ package body Sem_Ch8 is
Aname = Name_Val
then
if Nkind (N) = N_Subprogram_Renaming_Declaration
- and then Present (Corresponding_Spec (N))
- and then Nkind (Unit_Declaration_Node (Corresponding_Spec (N))) =
- N_Formal_Subprogram_Declaration
+ and then Present (Corresponding_Formal_Spec (N))
then
Error_Msg_N
("generic actual cannot be attribute involving universal type",
@@ -2752,6 +2794,7 @@ package body Sem_Ch8 is
if Is_Enumeration_Type (Case_Typ)
and then Case_Typ /= Standard_Character
and then Case_Typ /= Standard_Wide_Character
+ and then Case_Typ /= Standard_Wide_Wide_Character
then
Lit := First_Literal (Case_Typ);
Get_Name_String (Chars (Lit));
@@ -4494,7 +4537,8 @@ package body Sem_Ch8 is
loop
if Is_Character_Type (Id)
and then (Root_Type (Id) = Standard_Character
- or else Root_Type (Id) = Standard_Wide_Character)
+ or else Root_Type (Id) = Standard_Wide_Character
+ or else Root_Type (Id) = Standard_Wide_Wide_Character)
and then Id = Base_Type (Id)
then
-- We replace the node with the literal itself, resolve as a
@@ -5562,7 +5606,13 @@ package body Sem_Ch8 is
-- instance is declared in the wrapper package but will not be
-- hidden by a use-visible entity.
+ -- If Id is called Standard, the predefined package with the
+ -- same name is in the homonym chain. It has to be ignored
+ -- because it has no defined scope (being the only entity in
+ -- the system with this mandated behavior).
+
elsif not Is_Hidden (Id)
+ and then Present (Scope (Prev))
and then not Is_Wrapper_Package (Scope (Prev))
and then Scope_Depth (Scope (Prev)) <
Scope_Depth (Current_Instance)
diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb
index 7ea68f85699..9f8521bb427 100644
--- a/gcc/ada/sem_disp.adb
+++ b/gcc/ada/sem_disp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -34,15 +34,18 @@ with Exp_Tss; use Exp_Tss;
with Errout; use Errout;
with Hostparm; use Hostparm;
with Nlists; use Nlists;
+with Nmake; use Nmake;
with Opt; use Opt;
with Output; use Output;
with Sem; use Sem;
with Sem_Ch6; use Sem_Ch6;
with Sem_Eval; use Sem_Eval;
+with Sem_Type; use Sem_Type;
with Sem_Util; use Sem_Util;
with Snames; use Snames;
with Stand; use Stand;
with Sinfo; use Sinfo;
+with Tbuild; use Tbuild;
with Uintp; use Uintp;
package body Sem_Disp is
@@ -67,8 +70,11 @@ package body Sem_Disp is
function Check_Controlling_Type
(T : Entity_Id;
Subp : Entity_Id) return Entity_Id;
- -- T is the type of a formal parameter of subp. Returns the tagged
- -- if the parameter can be a controlling argument, empty otherwise
+ -- T is the tagged type of a formal parameter or the result of Subp.
+ -- If the subprogram has a controlling parameter or result that matches
+ -- the type, then returns the tagged type of that parameter or result
+ -- (returning the designated tagged type in the case of an access
+ -- parameter); otherwise returns empty.
-------------------------------
-- Add_Dispatching_Operation --
@@ -228,13 +234,20 @@ package body Sem_Disp is
return Empty;
-- The dispatching type and the primitive operation must be defined
- -- in the same scope except for internal operations.
+ -- in the same scope, except in the case of internal operations and
+ -- formal abstract subprograms.
- elsif (Scope (Subp) = Scope (Tagged_Type)
- or else Is_Internal (Subp))
- and then
- (not Is_Generic_Type (Tagged_Type)
- or else not Comes_From_Source (Subp))
+ elsif ((Scope (Subp) = Scope (Tagged_Type) or else Is_Internal (Subp))
+ and then (not Is_Generic_Type (Tagged_Type)
+ or else not Comes_From_Source (Subp)))
+ or else
+ (Is_Formal_Subprogram (Subp) and then Is_Abstract (Subp))
+ or else
+ (Nkind (Parent (Parent (Subp))) = N_Subprogram_Renaming_Declaration
+ and then
+ Present (Corresponding_Formal_Spec (Parent (Parent (Subp))))
+ and then
+ Is_Abstract (Subp))
then
return Tagged_Type;
@@ -248,9 +261,14 @@ package body Sem_Disp is
----------------------------
procedure Check_Dispatching_Call (N : Node_Id) is
- Actual : Node_Id;
- Control : Node_Id := Empty;
- Func : Entity_Id;
+ Actual : Node_Id;
+ Formal : Entity_Id;
+ Control : Node_Id := Empty;
+ Func : Entity_Id;
+ Subp_Entity : Entity_Id;
+ Loc : constant Source_Ptr := Sloc (N);
+ Indeterm_Ancestor_Call : Boolean := False;
+ Indeterm_Ctrl_Type : Entity_Id;
procedure Check_Dispatching_Context;
-- If the call is tag-indeterminate and the entity being called is
@@ -262,21 +280,21 @@ package body Sem_Disp is
-------------------------------
procedure Check_Dispatching_Context is
- Func : constant Entity_Id := Entity (Name (N));
+ Subp : constant Entity_Id := Entity (Name (N));
Par : Node_Id;
begin
- if Is_Abstract (Func)
+ if Is_Abstract (Subp)
and then No (Controlling_Argument (N))
then
- if Present (Alias (Func))
- and then not Is_Abstract (Alias (Func))
- and then No (DTC_Entity (Func))
+ if Present (Alias (Subp))
+ and then not Is_Abstract (Alias (Subp))
+ and then No (DTC_Entity (Subp))
then
-- Private overriding of inherited abstract operation,
-- call is legal.
- Set_Entity (Name (N), Alias (Func));
+ Set_Entity (Name (N), Alias (Subp));
return;
else
@@ -289,7 +307,7 @@ package body Sem_Disp is
Nkind (Par) = N_Assignment_Statement or else
Nkind (Par) = N_Op_Eq or else
Nkind (Par) = N_Op_Ne)
- and then Is_Tagged_Type (Etype (Func))
+ and then Is_Tagged_Type (Etype (Subp))
then
return;
@@ -299,8 +317,20 @@ package body Sem_Disp is
Par := Parent (Par);
else
- Error_Msg_N
- ("call to abstract function must be dispatching", N);
+ if Ekind (Subp) = E_Function then
+ Error_Msg_N
+ ("call to abstract function must be dispatching", N);
+
+ -- This error can occur for a procedure in the case of a
+ -- call to an abstract formal procedure with a statically
+ -- tagged operand.
+
+ else
+ Error_Msg_N
+ ("call to abstract procedure must be dispatching",
+ N);
+ end if;
+
return;
end if;
end loop;
@@ -316,12 +346,53 @@ package body Sem_Disp is
if Present (Parameter_Associations (N)) then
Actual := First_Actual (N);
+ Subp_Entity := Entity (Name (N));
+ Formal := First_Formal (Subp_Entity);
+
while Present (Actual) loop
Control := Find_Controlling_Arg (Actual);
exit when Present (Control);
+
+ -- Check for the case where the actual is a tag-indeterminate call
+ -- whose result type is different than the tagged type associated
+ -- with the containing call, but is an ancestor of the type.
+
+ if Is_Controlling_Formal (Formal)
+ and then Is_Tag_Indeterminate (Actual)
+ and then Base_Type (Etype (Actual)) /= Base_Type (Etype (Formal))
+ and then Is_Ancestor (Etype (Actual), Etype (Formal))
+ then
+ Indeterm_Ancestor_Call := True;
+ Indeterm_Ctrl_Type := Etype (Formal);
+ end if;
+
Next_Actual (Actual);
+ Next_Formal (Formal);
end loop;
+ -- If the call doesn't have a controlling actual but does have
+ -- an indeterminate actual that requires dispatching treatment,
+ -- then an object is needed that will serve as the controlling
+ -- argument for a dispatching call on the indeterminate actual.
+ -- This can only occur in the unusual situation of a default
+ -- actual given by a tag-indeterminate call and where the type
+ -- of the call is an ancestor of the type associated with a
+ -- containing call to an inherited operation (see AI-239).
+ -- Rather than create an object of the tagged type, which would
+ -- be problematic for various reasons (default initialization,
+ -- discriminants), the tag of the containing call's associated
+ -- tagged type is directly used to control the dispatching.
+
+ if not Present (Control)
+ and then Indeterm_Ancestor_Call
+ then
+ Control :=
+ Make_Attribute_Reference (Loc,
+ Prefix => New_Occurrence_Of (Indeterm_Ctrl_Type, Loc),
+ Attribute_Name => Name_Tag);
+ Analyze (Control);
+ end if;
+
if Present (Control) then
-- Verify that no controlling arguments are statically tagged
@@ -338,10 +409,10 @@ package body Sem_Disp is
if Actual /= Control then
if not Is_Controlling_Actual (Actual) then
- null; -- can be anything
+ null; -- Can be anything
elsif Is_Dynamically_Tagged (Actual) then
- null; -- valid parameter
+ null; -- Valid parameter
elsif Is_Tag_Indeterminate (Actual) then
@@ -369,8 +440,8 @@ package body Sem_Disp is
Set_Controlling_Argument (N, Control);
else
- -- The call is not dispatching, check that there isn't any
- -- tag indeterminate abstract call left
+ -- The call is not dispatching, so check that there aren't any
+ -- tag-indeterminate abstract calls left.
Actual := First_Actual (N);
@@ -1159,7 +1230,7 @@ package body Sem_Disp is
-- calls and would have to undo any expansion to an indirect call.
if not Java_VM then
- Expand_Dispatch_Call (Call_Node);
+ Expand_Dispatching_Call (Call_Node);
end if;
end Propagate_Tag;
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index 5416e969658..d0d536d68b6 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -1115,8 +1115,27 @@ package body Sem_Eval is
if Is_Modular_Integer_Type (Ltype) then
Result := Result mod Modulus (Ltype);
+
+ -- For a signed integer type, check non-static overflow
+
+ elsif (not Stat) and then Is_Signed_Integer_Type (Ltype) then
+ declare
+ BT : constant Entity_Id := Base_Type (Ltype);
+ Lo : constant Uint := Expr_Value (Type_Low_Bound (BT));
+ Hi : constant Uint := Expr_Value (Type_High_Bound (BT));
+ begin
+ if Result < Lo or else Result > Hi then
+ Apply_Compile_Time_Constraint_Error
+ (N, "value not in range of }?",
+ CE_Overflow_Check_Failed,
+ Ent => BT);
+ return;
+ end if;
+ end;
end if;
+ -- If we get here we can fold the result
+
Fold_Uint (N, Result, Stat);
end;
@@ -1175,7 +1194,6 @@ package body Sem_Eval is
procedure Eval_Character_Literal (N : Node_Id) is
pragma Warnings (Off, N);
-
begin
null;
end Eval_Character_Literal;
@@ -1259,7 +1277,8 @@ package body Sem_Eval is
Test_Expression_Is_Foldable (N, Left, Right, Stat, Fold);
if (C_Typ = Standard_Character
- or else C_Typ = Standard_Wide_Character)
+ or else C_Typ = Standard_Wide_Character
+ or else C_Typ = Standard_Wide_Wide_Character)
and then Fold
then
null;
@@ -1268,7 +1287,7 @@ package body Sem_Eval is
return;
end if;
- -- Compile time string concatenation.
+ -- Compile time string concatenation
-- ??? Note that operands that are aggregates can be marked as
-- static, so we should attempt at a later stage to fold
@@ -1292,7 +1311,7 @@ package body Sem_Eval is
Start_String (Strval (Left_Str));
else
Start_String;
- Store_String_Char (Char_Literal_Value (Left_Str));
+ Store_String_Char (UI_To_CC (Char_Literal_Value (Left_Str)));
Left_Len := 1;
end if;
@@ -1308,7 +1327,7 @@ package body Sem_Eval is
end loop;
end;
else
- Store_String_Char (Char_Literal_Value (Right_Str));
+ Store_String_Char (UI_To_CC (Char_Literal_Value (Right_Str)));
end if;
Set_Is_Static_Expression (N, Stat);
@@ -1402,7 +1421,7 @@ package body Sem_Eval is
end if;
end if;
- -- Fall through if the name is not static.
+ -- Fall through if the name is not static
Validate_Static_Object_Name (N);
end Eval_Entity_Name;
@@ -2500,7 +2519,7 @@ package body Sem_Eval is
-- Start of processing for Eval_Type_Conversion
begin
- -- Cannot fold if target type is non-static or if semantic error.
+ -- Cannot fold if target type is non-static or if semantic error
if not Is_Static_Subtype (Target_Type) then
Check_Non_Static_Context (Operand);
@@ -2528,7 +2547,7 @@ package body Sem_Eval is
-- following type test, fixed-point counts as real unless the flag
-- Conversion_OK is set, in which case it counts as integer.
- -- Fold conversion, case of string type. The result is not static.
+ -- Fold conversion, case of string type. The result is not static
if Is_String_Type (Target_Type) then
Fold_Str (N, Strval (Get_String_Val (Operand)), False);
@@ -2747,7 +2766,7 @@ package body Sem_Eval is
-- their Pos value as usual which is the same as the Rep value.
if No (Ent) then
- return UI_From_Int (Int (Char_Literal_Value (N)));
+ return Char_Literal_Value (N);
else
return Enumeration_Rep (Ent);
end if;
@@ -2827,7 +2846,7 @@ package body Sem_Eval is
-- their Pos value as usual.
if No (Ent) then
- Val := UI_From_Int (Int (Char_Literal_Value (N)));
+ Val := Char_Literal_Value (N);
else
Val := Enumeration_Pos (Ent);
end if;
@@ -3207,7 +3226,7 @@ package body Sem_Eval is
Valr : Ureal;
begin
- -- Universal types have no range limits, so always in range.
+ -- Universal types have no range limits, so always in range
if Typ = Universal_Integer or else Typ = Universal_Real then
return True;
@@ -3218,7 +3237,7 @@ package body Sem_Eval is
elsif not Is_Scalar_Type (Typ) then
return False;
- -- Never in range unless we have a compile time known value.
+ -- Never in range unless we have a compile time known value
elsif not Compile_Time_Known_Value (N) then
return False;
@@ -3388,7 +3407,7 @@ package body Sem_Eval is
Valr : Ureal;
begin
- -- Universal types have no range limits, so always in range.
+ -- Universal types have no range limits, so always in range
if Typ = Universal_Integer or else Typ = Universal_Real then
return False;
@@ -3477,7 +3496,7 @@ package body Sem_Eval is
-- Is_Static_Subtype --
-----------------------
- -- Determines if Typ is a static subtype as defined in (RM 4.9(26)).
+ -- Determines if Typ is a static subtype as defined in (RM 4.9(26))
function Is_Static_Subtype (Typ : Entity_Id) return Boolean is
Base_T : constant Entity_Id := Base_Type (Typ);
@@ -3794,6 +3813,16 @@ package body Sem_Eval is
or else Comes_From_Source (T2))
then
return False;
+
+ -- A generic scalar type does not statically match its base
+ -- type (AI-311). In this case we make sure that the formals,
+ -- which are first subtypes of their bases, are constrained.
+
+ elsif Is_Generic_Type (T1)
+ and then Is_Generic_Type (T2)
+ and then (Is_Constrained (T1) /= Is_Constrained (T2))
+ then
+ return False;
end if;
-- If there was an error in either range, then just assume
@@ -3905,7 +3934,7 @@ package body Sem_Eval is
return True;
- -- A definite type does not match an indefinite or classwide type.
+ -- A definite type does not match an indefinite or classwide type
elsif
Has_Unknown_Discriminants (T1) /= Has_Unknown_Discriminants (T2)
@@ -4085,7 +4114,7 @@ package body Sem_Eval is
Fold := False;
return;
- -- Exclude expressions of a generic modular type, as above.
+ -- Exclude expressions of a generic modular type, as above
elsif Is_Modular_Integer_Type (Etype (Op1))
and then Is_Generic_Type (Etype (Op1))
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 6ece74120d0..408024b3715 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -4306,14 +4306,32 @@ package body Sem_Prag is
------------
-- pragma Ada_05;
+ -- pragma Ada_05 (LOCAL_NAME);
-- Note: this pragma also has some specific processing in Par.Prag
- -- because we want to set the Ada 83 version mode during parsing.
+ -- because we want to set the Ada 2005 version mode during parsing.
+
+ when Pragma_Ada_05 => declare
+ E_Id : Node_Id;
- when Pragma_Ada_05 =>
+ begin
GNAT_Pragma;
- Ada_Version := Ada_05;
- Check_Arg_Count (0);
+
+ if Arg_Count = 1 then
+ Check_Arg_Is_Local_Name (Arg1);
+ E_Id := Expression (Arg1);
+
+ if Etype (E_Id) = Any_Type then
+ return;
+ end if;
+
+ Set_Is_Ada_2005 (Entity (E_Id));
+
+ else
+ Ada_Version := Ada_05;
+ Check_Arg_Count (0);
+ end if;
+ end;
----------------------
-- All_Calls_Remote --
@@ -5623,7 +5641,19 @@ package body Sem_Prag is
then
Set_Elaborate_Present (Citem, True);
Set_Unit_Name (Expression (Arg), Name (Citem));
- Set_Suppress_Elaboration_Warnings (Entity (Name (Citem)));
+
+ -- With the pragma present, elaboration calls on
+ -- subprograms from the named unit need no further
+ -- checks, as long as the pragma appears in the current
+ -- compilation unit. If the pragma appears in some unit
+ -- in the context, there might still be a need for an
+ -- Elaborate_All_Desirable from the current compilation
+ -- to the the named unit, so we keep the check enabled.
+
+ if In_Extended_Main_Source_Unit (N) then
+ Set_Suppress_Elaboration_Warnings
+ (Entity (Name (Citem)));
+ end if;
exit Inner;
end if;
@@ -5708,7 +5738,15 @@ package body Sem_Prag is
then
Set_Elaborate_All_Present (Citem, True);
Set_Unit_Name (Expression (Arg), Name (Citem));
- Set_Suppress_Elaboration_Warnings (Entity (Name (Citem)));
+
+ -- Suppress warnings and elaboration checks on the named
+ -- unit if the pragma is in the current compilation, as
+ -- for pragma Elaborate.
+
+ if In_Extended_Main_Source_Unit (N) then
+ Set_Suppress_Elaboration_Warnings
+ (Entity (Name (Citem)));
+ end if;
exit Innr;
end if;
@@ -7935,21 +7973,63 @@ package body Sem_Prag is
-- pragma Obsolescent [(static_string_EXPRESSION)];
when Pragma_Obsolescent => Obsolescent : declare
+ Subp : Node_Or_Entity_Id;
+ S : String_Id;
+
begin
GNAT_Pragma;
Check_At_Most_N_Arguments (1);
Check_No_Identifiers;
- if Arg_Count = 1 then
- Check_Arg_Is_Static_Expression (Arg1, Standard_String);
- end if;
+ -- Check OK placement
- if No (Prev (N))
- or else (Nkind (Prev (N))) /= N_Subprogram_Declaration
+ -- First possibility is within a declarative region, where the
+ -- pragma immediately follows a subprogram declaration.
+
+ if Present (Prev (N)) then
+ Subp := Prev (N);
+
+ -- Second possibility, stand alone subprogram declaration with the
+ -- pragma immediately following the declaration.
+
+ elsif No (Prev (N))
+ and then Nkind (Parent (N)) = N_Compilation_Unit_Aux
then
+ Subp := Unit (Parent (Parent (N)));
+
+ -- Any other possibility is a misplacement
+
+ else
+ Subp := Empty;
+ end if;
+
+ -- Check correct placement
+
+ if Nkind (Subp) /= N_Subprogram_Declaration then
Error_Pragma
("pragma% misplaced, must immediately " &
"follow subprogram spec");
+
+ -- If OK placement, set flag and acquire argument
+
+ else
+ Subp := Defining_Entity (Subp);
+ Set_Is_Obsolescent (Subp);
+
+ if Arg_Count = 1 then
+ Check_Arg_Is_Static_Expression (Arg1, Standard_String);
+ S := Strval (Expression (Arg1));
+
+ for J in 1 .. String_Length (S) loop
+ if not In_Character_Range (Get_String_Char (S, J)) then
+ Error_Pragma_Arg
+ ("pragma% argument does not allow wide characters",
+ Arg1);
+ end if;
+ end loop;
+
+ Set_Obsolescent_Warning (Subp, Expression (Arg1));
+ end if;
end if;
end Obsolescent;
@@ -8023,13 +8103,6 @@ package body Sem_Prag is
when Pragma_Optional_Overriding =>
Error_Msg_N ("pragma must appear immediately after subprogram", N);
- ----------------
- -- Overriding --
- ----------------
-
- when Pragma_Overriding =>
- Error_Msg_N ("pragma must appear immediately after subprogram", N);
-
----------
-- Pack --
----------
@@ -10325,7 +10398,6 @@ package body Sem_Prag is
Pragma_Obsolescent => 0,
Pragma_Optimize => -1,
Pragma_Optional_Overriding => -1,
- Pragma_Overriding => -1,
Pragma_Pack => 0,
Pragma_Page => -1,
Pragma_Passive => -1,
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index b89f82b0097..af752663422 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -1449,7 +1449,8 @@ package body Sem_Res is
Rewrite (N,
Make_Character_Literal (Sloc (N),
Chars => Name_Find,
- Char_Literal_Value => Char_Code (Character'Pos ('A'))));
+ Char_Literal_Value =>
+ UI_From_Int (Character'Pos ('A'))));
Set_Etype (N, Any_Character);
Set_Is_Static_Expression (N);
@@ -2721,9 +2722,11 @@ package body Sem_Res is
or else Can_Never_Be_Null (F_Typ))
then
if Nkind (A) = N_Null then
- Error_Msg_NE
- ("(Ada 2005) not allowed for " &
- "null-exclusion formal", A, F_Typ);
+ Apply_Compile_Time_Constraint_Error
+ (N => A,
+ Msg => "(Ada 2005) NULL not allowed in "
+ & "null-excluding formal?",
+ Reason => CE_Null_Not_Allowed);
end if;
end if;
end if;
@@ -2807,7 +2810,7 @@ package body Sem_Res is
then
Error_Msg_Node_2 := F_Typ;
Error_Msg_NE
- ("& is not a primitive operation of &!", A, Nam);
+ ("& is not a dispatching operation of &!", A, Nam);
end if;
elsif Is_Access_Type (A_Typ)
@@ -2828,7 +2831,7 @@ package body Sem_Res is
then
Error_Msg_Node_2 := Designated_Type (F_Typ);
Error_Msg_NE
- ("& is not a primitive operation of &!", A, Nam);
+ ("& is not a dispatching operation of &!", A, Nam);
end if;
end if;
@@ -3433,7 +3436,7 @@ package body Sem_Res is
It : Interp;
Norm_OK : Boolean;
Scop : Entity_Id;
- Decl : Node_Id;
+ W : Node_Id;
begin
-- The context imposes a unique interpretation with type Typ on
@@ -3576,31 +3579,30 @@ package body Sem_Res is
-- Check for call to obsolescent subprogram
- if Warn_On_Obsolescent_Feature then
- Decl := Parent (Parent (Nam));
+ if Warn_On_Obsolescent_Feature
+ and then Is_Subprogram (Nam)
+ and then Is_Obsolescent (Nam)
+ then
+ Error_Msg_NE ("call to obsolescent subprogram&?", N, Nam);
- if Nkind (Decl) = N_Subprogram_Declaration
- and then Is_List_Member (Decl)
- and then Nkind (Next (Decl)) = N_Pragma
- then
- declare
- P : constant Node_Id := Next (Decl);
+ -- Output additional warning if present
- begin
- if Chars (P) = Name_Obsolescent then
- Error_Msg_NE ("call to obsolescent subprogram&?", N, Nam);
-
- if Pragma_Argument_Associations (P) /= No_List then
- Name_Buffer (1) := '|';
- Name_Buffer (2) := '?';
- Name_Len := 2;
- Add_String_To_Name_Buffer
- (Strval (Expression
- (First (Pragma_Argument_Associations (P)))));
- Error_Msg_N (Name_Buffer (1 .. Name_Len), N);
- end if;
- end if;
- end;
+ W := Obsolescent_Warning (Nam);
+
+ if Present (W) then
+ Name_Buffer (1) := '|';
+ Name_Buffer (2) := '?';
+ Name_Len := 2;
+
+ -- Add characters to message, protecting all of them
+
+ for J in 1 .. String_Length (Strval (W)) loop
+ Add_Char_To_Name_Buffer (''');
+ Add_Char_To_Name_Buffer
+ (Get_Character (Get_String_Char (Strval (W), J)));
+ end loop;
+
+ Error_Msg_N (Name_Buffer (1 .. Name_Len), N);
end if;
end if;
@@ -3906,11 +3908,12 @@ package body Sem_Res is
Set_Etype (N, B_Typ);
Eval_Character_Literal (N);
- -- Wide_Character literals must always be defined, since the set of
- -- wide character literals is complete, i.e. if a character literal
- -- is accepted by the parser, then it is OK for wide character.
+ -- Wide_Wide_Character literals must always be defined, since the set
+ -- of wide wide character literals is complete, i.e. if a character
+ -- literal is accepted by the parser, then it is OK for wide wide
+ -- character (out of range character literals are rejected).
- if Root_Type (B_Typ) = Standard_Wide_Character then
+ if Root_Type (B_Typ) = Standard_Wide_Wide_Character then
return;
-- Always accept character literal for type Any_Character, which
@@ -3924,10 +3927,24 @@ package body Sem_Res is
-- the literal is in range
elsif Root_Type (B_Typ) = Standard_Character then
- if In_Character_Range (Char_Literal_Value (N)) then
+ if In_Character_Range (UI_To_CC (Char_Literal_Value (N))) then
+ return;
+ end if;
+
+ -- For Standard.Wide_Character or a type derived from it, check
+ -- that the literal is in range
+
+ elsif Root_Type (B_Typ) = Standard_Wide_Character then
+ if In_Wide_Character_Range (UI_To_CC (Char_Literal_Value (N))) then
return;
end if;
+ -- For Standard.Wide_Wide_Character or a type derived from it, we
+ -- know the literal is in range, since the parser checked!
+
+ elsif Root_Type (B_Typ) = Standard_Wide_Wide_Character then
+ return;
+
-- If the entity is already set, this has already been resolved in
-- a generic context, or comes from expansion. Nothing else to do.
@@ -5823,10 +5840,11 @@ package body Sem_Res is
Resolve (P, T);
end if;
- -- Deal with access type case
+ -- If prefix is an access type, the node will be transformed into
+ -- an explicit dereference during expansion. The type of the node
+ -- is the designated type of that of the prefix.
if Is_Access_Type (Etype (P)) then
- Apply_Access_Check (N);
T := Designated_Type (Etype (P));
else
T := Etype (P);
@@ -5977,6 +5995,26 @@ package body Sem_Res is
Apply_Access_Check (N);
Array_Type := Designated_Type (Array_Type);
+ -- If the prefix is an access to an unconstrained array, we must
+ -- use the actual subtype of the object to perform the index checks.
+ -- The object denoted by the prefix is implicit in the node, so we
+ -- build an explicit representation for it in order to compute the
+ -- actual subtype.
+
+ if not Is_Constrained (Array_Type) then
+ Remove_Side_Effects (Prefix (N));
+
+ declare
+ Obj : constant Node_Id :=
+ Make_Explicit_Dereference (Sloc (N),
+ Prefix => New_Copy_Tree (Prefix (N)));
+ begin
+ Set_Etype (Obj, Array_Type);
+ Set_Parent (Obj, Parent (N));
+ Array_Type := Get_Actual_Subtype (Obj);
+ end;
+ end if;
+
elsif Is_Entity_Name (Name)
or else (Nkind (Name) = N_Function_Call
and then not Is_Constrained (Etype (Name)))
@@ -5989,7 +6027,7 @@ package body Sem_Res is
Set_Etype (N, Array_Type);
-- If the range is specified by a subtype mark, no resolution
- -- is necessary.
+ -- is necessary. Else resolve the bounds, and apply needed checks.
if not Is_Entity_Name (Drange) then
Index := First_Index (Array_Type);
@@ -6037,7 +6075,8 @@ package body Sem_Res is
or else Nkind (Parent (N)) /= N_Op_Concat
or else (N /= Left_Opnd (Parent (N))
and then N /= Right_Opnd (Parent (N)))
- or else (Typ = Standard_Wide_String
+ or else ((Typ = Standard_Wide_String
+ or else Typ = Standard_Wide_Wide_String)
and then Nkind (Original_Node (N)) /= N_String_Literal);
-- If the resolving type is itself a string literal subtype, we
@@ -6097,21 +6136,21 @@ package body Sem_Res is
elsif Is_Bit_Packed_Array (Typ) then
null;
- -- Deal with cases of Wide_String and String
+ -- Deal with cases of Wide_Wide_String, Wide_String, and String
else
- -- For Standard.Wide_String, or any other type whose component
- -- type is Standard.Wide_Character, we know that all the
+ -- For Standard.Wide_Wide_String, or any other type whose component
+ -- type is Standard.Wide_Wide_Character, we know that all the
-- characters in the string must be acceptable, since the parser
-- accepted the characters as valid character literals.
- if R_Typ = Standard_Wide_Character then
+ if R_Typ = Standard_Wide_Wide_Character then
null;
-- For the case of Standard.String, or any other type whose
-- component type is Standard.Character, we must make sure that
-- there are no wide characters in the string, i.e. that it is
- -- entirely composed of characters in range of type String.
+ -- entirely composed of characters in range of type Character.
-- If the string literal is the result of a static concatenation,
-- the test has already been performed on the components, and need
@@ -6128,7 +6167,36 @@ package body Sem_Res is
-- a token, right under the offending wide character.
Error_Msg
- ("literal out of range of type Character",
+ ("literal out of range of type Standard.Character",
+ Source_Ptr (Int (Loc) + J));
+ return;
+ end if;
+ end loop;
+
+ -- For the case of Standard.Wide_String, or any other type whose
+ -- component type is Standard.Wide_Character, we must make sure that
+ -- there are no wide characters in the string, i.e. that it is
+ -- entirely composed of characters in range of type Wide_Character.
+
+ -- If the string literal is the result of a static concatenation,
+ -- the test has already been performed on the components, and need
+ -- not be repeated.
+
+ elsif R_Typ = Standard_Wide_Character
+ and then Nkind (Original_Node (N)) /= N_Op_Concat
+ then
+ for J in 1 .. Strlen loop
+ if not In_Wide_Character_Range (Get_String_Char (Str, J)) then
+
+ -- If we are out of range, post error. This is one of the
+ -- very few places that we place the flag in the middle of
+ -- a token, right under the offending wide character.
+
+ -- This is not quite right, because characters in general
+ -- will take more than one character position ???
+
+ Error_Msg
+ ("literal out of range of type Standard.Wide_Character",
Source_Ptr (Int (Loc) + J));
return;
end if;
@@ -6136,11 +6204,10 @@ package body Sem_Res is
-- If the root type is not a standard character, then we will convert
-- the string into an aggregate and will let the aggregate code do
- -- the checking.
+ -- the checking. Standard Wide_Wide_Character is also OK here.
else
null;
-
end if;
-- See if the component type of the array corresponding to the
@@ -6150,8 +6217,9 @@ package body Sem_Res is
-- the corresponding character aggregate and let the aggregate
-- code do the checking.
- if R_Typ = Standard_Wide_Character
- or else R_Typ = Standard_Character
+ if R_Typ = Standard_Character
+ or else R_Typ = Standard_Wide_Character
+ or else R_Typ = Standard_Wide_Wide_Character
then
-- Check for the case of full range, where we are definitely OK
@@ -6210,7 +6278,9 @@ package body Sem_Res is
Set_Character_Literal_Name (C);
Append_To (Lits,
- Make_Character_Literal (P, Name_Find, C));
+ Make_Character_Literal (P,
+ Chars => Name_Find,
+ Char_Literal_Value => UI_From_CC (C)));
if In_Character_Range (C) then
P := P + 1;
@@ -6280,9 +6350,13 @@ package body Sem_Res is
if Unique_Fixed_Point_Type (N) = Any_Type then
return; -- expression is ambiguous.
else
+ -- If nothing else, the available fixed type is Duration.
+
Set_Etype (Operand, Standard_Duration);
end if;
+ -- Resolve the real operand with largest available precision.
+
if Etype (Right_Opnd (Operand)) = Universal_Real then
Rop := New_Copy_Tree (Right_Opnd (Operand));
else
@@ -6291,7 +6365,12 @@ package body Sem_Res is
Resolve (Rop, Standard_Long_Long_Float);
- if Realval (Rop) /= Ureal_0
+ -- If the operand is a literal (it could be a non-static and
+ -- illegal exponentiation) check whether the use of Duration
+ -- is potentially inaccurate.
+
+ if Nkind (Rop) = N_Real_Literal
+ and then Realval (Rop) /= Ureal_0
and then abs (Realval (Rop)) < Delta_Value (Standard_Duration)
then
Error_Msg_N ("universal real operand can only be interpreted?",
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index cc0cc6fd43b..5993fbb371c 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -985,7 +985,7 @@ package body Sem_Util is
if Is_Overloadable (Id)
and then Nkind (Parent (Parent (Id)))
- /= N_Formal_Subprogram_Declaration
+ not in N_Formal_Subprogram_Declaration
then
Is_Prim := False;
@@ -2526,23 +2526,23 @@ package body Sem_Util is
Loc : Source_Ptr) return Node_Id
is
Lit : Node_Id;
- P : constant Nat := UI_To_Int (Pos);
begin
- -- In the case where the literal is either of type Wide_Character
- -- or Character or of a type derived from them, there needs to be
- -- some special handling since there is no explicit chain of
- -- literals to search. Instead, an N_Character_Literal node is
- -- created with the appropriate Char_Code and Chars fields.
+ -- In the case where the literal is of type Character, Wide_Character
+ -- or Wide_Wide_Character or of a type derived from them, there needs
+ -- to be some special handling since there is no explicit chain of
+ -- literals to search. Instead, an N_Character_Literal node is created
+ -- with the appropriate Char_Code and Chars fields.
if Root_Type (T) = Standard_Character
or else Root_Type (T) = Standard_Wide_Character
+ or else Root_Type (T) = Standard_Wide_Wide_Character
then
- Set_Character_Literal_Name (Char_Code (P));
+ Set_Character_Literal_Name (UI_To_CC (Pos));
return
Make_Character_Literal (Loc,
- Chars => Name_Find,
- Char_Literal_Value => Char_Code (P));
+ Chars => Name_Find,
+ Char_Literal_Value => Pos);
-- For all other cases, we have a complete table of literals, and
-- we simply iterate through the chain of literal until the one
@@ -2551,7 +2551,7 @@ package body Sem_Util is
else
Lit := First_Literal (Base_Type (T));
- for J in 1 .. P loop
+ for J in 1 .. UI_To_Int (Pos) loop
Next_Literal (Lit);
end loop;
@@ -2565,7 +2565,6 @@ package body Sem_Util is
function Get_Generic_Entity (N : Node_Id) return Entity_Id is
Ent : constant Entity_Id := Entity (Name (N));
-
begin
if Present (Renamed_Object (Ent)) then
return Renamed_Object (Ent);
@@ -4591,6 +4590,18 @@ package body Sem_Util is
begin
if Is_Access_Type (Etype (P)) then
return not Is_Access_Constant (Root_Type (Etype (P)));
+
+ -- For the case of an indexed component whose prefix has a packed
+ -- array type, the prefix has been rewritten into a type conversion.
+ -- Determine variable-ness from the converted expression.
+
+ elsif Nkind (P) = N_Type_Conversion
+ and then not Comes_From_Source (P)
+ and then Is_Array_Type (Etype (P))
+ and then Is_Packed (Etype (P))
+ then
+ return Is_Variable (Expression (P));
+
else
return Is_Variable (P);
end if;
@@ -6465,7 +6476,6 @@ package body Sem_Util is
while Nkind (N) /= N_Abstract_Subprogram_Declaration
and then Nkind (N) /= N_Formal_Package_Declaration
- and then Nkind (N) /= N_Formal_Subprogram_Declaration
and then Nkind (N) /= N_Function_Instantiation
and then Nkind (N) /= N_Generic_Package_Declaration
and then Nkind (N) /= N_Generic_Subprogram_Declaration
@@ -6481,6 +6491,7 @@ package body Sem_Util is
and then Nkind (N) /= N_Subprogram_Renaming_Declaration
and then Nkind (N) /= N_Task_Body
and then Nkind (N) /= N_Task_Type_Declaration
+ and then Nkind (N) not in N_Formal_Subprogram_Declaration
and then Nkind (N) not in N_Generic_Renaming_Declaration
loop
N := Parent (N);
diff --git a/gcc/ada/sinfo.adb b/gcc/ada/sinfo.adb
index 65ee94ef2c0..33f330143e5 100644
--- a/gcc/ada/sinfo.adb
+++ b/gcc/ada/sinfo.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -315,7 +315,7 @@ package body Sinfo is
pragma Assert (False
or else NT (N).Nkind = N_Component_Association
or else NT (N).Nkind = N_Formal_Package_Declaration
- or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
+ or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
return Flag15 (N);
end Box_Present;
@@ -328,11 +328,11 @@ package body Sinfo is
end By_Ref;
function Char_Literal_Value
- (N : Node_Id) return Char_Code is
+ (N : Node_Id) return Uint is
begin
pragma Assert (False
or else NT (N).Nkind = N_Character_Literal);
- return Char_Code2 (N);
+ return Uint2 (N);
end Char_Literal_Value;
function Chars
@@ -539,6 +539,14 @@ package body Sinfo is
return Node5 (N);
end Corresponding_Body;
+ function Corresponding_Formal_Spec
+ (N : Node_Id) return Node_Id is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+ return Node3 (N);
+ end Corresponding_Formal_Spec;
+
function Corresponding_Generic_Association
(N : Node_Id) return Node_Id is
begin
@@ -620,7 +628,7 @@ package body Sinfo is
(N : Node_Id) return Node_Id is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
+ or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
return Node2 (N);
end Default_Name;
@@ -2288,14 +2296,14 @@ package body Sinfo is
begin
pragma Assert (False
or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
- or else NT (N).Nkind = N_Formal_Subprogram_Declaration
or else NT (N).Nkind = N_Generic_Package_Declaration
or else NT (N).Nkind = N_Generic_Subprogram_Declaration
or else NT (N).Nkind = N_Package_Declaration
or else NT (N).Nkind = N_Subprogram_Body
or else NT (N).Nkind = N_Subprogram_Body_Stub
or else NT (N).Nkind = N_Subprogram_Declaration
- or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+ or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
+ or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
return Node1 (N);
end Specification;
@@ -2809,7 +2817,7 @@ package body Sinfo is
pragma Assert (False
or else NT (N).Nkind = N_Component_Association
or else NT (N).Nkind = N_Formal_Package_Declaration
- or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
+ or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
Set_Flag15 (N, Val);
end Set_Box_Present;
@@ -2822,11 +2830,11 @@ package body Sinfo is
end Set_By_Ref;
procedure Set_Char_Literal_Value
- (N : Node_Id; Val : Char_Code) is
+ (N : Node_Id; Val : Uint) is
begin
pragma Assert (False
or else NT (N).Nkind = N_Character_Literal);
- Set_Char_Code2 (N, Val);
+ Set_Uint2 (N, Val);
end Set_Char_Literal_Value;
procedure Set_Chars
@@ -3033,6 +3041,14 @@ package body Sinfo is
Set_Node5 (N, Val); -- semantic field, no parent set
end Set_Corresponding_Body;
+ procedure Set_Corresponding_Formal_Spec
+ (N : Node_Id; Val : Node_Id) is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+ Set_Node3 (N, Val); -- semantic field, no parent set
+ end Set_Corresponding_Formal_Spec;
+
procedure Set_Corresponding_Generic_Association
(N : Node_Id; Val : Node_Id) is
begin
@@ -3041,6 +3057,7 @@ package body Sinfo is
or else NT (N).Nkind = N_Object_Renaming_Declaration);
Set_Node5 (N, Val); -- semantic field, no parent set
end Set_Corresponding_Generic_Association;
+
procedure Set_Corresponding_Integer_Value
(N : Node_Id; Val : Uint) is
begin
@@ -3113,7 +3130,7 @@ package body Sinfo is
(N : Node_Id; Val : Node_Id) is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Formal_Subprogram_Declaration);
+ or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
Set_Node2_With_Parent (N, Val);
end Set_Default_Name;
@@ -4772,14 +4789,14 @@ package body Sinfo is
begin
pragma Assert (False
or else NT (N).Nkind = N_Abstract_Subprogram_Declaration
- or else NT (N).Nkind = N_Formal_Subprogram_Declaration
or else NT (N).Nkind = N_Generic_Package_Declaration
or else NT (N).Nkind = N_Generic_Subprogram_Declaration
or else NT (N).Nkind = N_Package_Declaration
or else NT (N).Nkind = N_Subprogram_Body
or else NT (N).Nkind = N_Subprogram_Body_Stub
or else NT (N).Nkind = N_Subprogram_Declaration
- or else NT (N).Nkind = N_Subprogram_Renaming_Declaration);
+ or else NT (N).Nkind = N_Subprogram_Renaming_Declaration
+ or else NT (N).Nkind in N_Formal_Subprogram_Declaration);
Set_Node1_With_Parent (N, Val);
end Set_Specification;
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index 7048cd48d02..bfbbdf838e2 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -650,7 +650,9 @@ package Sinfo is
-- Procedure calls, the Controlling_Argument is one of the actuals.
-- For a function that has a dispatching result, it is an entity in
-- the context of the call that can provide a tag, or else it is the
- -- tag of the root type of the class.
+ -- tag of the root type of the class. It can also specify a tag
+ -- directly rather than being a tagged object. The latter is needed
+ -- by the implementations of AI-239 and AI-260.
-- Conversion_OK (Flag14-Sem)
-- A flag set on type conversion nodes to indicate that the conversion
@@ -670,6 +672,13 @@ package Sinfo is
-- points to the defining entity for the corresponding body (NOT the
-- node for the body itself).
+ -- Corresponding_Formal_Spec (Node3-Sem)
+ -- This field is set in subprogram renaming declarations, where it points
+ -- to the defining entity for a formal subprogram in the case where the
+ -- renaming corresponds to a generic formal subprogram association in an
+ -- instantiation. The field is Empty if the renaming does not correspond
+ -- to such a formal association.
+
-- Corresponding_Generic_Association (Node5-Sem)
-- This field is defined for object declarations and object renaming
-- declarations. It is set for the declarations within an instance that
@@ -1666,6 +1675,12 @@ package Sinfo is
-- using the standard literal format. Such literals are listed by
-- Sprint using the notation [numerator / denominator].
+ -- Note: the value of an integer literal node created by the front end
+ -- is never outside the range of values of the base type. However, it
+ -- can be the case that the value is outside the range of the
+ -- particular subtype. This happens in the case of integer overflows
+ -- with checks suppressed.
+
-- N_Integer_Literal
-- Sloc points to literal
-- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that
@@ -1709,7 +1724,7 @@ package Sinfo is
-- N_Character_Literal
-- Sloc points to literal
-- Chars (Name1) contains the Name_Id for the identifier
- -- Char_Literal_Value (Char_Code2) contains the literal value
+ -- Char_Literal_Value (Uint2) contains the literal value
-- Entity (Node4-Sem)
-- Associated_Node (Node4-Sem)
-- Has_Private_View (Flag11-Sem) set in generic units.
@@ -4382,6 +4397,7 @@ package Sinfo is
-- Name (Node2)
-- Parent_Spec (Node4-Sem)
-- Corresponding_Spec (Node5-Sem)
+ -- Corresponding_Formal_Spec (Node3-Sem)
-- From_Default (Flag6-Sem)
-----------------------------------------
@@ -5679,9 +5695,33 @@ package Sinfo is
-----------------------------------------
-- FORMAL_SUBPROGRAM_DECLARATION ::=
+ -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION
+ -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION
+
+ --------------------------------------------------
+ -- 12.6 Formal Concrete Subprogram Declaration --
+ --------------------------------------------------
+
+ -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::=
-- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT];
- -- N_Formal_Subprogram_Declaration
+ -- N_Formal_Concrete_Subprogram_Declaration
+ -- Sloc points to WITH
+ -- Specification (Node1)
+ -- Default_Name (Node2) (set to Empty if no subprogram default)
+ -- Box_Present (Flag15)
+
+ -- Note: if no subprogram default is present, then Name is set
+ -- to Empty, and Box_Present is False.
+
+ --------------------------------------------------
+ -- 12.6 Formal Abstract Subprogram Declaration --
+ --------------------------------------------------
+
+ -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::=
+ -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT];
+
+ -- N_Formal_Abstract_Subprogram_Declaration
-- Sloc points to WITH
-- Specification (Node1)
-- Default_Name (Node2) (set to Empty if no subprogram default)
@@ -5697,8 +5737,9 @@ package Sinfo is
-- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <>
-- There is no separate node in the tree for a subprogram default.
- -- Instead the parent (N_Formal_Subprogram_Declaration) node contains
- -- the default name or box indication, as needed.
+ -- Instead the parent (N_Formal_Concrete_Subprogram_Declaration
+ -- or N_Formal_Abstract_Subprogram_Declaration) node contains the
+ -- default name or box indication, as needed.
------------------------
-- 12.6 Default Name --
@@ -6720,6 +6761,8 @@ package Sinfo is
N_Exception_Declaration,
N_Exception_Handler,
N_Floating_Point_Definition,
+ N_Formal_Abstract_Subprogram_Declaration,
+ N_Formal_Concrete_Subprogram_Declaration,
N_Formal_Decimal_Fixed_Point_Definition,
N_Formal_Derived_Type_Definition,
N_Formal_Discrete_Type_Definition,
@@ -6729,7 +6772,6 @@ package Sinfo is
N_Formal_Package_Declaration,
N_Formal_Private_Type_Definition,
N_Formal_Signed_Integer_Type_Definition,
- N_Formal_Subprogram_Declaration,
N_Generic_Association,
N_Handled_Sequence_Of_Statements,
N_Index_Or_Discriminant_Constraint,
@@ -6796,6 +6838,10 @@ package Sinfo is
N_Defining_Character_Literal ..
N_Defining_Operator_Symbol;
+ subtype N_Formal_Subprogram_Declaration is Node_Kind range
+ N_Formal_Abstract_Subprogram_Declaration ..
+ N_Formal_Concrete_Subprogram_Declaration;
+
subtype N_Generic_Declaration is Node_Kind range
N_Generic_Package_Declaration ..
N_Generic_Subprogram_Declaration;
@@ -7005,7 +7051,7 @@ package Sinfo is
(N : Node_Id) return Boolean; -- Flag15
function Char_Literal_Value
- (N : Node_Id) return Char_Code; -- Char_Code2
+ (N : Node_Id) return Uint; -- Uint2
function Chars
(N : Node_Id) return Name_Id; -- Name1
@@ -7073,6 +7119,9 @@ package Sinfo is
function Corresponding_Body
(N : Node_Id) return Node_Id; -- Node5
+ function Corresponding_Formal_Spec
+ (N : Node_Id) return Node_Id; -- Node3
+
function Corresponding_Generic_Association
(N : Node_Id) return Node_Id; -- Node5
@@ -7800,7 +7849,7 @@ package Sinfo is
(N : Node_Id; Val : Boolean := True); -- Flag5
procedure Set_Char_Literal_Value
- (N : Node_Id; Val : Char_Code); -- Char_Code2
+ (N : Node_Id; Val : Uint); -- Uint2
procedure Set_Chars
(N : Node_Id; Val : Name_Id); -- Name1
@@ -7868,6 +7917,9 @@ package Sinfo is
procedure Set_Corresponding_Body
(N : Node_Id; Val : Node_Id); -- Node5
+ procedure Set_Corresponding_Formal_Spec
+ (N : Node_Id; Val : Node_Id); -- Node3
+
procedure Set_Corresponding_Generic_Association
(N : Node_Id; Val : Node_Id); -- Node5
@@ -8572,6 +8624,7 @@ package Sinfo is
pragma Inline (Controlling_Argument);
pragma Inline (Conversion_OK);
pragma Inline (Corresponding_Body);
+ pragma Inline (Corresponding_Formal_Spec);
pragma Inline (Corresponding_Generic_Association);
pragma Inline (Corresponding_Integer_Value);
pragma Inline (Corresponding_Spec);
@@ -8834,6 +8887,7 @@ package Sinfo is
pragma Inline (Set_Controlling_Argument);
pragma Inline (Set_Conversion_OK);
pragma Inline (Set_Corresponding_Body);
+ pragma Inline (Set_Corresponding_Formal_Spec);
pragma Inline (Set_Corresponding_Generic_Association);
pragma Inline (Set_Corresponding_Integer_Value);
pragma Inline (Set_Corresponding_Spec);
diff --git a/gcc/ada/sinput.adb b/gcc/ada/sinput.adb
index f7fb3ced3e1..6eabba27599 100644
--- a/gcc/ada/sinput.adb
+++ b/gcc/ada/sinput.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -34,12 +34,13 @@
pragma Style_Checks (All_Checks);
-- Subprograms not all in alpha order
-with Debug; use Debug;
-with Namet; use Namet;
-with Opt; use Opt;
-with Output; use Output;
-with Tree_IO; use Tree_IO;
-with System; use System;
+with Debug; use Debug;
+with Namet; use Namet;
+with Opt; use Opt;
+with Output; use Output;
+with Tree_IO; use Tree_IO;
+with System; use System;
+with Widechar; use Widechar;
with System.Memory;
@@ -644,53 +645,36 @@ package body Sinput is
-- Skip_Line_Terminators --
---------------------------
- -- There are two distinct concepts of line terminator in GNAT
-
- -- A logical line terminator is what corresponds to the "end of a line"
- -- as described in RM 2.2 (13). Any of the characters FF, LF, CR or VT
- -- acts as an end of logical line in this sense, and it is essentially
- -- irrelevant whether one or more appears in sequence (since if a
- -- sequence of such characters is regarded as separate ends of line,
- -- then the intervening logical lines are null in any case).
-
- -- A physical line terminator is a sequence of format effectors that
- -- is treated as ending a physical line. Physical lines have no Ada
- -- semantic significance, but they are significant for error reporting
- -- purposes, since errors are identified by line and column location.
-
- -- In GNAT, a physical line is ended by any of the sequences LF, CR/LF,
- -- CR or LF/CR. LF is used in typical Unix systems, CR/LF in DOS systems,
- -- and CR alone in System 7. We don't know of any system using LF/CR, but
- -- it seems reasonable to include this case for consistency. In addition,
- -- we recognize any of these sequences in any of the operating systems,
- -- for better behavior in treating foreign files (e.g. a Unix file with
- -- LF terminators transferred to a DOS system).
-
procedure Skip_Line_Terminators
(P : in out Source_Ptr;
Physical : out Boolean)
is
- begin
- pragma Assert (Source (P) in Line_Terminator);
+ Chr : constant Character := Source (P);
- if Source (P) = CR then
+ begin
+ if Chr = CR then
if Source (P + 1) = LF then
P := P + 2;
else
P := P + 1;
end if;
- elsif Source (P) = LF then
- if Source (P + 1) = CR then
+ elsif Chr = LF then
+ if Source (P) = CR then
P := P + 2;
else
P := P + 1;
end if;
- else -- Source (P) = FF or else Source (P) = VT
+ elsif Chr = FF or else Chr = VT then
P := P + 1;
Physical := False;
return;
+
+ -- Otherwise we have a wide character
+
+ else
+ Skip_Wide (Source, P);
end if;
-- Fall through in the physical line terminator case. First deal with
diff --git a/gcc/ada/sinput.ads b/gcc/ada/sinput.ads
index 53e8889b424..b47b4dc2f89 100644
--- a/gcc/ada/sinput.ads
+++ b/gcc/ada/sinput.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -37,8 +37,32 @@
-- General Note: throughout the compiler, we use the term line or source
-- line to refer to a physical line in the source, terminated by the end of
--- physical line sequence. See Skip_Line_Terminators procedure for a full
--- description of the difference between logical and physical lines.
+-- physical line sequence.
+
+-- There are two distinct concepts of line terminator in GNAT
+
+-- A logical line terminator is what corresponds to the "end of a line" as
+-- described in RM 2.2 (13). Any of the characters FF, LF, CR or VT or any
+-- wide character that is a Line or Paragraph Separator acts as an end of
+-- logical line in this sense, and it is essentially irrelevant whether one
+-- or more appears in sequence (since if sequence of such characters is
+-- regarded as separate ends of line, then the intervening logical lines
+-- are null in any case).
+
+-- A physical line terminator is a sequence of format effectors that is
+-- treated as ending a physical line. Physical lines have no Ada semantic
+-- significance, but they are significant for error reporting purposes,
+-- since errors are identified by line and column location.
+
+-- In GNAT, a physical line is ended by any of the sequences LF, CR/LF, CR or
+-- LF/CR. LF is used in typical Unix systems, CR/LF in DOS systems, and CR
+-- alone in System 7. We don't know of any system using LF/CR, but it seems
+-- reasonable to include this case for consistency. In addition, we recognize
+-- any of these sequences in any of the operating systems, for better
+-- behavior in treating foreign files (e.g. a Unix file with LF terminators
+-- transferred to a DOS system). Finally, wide character codes in cagtegories
+-- Separator, Line and Separator, Paragraph are considered to be physical
+-- line terminators.
with Alloc;
with Casing; use Casing;
@@ -293,7 +317,7 @@ package Sinput is
procedure Lock;
-- Lock internal tables
- Main_Source_File : Source_File_Index;
+ Main_Source_File : Source_File_Index := No_Source_File;
-- This is set to the source file index of the main unit
-----------------------------
@@ -531,16 +555,29 @@ package Sinput is
procedure Skip_Line_Terminators
(P : in out Source_Ptr;
Physical : out Boolean);
- -- On entry, Source (P) points to the line terminator character that
- -- terminates a line. The result set in P is the location of the first
- -- character of the following line (after skipping the sequence of line
- -- terminator characters terminating the current line). In addition, if
- -- the terminator sequence ends a physical line (the definition of what
- -- constitutes a physical line is embodied in the implementation of this
- -- function), and it is the first time this sequence is encountered, then
- -- an entry is made in the lines table to record the location for further
- -- use by functions such as Get_Line_Number. Physical is set to True if
- -- the line terminator was the end of a physical line.
+ -- On entry, P points to a line terminator that has been encountered,
+ -- which is one of FF,LF,VT,CR or a wide character sequence whose value is
+ -- in category Separator,Line or Separator,Paragraph. The purpose of this
+ -- P points just past the character that was scanned. The purpose of this
+ -- routine is to distinguish physical and logical line endings. A physical
+ -- line ending is one of:
+ --
+ -- CR on its own (MAC System 7)
+ -- LF on its own (Unix and unix-like systems)
+ -- CR/LF (DOS, Windows)
+ -- LF/CR (not used, but recognized in any case)
+ -- Wide character in Separator,Line or Separator,Paragraph category
+ --
+ -- A logical line ending (that is not a physical line ending) is one of:
+ --
+ -- VT on its own
+ -- FF on its own
+ --
+ -- On return, P is bumped past the line ending sequence (one of the above
+ -- seven possibilities). Physical is set to True to indicate that a
+ -- physical end of line was encountered, in which case this routine also
+ -- makes sure that the lines table for the current source file has an
+ -- appropriate entry for the start of the new physical line.
function Source_Offset (S : Source_Ptr) return Nat;
-- Returns the zero-origin offset of the given source location from the
diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb
index bdb73ce1595..c80da272b76 100644
--- a/gcc/ada/snames.adb
+++ b/gcc/ada/snames.adb
@@ -1,1042 +1,1049 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- S N A M E S --
--- --
--- B o d y --
--- --
--- Copyright (C) 1992-2004, 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- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
--- for more details. You should have received a copy of the GNU General --
--- Public License distributed with GNAT; see file COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
--- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit does not by itself cause the resulting executable to be --
--- covered by the GNU General Public License. This exception does not --
--- however invalidate any other reasons why the executable file might be --
--- covered by the GNU Public License. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-with Namet; use Namet;
-with Table;
-
-package body Snames is
-
- -- Table used to record convention identifiers
-
- type Convention_Id_Entry is record
- Name : Name_Id;
- Convention : Convention_Id;
- end record;
-
- package Convention_Identifiers is new Table.Table (
- Table_Component_Type => Convention_Id_Entry,
- Table_Index_Type => Int,
- Table_Low_Bound => 1,
- Table_Initial => 50,
- Table_Increment => 200,
- Table_Name => "Name_Convention_Identifiers");
-
- -- Table of names to be set by Initialize. Each name is terminated by a
- -- single #, and the end of the list is marked by a null entry, i.e. by
- -- two # marks in succession. Note that the table does not include the
- -- entries for a-z, since these are initialized by Namet itself.
-
- Preset_Names : constant String :=
- "_parent#" &
- "_tag#" &
- "off#" &
- "space#" &
- "time#" &
- "_abort_signal#" &
- "_alignment#" &
- "_assign#" &
- "_atcb#" &
- "_chain#" &
- "_clean#" &
- "_controller#" &
- "_entry_bodies#" &
- "_expunge#" &
- "_final_list#" &
- "_idepth#" &
- "_init#" &
- "_local_final_list#" &
- "_master#" &
- "_object#" &
- "_priority#" &
- "_process_atsd#" &
- "_secondary_stack#" &
- "_service#" &
- "_size#" &
- "_stack#" &
- "_tags#" &
- "_task#" &
- "_task_id#" &
- "_task_info#" &
- "_task_name#" &
- "_trace_sp#" &
- "initialize#" &
- "adjust#" &
- "finalize#" &
- "next#" &
- "prev#" &
- "_typecode#" &
- "_from_any#" &
- "_to_any#" &
- "allocate#" &
- "deallocate#" &
- "dereference#" &
- "decimal_io#" &
- "enumeration_io#" &
- "fixed_io#" &
- "float_io#" &
- "integer_io#" &
- "modular_io#" &
- "a_textio#" &
- "a_witeio#" &
- "const#" &
- "<error>#" &
- "go#" &
- "put#" &
- "put_line#" &
- "to#" &
- "finalization#" &
- "finalization_root#" &
- "interfaces#" &
- "standard#" &
- "system#" &
- "text_io#" &
- "wide_text_io#" &
- "no_dsa#" &
- "garlic_dsa#" &
- "polyorb_dsa#" &
- "addr#" &
- "async#" &
- "get_active_partition_id#" &
- "get_rci_package_receiver#" &
- "get_rci_package_ref#" &
- "origin#" &
- "params#" &
- "partition#" &
- "partition_interface#" &
- "ras#" &
- "call#" &
- "rci_name#" &
- "receiver#" &
- "result#" &
- "rpc#" &
- "subp_id#" &
- "operation#" &
- "argument#" &
- "arg_modes#" &
- "handler#" &
- "target#" &
- "req#" &
- "obj_typecode#" &
- "stub#" &
- "Oabs#" &
- "Oand#" &
- "Omod#" &
- "Onot#" &
- "Oor#" &
- "Orem#" &
- "Oxor#" &
- "Oeq#" &
- "One#" &
- "Olt#" &
- "Ole#" &
- "Ogt#" &
- "Oge#" &
- "Oadd#" &
- "Osubtract#" &
- "Oconcat#" &
- "Omultiply#" &
- "Odivide#" &
- "Oexpon#" &
- "ada_83#" &
- "ada_95#" &
- "ada_05#" &
- "c_pass_by_copy#" &
- "compile_time_warning#" &
- "component_alignment#" &
- "convention_identifier#" &
- "detect_blocking#" &
- "discard_names#" &
- "elaboration_checks#" &
- "eliminate#" &
- "explicit_overriding#" &
- "extend_system#" &
- "extensions_allowed#" &
- "external_name_casing#" &
- "float_representation#" &
- "initialize_scalars#" &
- "interrupt_state#" &
- "license#" &
- "locking_policy#" &
- "long_float#" &
- "no_run_time#" &
- "no_strict_aliasing#" &
- "normalize_scalars#" &
- "polling#" &
- "persistent_data#" &
- "persistent_object#" &
- "profile#" &
- "profile_warnings#" &
- "propagate_exceptions#" &
- "queuing_policy#" &
- "ravenscar#" &
- "restricted_run_time#" &
- "restrictions#" &
- "restriction_warnings#" &
- "reviewable#" &
- "source_file_name#" &
- "source_file_name_project#" &
- "style_checks#" &
- "suppress#" &
- "suppress_exception_locations#" &
- "task_dispatching_policy#" &
- "universal_data#" &
- "unsuppress#" &
- "use_vads_size#" &
- "validity_checks#" &
- "warnings#" &
- "abort_defer#" &
- "all_calls_remote#" &
- "annotate#" &
- "assert#" &
- "asynchronous#" &
- "atomic#" &
- "atomic_components#" &
- "attach_handler#" &
- "comment#" &
- "common_object#" &
- "complex_representation#" &
- "controlled#" &
- "convention#" &
- "cpp_class#" &
- "cpp_constructor#" &
- "cpp_virtual#" &
- "cpp_vtable#" &
- "debug#" &
- "elaborate#" &
- "elaborate_all#" &
- "elaborate_body#" &
- "export#" &
- "export_exception#" &
- "export_function#" &
- "export_object#" &
- "export_procedure#" &
- "export_value#" &
- "export_valued_procedure#" &
- "external#" &
- "finalize_storage_only#" &
- "ident#" &
- "import#" &
- "import_exception#" &
- "import_function#" &
- "import_object#" &
- "import_procedure#" &
- "import_valued_procedure#" &
- "inline#" &
- "inline_always#" &
- "inline_generic#" &
- "inspection_point#" &
- "interface#" &
- "interface_name#" &
- "interrupt_handler#" &
- "interrupt_priority#" &
- "java_constructor#" &
- "java_interface#" &
- "keep_names#" &
- "link_with#" &
- "linker_alias#" &
- "linker_options#" &
- "linker_section#" &
- "list#" &
- "machine_attribute#" &
- "main#" &
- "main_storage#" &
- "memory_size#" &
- "no_return#" &
- "obsolescent#" &
- "optimize#" &
- "optional_overriding#" &
- "overriding#" &
- "pack#" &
- "page#" &
- "passive#" &
- "preelaborate#" &
- "priority#" &
- "psect_object#" &
- "pure#" &
- "pure_function#" &
- "remote_call_interface#" &
- "remote_types#" &
- "share_generic#" &
- "shared#" &
- "shared_passive#" &
- "source_reference#" &
- "stream_convert#" &
- "subtitle#" &
- "suppress_all#" &
- "suppress_debug_info#" &
- "suppress_initialization#" &
- "system_name#" &
- "task_info#" &
- "task_name#" &
- "task_storage#" &
- "thread_body#" &
- "time_slice#" &
- "title#" &
- "unchecked_union#" &
- "unimplemented_unit#" &
- "unreferenced#" &
- "unreserve_all_interrupts#" &
- "volatile#" &
- "volatile_components#" &
- "weak_external#" &
- "ada#" &
- "assembler#" &
- "cobol#" &
- "cpp#" &
- "fortran#" &
- "intrinsic#" &
- "java#" &
- "stdcall#" &
- "stubbed#" &
- "asm#" &
- "assembly#" &
- "default#" &
- "dll#" &
- "win32#" &
- "as_is#" &
- "body_file_name#" &
- "boolean_entry_barriers#" &
- "casing#" &
- "code#" &
- "component#" &
- "component_size_4#" &
- "copy#" &
- "d_float#" &
- "descriptor#" &
- "dot_replacement#" &
- "dynamic#" &
- "entity#" &
- "external_name#" &
- "first_optional_parameter#" &
- "form#" &
- "g_float#" &
- "gcc#" &
- "gnat#" &
- "gpl#" &
- "ieee_float#" &
- "internal#" &
- "link_name#" &
- "lowercase#" &
- "max_entry_queue_depth#" &
- "max_entry_queue_length#" &
- "max_size#" &
- "mechanism#" &
- "mixedcase#" &
- "modified_gpl#" &
- "name#" &
- "nca#" &
- "no#" &
- "no_dependence#" &
- "no_dynamic_attachment#" &
- "no_dynamic_interrupts#" &
- "no_requeue#" &
- "no_requeue_statements#" &
- "no_task_attributes#" &
- "no_task_attributes_package#" &
- "on#" &
- "parameter_types#" &
- "reference#" &
- "restricted#" &
- "result_mechanism#" &
- "result_type#" &
- "runtime#" &
- "sb#" &
- "secondary_stack_size#" &
- "section#" &
- "semaphore#" &
- "simple_barriers#" &
- "spec_file_name#" &
- "static#" &
- "stack_size#" &
- "subunit_file_name#" &
- "task_stack_size_default#" &
- "task_type#" &
- "time_slicing_enabled#" &
- "top_guard#" &
- "uba#" &
- "ubs#" &
- "ubsb#" &
- "unit_name#" &
- "unknown#" &
- "unrestricted#" &
- "uppercase#" &
- "user#" &
- "vax_float#" &
- "vms#" &
- "working_storage#" &
- "abort_signal#" &
- "access#" &
- "address#" &
- "address_size#" &
- "aft#" &
- "alignment#" &
- "asm_input#" &
- "asm_output#" &
- "ast_entry#" &
- "bit#" &
- "bit_order#" &
- "bit_position#" &
- "body_version#" &
- "callable#" &
- "caller#" &
- "code_address#" &
- "component_size#" &
- "compose#" &
- "constrained#" &
- "count#" &
- "default_bit_order#" &
- "definite#" &
- "delta#" &
- "denorm#" &
- "digits#" &
- "elaborated#" &
- "emax#" &
- "enum_rep#" &
- "epsilon#" &
- "exponent#" &
- "external_tag#" &
- "first#" &
- "first_bit#" &
- "fixed_value#" &
- "fore#" &
- "has_access_values#" &
- "has_discriminants#" &
- "identity#" &
- "img#" &
- "integer_value#" &
- "large#" &
- "last#" &
- "last_bit#" &
- "leading_part#" &
- "length#" &
- "machine_emax#" &
- "machine_emin#" &
- "machine_mantissa#" &
- "machine_overflows#" &
- "machine_radix#" &
- "machine_rounds#" &
- "machine_size#" &
- "mantissa#" &
- "max_size_in_storage_elements#" &
- "maximum_alignment#" &
- "mechanism_code#" &
- "mod#" &
- "model_emin#" &
- "model_epsilon#" &
- "model_mantissa#" &
- "model_small#" &
- "modulus#" &
- "null_parameter#" &
- "object_size#" &
- "partition_id#" &
- "passed_by_reference#" &
- "pool_address#" &
- "pos#" &
- "position#" &
- "range#" &
- "range_length#" &
- "round#" &
- "safe_emax#" &
- "safe_first#" &
- "safe_large#" &
- "safe_last#" &
- "safe_small#" &
- "scale#" &
- "scaling#" &
- "signed_zeros#" &
- "size#" &
- "small#" &
- "storage_size#" &
- "storage_unit#" &
- "tag#" &
- "target_name#" &
- "terminated#" &
- "to_address#" &
- "type_class#" &
- "uet_address#" &
- "unbiased_rounding#" &
- "unchecked_access#" &
- "unconstrained_array#" &
- "universal_literal_string#" &
- "unrestricted_access#" &
- "vads_size#" &
- "val#" &
- "valid#" &
- "value_size#" &
- "version#" &
- "wchar_t_size#" &
- "wide_width#" &
- "width#" &
- "word_size#" &
- "adjacent#" &
- "ceiling#" &
- "copy_sign#" &
- "floor#" &
- "fraction#" &
- "image#" &
- "input#" &
- "machine#" &
- "max#" &
- "min#" &
- "model#" &
- "pred#" &
- "remainder#" &
- "rounding#" &
- "succ#" &
- "truncation#" &
- "value#" &
- "wide_image#" &
- "wide_value#" &
- "output#" &
- "read#" &
- "write#" &
- "elab_body#" &
- "elab_spec#" &
- "storage_pool#" &
- "base#" &
- "class#" &
- "ceiling_locking#" &
- "inheritance_locking#" &
- "fifo_queuing#" &
- "priority_queuing#" &
- "fifo_within_priorities#" &
- "access_check#" &
- "accessibility_check#" &
- "discriminant_check#" &
- "division_check#" &
- "elaboration_check#" &
- "index_check#" &
- "length_check#" &
- "overflow_check#" &
- "range_check#" &
- "storage_check#" &
- "tag_check#" &
- "all_checks#" &
- "abort#" &
- "abs#" &
- "accept#" &
- "and#" &
- "all#" &
- "array#" &
- "at#" &
- "begin#" &
- "body#" &
- "case#" &
- "constant#" &
- "declare#" &
- "delay#" &
- "do#" &
- "else#" &
- "elsif#" &
- "end#" &
- "entry#" &
- "exception#" &
- "exit#" &
- "for#" &
- "function#" &
- "generic#" &
- "goto#" &
- "if#" &
- "in#" &
- "is#" &
- "limited#" &
- "loop#" &
- "new#" &
- "not#" &
- "null#" &
- "of#" &
- "or#" &
- "others#" &
- "out#" &
- "package#" &
- "pragma#" &
- "private#" &
- "procedure#" &
- "raise#" &
- "record#" &
- "rem#" &
- "renames#" &
- "return#" &
- "reverse#" &
- "select#" &
- "separate#" &
- "subtype#" &
- "task#" &
- "terminate#" &
- "then#" &
- "type#" &
- "use#" &
- "when#" &
- "while#" &
- "with#" &
- "xor#" &
- "divide#" &
- "enclosing_entity#" &
- "exception_information#" &
- "exception_message#" &
- "exception_name#" &
- "file#" &
- "import_address#" &
- "import_largest_value#" &
- "import_value#" &
- "is_negative#" &
- "line#" &
- "rotate_left#" &
- "rotate_right#" &
- "shift_left#" &
- "shift_right#" &
- "shift_right_arithmetic#" &
- "source_location#" &
- "unchecked_conversion#" &
- "unchecked_deallocation#" &
- "to_pointer#" &
- "abstract#" &
- "aliased#" &
- "protected#" &
- "until#" &
- "requeue#" &
- "tagged#" &
- "raise_exception#" &
- "ada_roots#" &
- "binder#" &
- "binder_driver#" &
- "body_suffix#" &
- "builder#" &
- "compiler#" &
- "compiler_driver#" &
- "compiler_kind#" &
- "compute_dependency#" &
- "cross_reference#" &
- "default_linker#" &
- "default_switches#" &
- "dependency_option#" &
- "exec_dir#" &
- "executable#" &
- "executable_suffix#" &
- "extends#" &
- "externally_built#" &
- "finder#" &
- "global_configuration_pragmas#" &
- "gnatls#" &
- "gnatstub#" &
- "implementation#" &
- "implementation_exceptions#" &
- "implementation_suffix#" &
- "include_option#" &
- "language_processing#" &
- "languages#" &
- "library_dir#" &
- "library_auto_init#" &
- "library_gcc#" &
- "library_interface#" &
- "library_kind#" &
- "library_name#" &
- "library_options#" &
- "library_reference_symbol_file#" &
- "library_src_dir#" &
- "library_symbol_file#" &
- "library_symbol_policy#" &
- "library_version#" &
- "linker#" &
- "local_configuration_pragmas#" &
- "locally_removed_files#" &
- "metrics#" &
- "naming#" &
- "object_dir#" &
- "pretty_printer#" &
- "project#" &
- "separate_suffix#" &
- "source_dirs#" &
- "source_files#" &
- "source_list_file#" &
- "spec#" &
- "spec_suffix#" &
- "specification#" &
- "specification_exceptions#" &
- "specification_suffix#" &
- "switches#" &
- "unaligned_valid#" &
- "#";
-
- ---------------------
- -- Generated Names --
- ---------------------
-
- -- This section lists the various cases of generated names which are
- -- built from existing names by adding unique leading and/or trailing
- -- upper case letters. In some cases these names are built recursively,
- -- in particular names built from types may be built from types which
- -- themselves have generated names. In this list, xxx represents an
- -- existing name to which identifying letters are prepended or appended,
- -- and a trailing n represents a serial number in an external name that
- -- has some semantic significance (e.g. the n'th index type of an array).
-
- -- xxxA access type for formal xxx in entry param record (Exp_Ch9)
- -- xxxB tag table for tagged type xxx (Exp_Ch3)
- -- xxxB task body procedure for task xxx (Exp_Ch9)
- -- xxxD dispatch table for tagged type xxx (Exp_Ch3)
- -- xxxD discriminal for discriminant xxx (Sem_Ch3)
- -- xxxDn n'th discr check function for rec type xxx (Exp_Ch3)
- -- xxxE elaboration boolean flag for task xxx (Exp_Ch9)
- -- xxxE dispatch table pointer type for tagged type xxx (Exp_Ch3)
- -- xxxE parameters for accept body for entry xxx (Exp_Ch9)
- -- xxxFn n'th primitive of a tagged type (named xxx) (Exp_Ch3)
- -- xxxJ tag table type index for tagged type xxx (Exp_Ch3)
- -- xxxM master Id value for access type xxx (Exp_Ch3)
- -- xxxP tag table pointer type for tagged type xxx (Exp_Ch3)
- -- xxxP parameter record type for entry xxx (Exp_Ch9)
- -- xxxPA access to parameter record type for entry xxx (Exp_Ch9)
- -- xxxPn pointer type for n'th primitive of tagged type xxx (Exp_Ch3)
- -- xxxR dispatch table pointer for tagged type xxx (Exp_Ch3)
- -- xxxT tag table type for tagged type xxx (Exp_Ch3)
- -- xxxT literal table for enumeration type xxx (Sem_Ch3)
- -- xxxV type for task value record for task xxx (Exp_Ch9)
- -- xxxX entry index constant (Exp_Ch9)
- -- xxxY dispatch table type for tagged type xxx (Exp_Ch3)
- -- xxxZ size variable for task xxx (Exp_Ch9)
-
- -- TSS names
-
- -- xxxDA deep adjust routine for type xxx (Exp_TSS)
- -- xxxDF deep finalize routine for type xxx (Exp_TSS)
- -- xxxDI deep initialize routine for type xxx (Exp_TSS)
- -- xxxEQ composite equality routine for record type xxx (Exp_TSS)
- -- xxxIP initialization procedure for type xxx (Exp_TSS)
- -- xxxRA RAs type access routine for type xxx (Exp_TSS)
- -- xxxRD RAs type dereference routine for type xxx (Exp_TSS)
- -- xxxRP Rep to Pos conversion for enumeration type xxx (Exp_TSS)
- -- xxxSA array/slice assignment for controlled comp. arrays (Exp_TSS)
- -- xxxSI stream input attribute subprogram for type xxx (Exp_TSS)
- -- xxxSO stream output attribute subprogram for type xxx (Exp_TSS)
- -- xxxSR stream read attribute subprogram for type xxx (Exp_TSS)
- -- xxxSW stream write attribute subprogram for type xxx (Exp_TSS)
-
- -- Implicit type names
-
- -- TxxxT type of literal table for enumeration type xxx (Sem_Ch3)
-
- -- (Note: this list is not complete or accurate ???)
-
- ----------------------
- -- Get_Attribute_Id --
- ----------------------
-
- function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
- begin
- return Attribute_Id'Val (N - First_Attribute_Name);
- end Get_Attribute_Id;
-
- ------------------
- -- Get_Check_Id --
- ------------------
-
- function Get_Check_Id (N : Name_Id) return Check_Id is
- begin
- return Check_Id'Val (N - First_Check_Name);
- end Get_Check_Id;
-
- -----------------------
- -- Get_Convention_Id --
- -----------------------
-
- function Get_Convention_Id (N : Name_Id) return Convention_Id is
- begin
- case N is
- when Name_Ada => return Convention_Ada;
- when Name_Assembler => return Convention_Assembler;
- when Name_C => return Convention_C;
- when Name_COBOL => return Convention_COBOL;
- when Name_CPP => return Convention_CPP;
- when Name_Fortran => return Convention_Fortran;
- when Name_Intrinsic => return Convention_Intrinsic;
- when Name_Java => return Convention_Java;
- when Name_Stdcall => return Convention_Stdcall;
- when Name_Stubbed => return Convention_Stubbed;
-
- -- If no direct match, then we must have a convention
- -- identifier pragma that has specified this name.
-
- when others =>
- for J in 1 .. Convention_Identifiers.Last loop
- if N = Convention_Identifiers.Table (J).Name then
- return Convention_Identifiers.Table (J).Convention;
- end if;
- end loop;
-
- raise Program_Error;
- end case;
- end Get_Convention_Id;
-
- ---------------------------
- -- Get_Locking_Policy_Id --
- ---------------------------
-
- function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id is
- begin
- return Locking_Policy_Id'Val (N - First_Locking_Policy_Name);
- end Get_Locking_Policy_Id;
-
- -------------------
- -- Get_Pragma_Id --
- -------------------
-
- function Get_Pragma_Id (N : Name_Id) return Pragma_Id is
- begin
- if N = Name_AST_Entry then
- return Pragma_AST_Entry;
- elsif N = Name_Storage_Size then
- return Pragma_Storage_Size;
- elsif N = Name_Storage_Unit then
- return Pragma_Storage_Unit;
- elsif N not in First_Pragma_Name .. Last_Pragma_Name then
- return Unknown_Pragma;
- else
- return Pragma_Id'Val (N - First_Pragma_Name);
- end if;
- end Get_Pragma_Id;
-
- ---------------------------
- -- Get_Queuing_Policy_Id --
- ---------------------------
-
- function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id is
- begin
- return Queuing_Policy_Id'Val (N - First_Queuing_Policy_Name);
- end Get_Queuing_Policy_Id;
-
- ------------------------------------
- -- Get_Task_Dispatching_Policy_Id --
- ------------------------------------
-
- function Get_Task_Dispatching_Policy_Id (N : Name_Id)
- return Task_Dispatching_Policy_Id is
- begin
- return Task_Dispatching_Policy_Id'Val
- (N - First_Task_Dispatching_Policy_Name);
- end Get_Task_Dispatching_Policy_Id;
-
- ----------------
- -- Initialize --
- ----------------
-
- procedure Initialize is
- P_Index : Natural;
- Discard_Name : Name_Id;
-
- begin
- P_Index := Preset_Names'First;
-
- loop
- Name_Len := 0;
-
- while Preset_Names (P_Index) /= '#' loop
- Name_Len := Name_Len + 1;
- Name_Buffer (Name_Len) := Preset_Names (P_Index);
- P_Index := P_Index + 1;
- end loop;
-
- -- We do the Name_Find call to enter the name into the table, but
- -- we don't need to do anything with the result, since we already
- -- initialized all the preset names to have the right value (we
- -- are depending on the order of the names and Preset_Names).
-
- Discard_Name := Name_Find;
- P_Index := P_Index + 1;
- exit when Preset_Names (P_Index) = '#';
- end loop;
-
- -- Make sure that number of names in standard table is correct. If
- -- this check fails, run utility program XSNAMES to construct a new
- -- properly matching version of the body.
-
- pragma Assert (Discard_Name = Last_Predefined_Name);
-
- -- Initialize the convention identifiers table with the standard
- -- set of synonyms that we recognize for conventions.
-
- Convention_Identifiers.Init;
-
- Convention_Identifiers.Append ((Name_Asm, Convention_Assembler));
- Convention_Identifiers.Append ((Name_Assembly, Convention_Assembler));
-
- Convention_Identifiers.Append ((Name_Default, Convention_C));
- Convention_Identifiers.Append ((Name_External, Convention_C));
-
- Convention_Identifiers.Append ((Name_DLL, Convention_Stdcall));
- Convention_Identifiers.Append ((Name_Win32, Convention_Stdcall));
- end Initialize;
-
- -----------------------
- -- Is_Attribute_Name --
- -----------------------
-
- function Is_Attribute_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Attribute_Name .. Last_Attribute_Name;
- end Is_Attribute_Name;
-
- -------------------
- -- Is_Check_Name --
- -------------------
-
- function Is_Check_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Check_Name .. Last_Check_Name;
- end Is_Check_Name;
-
- ------------------------
- -- Is_Convention_Name --
- ------------------------
-
- function Is_Convention_Name (N : Name_Id) return Boolean is
- begin
- -- Check if this is one of the standard conventions
-
- if N in First_Convention_Name .. Last_Convention_Name
- or else N = Name_C
- then
- return True;
-
- -- Otherwise check if it is in convention identifier table
-
- else
- for J in 1 .. Convention_Identifiers.Last loop
- if N = Convention_Identifiers.Table (J).Name then
- return True;
- end if;
- end loop;
-
- return False;
- end if;
- end Is_Convention_Name;
-
- ------------------------------
- -- Is_Entity_Attribute_Name --
- ------------------------------
-
- function Is_Entity_Attribute_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Entity_Attribute_Name .. Last_Entity_Attribute_Name;
- end Is_Entity_Attribute_Name;
-
- --------------------------------
- -- Is_Function_Attribute_Name --
- --------------------------------
-
- function Is_Function_Attribute_Name (N : Name_Id) return Boolean is
- begin
- return N in
- First_Renamable_Function_Attribute ..
- Last_Renamable_Function_Attribute;
- end Is_Function_Attribute_Name;
-
- ----------------------------
- -- Is_Locking_Policy_Name --
- ----------------------------
-
- function Is_Locking_Policy_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Locking_Policy_Name .. Last_Locking_Policy_Name;
- end Is_Locking_Policy_Name;
-
- -----------------------------
- -- Is_Operator_Symbol_Name --
- -----------------------------
-
- function Is_Operator_Symbol_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Operator_Name .. Last_Operator_Name;
- end Is_Operator_Symbol_Name;
-
- --------------------
- -- Is_Pragma_Name --
- --------------------
-
- function Is_Pragma_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Pragma_Name .. Last_Pragma_Name
- or else N = Name_AST_Entry
- or else N = Name_Storage_Size
- or else N = Name_Storage_Unit;
- end Is_Pragma_Name;
-
- ---------------------------------
- -- Is_Procedure_Attribute_Name --
- ---------------------------------
-
- function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Procedure_Attribute .. Last_Procedure_Attribute;
- end Is_Procedure_Attribute_Name;
-
- ----------------------------
- -- Is_Queuing_Policy_Name --
- ----------------------------
-
- function Is_Queuing_Policy_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Queuing_Policy_Name .. Last_Queuing_Policy_Name;
- end Is_Queuing_Policy_Name;
-
- -------------------------------------
- -- Is_Task_Dispatching_Policy_Name --
- -------------------------------------
-
- function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Task_Dispatching_Policy_Name ..
- Last_Task_Dispatching_Policy_Name;
- end Is_Task_Dispatching_Policy_Name;
-
- ----------------------------
- -- Is_Type_Attribute_Name --
- ----------------------------
-
- function Is_Type_Attribute_Name (N : Name_Id) return Boolean is
- begin
- return N in First_Type_Attribute_Name .. Last_Type_Attribute_Name;
- end Is_Type_Attribute_Name;
-
- ----------------------------------
- -- Record_Convention_Identifier --
- ----------------------------------
-
- procedure Record_Convention_Identifier
- (Id : Name_Id;
- Convention : Convention_Id)
- is
- begin
- Convention_Identifiers.Append ((Id, Convention));
- end Record_Convention_Identifier;
-
-end Snames;
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- S N A M E S --
+-- --
+-- B o d y --
+-- --
+-- 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- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with Namet; use Namet;
+with Table;
+
+package body Snames is
+
+ -- Table used to record convention identifiers
+
+ type Convention_Id_Entry is record
+ Name : Name_Id;
+ Convention : Convention_Id;
+ end record;
+
+ package Convention_Identifiers is new Table.Table (
+ Table_Component_Type => Convention_Id_Entry,
+ Table_Index_Type => Int,
+ Table_Low_Bound => 1,
+ Table_Initial => 50,
+ Table_Increment => 200,
+ Table_Name => "Name_Convention_Identifiers");
+
+ -- Table of names to be set by Initialize. Each name is terminated by a
+ -- single #, and the end of the list is marked by a null entry, i.e. by
+ -- two # marks in succession. Note that the table does not include the
+ -- entries for a-z, since these are initialized by Namet itself.
+
+ Preset_Names : constant String :=
+ "_parent#" &
+ "_tag#" &
+ "off#" &
+ "space#" &
+ "time#" &
+ "_abort_signal#" &
+ "_alignment#" &
+ "_assign#" &
+ "_atcb#" &
+ "_chain#" &
+ "_clean#" &
+ "_controller#" &
+ "_entry_bodies#" &
+ "_expunge#" &
+ "_final_list#" &
+ "_idepth#" &
+ "_init#" &
+ "_local_final_list#" &
+ "_master#" &
+ "_object#" &
+ "_priority#" &
+ "_process_atsd#" &
+ "_secondary_stack#" &
+ "_service#" &
+ "_size#" &
+ "_stack#" &
+ "_tags#" &
+ "_task#" &
+ "_task_id#" &
+ "_task_info#" &
+ "_task_name#" &
+ "_trace_sp#" &
+ "initialize#" &
+ "adjust#" &
+ "finalize#" &
+ "next#" &
+ "prev#" &
+ "_typecode#" &
+ "_from_any#" &
+ "_to_any#" &
+ "allocate#" &
+ "deallocate#" &
+ "dereference#" &
+ "decimal_io#" &
+ "enumeration_io#" &
+ "fixed_io#" &
+ "float_io#" &
+ "integer_io#" &
+ "modular_io#" &
+ "const#" &
+ "<error>#" &
+ "go#" &
+ "put#" &
+ "put_line#" &
+ "to#" &
+ "finalization#" &
+ "finalization_root#" &
+ "interfaces#" &
+ "standard#" &
+ "system#" &
+ "text_io#" &
+ "wide_text_io#" &
+ "wide_wide_text_io#" &
+ "no_dsa#" &
+ "garlic_dsa#" &
+ "polyorb_dsa#" &
+ "addr#" &
+ "async#" &
+ "get_active_partition_id#" &
+ "get_rci_package_receiver#" &
+ "get_rci_package_ref#" &
+ "origin#" &
+ "params#" &
+ "partition#" &
+ "partition_interface#" &
+ "ras#" &
+ "call#" &
+ "rci_name#" &
+ "receiver#" &
+ "result#" &
+ "rpc#" &
+ "subp_id#" &
+ "operation#" &
+ "argument#" &
+ "arg_modes#" &
+ "handler#" &
+ "target#" &
+ "req#" &
+ "obj_typecode#" &
+ "stub#" &
+ "Oabs#" &
+ "Oand#" &
+ "Omod#" &
+ "Onot#" &
+ "Oor#" &
+ "Orem#" &
+ "Oxor#" &
+ "Oeq#" &
+ "One#" &
+ "Olt#" &
+ "Ole#" &
+ "Ogt#" &
+ "Oge#" &
+ "Oadd#" &
+ "Osubtract#" &
+ "Oconcat#" &
+ "Omultiply#" &
+ "Odivide#" &
+ "Oexpon#" &
+ "ada_83#" &
+ "ada_95#" &
+ "ada_05#" &
+ "c_pass_by_copy#" &
+ "compile_time_warning#" &
+ "component_alignment#" &
+ "convention_identifier#" &
+ "detect_blocking#" &
+ "discard_names#" &
+ "elaboration_checks#" &
+ "eliminate#" &
+ "explicit_overriding#" &
+ "extend_system#" &
+ "extensions_allowed#" &
+ "external_name_casing#" &
+ "float_representation#" &
+ "initialize_scalars#" &
+ "interrupt_state#" &
+ "license#" &
+ "locking_policy#" &
+ "long_float#" &
+ "no_run_time#" &
+ "no_strict_aliasing#" &
+ "normalize_scalars#" &
+ "polling#" &
+ "persistent_data#" &
+ "persistent_object#" &
+ "profile#" &
+ "profile_warnings#" &
+ "propagate_exceptions#" &
+ "queuing_policy#" &
+ "ravenscar#" &
+ "restricted_run_time#" &
+ "restrictions#" &
+ "restriction_warnings#" &
+ "reviewable#" &
+ "source_file_name#" &
+ "source_file_name_project#" &
+ "style_checks#" &
+ "suppress#" &
+ "suppress_exception_locations#" &
+ "task_dispatching_policy#" &
+ "universal_data#" &
+ "unsuppress#" &
+ "use_vads_size#" &
+ "validity_checks#" &
+ "warnings#" &
+ "abort_defer#" &
+ "all_calls_remote#" &
+ "annotate#" &
+ "assert#" &
+ "asynchronous#" &
+ "atomic#" &
+ "atomic_components#" &
+ "attach_handler#" &
+ "comment#" &
+ "common_object#" &
+ "complex_representation#" &
+ "controlled#" &
+ "convention#" &
+ "cpp_class#" &
+ "cpp_constructor#" &
+ "cpp_virtual#" &
+ "cpp_vtable#" &
+ "debug#" &
+ "elaborate#" &
+ "elaborate_all#" &
+ "elaborate_body#" &
+ "export#" &
+ "export_exception#" &
+ "export_function#" &
+ "export_object#" &
+ "export_procedure#" &
+ "export_value#" &
+ "export_valued_procedure#" &
+ "external#" &
+ "finalize_storage_only#" &
+ "ident#" &
+ "import#" &
+ "import_exception#" &
+ "import_function#" &
+ "import_object#" &
+ "import_procedure#" &
+ "import_valued_procedure#" &
+ "inline#" &
+ "inline_always#" &
+ "inline_generic#" &
+ "inspection_point#" &
+ "interface_name#" &
+ "interrupt_handler#" &
+ "interrupt_priority#" &
+ "java_constructor#" &
+ "java_interface#" &
+ "keep_names#" &
+ "link_with#" &
+ "linker_alias#" &
+ "linker_options#" &
+ "linker_section#" &
+ "list#" &
+ "machine_attribute#" &
+ "main#" &
+ "main_storage#" &
+ "memory_size#" &
+ "no_return#" &
+ "obsolescent#" &
+ "optimize#" &
+ "optional_overriding#" &
+ "pack#" &
+ "page#" &
+ "passive#" &
+ "preelaborate#" &
+ "priority#" &
+ "psect_object#" &
+ "pure#" &
+ "pure_function#" &
+ "remote_call_interface#" &
+ "remote_types#" &
+ "share_generic#" &
+ "shared#" &
+ "shared_passive#" &
+ "source_reference#" &
+ "stream_convert#" &
+ "subtitle#" &
+ "suppress_all#" &
+ "suppress_debug_info#" &
+ "suppress_initialization#" &
+ "system_name#" &
+ "task_info#" &
+ "task_name#" &
+ "task_storage#" &
+ "thread_body#" &
+ "time_slice#" &
+ "title#" &
+ "unchecked_union#" &
+ "unimplemented_unit#" &
+ "unreferenced#" &
+ "unreserve_all_interrupts#" &
+ "volatile#" &
+ "volatile_components#" &
+ "weak_external#" &
+ "ada#" &
+ "assembler#" &
+ "cobol#" &
+ "cpp#" &
+ "fortran#" &
+ "intrinsic#" &
+ "java#" &
+ "stdcall#" &
+ "stubbed#" &
+ "asm#" &
+ "assembly#" &
+ "default#" &
+ "dll#" &
+ "win32#" &
+ "as_is#" &
+ "body_file_name#" &
+ "boolean_entry_barriers#" &
+ "casing#" &
+ "code#" &
+ "component#" &
+ "component_size_4#" &
+ "copy#" &
+ "d_float#" &
+ "descriptor#" &
+ "dot_replacement#" &
+ "dynamic#" &
+ "entity#" &
+ "external_name#" &
+ "first_optional_parameter#" &
+ "form#" &
+ "g_float#" &
+ "gcc#" &
+ "gnat#" &
+ "gpl#" &
+ "ieee_float#" &
+ "internal#" &
+ "link_name#" &
+ "lowercase#" &
+ "max_entry_queue_depth#" &
+ "max_entry_queue_length#" &
+ "max_size#" &
+ "mechanism#" &
+ "mixedcase#" &
+ "modified_gpl#" &
+ "name#" &
+ "nca#" &
+ "no#" &
+ "no_dependence#" &
+ "no_dynamic_attachment#" &
+ "no_dynamic_interrupts#" &
+ "no_requeue#" &
+ "no_requeue_statements#" &
+ "no_task_attributes#" &
+ "no_task_attributes_package#" &
+ "on#" &
+ "parameter_types#" &
+ "reference#" &
+ "restricted#" &
+ "result_mechanism#" &
+ "result_type#" &
+ "runtime#" &
+ "sb#" &
+ "secondary_stack_size#" &
+ "section#" &
+ "semaphore#" &
+ "simple_barriers#" &
+ "spec_file_name#" &
+ "static#" &
+ "stack_size#" &
+ "subunit_file_name#" &
+ "task_stack_size_default#" &
+ "task_type#" &
+ "time_slicing_enabled#" &
+ "top_guard#" &
+ "uba#" &
+ "ubs#" &
+ "ubsb#" &
+ "unit_name#" &
+ "unknown#" &
+ "unrestricted#" &
+ "uppercase#" &
+ "user#" &
+ "vax_float#" &
+ "vms#" &
+ "working_storage#" &
+ "abort_signal#" &
+ "access#" &
+ "address#" &
+ "address_size#" &
+ "aft#" &
+ "alignment#" &
+ "asm_input#" &
+ "asm_output#" &
+ "ast_entry#" &
+ "bit#" &
+ "bit_order#" &
+ "bit_position#" &
+ "body_version#" &
+ "callable#" &
+ "caller#" &
+ "code_address#" &
+ "component_size#" &
+ "compose#" &
+ "constrained#" &
+ "count#" &
+ "default_bit_order#" &
+ "definite#" &
+ "delta#" &
+ "denorm#" &
+ "digits#" &
+ "elaborated#" &
+ "emax#" &
+ "enum_rep#" &
+ "epsilon#" &
+ "exponent#" &
+ "external_tag#" &
+ "first#" &
+ "first_bit#" &
+ "fixed_value#" &
+ "fore#" &
+ "has_access_values#" &
+ "has_discriminants#" &
+ "identity#" &
+ "img#" &
+ "integer_value#" &
+ "large#" &
+ "last#" &
+ "last_bit#" &
+ "leading_part#" &
+ "length#" &
+ "machine_emax#" &
+ "machine_emin#" &
+ "machine_mantissa#" &
+ "machine_overflows#" &
+ "machine_radix#" &
+ "machine_rounds#" &
+ "machine_size#" &
+ "mantissa#" &
+ "max_size_in_storage_elements#" &
+ "maximum_alignment#" &
+ "mechanism_code#" &
+ "mod#" &
+ "model_emin#" &
+ "model_epsilon#" &
+ "model_mantissa#" &
+ "model_small#" &
+ "modulus#" &
+ "null_parameter#" &
+ "object_size#" &
+ "partition_id#" &
+ "passed_by_reference#" &
+ "pool_address#" &
+ "pos#" &
+ "position#" &
+ "range#" &
+ "range_length#" &
+ "round#" &
+ "safe_emax#" &
+ "safe_first#" &
+ "safe_large#" &
+ "safe_last#" &
+ "safe_small#" &
+ "scale#" &
+ "scaling#" &
+ "signed_zeros#" &
+ "size#" &
+ "small#" &
+ "storage_size#" &
+ "storage_unit#" &
+ "stream_size#" &
+ "tag#" &
+ "target_name#" &
+ "terminated#" &
+ "to_address#" &
+ "type_class#" &
+ "uet_address#" &
+ "unbiased_rounding#" &
+ "unchecked_access#" &
+ "unconstrained_array#" &
+ "universal_literal_string#" &
+ "unrestricted_access#" &
+ "vads_size#" &
+ "val#" &
+ "valid#" &
+ "value_size#" &
+ "version#" &
+ "wchar_t_size#" &
+ "wide_wide_width#" &
+ "wide_width#" &
+ "width#" &
+ "word_size#" &
+ "adjacent#" &
+ "ceiling#" &
+ "copy_sign#" &
+ "floor#" &
+ "fraction#" &
+ "image#" &
+ "input#" &
+ "machine#" &
+ "max#" &
+ "min#" &
+ "model#" &
+ "pred#" &
+ "remainder#" &
+ "rounding#" &
+ "succ#" &
+ "truncation#" &
+ "value#" &
+ "wide_image#" &
+ "wide_wide_image#" &
+ "wide_value#" &
+ "wide_wide_value#" &
+ "output#" &
+ "read#" &
+ "write#" &
+ "elab_body#" &
+ "elab_spec#" &
+ "storage_pool#" &
+ "base#" &
+ "class#" &
+ "ceiling_locking#" &
+ "inheritance_locking#" &
+ "fifo_queuing#" &
+ "priority_queuing#" &
+ "fifo_within_priorities#" &
+ "access_check#" &
+ "accessibility_check#" &
+ "discriminant_check#" &
+ "division_check#" &
+ "elaboration_check#" &
+ "index_check#" &
+ "length_check#" &
+ "overflow_check#" &
+ "range_check#" &
+ "storage_check#" &
+ "tag_check#" &
+ "all_checks#" &
+ "abort#" &
+ "abs#" &
+ "accept#" &
+ "and#" &
+ "all#" &
+ "array#" &
+ "at#" &
+ "begin#" &
+ "body#" &
+ "case#" &
+ "constant#" &
+ "declare#" &
+ "delay#" &
+ "do#" &
+ "else#" &
+ "elsif#" &
+ "end#" &
+ "entry#" &
+ "exception#" &
+ "exit#" &
+ "for#" &
+ "function#" &
+ "generic#" &
+ "goto#" &
+ "if#" &
+ "in#" &
+ "is#" &
+ "limited#" &
+ "loop#" &
+ "new#" &
+ "not#" &
+ "null#" &
+ "of#" &
+ "or#" &
+ "others#" &
+ "out#" &
+ "package#" &
+ "pragma#" &
+ "private#" &
+ "procedure#" &
+ "raise#" &
+ "record#" &
+ "rem#" &
+ "renames#" &
+ "return#" &
+ "reverse#" &
+ "select#" &
+ "separate#" &
+ "subtype#" &
+ "task#" &
+ "terminate#" &
+ "then#" &
+ "type#" &
+ "use#" &
+ "when#" &
+ "while#" &
+ "with#" &
+ "xor#" &
+ "divide#" &
+ "enclosing_entity#" &
+ "exception_information#" &
+ "exception_message#" &
+ "exception_name#" &
+ "file#" &
+ "import_address#" &
+ "import_largest_value#" &
+ "import_value#" &
+ "is_negative#" &
+ "line#" &
+ "rotate_left#" &
+ "rotate_right#" &
+ "shift_left#" &
+ "shift_right#" &
+ "shift_right_arithmetic#" &
+ "source_location#" &
+ "unchecked_conversion#" &
+ "unchecked_deallocation#" &
+ "to_pointer#" &
+ "abstract#" &
+ "aliased#" &
+ "protected#" &
+ "until#" &
+ "requeue#" &
+ "tagged#" &
+ "raise_exception#" &
+ "ada_roots#" &
+ "binder#" &
+ "binder_driver#" &
+ "body_suffix#" &
+ "builder#" &
+ "compiler#" &
+ "compiler_driver#" &
+ "compiler_kind#" &
+ "compute_dependency#" &
+ "cross_reference#" &
+ "default_linker#" &
+ "default_switches#" &
+ "dependency_option#" &
+ "exec_dir#" &
+ "executable#" &
+ "executable_suffix#" &
+ "extends#" &
+ "externally_built#" &
+ "finder#" &
+ "global_configuration_pragmas#" &
+ "gnatls#" &
+ "gnatstub#" &
+ "implementation#" &
+ "implementation_exceptions#" &
+ "implementation_suffix#" &
+ "include_option#" &
+ "language_processing#" &
+ "languages#" &
+ "library_dir#" &
+ "library_auto_init#" &
+ "library_gcc#" &
+ "library_interface#" &
+ "library_kind#" &
+ "library_name#" &
+ "library_options#" &
+ "library_reference_symbol_file#" &
+ "library_src_dir#" &
+ "library_symbol_file#" &
+ "library_symbol_policy#" &
+ "library_version#" &
+ "linker#" &
+ "local_configuration_pragmas#" &
+ "locally_removed_files#" &
+ "metrics#" &
+ "naming#" &
+ "object_dir#" &
+ "pretty_printer#" &
+ "project#" &
+ "separate_suffix#" &
+ "source_dirs#" &
+ "source_files#" &
+ "source_list_file#" &
+ "spec#" &
+ "spec_suffix#" &
+ "specification#" &
+ "specification_exceptions#" &
+ "specification_suffix#" &
+ "switches#" &
+ "unaligned_valid#" &
+ "interface#" &
+ "overriding#" &
+ "synchronized#" &
+ "#";
+
+ ---------------------
+ -- Generated Names --
+ ---------------------
+
+ -- This section lists the various cases of generated names which are
+ -- built from existing names by adding unique leading and/or trailing
+ -- upper case letters. In some cases these names are built recursively,
+ -- in particular names built from types may be built from types which
+ -- themselves have generated names. In this list, xxx represents an
+ -- existing name to which identifying letters are prepended or appended,
+ -- and a trailing n represents a serial number in an external name that
+ -- has some semantic significance (e.g. the n'th index type of an array).
+
+ -- xxxA access type for formal xxx in entry param record (Exp_Ch9)
+ -- xxxB tag table for tagged type xxx (Exp_Ch3)
+ -- xxxB task body procedure for task xxx (Exp_Ch9)
+ -- xxxD dispatch table for tagged type xxx (Exp_Ch3)
+ -- xxxD discriminal for discriminant xxx (Sem_Ch3)
+ -- xxxDn n'th discr check function for rec type xxx (Exp_Ch3)
+ -- xxxE elaboration boolean flag for task xxx (Exp_Ch9)
+ -- xxxE dispatch table pointer type for tagged type xxx (Exp_Ch3)
+ -- xxxE parameters for accept body for entry xxx (Exp_Ch9)
+ -- xxxFn n'th primitive of a tagged type (named xxx) (Exp_Ch3)
+ -- xxxJ tag table type index for tagged type xxx (Exp_Ch3)
+ -- xxxM master Id value for access type xxx (Exp_Ch3)
+ -- xxxP tag table pointer type for tagged type xxx (Exp_Ch3)
+ -- xxxP parameter record type for entry xxx (Exp_Ch9)
+ -- xxxPA access to parameter record type for entry xxx (Exp_Ch9)
+ -- xxxPn pointer type for n'th primitive of tagged type xxx (Exp_Ch3)
+ -- xxxR dispatch table pointer for tagged type xxx (Exp_Ch3)
+ -- xxxT tag table type for tagged type xxx (Exp_Ch3)
+ -- xxxT literal table for enumeration type xxx (Sem_Ch3)
+ -- xxxV type for task value record for task xxx (Exp_Ch9)
+ -- xxxX entry index constant (Exp_Ch9)
+ -- xxxY dispatch table type for tagged type xxx (Exp_Ch3)
+ -- xxxZ size variable for task xxx (Exp_Ch9)
+
+ -- TSS names
+
+ -- xxxDA deep adjust routine for type xxx (Exp_TSS)
+ -- xxxDF deep finalize routine for type xxx (Exp_TSS)
+ -- xxxDI deep initialize routine for type xxx (Exp_TSS)
+ -- xxxEQ composite equality routine for record type xxx (Exp_TSS)
+ -- xxxIP initialization procedure for type xxx (Exp_TSS)
+ -- xxxRA RAs type access routine for type xxx (Exp_TSS)
+ -- xxxRD RAs type dereference routine for type xxx (Exp_TSS)
+ -- xxxRP Rep to Pos conversion for enumeration type xxx (Exp_TSS)
+ -- xxxSA array/slice assignment for controlled comp. arrays (Exp_TSS)
+ -- xxxSI stream input attribute subprogram for type xxx (Exp_TSS)
+ -- xxxSO stream output attribute subprogram for type xxx (Exp_TSS)
+ -- xxxSR stream read attribute subprogram for type xxx (Exp_TSS)
+ -- xxxSW stream write attribute subprogram for type xxx (Exp_TSS)
+
+ -- Implicit type names
+
+ -- TxxxT type of literal table for enumeration type xxx (Sem_Ch3)
+
+ -- (Note: this list is not complete or accurate ???)
+
+ ----------------------
+ -- Get_Attribute_Id --
+ ----------------------
+
+ function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
+ begin
+ return Attribute_Id'Val (N - First_Attribute_Name);
+ end Get_Attribute_Id;
+
+ ------------------
+ -- Get_Check_Id --
+ ------------------
+
+ function Get_Check_Id (N : Name_Id) return Check_Id is
+ begin
+ return Check_Id'Val (N - First_Check_Name);
+ end Get_Check_Id;
+
+ -----------------------
+ -- Get_Convention_Id --
+ -----------------------
+
+ function Get_Convention_Id (N : Name_Id) return Convention_Id is
+ begin
+ case N is
+ when Name_Ada => return Convention_Ada;
+ when Name_Assembler => return Convention_Assembler;
+ when Name_C => return Convention_C;
+ when Name_COBOL => return Convention_COBOL;
+ when Name_CPP => return Convention_CPP;
+ when Name_Fortran => return Convention_Fortran;
+ when Name_Intrinsic => return Convention_Intrinsic;
+ when Name_Java => return Convention_Java;
+ when Name_Stdcall => return Convention_Stdcall;
+ when Name_Stubbed => return Convention_Stubbed;
+
+ -- If no direct match, then we must have a convention
+ -- identifier pragma that has specified this name.
+
+ when others =>
+ for J in 1 .. Convention_Identifiers.Last loop
+ if N = Convention_Identifiers.Table (J).Name then
+ return Convention_Identifiers.Table (J).Convention;
+ end if;
+ end loop;
+
+ raise Program_Error;
+ end case;
+ end Get_Convention_Id;
+
+ ---------------------------
+ -- Get_Locking_Policy_Id --
+ ---------------------------
+
+ function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id is
+ begin
+ return Locking_Policy_Id'Val (N - First_Locking_Policy_Name);
+ end Get_Locking_Policy_Id;
+
+ -------------------
+ -- Get_Pragma_Id --
+ -------------------
+
+ function Get_Pragma_Id (N : Name_Id) return Pragma_Id is
+ begin
+ if N = Name_AST_Entry then
+ return Pragma_AST_Entry;
+ elsif N = Name_Interface then
+ return Pragma_Interface;
+ elsif N = Name_Storage_Size then
+ return Pragma_Storage_Size;
+ elsif N = Name_Storage_Unit then
+ return Pragma_Storage_Unit;
+ elsif N not in First_Pragma_Name .. Last_Pragma_Name then
+ return Unknown_Pragma;
+ else
+ return Pragma_Id'Val (N - First_Pragma_Name);
+ end if;
+ end Get_Pragma_Id;
+
+ ---------------------------
+ -- Get_Queuing_Policy_Id --
+ ---------------------------
+
+ function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id is
+ begin
+ return Queuing_Policy_Id'Val (N - First_Queuing_Policy_Name);
+ end Get_Queuing_Policy_Id;
+
+ ------------------------------------
+ -- Get_Task_Dispatching_Policy_Id --
+ ------------------------------------
+
+ function Get_Task_Dispatching_Policy_Id (N : Name_Id)
+ return Task_Dispatching_Policy_Id is
+ begin
+ return Task_Dispatching_Policy_Id'Val
+ (N - First_Task_Dispatching_Policy_Name);
+ end Get_Task_Dispatching_Policy_Id;
+
+ ----------------
+ -- Initialize --
+ ----------------
+
+ procedure Initialize is
+ P_Index : Natural;
+ Discard_Name : Name_Id;
+
+ begin
+ P_Index := Preset_Names'First;
+
+ loop
+ Name_Len := 0;
+
+ while Preset_Names (P_Index) /= '#' loop
+ Name_Len := Name_Len + 1;
+ Name_Buffer (Name_Len) := Preset_Names (P_Index);
+ P_Index := P_Index + 1;
+ end loop;
+
+ -- We do the Name_Find call to enter the name into the table, but
+ -- we don't need to do anything with the result, since we already
+ -- initialized all the preset names to have the right value (we
+ -- are depending on the order of the names and Preset_Names).
+
+ Discard_Name := Name_Find;
+ P_Index := P_Index + 1;
+ exit when Preset_Names (P_Index) = '#';
+ end loop;
+
+ -- Make sure that number of names in standard table is correct. If
+ -- this check fails, run utility program XSNAMES to construct a new
+ -- properly matching version of the body.
+
+ pragma Assert (Discard_Name = Last_Predefined_Name);
+
+ -- Initialize the convention identifiers table with the standard
+ -- set of synonyms that we recognize for conventions.
+
+ Convention_Identifiers.Init;
+
+ Convention_Identifiers.Append ((Name_Asm, Convention_Assembler));
+ Convention_Identifiers.Append ((Name_Assembly, Convention_Assembler));
+
+ Convention_Identifiers.Append ((Name_Default, Convention_C));
+ Convention_Identifiers.Append ((Name_External, Convention_C));
+
+ Convention_Identifiers.Append ((Name_DLL, Convention_Stdcall));
+ Convention_Identifiers.Append ((Name_Win32, Convention_Stdcall));
+ end Initialize;
+
+ -----------------------
+ -- Is_Attribute_Name --
+ -----------------------
+
+ function Is_Attribute_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Attribute_Name .. Last_Attribute_Name;
+ end Is_Attribute_Name;
+
+ -------------------
+ -- Is_Check_Name --
+ -------------------
+
+ function Is_Check_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Check_Name .. Last_Check_Name;
+ end Is_Check_Name;
+
+ ------------------------
+ -- Is_Convention_Name --
+ ------------------------
+
+ function Is_Convention_Name (N : Name_Id) return Boolean is
+ begin
+ -- Check if this is one of the standard conventions
+
+ if N in First_Convention_Name .. Last_Convention_Name
+ or else N = Name_C
+ then
+ return True;
+
+ -- Otherwise check if it is in convention identifier table
+
+ else
+ for J in 1 .. Convention_Identifiers.Last loop
+ if N = Convention_Identifiers.Table (J).Name then
+ return True;
+ end if;
+ end loop;
+
+ return False;
+ end if;
+ end Is_Convention_Name;
+
+ ------------------------------
+ -- Is_Entity_Attribute_Name --
+ ------------------------------
+
+ function Is_Entity_Attribute_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Entity_Attribute_Name .. Last_Entity_Attribute_Name;
+ end Is_Entity_Attribute_Name;
+
+ --------------------------------
+ -- Is_Function_Attribute_Name --
+ --------------------------------
+
+ function Is_Function_Attribute_Name (N : Name_Id) return Boolean is
+ begin
+ return N in
+ First_Renamable_Function_Attribute ..
+ Last_Renamable_Function_Attribute;
+ end Is_Function_Attribute_Name;
+
+ ----------------------------
+ -- Is_Locking_Policy_Name --
+ ----------------------------
+
+ function Is_Locking_Policy_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Locking_Policy_Name .. Last_Locking_Policy_Name;
+ end Is_Locking_Policy_Name;
+
+ -----------------------------
+ -- Is_Operator_Symbol_Name --
+ -----------------------------
+
+ function Is_Operator_Symbol_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Operator_Name .. Last_Operator_Name;
+ end Is_Operator_Symbol_Name;
+
+ --------------------
+ -- Is_Pragma_Name --
+ --------------------
+
+ function Is_Pragma_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Pragma_Name .. Last_Pragma_Name
+ or else N = Name_AST_Entry
+ or else N = Name_Interface
+ or else N = Name_Storage_Size
+ or else N = Name_Storage_Unit;
+ end Is_Pragma_Name;
+
+ ---------------------------------
+ -- Is_Procedure_Attribute_Name --
+ ---------------------------------
+
+ function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Procedure_Attribute .. Last_Procedure_Attribute;
+ end Is_Procedure_Attribute_Name;
+
+ ----------------------------
+ -- Is_Queuing_Policy_Name --
+ ----------------------------
+
+ function Is_Queuing_Policy_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Queuing_Policy_Name .. Last_Queuing_Policy_Name;
+ end Is_Queuing_Policy_Name;
+
+ -------------------------------------
+ -- Is_Task_Dispatching_Policy_Name --
+ -------------------------------------
+
+ function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Task_Dispatching_Policy_Name ..
+ Last_Task_Dispatching_Policy_Name;
+ end Is_Task_Dispatching_Policy_Name;
+
+ ----------------------------
+ -- Is_Type_Attribute_Name --
+ ----------------------------
+
+ function Is_Type_Attribute_Name (N : Name_Id) return Boolean is
+ begin
+ return N in First_Type_Attribute_Name .. Last_Type_Attribute_Name;
+ end Is_Type_Attribute_Name;
+
+ ----------------------------------
+ -- Record_Convention_Identifier --
+ ----------------------------------
+
+ procedure Record_Convention_Identifier
+ (Id : Name_Id;
+ Convention : Convention_Id)
+ is
+ begin
+ Convention_Identifiers.Append ((Id, Convention));
+ end Record_Convention_Identifier;
+
+end Snames;
diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads
index 5d4800752d3..85c2f467cf0 100644
--- a/gcc/ada/snames.ads
+++ b/gcc/ada/snames.ads
@@ -1,1485 +1,1496 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- S N A M E S --
--- --
--- S p e c --
--- --
--- Copyright (C) 1992-2004, 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- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
--- for more details. You should have received a copy of the GNU General --
--- Public License distributed with GNAT; see file COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
--- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit does not by itself cause the resulting executable to be --
--- covered by the GNU General Public License. This exception does not --
--- however invalidate any other reasons why the executable file might be --
--- covered by the GNU Public License. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-with Types; use Types;
-
-package Snames is
-
--- This package contains definitions of standard names (i.e. entries in the
--- Names table) that are used throughout the GNAT compiler). It also contains
--- the definitions of some enumeration types whose definitions are tied to
--- the order of these preset names.
-
--- WARNING: There is a C file, a-snames.h which duplicates some of the
--- definitions in this file and must be kept properly synchronized.
-
- ------------------
- -- Preset Names --
- ------------------
-
- -- The following are preset entries in the names table, which are
- -- entered at the start of every compilation for easy access. Note
- -- that the order of initialization of these names in the body must
- -- be coordinated with the order of names in this table.
-
- -- Note: a name may not appear more than once in the following list.
- -- If additional pragmas or attributes are introduced which might
- -- otherwise cause a duplicate, then list it only once in this table,
- -- and adjust the definition of the functions for testing for pragma
- -- names and attribute names, and returning their ID values. Of course
- -- everything is simpler if no such duplications occur!
-
- -- First we have the one character names used to optimize the lookup
- -- process for one character identifiers (to avoid the hashing in this
- -- case) There are a full 256 of these, but only the entries for lower
- -- case and upper case letters have identifiers
-
- -- The lower case letter entries are used for one character identifiers
- -- appearing in the source, for example in pragma Interface (C).
-
- Name_A : constant Name_Id := First_Name_Id + Character'Pos ('a');
- Name_B : constant Name_Id := First_Name_Id + Character'Pos ('b');
- Name_C : constant Name_Id := First_Name_Id + Character'Pos ('c');
- Name_D : constant Name_Id := First_Name_Id + Character'Pos ('d');
- Name_E : constant Name_Id := First_Name_Id + Character'Pos ('e');
- Name_F : constant Name_Id := First_Name_Id + Character'Pos ('f');
- Name_G : constant Name_Id := First_Name_Id + Character'Pos ('g');
- Name_H : constant Name_Id := First_Name_Id + Character'Pos ('h');
- Name_I : constant Name_Id := First_Name_Id + Character'Pos ('i');
- Name_J : constant Name_Id := First_Name_Id + Character'Pos ('j');
- Name_K : constant Name_Id := First_Name_Id + Character'Pos ('k');
- Name_L : constant Name_Id := First_Name_Id + Character'Pos ('l');
- Name_M : constant Name_Id := First_Name_Id + Character'Pos ('m');
- Name_N : constant Name_Id := First_Name_Id + Character'Pos ('n');
- Name_O : constant Name_Id := First_Name_Id + Character'Pos ('o');
- Name_P : constant Name_Id := First_Name_Id + Character'Pos ('p');
- Name_Q : constant Name_Id := First_Name_Id + Character'Pos ('q');
- Name_R : constant Name_Id := First_Name_Id + Character'Pos ('r');
- Name_S : constant Name_Id := First_Name_Id + Character'Pos ('s');
- Name_T : constant Name_Id := First_Name_Id + Character'Pos ('t');
- Name_U : constant Name_Id := First_Name_Id + Character'Pos ('u');
- Name_V : constant Name_Id := First_Name_Id + Character'Pos ('v');
- Name_W : constant Name_Id := First_Name_Id + Character'Pos ('w');
- Name_X : constant Name_Id := First_Name_Id + Character'Pos ('x');
- Name_Y : constant Name_Id := First_Name_Id + Character'Pos ('y');
- Name_Z : constant Name_Id := First_Name_Id + Character'Pos ('z');
-
- -- The upper case letter entries are used by expander code for local
- -- variables that do not require unique names (e.g. formal parameter
- -- names in constructed procedures)
-
- Name_uA : constant Name_Id := First_Name_Id + Character'Pos ('A');
- Name_uB : constant Name_Id := First_Name_Id + Character'Pos ('B');
- Name_uC : constant Name_Id := First_Name_Id + Character'Pos ('C');
- Name_uD : constant Name_Id := First_Name_Id + Character'Pos ('D');
- Name_uE : constant Name_Id := First_Name_Id + Character'Pos ('E');
- Name_uF : constant Name_Id := First_Name_Id + Character'Pos ('F');
- Name_uG : constant Name_Id := First_Name_Id + Character'Pos ('G');
- Name_uH : constant Name_Id := First_Name_Id + Character'Pos ('H');
- Name_uI : constant Name_Id := First_Name_Id + Character'Pos ('I');
- Name_uJ : constant Name_Id := First_Name_Id + Character'Pos ('J');
- Name_uK : constant Name_Id := First_Name_Id + Character'Pos ('K');
- Name_uL : constant Name_Id := First_Name_Id + Character'Pos ('L');
- Name_uM : constant Name_Id := First_Name_Id + Character'Pos ('M');
- Name_uN : constant Name_Id := First_Name_Id + Character'Pos ('N');
- Name_uO : constant Name_Id := First_Name_Id + Character'Pos ('O');
- Name_uP : constant Name_Id := First_Name_Id + Character'Pos ('P');
- Name_uQ : constant Name_Id := First_Name_Id + Character'Pos ('Q');
- Name_uR : constant Name_Id := First_Name_Id + Character'Pos ('R');
- Name_uS : constant Name_Id := First_Name_Id + Character'Pos ('S');
- Name_uT : constant Name_Id := First_Name_Id + Character'Pos ('T');
- Name_uU : constant Name_Id := First_Name_Id + Character'Pos ('U');
- Name_uV : constant Name_Id := First_Name_Id + Character'Pos ('V');
- Name_uW : constant Name_Id := First_Name_Id + Character'Pos ('W');
- Name_uX : constant Name_Id := First_Name_Id + Character'Pos ('X');
- Name_uY : constant Name_Id := First_Name_Id + Character'Pos ('Y');
- Name_uZ : constant Name_Id := First_Name_Id + Character'Pos ('Z');
-
- -- Note: the following table is read by the utility program XSNAMES and
- -- its format should not be changed without coordinating with this program.
-
- N : constant Name_Id := First_Name_Id + 256;
- -- Synonym used in standard name definitions
-
- -- Some names that are used by gigi, and whose definitions are reflected
- -- in the C header file a-snames.h. They are placed at the start so that
- -- the need to modify a-snames.h is minimized.
-
- Name_uParent : constant Name_Id := N + 000;
- Name_uTag : constant Name_Id := N + 001;
- Name_Off : constant Name_Id := N + 002;
- Name_Space : constant Name_Id := N + 003;
- Name_Time : constant Name_Id := N + 004;
-
- -- Some special names used by the expander. Note that the lower case u's
- -- at the start of these names get translated to extra underscores. These
- -- names are only referenced internally by expander generated code.
-
- Name_uAbort_Signal : constant Name_Id := N + 005;
- Name_uAlignment : constant Name_Id := N + 006;
- Name_uAssign : constant Name_Id := N + 007;
- Name_uATCB : constant Name_Id := N + 008;
- Name_uChain : constant Name_Id := N + 009;
- Name_uClean : constant Name_Id := N + 010;
- Name_uController : constant Name_Id := N + 011;
- Name_uEntry_Bodies : constant Name_Id := N + 012;
- Name_uExpunge : constant Name_Id := N + 013;
- Name_uFinal_List : constant Name_Id := N + 014;
- Name_uIdepth : constant Name_Id := N + 015;
- Name_uInit : constant Name_Id := N + 016;
- Name_uLocal_Final_List : constant Name_Id := N + 017;
- Name_uMaster : constant Name_Id := N + 018;
- Name_uObject : constant Name_Id := N + 019;
- Name_uPriority : constant Name_Id := N + 020;
- Name_uProcess_ATSD : constant Name_Id := N + 021;
- Name_uSecondary_Stack : constant Name_Id := N + 022;
- Name_uService : constant Name_Id := N + 023;
- Name_uSize : constant Name_Id := N + 024;
- Name_uStack : constant Name_Id := N + 025;
- Name_uTags : constant Name_Id := N + 026;
- Name_uTask : constant Name_Id := N + 027;
- Name_uTask_Id : constant Name_Id := N + 028;
- Name_uTask_Info : constant Name_Id := N + 029;
- Name_uTask_Name : constant Name_Id := N + 030;
- Name_uTrace_Sp : constant Name_Id := N + 031;
-
- -- Names of routines in Ada.Finalization, needed by expander
-
- Name_Initialize : constant Name_Id := N + 032;
- Name_Adjust : constant Name_Id := N + 033;
- Name_Finalize : constant Name_Id := N + 034;
-
- -- Names of fields declared in System.Finalization_Implementation,
- -- needed by the expander when generating code for finalization.
-
- Name_Next : constant Name_Id := N + 035;
- Name_Prev : constant Name_Id := N + 036;
-
- -- Names of TSS routines for implementation of DSA over PolyORB
-
- Name_uTypeCode : constant Name_Id := N + 037;
- Name_uFrom_Any : constant Name_Id := N + 038;
- Name_uTo_Any : constant Name_Id := N + 039;
-
- -- Names of allocation routines, also needed by expander
-
- Name_Allocate : constant Name_Id := N + 040;
- Name_Deallocate : constant Name_Id := N + 041;
- Name_Dereference : constant Name_Id := N + 042;
-
- -- Names of Text_IO generic subpackages (see Rtsfind.Text_IO_Kludge)
-
- First_Text_IO_Package : constant Name_Id := N + 043;
- Name_Decimal_IO : constant Name_Id := N + 043;
- Name_Enumeration_IO : constant Name_Id := N + 044;
- Name_Fixed_IO : constant Name_Id := N + 045;
- Name_Float_IO : constant Name_Id := N + 046;
- Name_Integer_IO : constant Name_Id := N + 047;
- Name_Modular_IO : constant Name_Id := N + 048;
- Last_Text_IO_Package : constant Name_Id := N + 048;
-
- subtype Text_IO_Package_Name is Name_Id
- range First_Text_IO_Package .. Last_Text_IO_Package;
-
- -- Names of files in library for Ada.Text_IO and Ada.Wide_Text_IO
-
- Name_a_textio : constant Name_Id := N + 049;
- Name_a_witeio : constant Name_Id := N + 050;
-
- -- Some miscellaneous names used for error detection/recovery
-
- Name_Const : constant Name_Id := N + 051;
- Name_Error : constant Name_Id := N + 052;
- Name_Go : constant Name_Id := N + 053;
- Name_Put : constant Name_Id := N + 054;
- Name_Put_Line : constant Name_Id := N + 055;
- Name_To : constant Name_Id := N + 056;
-
- -- Names for packages that are treated specially by the compiler
-
- Name_Finalization : constant Name_Id := N + 057;
- Name_Finalization_Root : constant Name_Id := N + 058;
- Name_Interfaces : constant Name_Id := N + 059;
- Name_Standard : constant Name_Id := N + 060;
- Name_System : constant Name_Id := N + 061;
- Name_Text_IO : constant Name_Id := N + 062;
- Name_Wide_Text_IO : constant Name_Id := N + 063;
-
- -- Names of implementations of the distributed systems annex
-
- First_PCS_Name : constant Name_Id := N + 064;
- Name_No_DSA : constant Name_Id := N + 064;
- Name_GARLIC_DSA : constant Name_Id := N + 065;
- Name_PolyORB_DSA : constant Name_Id := N + 066;
- Last_PCS_Name : constant Name_Id := N + 066;
-
- subtype PCS_Names is Name_Id
- range First_PCS_Name .. Last_PCS_Name;
-
- -- Names of identifiers used in expanding distribution stubs
-
- Name_Addr : constant Name_Id := N + 067;
- Name_Async : constant Name_Id := N + 068;
- Name_Get_Active_Partition_ID : constant Name_Id := N + 069;
- Name_Get_RCI_Package_Receiver : constant Name_Id := N + 070;
- Name_Get_RCI_Package_Ref : constant Name_Id := N + 071;
- Name_Origin : constant Name_Id := N + 072;
- Name_Params : constant Name_Id := N + 073;
- Name_Partition : constant Name_Id := N + 074;
- Name_Partition_Interface : constant Name_Id := N + 075;
- Name_Ras : constant Name_Id := N + 076;
- Name_Call : constant Name_Id := N + 077;
- Name_RCI_Name : constant Name_Id := N + 078;
- Name_Receiver : constant Name_Id := N + 079;
- Name_Result : constant Name_Id := N + 080;
- Name_Rpc : constant Name_Id := N + 081;
- Name_Subp_Id : constant Name_Id := N + 082;
- Name_Operation : constant Name_Id := N + 083;
- Name_Argument : constant Name_Id := N + 084;
- Name_Arg_Modes : constant Name_Id := N + 085;
- Name_Handler : constant Name_Id := N + 086;
- Name_Target : constant Name_Id := N + 087;
- Name_Req : constant Name_Id := N + 088;
- Name_Obj_TypeCode : constant Name_Id := N + 089;
- Name_Stub : constant Name_Id := N + 090;
-
- -- Operator Symbol entries. The actual names have an upper case O at
- -- the start in place of the Op_ prefix (e.g. the actual name that
- -- corresponds to Name_Op_Abs is "Oabs".
-
- First_Operator_Name : constant Name_Id := N + 091;
- Name_Op_Abs : constant Name_Id := N + 091; -- "abs"
- Name_Op_And : constant Name_Id := N + 092; -- "and"
- Name_Op_Mod : constant Name_Id := N + 093; -- "mod"
- Name_Op_Not : constant Name_Id := N + 094; -- "not"
- Name_Op_Or : constant Name_Id := N + 095; -- "or"
- Name_Op_Rem : constant Name_Id := N + 096; -- "rem"
- Name_Op_Xor : constant Name_Id := N + 097; -- "xor"
- Name_Op_Eq : constant Name_Id := N + 098; -- "="
- Name_Op_Ne : constant Name_Id := N + 099; -- "/="
- Name_Op_Lt : constant Name_Id := N + 100; -- "<"
- Name_Op_Le : constant Name_Id := N + 101; -- "<="
- Name_Op_Gt : constant Name_Id := N + 102; -- ">"
- Name_Op_Ge : constant Name_Id := N + 103; -- ">="
- Name_Op_Add : constant Name_Id := N + 104; -- "+"
- Name_Op_Subtract : constant Name_Id := N + 105; -- "-"
- Name_Op_Concat : constant Name_Id := N + 106; -- "&"
- Name_Op_Multiply : constant Name_Id := N + 107; -- "*"
- Name_Op_Divide : constant Name_Id := N + 108; -- "/"
- Name_Op_Expon : constant Name_Id := N + 109; -- "**"
- Last_Operator_Name : constant Name_Id := N + 109;
-
- -- Names for all pragmas recognized by GNAT. The entries with the comment
- -- "Ada 83" are pragmas that are defined in Ada 83, but not in Ada 95.
- -- These pragmas are fully implemented in both Ada 83 and Ada 95 modes
- -- in GNAT.
-
- -- The entries marked GNAT are pragmas that are defined by GNAT
- -- and implemented in both Ada 83 and Ada 95 modes. Full descriptions
- -- of these implementation dependent pragmas may be found in the
- -- appropriate section in unit Sem_Prag in file sem-prag.adb.
-
- -- The entries marked Ada05 are technically implementation dependent
- -- pragmas, but they correspond to standard proposals for Ada 2005.
-
- -- The entries marked VMS are VMS specific pragmas that are recognized
- -- only in OpenVMS versions of GNAT. They are ignored in other versions
- -- with an appropriate warning.
-
- -- The entries marked AAMP are AAMP specific pragmas that are recognized
- -- only in GNAT for the AAMP. They are ignored in other versions with
- -- appropriate warnings.
-
- First_Pragma_Name : constant Name_Id := N + 110;
-
- -- Configuration pragmas are grouped at start
-
- Name_Ada_83 : constant Name_Id := N + 110; -- GNAT
- Name_Ada_95 : constant Name_Id := N + 111; -- GNAT
- Name_Ada_05 : constant Name_Id := N + 112; -- GNAT
- Name_C_Pass_By_Copy : constant Name_Id := N + 113; -- GNAT
- Name_Compile_Time_Warning : constant Name_Id := N + 114; -- GNAT
- Name_Component_Alignment : constant Name_Id := N + 115; -- GNAT
- Name_Convention_Identifier : constant Name_Id := N + 116; -- GNAT
- Name_Detect_Blocking : constant Name_Id := N + 117; -- Ada05
- Name_Discard_Names : constant Name_Id := N + 118;
- Name_Elaboration_Checks : constant Name_Id := N + 119; -- GNAT
- Name_Eliminate : constant Name_Id := N + 120; -- GNAT
- Name_Explicit_Overriding : constant Name_Id := N + 121;
- Name_Extend_System : constant Name_Id := N + 122; -- GNAT
- Name_Extensions_Allowed : constant Name_Id := N + 123; -- GNAT
- Name_External_Name_Casing : constant Name_Id := N + 124; -- GNAT
- Name_Float_Representation : constant Name_Id := N + 125; -- GNAT
- Name_Initialize_Scalars : constant Name_Id := N + 126; -- GNAT
- Name_Interrupt_State : constant Name_Id := N + 127; -- GNAT
- Name_License : constant Name_Id := N + 128; -- GNAT
- Name_Locking_Policy : constant Name_Id := N + 129;
- Name_Long_Float : constant Name_Id := N + 130; -- VMS
- Name_No_Run_Time : constant Name_Id := N + 131; -- GNAT
- Name_No_Strict_Aliasing : constant Name_Id := N + 132; -- GNAT
- Name_Normalize_Scalars : constant Name_Id := N + 133;
- Name_Polling : constant Name_Id := N + 134; -- GNAT
- Name_Persistent_Data : constant Name_Id := N + 135; -- GNAT
- Name_Persistent_Object : constant Name_Id := N + 136; -- GNAT
- Name_Profile : constant Name_Id := N + 137; -- Ada05
- Name_Profile_Warnings : constant Name_Id := N + 138; -- GNAT
- Name_Propagate_Exceptions : constant Name_Id := N + 139; -- GNAT
- Name_Queuing_Policy : constant Name_Id := N + 140;
- Name_Ravenscar : constant Name_Id := N + 141;
- Name_Restricted_Run_Time : constant Name_Id := N + 142;
- Name_Restrictions : constant Name_Id := N + 143;
- Name_Restriction_Warnings : constant Name_Id := N + 144; -- GNAT
- Name_Reviewable : constant Name_Id := N + 145;
- Name_Source_File_Name : constant Name_Id := N + 146; -- GNAT
- Name_Source_File_Name_Project : constant Name_Id := N + 147; -- GNAT
- Name_Style_Checks : constant Name_Id := N + 148; -- GNAT
- Name_Suppress : constant Name_Id := N + 149;
- Name_Suppress_Exception_Locations : constant Name_Id := N + 150; -- GNAT
- Name_Task_Dispatching_Policy : constant Name_Id := N + 151;
- Name_Universal_Data : constant Name_Id := N + 152; -- AAMP
- Name_Unsuppress : constant Name_Id := N + 153; -- GNAT
- Name_Use_VADS_Size : constant Name_Id := N + 154; -- GNAT
- Name_Validity_Checks : constant Name_Id := N + 155; -- GNAT
- Name_Warnings : constant Name_Id := N + 156; -- GNAT
- Last_Configuration_Pragma_Name : constant Name_Id := N + 156;
-
- -- Remaining pragma names
-
- Name_Abort_Defer : constant Name_Id := N + 157; -- GNAT
- Name_All_Calls_Remote : constant Name_Id := N + 158;
- Name_Annotate : constant Name_Id := N + 159; -- GNAT
-
- -- Note: AST_Entry is not in this list because its name matches the
- -- name of the corresponding attribute. However, it is included in the
- -- definition of the type Attribute_Id, and the functions Get_Pragma_Id
- -- and Check_Pragma_Id correctly recognize and process Name_AST_Entry.
- -- AST_Entry is a VMS specific pragma.
-
- Name_Assert : constant Name_Id := N + 160; -- GNAT
- Name_Asynchronous : constant Name_Id := N + 161;
- Name_Atomic : constant Name_Id := N + 162;
- Name_Atomic_Components : constant Name_Id := N + 163;
- Name_Attach_Handler : constant Name_Id := N + 164;
- Name_Comment : constant Name_Id := N + 165; -- GNAT
- Name_Common_Object : constant Name_Id := N + 166; -- GNAT
- Name_Complex_Representation : constant Name_Id := N + 167; -- GNAT
- Name_Controlled : constant Name_Id := N + 168;
- Name_Convention : constant Name_Id := N + 169;
- Name_CPP_Class : constant Name_Id := N + 170; -- GNAT
- Name_CPP_Constructor : constant Name_Id := N + 171; -- GNAT
- Name_CPP_Virtual : constant Name_Id := N + 172; -- GNAT
- Name_CPP_Vtable : constant Name_Id := N + 173; -- GNAT
- Name_Debug : constant Name_Id := N + 174; -- GNAT
- Name_Elaborate : constant Name_Id := N + 175; -- Ada 83
- Name_Elaborate_All : constant Name_Id := N + 176;
- Name_Elaborate_Body : constant Name_Id := N + 177;
- Name_Export : constant Name_Id := N + 178;
- Name_Export_Exception : constant Name_Id := N + 179; -- VMS
- Name_Export_Function : constant Name_Id := N + 180; -- GNAT
- Name_Export_Object : constant Name_Id := N + 181; -- GNAT
- Name_Export_Procedure : constant Name_Id := N + 182; -- GNAT
- Name_Export_Value : constant Name_Id := N + 183; -- GNAT
- Name_Export_Valued_Procedure : constant Name_Id := N + 184; -- GNAT
- Name_External : constant Name_Id := N + 185; -- GNAT
- Name_Finalize_Storage_Only : constant Name_Id := N + 186; -- GNAT
- Name_Ident : constant Name_Id := N + 187; -- VMS
- Name_Import : constant Name_Id := N + 188;
- Name_Import_Exception : constant Name_Id := N + 189; -- VMS
- Name_Import_Function : constant Name_Id := N + 190; -- GNAT
- Name_Import_Object : constant Name_Id := N + 191; -- GNAT
- Name_Import_Procedure : constant Name_Id := N + 192; -- GNAT
- Name_Import_Valued_Procedure : constant Name_Id := N + 193; -- GNAT
- Name_Inline : constant Name_Id := N + 194;
- Name_Inline_Always : constant Name_Id := N + 195; -- GNAT
- Name_Inline_Generic : constant Name_Id := N + 196; -- GNAT
- Name_Inspection_Point : constant Name_Id := N + 197;
- Name_Interface : constant Name_Id := N + 198; -- Ada 83
- Name_Interface_Name : constant Name_Id := N + 199; -- GNAT
- Name_Interrupt_Handler : constant Name_Id := N + 200;
- Name_Interrupt_Priority : constant Name_Id := N + 201;
- Name_Java_Constructor : constant Name_Id := N + 202; -- GNAT
- Name_Java_Interface : constant Name_Id := N + 203; -- GNAT
- Name_Keep_Names : constant Name_Id := N + 204; -- GNAT
- Name_Link_With : constant Name_Id := N + 205; -- GNAT
- Name_Linker_Alias : constant Name_Id := N + 206; -- GNAT
- Name_Linker_Options : constant Name_Id := N + 207;
- Name_Linker_Section : constant Name_Id := N + 208; -- GNAT
- Name_List : constant Name_Id := N + 209;
- Name_Machine_Attribute : constant Name_Id := N + 210; -- GNAT
- Name_Main : constant Name_Id := N + 211; -- GNAT
- Name_Main_Storage : constant Name_Id := N + 212; -- GNAT
- Name_Memory_Size : constant Name_Id := N + 213; -- Ada 83
- Name_No_Return : constant Name_Id := N + 214; -- GNAT
- Name_Obsolescent : constant Name_Id := N + 215; -- GNAT
- Name_Optimize : constant Name_Id := N + 216;
- Name_Optional_Overriding : constant Name_Id := N + 217;
- Name_Overriding : constant Name_Id := N + 218;
- Name_Pack : constant Name_Id := N + 219;
- Name_Page : constant Name_Id := N + 220;
- Name_Passive : constant Name_Id := N + 221; -- GNAT
- Name_Preelaborate : constant Name_Id := N + 222;
- Name_Priority : constant Name_Id := N + 223;
- Name_Psect_Object : constant Name_Id := N + 224; -- VMS
- Name_Pure : constant Name_Id := N + 225;
- Name_Pure_Function : constant Name_Id := N + 226; -- GNAT
- Name_Remote_Call_Interface : constant Name_Id := N + 227;
- Name_Remote_Types : constant Name_Id := N + 228;
- Name_Share_Generic : constant Name_Id := N + 229; -- GNAT
- Name_Shared : constant Name_Id := N + 230; -- Ada 83
- Name_Shared_Passive : constant Name_Id := N + 231;
-
- -- Note: Storage_Size is not in this list because its name matches the
- -- name of the corresponding attribute. However, it is included in the
- -- definition of the type Attribute_Id, and the functions Get_Pragma_Id
- -- and Check_Pragma_Id correctly recognize and process Name_Storage_Size.
-
- -- Note: Storage_Unit is also omitted from the list because of a clash
- -- with an attribute name, and is treated similarly.
-
- Name_Source_Reference : constant Name_Id := N + 232; -- GNAT
- Name_Stream_Convert : constant Name_Id := N + 233; -- GNAT
- Name_Subtitle : constant Name_Id := N + 234; -- GNAT
- Name_Suppress_All : constant Name_Id := N + 235; -- GNAT
- Name_Suppress_Debug_Info : constant Name_Id := N + 236; -- GNAT
- Name_Suppress_Initialization : constant Name_Id := N + 237; -- GNAT
- Name_System_Name : constant Name_Id := N + 238; -- Ada 83
- Name_Task_Info : constant Name_Id := N + 239; -- GNAT
- Name_Task_Name : constant Name_Id := N + 240; -- GNAT
- Name_Task_Storage : constant Name_Id := N + 241; -- VMS
- Name_Thread_Body : constant Name_Id := N + 242; -- GNAT
- Name_Time_Slice : constant Name_Id := N + 243; -- GNAT
- Name_Title : constant Name_Id := N + 244; -- GNAT
- Name_Unchecked_Union : constant Name_Id := N + 245; -- GNAT
- Name_Unimplemented_Unit : constant Name_Id := N + 246; -- GNAT
- Name_Unreferenced : constant Name_Id := N + 247; -- GNAT
- Name_Unreserve_All_Interrupts : constant Name_Id := N + 248; -- GNAT
- Name_Volatile : constant Name_Id := N + 249;
- Name_Volatile_Components : constant Name_Id := N + 250;
- Name_Weak_External : constant Name_Id := N + 251; -- GNAT
- Last_Pragma_Name : constant Name_Id := N + 251;
-
- -- Language convention names for pragma Convention/Export/Import/Interface
- -- Note that Name_C is not included in this list, since it was already
- -- declared earlier in the context of one-character identifier names
- -- (where the order is critical to the fast look up process).
-
- -- Note: there are no convention names corresponding to the conventions
- -- Entry and Protected, this is because these conventions cannot be
- -- specified by a pragma.
-
- First_Convention_Name : constant Name_Id := N + 252;
- Name_Ada : constant Name_Id := N + 252;
- Name_Assembler : constant Name_Id := N + 253;
- Name_COBOL : constant Name_Id := N + 254;
- Name_CPP : constant Name_Id := N + 255;
- Name_Fortran : constant Name_Id := N + 256;
- Name_Intrinsic : constant Name_Id := N + 257;
- Name_Java : constant Name_Id := N + 258;
- Name_Stdcall : constant Name_Id := N + 259;
- Name_Stubbed : constant Name_Id := N + 260;
- Last_Convention_Name : constant Name_Id := N + 260;
-
- -- The following names are preset as synonyms for Assembler
-
- Name_Asm : constant Name_Id := N + 261;
- Name_Assembly : constant Name_Id := N + 262;
-
- -- The following names are preset as synonyms for C
-
- Name_Default : constant Name_Id := N + 263;
- -- Name_Exernal (previously defined as pragma)
-
- -- The following names are present as synonyms for Stdcall
-
- Name_DLL : constant Name_Id := N + 264;
- Name_Win32 : constant Name_Id := N + 265;
-
- -- Other special names used in processing pragmas
-
- Name_As_Is : constant Name_Id := N + 266;
- Name_Body_File_Name : constant Name_Id := N + 267;
- Name_Boolean_Entry_Barriers : constant Name_Id := N + 268;
- Name_Casing : constant Name_Id := N + 269;
- Name_Code : constant Name_Id := N + 270;
- Name_Component : constant Name_Id := N + 271;
- Name_Component_Size_4 : constant Name_Id := N + 272;
- Name_Copy : constant Name_Id := N + 273;
- Name_D_Float : constant Name_Id := N + 274;
- Name_Descriptor : constant Name_Id := N + 275;
- Name_Dot_Replacement : constant Name_Id := N + 276;
- Name_Dynamic : constant Name_Id := N + 277;
- Name_Entity : constant Name_Id := N + 278;
- Name_External_Name : constant Name_Id := N + 279;
- Name_First_Optional_Parameter : constant Name_Id := N + 280;
- Name_Form : constant Name_Id := N + 281;
- Name_G_Float : constant Name_Id := N + 282;
- Name_Gcc : constant Name_Id := N + 283;
- Name_Gnat : constant Name_Id := N + 284;
- Name_GPL : constant Name_Id := N + 285;
- Name_IEEE_Float : constant Name_Id := N + 286;
- Name_Internal : constant Name_Id := N + 287;
- Name_Link_Name : constant Name_Id := N + 288;
- Name_Lowercase : constant Name_Id := N + 289;
- Name_Max_Entry_Queue_Depth : constant Name_Id := N + 290;
- Name_Max_Entry_Queue_Length : constant Name_Id := N + 291;
- Name_Max_Size : constant Name_Id := N + 292;
- Name_Mechanism : constant Name_Id := N + 293;
- Name_Mixedcase : constant Name_Id := N + 294;
- Name_Modified_GPL : constant Name_Id := N + 295;
- Name_Name : constant Name_Id := N + 296;
- Name_NCA : constant Name_Id := N + 297;
- Name_No : constant Name_Id := N + 298;
- Name_No_Dependence : constant Name_Id := N + 299;
- Name_No_Dynamic_Attachment : constant Name_Id := N + 300;
- Name_No_Dynamic_Interrupts : constant Name_Id := N + 301;
- Name_No_Requeue : constant Name_Id := N + 302;
- Name_No_Requeue_Statements : constant Name_Id := N + 303;
- Name_No_Task_Attributes : constant Name_Id := N + 304;
- Name_No_Task_Attributes_Package : constant Name_Id := N + 305;
- Name_On : constant Name_Id := N + 306;
- Name_Parameter_Types : constant Name_Id := N + 307;
- Name_Reference : constant Name_Id := N + 308;
- Name_Restricted : constant Name_Id := N + 309;
- Name_Result_Mechanism : constant Name_Id := N + 310;
- Name_Result_Type : constant Name_Id := N + 311;
- Name_Runtime : constant Name_Id := N + 312;
- Name_SB : constant Name_Id := N + 313;
- Name_Secondary_Stack_Size : constant Name_Id := N + 314;
- Name_Section : constant Name_Id := N + 315;
- Name_Semaphore : constant Name_Id := N + 316;
- Name_Simple_Barriers : constant Name_Id := N + 317;
- Name_Spec_File_Name : constant Name_Id := N + 318;
- Name_Static : constant Name_Id := N + 319;
- Name_Stack_Size : constant Name_Id := N + 320;
- Name_Subunit_File_Name : constant Name_Id := N + 321;
- Name_Task_Stack_Size_Default : constant Name_Id := N + 322;
- Name_Task_Type : constant Name_Id := N + 323;
- Name_Time_Slicing_Enabled : constant Name_Id := N + 324;
- Name_Top_Guard : constant Name_Id := N + 325;
- Name_UBA : constant Name_Id := N + 326;
- Name_UBS : constant Name_Id := N + 327;
- Name_UBSB : constant Name_Id := N + 328;
- Name_Unit_Name : constant Name_Id := N + 329;
- Name_Unknown : constant Name_Id := N + 330;
- Name_Unrestricted : constant Name_Id := N + 331;
- Name_Uppercase : constant Name_Id := N + 332;
- Name_User : constant Name_Id := N + 333;
- Name_VAX_Float : constant Name_Id := N + 334;
- Name_VMS : constant Name_Id := N + 335;
- Name_Working_Storage : constant Name_Id := N + 336;
-
- -- Names of recognized attributes. The entries with the comment "Ada 83"
- -- are attributes that are defined in Ada 83, but not in Ada 95. These
- -- attributes are implemented in both Ada 83 and Ada 95 modes in GNAT.
-
- -- The entries marked GNAT are attributes that are defined by GNAT
- -- and implemented in both Ada 83 and Ada 95 modes. Full descriptions
- -- of these implementation dependent attributes may be found in the
- -- appropriate section in package Sem_Attr in file sem-attr.ads.
-
- -- The entries marked VMS are recognized only in OpenVMS implementations
- -- of GNAT, and are treated as illegal in all other contexts.
-
- First_Attribute_Name : constant Name_Id := N + 337;
- Name_Abort_Signal : constant Name_Id := N + 337; -- GNAT
- Name_Access : constant Name_Id := N + 338;
- Name_Address : constant Name_Id := N + 339;
- Name_Address_Size : constant Name_Id := N + 340; -- GNAT
- Name_Aft : constant Name_Id := N + 341;
- Name_Alignment : constant Name_Id := N + 342;
- Name_Asm_Input : constant Name_Id := N + 343; -- GNAT
- Name_Asm_Output : constant Name_Id := N + 344; -- GNAT
- Name_AST_Entry : constant Name_Id := N + 345; -- VMS
- Name_Bit : constant Name_Id := N + 346; -- GNAT
- Name_Bit_Order : constant Name_Id := N + 347;
- Name_Bit_Position : constant Name_Id := N + 348; -- GNAT
- Name_Body_Version : constant Name_Id := N + 349;
- Name_Callable : constant Name_Id := N + 350;
- Name_Caller : constant Name_Id := N + 351;
- Name_Code_Address : constant Name_Id := N + 352; -- GNAT
- Name_Component_Size : constant Name_Id := N + 353;
- Name_Compose : constant Name_Id := N + 354;
- Name_Constrained : constant Name_Id := N + 355;
- Name_Count : constant Name_Id := N + 356;
- Name_Default_Bit_Order : constant Name_Id := N + 357; -- GNAT
- Name_Definite : constant Name_Id := N + 358;
- Name_Delta : constant Name_Id := N + 359;
- Name_Denorm : constant Name_Id := N + 360;
- Name_Digits : constant Name_Id := N + 361;
- Name_Elaborated : constant Name_Id := N + 362; -- GNAT
- Name_Emax : constant Name_Id := N + 363; -- Ada 83
- Name_Enum_Rep : constant Name_Id := N + 364; -- GNAT
- Name_Epsilon : constant Name_Id := N + 365; -- Ada 83
- Name_Exponent : constant Name_Id := N + 366;
- Name_External_Tag : constant Name_Id := N + 367;
- Name_First : constant Name_Id := N + 368;
- Name_First_Bit : constant Name_Id := N + 369;
- Name_Fixed_Value : constant Name_Id := N + 370; -- GNAT
- Name_Fore : constant Name_Id := N + 371;
- Name_Has_Access_Values : constant Name_Id := N + 372; -- GNAT
- Name_Has_Discriminants : constant Name_Id := N + 373; -- GNAT
- Name_Identity : constant Name_Id := N + 374;
- Name_Img : constant Name_Id := N + 375; -- GNAT
- Name_Integer_Value : constant Name_Id := N + 376; -- GNAT
- Name_Large : constant Name_Id := N + 377; -- Ada 83
- Name_Last : constant Name_Id := N + 378;
- Name_Last_Bit : constant Name_Id := N + 379;
- Name_Leading_Part : constant Name_Id := N + 380;
- Name_Length : constant Name_Id := N + 381;
- Name_Machine_Emax : constant Name_Id := N + 382;
- Name_Machine_Emin : constant Name_Id := N + 383;
- Name_Machine_Mantissa : constant Name_Id := N + 384;
- Name_Machine_Overflows : constant Name_Id := N + 385;
- Name_Machine_Radix : constant Name_Id := N + 386;
- Name_Machine_Rounds : constant Name_Id := N + 387;
- Name_Machine_Size : constant Name_Id := N + 388; -- GNAT
- Name_Mantissa : constant Name_Id := N + 389; -- Ada 83
- Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 390;
- Name_Maximum_Alignment : constant Name_Id := N + 391; -- GNAT
- Name_Mechanism_Code : constant Name_Id := N + 392; -- GNAT
- Name_Mod : constant Name_Id := N + 393;
- Name_Model_Emin : constant Name_Id := N + 394;
- Name_Model_Epsilon : constant Name_Id := N + 395;
- Name_Model_Mantissa : constant Name_Id := N + 396;
- Name_Model_Small : constant Name_Id := N + 397;
- Name_Modulus : constant Name_Id := N + 398;
- Name_Null_Parameter : constant Name_Id := N + 399; -- GNAT
- Name_Object_Size : constant Name_Id := N + 400; -- GNAT
- Name_Partition_ID : constant Name_Id := N + 401;
- Name_Passed_By_Reference : constant Name_Id := N + 402; -- GNAT
- Name_Pool_Address : constant Name_Id := N + 403;
- Name_Pos : constant Name_Id := N + 404;
- Name_Position : constant Name_Id := N + 405;
- Name_Range : constant Name_Id := N + 406;
- Name_Range_Length : constant Name_Id := N + 407; -- GNAT
- Name_Round : constant Name_Id := N + 408;
- Name_Safe_Emax : constant Name_Id := N + 409; -- Ada 83
- Name_Safe_First : constant Name_Id := N + 410;
- Name_Safe_Large : constant Name_Id := N + 411; -- Ada 83
- Name_Safe_Last : constant Name_Id := N + 412;
- Name_Safe_Small : constant Name_Id := N + 413; -- Ada 83
- Name_Scale : constant Name_Id := N + 414;
- Name_Scaling : constant Name_Id := N + 415;
- Name_Signed_Zeros : constant Name_Id := N + 416;
- Name_Size : constant Name_Id := N + 417;
- Name_Small : constant Name_Id := N + 418;
- Name_Storage_Size : constant Name_Id := N + 419;
- Name_Storage_Unit : constant Name_Id := N + 420; -- GNAT
- Name_Tag : constant Name_Id := N + 421;
- Name_Target_Name : constant Name_Id := N + 422; -- GNAT
- Name_Terminated : constant Name_Id := N + 423;
- Name_To_Address : constant Name_Id := N + 424; -- GNAT
- Name_Type_Class : constant Name_Id := N + 425; -- GNAT
- Name_UET_Address : constant Name_Id := N + 426; -- GNAT
- Name_Unbiased_Rounding : constant Name_Id := N + 427;
- Name_Unchecked_Access : constant Name_Id := N + 428;
- Name_Unconstrained_Array : constant Name_Id := N + 429;
- Name_Universal_Literal_String : constant Name_Id := N + 430; -- GNAT
- Name_Unrestricted_Access : constant Name_Id := N + 431; -- GNAT
- Name_VADS_Size : constant Name_Id := N + 432; -- GNAT
- Name_Val : constant Name_Id := N + 433;
- Name_Valid : constant Name_Id := N + 434;
- Name_Value_Size : constant Name_Id := N + 435; -- GNAT
- Name_Version : constant Name_Id := N + 436;
- Name_Wchar_T_Size : constant Name_Id := N + 437; -- GNAT
- Name_Wide_Width : constant Name_Id := N + 438;
- Name_Width : constant Name_Id := N + 439;
- Name_Word_Size : constant Name_Id := N + 440; -- GNAT
-
- -- Attributes that designate attributes returning renamable functions,
- -- i.e. functions that return other than a universal value and that
- -- have non-universal arguments.
-
- First_Renamable_Function_Attribute : constant Name_Id := N + 441;
- Name_Adjacent : constant Name_Id := N + 441;
- Name_Ceiling : constant Name_Id := N + 442;
- Name_Copy_Sign : constant Name_Id := N + 443;
- Name_Floor : constant Name_Id := N + 444;
- Name_Fraction : constant Name_Id := N + 445;
- Name_Image : constant Name_Id := N + 446;
- Name_Input : constant Name_Id := N + 447;
- Name_Machine : constant Name_Id := N + 448;
- Name_Max : constant Name_Id := N + 449;
- Name_Min : constant Name_Id := N + 450;
- Name_Model : constant Name_Id := N + 451;
- Name_Pred : constant Name_Id := N + 452;
- Name_Remainder : constant Name_Id := N + 453;
- Name_Rounding : constant Name_Id := N + 454;
- Name_Succ : constant Name_Id := N + 455;
- Name_Truncation : constant Name_Id := N + 456;
- Name_Value : constant Name_Id := N + 457;
- Name_Wide_Image : constant Name_Id := N + 458;
- Name_Wide_Value : constant Name_Id := N + 459;
- Last_Renamable_Function_Attribute : constant Name_Id := N + 459;
-
- -- Attributes that designate procedures
-
- First_Procedure_Attribute : constant Name_Id := N + 460;
- Name_Output : constant Name_Id := N + 460;
- Name_Read : constant Name_Id := N + 461;
- Name_Write : constant Name_Id := N + 462;
- Last_Procedure_Attribute : constant Name_Id := N + 462;
-
- -- Remaining attributes are ones that return entities
-
- First_Entity_Attribute_Name : constant Name_Id := N + 463;
- Name_Elab_Body : constant Name_Id := N + 463; -- GNAT
- Name_Elab_Spec : constant Name_Id := N + 464; -- GNAT
- Name_Storage_Pool : constant Name_Id := N + 465;
-
- -- These attributes are the ones that return types
-
- First_Type_Attribute_Name : constant Name_Id := N + 466;
- Name_Base : constant Name_Id := N + 466;
- Name_Class : constant Name_Id := N + 467;
- Last_Type_Attribute_Name : constant Name_Id := N + 467;
- Last_Entity_Attribute_Name : constant Name_Id := N + 467;
- Last_Attribute_Name : constant Name_Id := N + 467;
-
- -- Names of recognized locking policy identifiers
-
- -- Note: policies are identified by the first character of the
- -- name (e.g. C for Ceiling_Locking). If new policy names are added,
- -- the first character must be distinct.
-
- First_Locking_Policy_Name : constant Name_Id := N + 468;
- Name_Ceiling_Locking : constant Name_Id := N + 468;
- Name_Inheritance_Locking : constant Name_Id := N + 469;
- Last_Locking_Policy_Name : constant Name_Id := N + 469;
-
- -- Names of recognized queuing policy identifiers.
-
- -- Note: policies are identified by the first character of the
- -- name (e.g. F for FIFO_Queuing). If new policy names are added,
- -- the first character must be distinct.
-
- First_Queuing_Policy_Name : constant Name_Id := N + 470;
- Name_FIFO_Queuing : constant Name_Id := N + 470;
- Name_Priority_Queuing : constant Name_Id := N + 471;
- Last_Queuing_Policy_Name : constant Name_Id := N + 471;
-
- -- Names of recognized task dispatching policy identifiers
-
- -- Note: policies are identified by the first character of the
- -- name (e.g. F for FIFO_WIthinn_Priorities). If new policy names
- -- are added, the first character must be distinct.
-
- First_Task_Dispatching_Policy_Name : constant Name_Id := N + 472;
- Name_FIFO_Within_Priorities : constant Name_Id := N + 472;
- Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 472;
-
- -- Names of recognized checks for pragma Suppress
-
- First_Check_Name : constant Name_Id := N + 473;
- Name_Access_Check : constant Name_Id := N + 473;
- Name_Accessibility_Check : constant Name_Id := N + 474;
- Name_Discriminant_Check : constant Name_Id := N + 475;
- Name_Division_Check : constant Name_Id := N + 476;
- Name_Elaboration_Check : constant Name_Id := N + 477;
- Name_Index_Check : constant Name_Id := N + 478;
- Name_Length_Check : constant Name_Id := N + 479;
- Name_Overflow_Check : constant Name_Id := N + 480;
- Name_Range_Check : constant Name_Id := N + 481;
- Name_Storage_Check : constant Name_Id := N + 482;
- Name_Tag_Check : constant Name_Id := N + 483;
- Name_All_Checks : constant Name_Id := N + 484;
- Last_Check_Name : constant Name_Id := N + 484;
-
- -- Names corresponding to reserved keywords, excluding those already
- -- declared in the attribute list (Access, Delta, Digits, Mod, Range).
-
- Name_Abort : constant Name_Id := N + 485;
- Name_Abs : constant Name_Id := N + 486;
- Name_Accept : constant Name_Id := N + 487;
- Name_And : constant Name_Id := N + 488;
- Name_All : constant Name_Id := N + 489;
- Name_Array : constant Name_Id := N + 490;
- Name_At : constant Name_Id := N + 491;
- Name_Begin : constant Name_Id := N + 492;
- Name_Body : constant Name_Id := N + 493;
- Name_Case : constant Name_Id := N + 494;
- Name_Constant : constant Name_Id := N + 495;
- Name_Declare : constant Name_Id := N + 496;
- Name_Delay : constant Name_Id := N + 497;
- Name_Do : constant Name_Id := N + 498;
- Name_Else : constant Name_Id := N + 499;
- Name_Elsif : constant Name_Id := N + 500;
- Name_End : constant Name_Id := N + 501;
- Name_Entry : constant Name_Id := N + 502;
- Name_Exception : constant Name_Id := N + 503;
- Name_Exit : constant Name_Id := N + 504;
- Name_For : constant Name_Id := N + 505;
- Name_Function : constant Name_Id := N + 506;
- Name_Generic : constant Name_Id := N + 507;
- Name_Goto : constant Name_Id := N + 508;
- Name_If : constant Name_Id := N + 509;
- Name_In : constant Name_Id := N + 510;
- Name_Is : constant Name_Id := N + 511;
- Name_Limited : constant Name_Id := N + 512;
- Name_Loop : constant Name_Id := N + 513;
- Name_New : constant Name_Id := N + 514;
- Name_Not : constant Name_Id := N + 515;
- Name_Null : constant Name_Id := N + 516;
- Name_Of : constant Name_Id := N + 517;
- Name_Or : constant Name_Id := N + 518;
- Name_Others : constant Name_Id := N + 519;
- Name_Out : constant Name_Id := N + 520;
- Name_Package : constant Name_Id := N + 521;
- Name_Pragma : constant Name_Id := N + 522;
- Name_Private : constant Name_Id := N + 523;
- Name_Procedure : constant Name_Id := N + 524;
- Name_Raise : constant Name_Id := N + 525;
- Name_Record : constant Name_Id := N + 526;
- Name_Rem : constant Name_Id := N + 527;
- Name_Renames : constant Name_Id := N + 528;
- Name_Return : constant Name_Id := N + 529;
- Name_Reverse : constant Name_Id := N + 530;
- Name_Select : constant Name_Id := N + 531;
- Name_Separate : constant Name_Id := N + 532;
- Name_Subtype : constant Name_Id := N + 533;
- Name_Task : constant Name_Id := N + 534;
- Name_Terminate : constant Name_Id := N + 535;
- Name_Then : constant Name_Id := N + 536;
- Name_Type : constant Name_Id := N + 537;
- Name_Use : constant Name_Id := N + 538;
- Name_When : constant Name_Id := N + 539;
- Name_While : constant Name_Id := N + 540;
- Name_With : constant Name_Id := N + 541;
- Name_Xor : constant Name_Id := N + 542;
-
- -- Names of intrinsic subprograms
-
- -- Note: Asm is missing from this list, since Asm is a legitimate
- -- convention name. So is To_Adress, which is a GNAT attribute.
-
- First_Intrinsic_Name : constant Name_Id := N + 543;
- Name_Divide : constant Name_Id := N + 543;
- Name_Enclosing_Entity : constant Name_Id := N + 544;
- Name_Exception_Information : constant Name_Id := N + 545;
- Name_Exception_Message : constant Name_Id := N + 546;
- Name_Exception_Name : constant Name_Id := N + 547;
- Name_File : constant Name_Id := N + 548;
- Name_Import_Address : constant Name_Id := N + 549;
- Name_Import_Largest_Value : constant Name_Id := N + 550;
- Name_Import_Value : constant Name_Id := N + 551;
- Name_Is_Negative : constant Name_Id := N + 552;
- Name_Line : constant Name_Id := N + 553;
- Name_Rotate_Left : constant Name_Id := N + 554;
- Name_Rotate_Right : constant Name_Id := N + 555;
- Name_Shift_Left : constant Name_Id := N + 556;
- Name_Shift_Right : constant Name_Id := N + 557;
- Name_Shift_Right_Arithmetic : constant Name_Id := N + 558;
- Name_Source_Location : constant Name_Id := N + 559;
- Name_Unchecked_Conversion : constant Name_Id := N + 560;
- Name_Unchecked_Deallocation : constant Name_Id := N + 561;
- Name_To_Pointer : constant Name_Id := N + 562;
- Last_Intrinsic_Name : constant Name_Id := N + 562;
-
- -- Reserved words used only in Ada 95
-
- First_95_Reserved_Word : constant Name_Id := N + 563;
- Name_Abstract : constant Name_Id := N + 563;
- Name_Aliased : constant Name_Id := N + 564;
- Name_Protected : constant Name_Id := N + 565;
- Name_Until : constant Name_Id := N + 566;
- Name_Requeue : constant Name_Id := N + 567;
- Name_Tagged : constant Name_Id := N + 568;
- Last_95_Reserved_Word : constant Name_Id := N + 568;
-
- subtype Ada_95_Reserved_Words is
- Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
-
- -- Miscellaneous names used in semantic checking
-
- Name_Raise_Exception : constant Name_Id := N + 569;
-
- -- Additional reserved words and identifiers used in GNAT Project Files
- -- Note that Name_External is already previously declared
-
- Name_Ada_Roots : constant Name_Id := N + 570;
- Name_Binder : constant Name_Id := N + 571;
- Name_Binder_Driver : constant Name_Id := N + 572;
- Name_Body_Suffix : constant Name_Id := N + 573;
- Name_Builder : constant Name_Id := N + 574;
- Name_Compiler : constant Name_Id := N + 575;
- Name_Compiler_Driver : constant Name_Id := N + 576;
- Name_Compiler_Kind : constant Name_Id := N + 577;
- Name_Compute_Dependency : constant Name_Id := N + 578;
- Name_Cross_Reference : constant Name_Id := N + 579;
- Name_Default_Linker : constant Name_Id := N + 580;
- Name_Default_Switches : constant Name_Id := N + 581;
- Name_Dependency_Option : constant Name_Id := N + 582;
- Name_Exec_Dir : constant Name_Id := N + 583;
- Name_Executable : constant Name_Id := N + 584;
- Name_Executable_Suffix : constant Name_Id := N + 585;
- Name_Extends : constant Name_Id := N + 586;
- Name_Externally_Built : constant Name_Id := N + 587;
- Name_Finder : constant Name_Id := N + 588;
- Name_Global_Configuration_Pragmas : constant Name_Id := N + 589;
- Name_Gnatls : constant Name_Id := N + 590;
- Name_Gnatstub : constant Name_Id := N + 591;
- Name_Implementation : constant Name_Id := N + 592;
- Name_Implementation_Exceptions : constant Name_Id := N + 593;
- Name_Implementation_Suffix : constant Name_Id := N + 594;
- Name_Include_Option : constant Name_Id := N + 595;
- Name_Language_Processing : constant Name_Id := N + 596;
- Name_Languages : constant Name_Id := N + 597;
- Name_Library_Dir : constant Name_Id := N + 598;
- Name_Library_Auto_Init : constant Name_Id := N + 599;
- Name_Library_GCC : constant Name_Id := N + 600;
- Name_Library_Interface : constant Name_Id := N + 601;
- Name_Library_Kind : constant Name_Id := N + 602;
- Name_Library_Name : constant Name_Id := N + 603;
- Name_Library_Options : constant Name_Id := N + 604;
- Name_Library_Reference_Symbol_File : constant Name_Id := N + 605;
- Name_Library_Src_Dir : constant Name_Id := N + 606;
- Name_Library_Symbol_File : constant Name_Id := N + 607;
- Name_Library_Symbol_Policy : constant Name_Id := N + 608;
- Name_Library_Version : constant Name_Id := N + 609;
- Name_Linker : constant Name_Id := N + 610;
- Name_Local_Configuration_Pragmas : constant Name_Id := N + 611;
- Name_Locally_Removed_Files : constant Name_Id := N + 612;
- Name_Metrics : constant Name_Id := N + 613;
- Name_Naming : constant Name_Id := N + 614;
- Name_Object_Dir : constant Name_Id := N + 615;
- Name_Pretty_Printer : constant Name_Id := N + 616;
- Name_Project : constant Name_Id := N + 617;
- Name_Separate_Suffix : constant Name_Id := N + 618;
- Name_Source_Dirs : constant Name_Id := N + 619;
- Name_Source_Files : constant Name_Id := N + 620;
- Name_Source_List_File : constant Name_Id := N + 621;
- Name_Spec : constant Name_Id := N + 622;
- Name_Spec_Suffix : constant Name_Id := N + 623;
- Name_Specification : constant Name_Id := N + 624;
- Name_Specification_Exceptions : constant Name_Id := N + 625;
- Name_Specification_Suffix : constant Name_Id := N + 626;
- Name_Switches : constant Name_Id := N + 627;
-
- -- Other miscellaneous names used in front end
-
- Name_Unaligned_Valid : constant Name_Id := N + 628;
-
- -- Mark last defined name for consistency check in Snames body
-
- Last_Predefined_Name : constant Name_Id := N + 628;
-
- subtype Any_Operator_Name is Name_Id range
- First_Operator_Name .. Last_Operator_Name;
-
- ------------------------------
- -- Attribute ID Definitions --
- ------------------------------
-
- type Attribute_Id is (
- Attribute_Abort_Signal,
- Attribute_Access,
- Attribute_Address,
- Attribute_Address_Size,
- Attribute_Aft,
- Attribute_Alignment,
- Attribute_Asm_Input,
- Attribute_Asm_Output,
- Attribute_AST_Entry,
- Attribute_Bit,
- Attribute_Bit_Order,
- Attribute_Bit_Position,
- Attribute_Body_Version,
- Attribute_Callable,
- Attribute_Caller,
- Attribute_Code_Address,
- Attribute_Component_Size,
- Attribute_Compose,
- Attribute_Constrained,
- Attribute_Count,
- Attribute_Default_Bit_Order,
- Attribute_Definite,
- Attribute_Delta,
- Attribute_Denorm,
- Attribute_Digits,
- Attribute_Elaborated,
- Attribute_Emax,
- Attribute_Enum_Rep,
- Attribute_Epsilon,
- Attribute_Exponent,
- Attribute_External_Tag,
- Attribute_First,
- Attribute_First_Bit,
- Attribute_Fixed_Value,
- Attribute_Fore,
- Attribute_Has_Access_Values,
- Attribute_Has_Discriminants,
- Attribute_Identity,
- Attribute_Img,
- Attribute_Integer_Value,
- Attribute_Large,
- Attribute_Last,
- Attribute_Last_Bit,
- Attribute_Leading_Part,
- Attribute_Length,
- Attribute_Machine_Emax,
- Attribute_Machine_Emin,
- Attribute_Machine_Mantissa,
- Attribute_Machine_Overflows,
- Attribute_Machine_Radix,
- Attribute_Machine_Rounds,
- Attribute_Machine_Size,
- Attribute_Mantissa,
- Attribute_Max_Size_In_Storage_Elements,
- Attribute_Maximum_Alignment,
- Attribute_Mechanism_Code,
- Attribute_Mod,
- Attribute_Model_Emin,
- Attribute_Model_Epsilon,
- Attribute_Model_Mantissa,
- Attribute_Model_Small,
- Attribute_Modulus,
- Attribute_Null_Parameter,
- Attribute_Object_Size,
- Attribute_Partition_ID,
- Attribute_Passed_By_Reference,
- Attribute_Pool_Address,
- Attribute_Pos,
- Attribute_Position,
- Attribute_Range,
- Attribute_Range_Length,
- Attribute_Round,
- Attribute_Safe_Emax,
- Attribute_Safe_First,
- Attribute_Safe_Large,
- Attribute_Safe_Last,
- Attribute_Safe_Small,
- Attribute_Scale,
- Attribute_Scaling,
- Attribute_Signed_Zeros,
- Attribute_Size,
- Attribute_Small,
- Attribute_Storage_Size,
- Attribute_Storage_Unit,
- Attribute_Tag,
- Attribute_Target_Name,
- Attribute_Terminated,
- Attribute_To_Address,
- Attribute_Type_Class,
- Attribute_UET_Address,
- Attribute_Unbiased_Rounding,
- Attribute_Unchecked_Access,
- Attribute_Unconstrained_Array,
- Attribute_Universal_Literal_String,
- Attribute_Unrestricted_Access,
- Attribute_VADS_Size,
- Attribute_Val,
- Attribute_Valid,
- Attribute_Value_Size,
- Attribute_Version,
- Attribute_Wchar_T_Size,
- Attribute_Wide_Width,
- Attribute_Width,
- Attribute_Word_Size,
-
- -- Attributes designating renamable functions
-
- Attribute_Adjacent,
- Attribute_Ceiling,
- Attribute_Copy_Sign,
- Attribute_Floor,
- Attribute_Fraction,
- Attribute_Image,
- Attribute_Input,
- Attribute_Machine,
- Attribute_Max,
- Attribute_Min,
- Attribute_Model,
- Attribute_Pred,
- Attribute_Remainder,
- Attribute_Rounding,
- Attribute_Succ,
- Attribute_Truncation,
- Attribute_Value,
- Attribute_Wide_Image,
- Attribute_Wide_Value,
-
- -- Attributes designating procedures
-
- Attribute_Output,
- Attribute_Read,
- Attribute_Write,
-
- -- Entity attributes (includes type attributes)
-
- Attribute_Elab_Body,
- Attribute_Elab_Spec,
- Attribute_Storage_Pool,
-
- -- Type attributes
-
- Attribute_Base,
- Attribute_Class);
-
- ------------------------------------
- -- Convention Name ID Definitions --
- ------------------------------------
-
- type Convention_Id is (
-
- -- The conventions that are defined by the RM come first
-
- Convention_Ada,
- Convention_Intrinsic,
- Convention_Entry,
- Convention_Protected,
-
- -- The remaining conventions are foreign language conventions
-
- Convention_Assembler, -- also Asm, Assembly
- Convention_C, -- also Default, External
- Convention_COBOL,
- Convention_CPP,
- Convention_Fortran,
- Convention_Java,
- Convention_Stdcall, -- also DLL, Win32
- Convention_Stubbed);
-
- -- Note: Convention C_Pass_By_Copy is allowed only for record
- -- types (where it is treated like C except that the appropriate
- -- flag is set in the record type). Recognizion of this convention
- -- is specially handled in Sem_Prag.
-
- for Convention_Id'Size use 8;
- -- Plenty of space for expansion
-
- subtype Foreign_Convention is
- Convention_Id range Convention_Assembler .. Convention_Stdcall;
-
- -----------------------------------
- -- Locking Policy ID Definitions --
- -----------------------------------
-
- type Locking_Policy_Id is (
- Locking_Policy_Inheritance_Locking,
- Locking_Policy_Ceiling_Locking);
-
- ---------------------------
- -- Pragma ID Definitions --
- ---------------------------
-
- type Pragma_Id is (
-
- -- Configuration pragmas
-
- Pragma_Ada_83,
- Pragma_Ada_95,
- Pragma_Ada_05,
- Pragma_C_Pass_By_Copy,
- Pragma_Compile_Time_Warning,
- Pragma_Component_Alignment,
- Pragma_Convention_Identifier,
- Pragma_Detect_Blocking,
- Pragma_Discard_Names,
- Pragma_Elaboration_Checks,
- Pragma_Eliminate,
- Pragma_Explicit_Overriding,
- Pragma_Extend_System,
- Pragma_Extensions_Allowed,
- Pragma_External_Name_Casing,
- Pragma_Float_Representation,
- Pragma_Initialize_Scalars,
- Pragma_Interrupt_State,
- Pragma_License,
- Pragma_Locking_Policy,
- Pragma_Long_Float,
- Pragma_No_Run_Time,
- Pragma_No_Strict_Aliasing,
- Pragma_Normalize_Scalars,
- Pragma_Polling,
- Pragma_Persistent_Data,
- Pragma_Persistent_Object,
- Pragma_Profile,
- Pragma_Profile_Warnings,
- Pragma_Propagate_Exceptions,
- Pragma_Queuing_Policy,
- Pragma_Ravenscar,
- Pragma_Restricted_Run_Time,
- Pragma_Restrictions,
- Pragma_Restriction_Warnings,
- Pragma_Reviewable,
- Pragma_Source_File_Name,
- Pragma_Source_File_Name_Project,
- Pragma_Style_Checks,
- Pragma_Suppress,
- Pragma_Suppress_Exception_Locations,
- Pragma_Task_Dispatching_Policy,
- Pragma_Universal_Data,
- Pragma_Unsuppress,
- Pragma_Use_VADS_Size,
- Pragma_Validity_Checks,
- Pragma_Warnings,
-
- -- Remaining (non-configuration) pragmas
-
- Pragma_Abort_Defer,
- Pragma_All_Calls_Remote,
- Pragma_Annotate,
- Pragma_Assert,
- Pragma_Asynchronous,
- Pragma_Atomic,
- Pragma_Atomic_Components,
- Pragma_Attach_Handler,
- Pragma_Comment,
- Pragma_Common_Object,
- Pragma_Complex_Representation,
- Pragma_Controlled,
- Pragma_Convention,
- Pragma_CPP_Class,
- Pragma_CPP_Constructor,
- Pragma_CPP_Virtual,
- Pragma_CPP_Vtable,
- Pragma_Debug,
- Pragma_Elaborate,
- Pragma_Elaborate_All,
- Pragma_Elaborate_Body,
- Pragma_Export,
- Pragma_Export_Exception,
- Pragma_Export_Function,
- Pragma_Export_Object,
- Pragma_Export_Procedure,
- Pragma_Export_Value,
- Pragma_Export_Valued_Procedure,
- Pragma_External,
- Pragma_Finalize_Storage_Only,
- Pragma_Ident,
- Pragma_Import,
- Pragma_Import_Exception,
- Pragma_Import_Function,
- Pragma_Import_Object,
- Pragma_Import_Procedure,
- Pragma_Import_Valued_Procedure,
- Pragma_Inline,
- Pragma_Inline_Always,
- Pragma_Inline_Generic,
- Pragma_Inspection_Point,
- Pragma_Interface,
- Pragma_Interface_Name,
- Pragma_Interrupt_Handler,
- Pragma_Interrupt_Priority,
- Pragma_Java_Constructor,
- Pragma_Java_Interface,
- Pragma_Keep_Names,
- Pragma_Link_With,
- Pragma_Linker_Alias,
- Pragma_Linker_Options,
- Pragma_Linker_Section,
- Pragma_List,
- Pragma_Machine_Attribute,
- Pragma_Main,
- Pragma_Main_Storage,
- Pragma_Memory_Size,
- Pragma_No_Return,
- Pragma_Obsolescent,
- Pragma_Optimize,
- Pragma_Optional_Overriding,
- Pragma_Overriding,
- Pragma_Pack,
- Pragma_Page,
- Pragma_Passive,
- Pragma_Preelaborate,
- Pragma_Priority,
- Pragma_Psect_Object,
- Pragma_Pure,
- Pragma_Pure_Function,
- Pragma_Remote_Call_Interface,
- Pragma_Remote_Types,
- Pragma_Share_Generic,
- Pragma_Shared,
- Pragma_Shared_Passive,
- Pragma_Source_Reference,
- Pragma_Stream_Convert,
- Pragma_Subtitle,
- Pragma_Suppress_All,
- Pragma_Suppress_Debug_Info,
- Pragma_Suppress_Initialization,
- Pragma_System_Name,
- Pragma_Task_Info,
- Pragma_Task_Name,
- Pragma_Task_Storage,
- Pragma_Thread_Body,
- Pragma_Time_Slice,
- Pragma_Title,
- Pragma_Unchecked_Union,
- Pragma_Unimplemented_Unit,
- Pragma_Unreferenced,
- Pragma_Unreserve_All_Interrupts,
- Pragma_Volatile,
- Pragma_Volatile_Components,
- Pragma_Weak_External,
-
- -- The following pragmas are on their own, out of order, because of
- -- the special processing required to deal with the fact that their
- -- names match existing attribute names.
-
- Pragma_AST_Entry,
- Pragma_Storage_Size,
- Pragma_Storage_Unit,
-
- -- The value to represent an unknown or unrecognized pragma
-
- Unknown_Pragma);
-
- -----------------------------------
- -- Queuing Policy ID definitions --
- -----------------------------------
-
- type Queuing_Policy_Id is (
- Queuing_Policy_FIFO_Queuing,
- Queuing_Policy_Priority_Queuing);
-
- --------------------------------------------
- -- Task Dispatching Policy ID definitions --
- --------------------------------------------
-
- type Task_Dispatching_Policy_Id is (
- Task_Dispatching_FIFO_Within_Priorities);
- -- Id values used to identify task dispatching policies
-
- -----------------
- -- Subprograms --
- -----------------
-
- procedure Initialize;
- -- Called to initialize the preset names in the names table.
-
- function Is_Attribute_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized attribute
-
- function Is_Entity_Attribute_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized entity attribute,
- -- i.e. an attribute reference that returns an entity.
-
- function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized attribute that
- -- designates a procedure (and can therefore appear as a statement).
-
- function Is_Function_Attribute_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized attribute
- -- that designates a renameable function, and can therefore appear in
- -- a renaming statement. Note that not all attributes designating
- -- functions are renamable, in particular, thos returning a universal
- -- value cannot be renamed.
-
- function Is_Type_Attribute_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized type attribute,
- -- i.e. an attribute reference that returns a type
-
- function Is_Check_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized suppress check
- -- as required by pragma Suppress.
-
- function Is_Convention_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of one of the recognized
- -- language conventions, as required by pragma Convention, Import,
- -- Export, Interface. Returns True if so. Also returns True for a
- -- name that has been specified by a Convention_Identifier pragma.
- -- If neither case holds, returns False.
-
- function Is_Locking_Policy_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized locking policy
-
- function Is_Operator_Symbol_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of an operator symbol
-
- function Is_Pragma_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized pragma. Note
- -- that pragmas AST_Entry, Storage_Size, and Storage_Unit are recognized
- -- as pragmas by this function even though their names are separate from
- -- the other pragma names.
-
- function Is_Queuing_Policy_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized queuing policy
-
- function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of a recognized task
- -- dispatching policy.
-
- function Get_Attribute_Id (N : Name_Id) return Attribute_Id;
- -- Returns Id of attribute corresponding to given name. It is an error to
- -- call this function with a name that is not the name of a attribute.
-
- function Get_Convention_Id (N : Name_Id) return Convention_Id;
- -- Returns Id of language convention corresponding to given name. It is an
- -- to call this function with a name that is not the name of a convention,
- -- or one previously given in a call to Record_Convention_Identifier.
-
- function Get_Check_Id (N : Name_Id) return Check_Id;
- -- Returns Id of suppress check corresponding to given name. It is an error
- -- to call this function with a name that is not the name of a check.
-
- function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id;
- -- Returns Id of locking policy corresponding to given name. It is an error
- -- to call this function with a name that is not the name of a check.
-
- function Get_Pragma_Id (N : Name_Id) return Pragma_Id;
- -- Returns Id of pragma corresponding to given name. Returns Unknown_Pragma
- -- if N is not a name of a known (Ada defined or GNAT-specific) pragma.
- -- Note that the function also works correctly for names of pragmas that
- -- are not in the main list of pragma Names (AST_Entry, Storage_Size, and
- -- Storage_Unit (e.g. Name_Storage_Size returns Pragma_Storage_Size).
-
- function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id;
- -- Returns Id of queuing policy corresponding to given name. It is an error
- -- to call this function with a name that is not the name of a check.
-
- function Get_Task_Dispatching_Policy_Id
- (N : Name_Id)
- return Task_Dispatching_Policy_Id;
- -- Returns Id of task dispatching policy corresponding to given name.
- -- It is an error to call this function with a name that is not the
- -- name of a check.
-
- procedure Record_Convention_Identifier
- (Id : Name_Id;
- Convention : Convention_Id);
- -- A call to this procedure, resulting from an occurrence of a pragma
- -- Convention_Identifier, records that from now on an occurrence of
- -- Id will be recognized as a name for the specified convention.
-
-private
- pragma Inline (Is_Attribute_Name);
- pragma Inline (Is_Entity_Attribute_Name);
- pragma Inline (Is_Type_Attribute_Name);
- pragma Inline (Is_Check_Name);
- pragma Inline (Is_Locking_Policy_Name);
- pragma Inline (Is_Operator_Symbol_Name);
- pragma Inline (Is_Queuing_Policy_Name);
- pragma Inline (Is_Pragma_Name);
- pragma Inline (Is_Task_Dispatching_Policy_Name);
-
-end Snames;
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- S N A M E S --
+-- --
+-- S p e c --
+-- --
+-- 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- --
+-- ware Foundation; either version 2, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU Public License. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with Types; use Types;
+
+package Snames is
+
+-- This package contains definitions of standard names (i.e. entries in the
+-- Names table) that are used throughout the GNAT compiler). It also contains
+-- the definitions of some enumeration types whose definitions are tied to
+-- the order of these preset names.
+
+-- WARNING: There is a C file, a-snames.h which duplicates some of the
+-- definitions in this file and must be kept properly synchronized.
+
+ ------------------
+ -- Preset Names --
+ ------------------
+
+ -- The following are preset entries in the names table, which are
+ -- entered at the start of every compilation for easy access. Note
+ -- that the order of initialization of these names in the body must
+ -- be coordinated with the order of names in this table.
+
+ -- Note: a name may not appear more than once in the following list.
+ -- If additional pragmas or attributes are introduced which might
+ -- otherwise cause a duplicate, then list it only once in this table,
+ -- and adjust the definition of the functions for testing for pragma
+ -- names and attribute names, and returning their ID values. Of course
+ -- everything is simpler if no such duplications occur!
+
+ -- First we have the one character names used to optimize the lookup
+ -- process for one character identifiers (to avoid the hashing in this
+ -- case) There are a full 256 of these, but only the entries for lower
+ -- case and upper case letters have identifiers
+
+ -- The lower case letter entries are used for one character identifiers
+ -- appearing in the source, for example in pragma Interface (C).
+
+ Name_A : constant Name_Id := First_Name_Id + Character'Pos ('a');
+ Name_B : constant Name_Id := First_Name_Id + Character'Pos ('b');
+ Name_C : constant Name_Id := First_Name_Id + Character'Pos ('c');
+ Name_D : constant Name_Id := First_Name_Id + Character'Pos ('d');
+ Name_E : constant Name_Id := First_Name_Id + Character'Pos ('e');
+ Name_F : constant Name_Id := First_Name_Id + Character'Pos ('f');
+ Name_G : constant Name_Id := First_Name_Id + Character'Pos ('g');
+ Name_H : constant Name_Id := First_Name_Id + Character'Pos ('h');
+ Name_I : constant Name_Id := First_Name_Id + Character'Pos ('i');
+ Name_J : constant Name_Id := First_Name_Id + Character'Pos ('j');
+ Name_K : constant Name_Id := First_Name_Id + Character'Pos ('k');
+ Name_L : constant Name_Id := First_Name_Id + Character'Pos ('l');
+ Name_M : constant Name_Id := First_Name_Id + Character'Pos ('m');
+ Name_N : constant Name_Id := First_Name_Id + Character'Pos ('n');
+ Name_O : constant Name_Id := First_Name_Id + Character'Pos ('o');
+ Name_P : constant Name_Id := First_Name_Id + Character'Pos ('p');
+ Name_Q : constant Name_Id := First_Name_Id + Character'Pos ('q');
+ Name_R : constant Name_Id := First_Name_Id + Character'Pos ('r');
+ Name_S : constant Name_Id := First_Name_Id + Character'Pos ('s');
+ Name_T : constant Name_Id := First_Name_Id + Character'Pos ('t');
+ Name_U : constant Name_Id := First_Name_Id + Character'Pos ('u');
+ Name_V : constant Name_Id := First_Name_Id + Character'Pos ('v');
+ Name_W : constant Name_Id := First_Name_Id + Character'Pos ('w');
+ Name_X : constant Name_Id := First_Name_Id + Character'Pos ('x');
+ Name_Y : constant Name_Id := First_Name_Id + Character'Pos ('y');
+ Name_Z : constant Name_Id := First_Name_Id + Character'Pos ('z');
+
+ -- The upper case letter entries are used by expander code for local
+ -- variables that do not require unique names (e.g. formal parameter
+ -- names in constructed procedures)
+
+ Name_uA : constant Name_Id := First_Name_Id + Character'Pos ('A');
+ Name_uB : constant Name_Id := First_Name_Id + Character'Pos ('B');
+ Name_uC : constant Name_Id := First_Name_Id + Character'Pos ('C');
+ Name_uD : constant Name_Id := First_Name_Id + Character'Pos ('D');
+ Name_uE : constant Name_Id := First_Name_Id + Character'Pos ('E');
+ Name_uF : constant Name_Id := First_Name_Id + Character'Pos ('F');
+ Name_uG : constant Name_Id := First_Name_Id + Character'Pos ('G');
+ Name_uH : constant Name_Id := First_Name_Id + Character'Pos ('H');
+ Name_uI : constant Name_Id := First_Name_Id + Character'Pos ('I');
+ Name_uJ : constant Name_Id := First_Name_Id + Character'Pos ('J');
+ Name_uK : constant Name_Id := First_Name_Id + Character'Pos ('K');
+ Name_uL : constant Name_Id := First_Name_Id + Character'Pos ('L');
+ Name_uM : constant Name_Id := First_Name_Id + Character'Pos ('M');
+ Name_uN : constant Name_Id := First_Name_Id + Character'Pos ('N');
+ Name_uO : constant Name_Id := First_Name_Id + Character'Pos ('O');
+ Name_uP : constant Name_Id := First_Name_Id + Character'Pos ('P');
+ Name_uQ : constant Name_Id := First_Name_Id + Character'Pos ('Q');
+ Name_uR : constant Name_Id := First_Name_Id + Character'Pos ('R');
+ Name_uS : constant Name_Id := First_Name_Id + Character'Pos ('S');
+ Name_uT : constant Name_Id := First_Name_Id + Character'Pos ('T');
+ Name_uU : constant Name_Id := First_Name_Id + Character'Pos ('U');
+ Name_uV : constant Name_Id := First_Name_Id + Character'Pos ('V');
+ Name_uW : constant Name_Id := First_Name_Id + Character'Pos ('W');
+ Name_uX : constant Name_Id := First_Name_Id + Character'Pos ('X');
+ Name_uY : constant Name_Id := First_Name_Id + Character'Pos ('Y');
+ Name_uZ : constant Name_Id := First_Name_Id + Character'Pos ('Z');
+
+ -- Note: the following table is read by the utility program XSNAMES and
+ -- its format should not be changed without coordinating with this program.
+
+ N : constant Name_Id := First_Name_Id + 256;
+ -- Synonym used in standard name definitions
+
+ -- Some names that are used by gigi, and whose definitions are reflected
+ -- in the C header file a-snames.h. They are placed at the start so that
+ -- the need to modify a-snames.h is minimized.
+
+ Name_uParent : constant Name_Id := N + 000;
+ Name_uTag : constant Name_Id := N + 001;
+ Name_Off : constant Name_Id := N + 002;
+ Name_Space : constant Name_Id := N + 003;
+ Name_Time : constant Name_Id := N + 004;
+
+ -- Some special names used by the expander. Note that the lower case u's
+ -- at the start of these names get translated to extra underscores. These
+ -- names are only referenced internally by expander generated code.
+
+ Name_uAbort_Signal : constant Name_Id := N + 005;
+ Name_uAlignment : constant Name_Id := N + 006;
+ Name_uAssign : constant Name_Id := N + 007;
+ Name_uATCB : constant Name_Id := N + 008;
+ Name_uChain : constant Name_Id := N + 009;
+ Name_uClean : constant Name_Id := N + 010;
+ Name_uController : constant Name_Id := N + 011;
+ Name_uEntry_Bodies : constant Name_Id := N + 012;
+ Name_uExpunge : constant Name_Id := N + 013;
+ Name_uFinal_List : constant Name_Id := N + 014;
+ Name_uIdepth : constant Name_Id := N + 015;
+ Name_uInit : constant Name_Id := N + 016;
+ Name_uLocal_Final_List : constant Name_Id := N + 017;
+ Name_uMaster : constant Name_Id := N + 018;
+ Name_uObject : constant Name_Id := N + 019;
+ Name_uPriority : constant Name_Id := N + 020;
+ Name_uProcess_ATSD : constant Name_Id := N + 021;
+ Name_uSecondary_Stack : constant Name_Id := N + 022;
+ Name_uService : constant Name_Id := N + 023;
+ Name_uSize : constant Name_Id := N + 024;
+ Name_uStack : constant Name_Id := N + 025;
+ Name_uTags : constant Name_Id := N + 026;
+ Name_uTask : constant Name_Id := N + 027;
+ Name_uTask_Id : constant Name_Id := N + 028;
+ Name_uTask_Info : constant Name_Id := N + 029;
+ Name_uTask_Name : constant Name_Id := N + 030;
+ Name_uTrace_Sp : constant Name_Id := N + 031;
+
+ -- Names of routines in Ada.Finalization, needed by expander
+
+ Name_Initialize : constant Name_Id := N + 032;
+ Name_Adjust : constant Name_Id := N + 033;
+ Name_Finalize : constant Name_Id := N + 034;
+
+ -- Names of fields declared in System.Finalization_Implementation,
+ -- needed by the expander when generating code for finalization.
+
+ Name_Next : constant Name_Id := N + 035;
+ Name_Prev : constant Name_Id := N + 036;
+
+ -- Names of TSS routines for implementation of DSA over PolyORB
+
+ Name_uTypeCode : constant Name_Id := N + 037;
+ Name_uFrom_Any : constant Name_Id := N + 038;
+ Name_uTo_Any : constant Name_Id := N + 039;
+
+ -- Names of allocation routines, also needed by expander
+
+ Name_Allocate : constant Name_Id := N + 040;
+ Name_Deallocate : constant Name_Id := N + 041;
+ Name_Dereference : constant Name_Id := N + 042;
+
+ -- Names of Text_IO generic subpackages (see Rtsfind.Text_IO_Kludge)
+
+ First_Text_IO_Package : constant Name_Id := N + 043;
+ Name_Decimal_IO : constant Name_Id := N + 043;
+ Name_Enumeration_IO : constant Name_Id := N + 044;
+ Name_Fixed_IO : constant Name_Id := N + 045;
+ Name_Float_IO : constant Name_Id := N + 046;
+ Name_Integer_IO : constant Name_Id := N + 047;
+ Name_Modular_IO : constant Name_Id := N + 048;
+ Last_Text_IO_Package : constant Name_Id := N + 048;
+
+ subtype Text_IO_Package_Name is Name_Id
+ range First_Text_IO_Package .. Last_Text_IO_Package;
+
+ -- Some miscellaneous names used for error detection/recovery
+
+ Name_Const : constant Name_Id := N + 049;
+ Name_Error : constant Name_Id := N + 050;
+ Name_Go : constant Name_Id := N + 051;
+ Name_Put : constant Name_Id := N + 052;
+ Name_Put_Line : constant Name_Id := N + 053;
+ Name_To : constant Name_Id := N + 054;
+
+ -- Names for packages that are treated specially by the compiler
+
+ Name_Finalization : constant Name_Id := N + 055;
+ Name_Finalization_Root : constant Name_Id := N + 056;
+ Name_Interfaces : constant Name_Id := N + 057;
+ Name_Standard : constant Name_Id := N + 058;
+ Name_System : constant Name_Id := N + 059;
+ Name_Text_IO : constant Name_Id := N + 060;
+ Name_Wide_Text_IO : constant Name_Id := N + 061;
+ Name_Wide_Wide_Text_IO : constant Name_Id := N + 062;
+
+ -- Names of implementations of the distributed systems annex
+
+ First_PCS_Name : constant Name_Id := N + 063;
+ Name_No_DSA : constant Name_Id := N + 063;
+ Name_GARLIC_DSA : constant Name_Id := N + 064;
+ Name_PolyORB_DSA : constant Name_Id := N + 065;
+ Last_PCS_Name : constant Name_Id := N + 065;
+
+ subtype PCS_Names is Name_Id
+ range First_PCS_Name .. Last_PCS_Name;
+
+ -- Names of identifiers used in expanding distribution stubs
+
+ Name_Addr : constant Name_Id := N + 066;
+ Name_Async : constant Name_Id := N + 067;
+ Name_Get_Active_Partition_ID : constant Name_Id := N + 068;
+ Name_Get_RCI_Package_Receiver : constant Name_Id := N + 069;
+ Name_Get_RCI_Package_Ref : constant Name_Id := N + 070;
+ Name_Origin : constant Name_Id := N + 071;
+ Name_Params : constant Name_Id := N + 072;
+ Name_Partition : constant Name_Id := N + 073;
+ Name_Partition_Interface : constant Name_Id := N + 074;
+ Name_Ras : constant Name_Id := N + 075;
+ Name_Call : constant Name_Id := N + 076;
+ Name_RCI_Name : constant Name_Id := N + 077;
+ Name_Receiver : constant Name_Id := N + 078;
+ Name_Result : constant Name_Id := N + 079;
+ Name_Rpc : constant Name_Id := N + 080;
+ Name_Subp_Id : constant Name_Id := N + 081;
+ Name_Operation : constant Name_Id := N + 082;
+ Name_Argument : constant Name_Id := N + 083;
+ Name_Arg_Modes : constant Name_Id := N + 084;
+ Name_Handler : constant Name_Id := N + 085;
+ Name_Target : constant Name_Id := N + 086;
+ Name_Req : constant Name_Id := N + 087;
+ Name_Obj_TypeCode : constant Name_Id := N + 088;
+ Name_Stub : constant Name_Id := N + 089;
+
+ -- Operator Symbol entries. The actual names have an upper case O at
+ -- the start in place of the Op_ prefix (e.g. the actual name that
+ -- corresponds to Name_Op_Abs is "Oabs".
+
+ First_Operator_Name : constant Name_Id := N + 090;
+ Name_Op_Abs : constant Name_Id := N + 090; -- "abs"
+ Name_Op_And : constant Name_Id := N + 091; -- "and"
+ Name_Op_Mod : constant Name_Id := N + 092; -- "mod"
+ Name_Op_Not : constant Name_Id := N + 093; -- "not"
+ Name_Op_Or : constant Name_Id := N + 094; -- "or"
+ Name_Op_Rem : constant Name_Id := N + 095; -- "rem"
+ Name_Op_Xor : constant Name_Id := N + 096; -- "xor"
+ Name_Op_Eq : constant Name_Id := N + 097; -- "="
+ Name_Op_Ne : constant Name_Id := N + 098; -- "/="
+ Name_Op_Lt : constant Name_Id := N + 099; -- "<"
+ Name_Op_Le : constant Name_Id := N + 100; -- "<="
+ Name_Op_Gt : constant Name_Id := N + 101; -- ">"
+ Name_Op_Ge : constant Name_Id := N + 102; -- ">="
+ Name_Op_Add : constant Name_Id := N + 103; -- "+"
+ Name_Op_Subtract : constant Name_Id := N + 104; -- "-"
+ Name_Op_Concat : constant Name_Id := N + 105; -- "&"
+ Name_Op_Multiply : constant Name_Id := N + 106; -- "*"
+ Name_Op_Divide : constant Name_Id := N + 107; -- "/"
+ Name_Op_Expon : constant Name_Id := N + 108; -- "**"
+ Last_Operator_Name : constant Name_Id := N + 108;
+
+ -- Names for all pragmas recognized by GNAT. The entries with the comment
+ -- "Ada 83" are pragmas that are defined in Ada 83, but not in Ada 95.
+ -- These pragmas are fully implemented in both Ada 83 and Ada 95 modes
+ -- in GNAT.
+
+ -- The entries marked GNAT are pragmas that are defined by GNAT
+ -- and implemented in both Ada 83 and Ada 95 modes. Full descriptions
+ -- of these implementation dependent pragmas may be found in the
+ -- appropriate section in unit Sem_Prag in file sem-prag.adb.
+
+ -- The entries marked Ada05 are technically implementation dependent
+ -- pragmas, but they correspond to standard proposals for Ada 2005.
+
+ -- The entries marked VMS are VMS specific pragmas that are recognized
+ -- only in OpenVMS versions of GNAT. They are ignored in other versions
+ -- with an appropriate warning.
+
+ -- The entries marked AAMP are AAMP specific pragmas that are recognized
+ -- only in GNAT for the AAMP. They are ignored in other versions with
+ -- appropriate warnings.
+
+ First_Pragma_Name : constant Name_Id := N + 109;
+
+ -- Configuration pragmas are grouped at start
+
+ Name_Ada_83 : constant Name_Id := N + 109; -- GNAT
+ Name_Ada_95 : constant Name_Id := N + 110; -- GNAT
+ Name_Ada_05 : constant Name_Id := N + 111; -- GNAT
+ Name_C_Pass_By_Copy : constant Name_Id := N + 112; -- GNAT
+ Name_Compile_Time_Warning : constant Name_Id := N + 113; -- GNAT
+ Name_Component_Alignment : constant Name_Id := N + 114; -- GNAT
+ Name_Convention_Identifier : constant Name_Id := N + 115; -- GNAT
+ Name_Detect_Blocking : constant Name_Id := N + 116; -- Ada05
+ Name_Discard_Names : constant Name_Id := N + 117;
+ Name_Elaboration_Checks : constant Name_Id := N + 118; -- GNAT
+ Name_Eliminate : constant Name_Id := N + 119; -- GNAT
+ Name_Explicit_Overriding : constant Name_Id := N + 120;
+ Name_Extend_System : constant Name_Id := N + 121; -- GNAT
+ Name_Extensions_Allowed : constant Name_Id := N + 122; -- GNAT
+ Name_External_Name_Casing : constant Name_Id := N + 123; -- GNAT
+ Name_Float_Representation : constant Name_Id := N + 124; -- GNAT
+ Name_Initialize_Scalars : constant Name_Id := N + 125; -- GNAT
+ Name_Interrupt_State : constant Name_Id := N + 126; -- GNAT
+ Name_License : constant Name_Id := N + 127; -- GNAT
+ Name_Locking_Policy : constant Name_Id := N + 128;
+ Name_Long_Float : constant Name_Id := N + 129; -- VMS
+ Name_No_Run_Time : constant Name_Id := N + 130; -- GNAT
+ Name_No_Strict_Aliasing : constant Name_Id := N + 131; -- GNAT
+ Name_Normalize_Scalars : constant Name_Id := N + 132;
+ Name_Polling : constant Name_Id := N + 133; -- GNAT
+ Name_Persistent_Data : constant Name_Id := N + 134; -- GNAT
+ Name_Persistent_Object : constant Name_Id := N + 135; -- GNAT
+ Name_Profile : constant Name_Id := N + 136; -- Ada05
+ Name_Profile_Warnings : constant Name_Id := N + 137; -- GNAT
+ Name_Propagate_Exceptions : constant Name_Id := N + 138; -- GNAT
+ Name_Queuing_Policy : constant Name_Id := N + 139;
+ Name_Ravenscar : constant Name_Id := N + 140;
+ Name_Restricted_Run_Time : constant Name_Id := N + 141;
+ Name_Restrictions : constant Name_Id := N + 142;
+ Name_Restriction_Warnings : constant Name_Id := N + 143; -- GNAT
+ Name_Reviewable : constant Name_Id := N + 144;
+ Name_Source_File_Name : constant Name_Id := N + 145; -- GNAT
+ Name_Source_File_Name_Project : constant Name_Id := N + 146; -- GNAT
+ Name_Style_Checks : constant Name_Id := N + 147; -- GNAT
+ Name_Suppress : constant Name_Id := N + 148;
+ Name_Suppress_Exception_Locations : constant Name_Id := N + 149; -- GNAT
+ Name_Task_Dispatching_Policy : constant Name_Id := N + 150;
+ Name_Universal_Data : constant Name_Id := N + 151; -- AAMP
+ Name_Unsuppress : constant Name_Id := N + 152; -- GNAT
+ Name_Use_VADS_Size : constant Name_Id := N + 153; -- GNAT
+ Name_Validity_Checks : constant Name_Id := N + 154; -- GNAT
+ Name_Warnings : constant Name_Id := N + 155; -- GNAT
+ Last_Configuration_Pragma_Name : constant Name_Id := N + 155;
+
+ -- Remaining pragma names
+
+ Name_Abort_Defer : constant Name_Id := N + 156; -- GNAT
+ Name_All_Calls_Remote : constant Name_Id := N + 157;
+ Name_Annotate : constant Name_Id := N + 158; -- GNAT
+
+ -- Note: AST_Entry is not in this list because its name matches the
+ -- name of the corresponding attribute. However, it is included in the
+ -- definition of the type Attribute_Id, and the functions Get_Pragma_Id
+ -- and Check_Pragma_Id correctly recognize and process Name_AST_Entry.
+ -- AST_Entry is a VMS specific pragma.
+
+ Name_Assert : constant Name_Id := N + 159; -- GNAT
+ Name_Asynchronous : constant Name_Id := N + 160;
+ Name_Atomic : constant Name_Id := N + 161;
+ Name_Atomic_Components : constant Name_Id := N + 162;
+ Name_Attach_Handler : constant Name_Id := N + 163;
+ Name_Comment : constant Name_Id := N + 164; -- GNAT
+ Name_Common_Object : constant Name_Id := N + 165; -- GNAT
+ Name_Complex_Representation : constant Name_Id := N + 166; -- GNAT
+ Name_Controlled : constant Name_Id := N + 167;
+ Name_Convention : constant Name_Id := N + 168;
+ Name_CPP_Class : constant Name_Id := N + 169; -- GNAT
+ Name_CPP_Constructor : constant Name_Id := N + 170; -- GNAT
+ Name_CPP_Virtual : constant Name_Id := N + 171; -- GNAT
+ Name_CPP_Vtable : constant Name_Id := N + 172; -- GNAT
+ Name_Debug : constant Name_Id := N + 173; -- GNAT
+ Name_Elaborate : constant Name_Id := N + 174; -- Ada 83
+ Name_Elaborate_All : constant Name_Id := N + 175;
+ Name_Elaborate_Body : constant Name_Id := N + 176;
+ Name_Export : constant Name_Id := N + 177;
+ Name_Export_Exception : constant Name_Id := N + 178; -- VMS
+ Name_Export_Function : constant Name_Id := N + 179; -- GNAT
+ Name_Export_Object : constant Name_Id := N + 180; -- GNAT
+ Name_Export_Procedure : constant Name_Id := N + 181; -- GNAT
+ Name_Export_Value : constant Name_Id := N + 182; -- GNAT
+ Name_Export_Valued_Procedure : constant Name_Id := N + 183; -- GNAT
+ Name_External : constant Name_Id := N + 184; -- GNAT
+ Name_Finalize_Storage_Only : constant Name_Id := N + 185; -- GNAT
+ Name_Ident : constant Name_Id := N + 186; -- VMS
+ Name_Import : constant Name_Id := N + 187;
+ Name_Import_Exception : constant Name_Id := N + 188; -- VMS
+ Name_Import_Function : constant Name_Id := N + 189; -- GNAT
+ Name_Import_Object : constant Name_Id := N + 190; -- GNAT
+ Name_Import_Procedure : constant Name_Id := N + 191; -- GNAT
+ Name_Import_Valued_Procedure : constant Name_Id := N + 192; -- GNAT
+ Name_Inline : constant Name_Id := N + 193;
+ Name_Inline_Always : constant Name_Id := N + 194; -- GNAT
+ Name_Inline_Generic : constant Name_Id := N + 195; -- GNAT
+ Name_Inspection_Point : constant Name_Id := N + 196;
+ Name_Interface_Name : constant Name_Id := N + 197; -- GNAT
+ Name_Interrupt_Handler : constant Name_Id := N + 198;
+ Name_Interrupt_Priority : constant Name_Id := N + 199;
+ Name_Java_Constructor : constant Name_Id := N + 200; -- GNAT
+ Name_Java_Interface : constant Name_Id := N + 201; -- GNAT
+ Name_Keep_Names : constant Name_Id := N + 202; -- GNAT
+ Name_Link_With : constant Name_Id := N + 203; -- GNAT
+ Name_Linker_Alias : constant Name_Id := N + 204; -- GNAT
+ Name_Linker_Options : constant Name_Id := N + 205;
+ Name_Linker_Section : constant Name_Id := N + 206; -- GNAT
+ Name_List : constant Name_Id := N + 207;
+ Name_Machine_Attribute : constant Name_Id := N + 208; -- GNAT
+ Name_Main : constant Name_Id := N + 209; -- GNAT
+ Name_Main_Storage : constant Name_Id := N + 210; -- GNAT
+ Name_Memory_Size : constant Name_Id := N + 211; -- Ada 83
+ Name_No_Return : constant Name_Id := N + 212; -- GNAT
+ Name_Obsolescent : constant Name_Id := N + 213; -- GNAT
+ Name_Optimize : constant Name_Id := N + 214;
+ Name_Optional_Overriding : constant Name_Id := N + 215;
+ Name_Pack : constant Name_Id := N + 216;
+ Name_Page : constant Name_Id := N + 217;
+ Name_Passive : constant Name_Id := N + 218; -- GNAT
+ Name_Preelaborate : constant Name_Id := N + 219;
+ Name_Priority : constant Name_Id := N + 220;
+ Name_Psect_Object : constant Name_Id := N + 221; -- VMS
+ Name_Pure : constant Name_Id := N + 222;
+ Name_Pure_Function : constant Name_Id := N + 223; -- GNAT
+ Name_Remote_Call_Interface : constant Name_Id := N + 224;
+ Name_Remote_Types : constant Name_Id := N + 225;
+ Name_Share_Generic : constant Name_Id := N + 226; -- GNAT
+ Name_Shared : constant Name_Id := N + 227; -- Ada 83
+ Name_Shared_Passive : constant Name_Id := N + 228;
+
+ -- Note: Storage_Size is not in this list because its name matches the
+ -- name of the corresponding attribute. However, it is included in the
+ -- definition of the type Attribute_Id, and the functions Get_Pragma_Id
+ -- and Check_Pragma_Id correctly recognize and process Name_Storage_Size.
+
+ -- Note: Storage_Unit is also omitted from the list because of a clash
+ -- with an attribute name, and is treated similarly.
+
+ Name_Source_Reference : constant Name_Id := N + 229; -- GNAT
+ Name_Stream_Convert : constant Name_Id := N + 230; -- GNAT
+ Name_Subtitle : constant Name_Id := N + 231; -- GNAT
+ Name_Suppress_All : constant Name_Id := N + 232; -- GNAT
+ Name_Suppress_Debug_Info : constant Name_Id := N + 233; -- GNAT
+ Name_Suppress_Initialization : constant Name_Id := N + 234; -- GNAT
+ Name_System_Name : constant Name_Id := N + 235; -- Ada 83
+ Name_Task_Info : constant Name_Id := N + 236; -- GNAT
+ Name_Task_Name : constant Name_Id := N + 237; -- GNAT
+ Name_Task_Storage : constant Name_Id := N + 238; -- VMS
+ Name_Thread_Body : constant Name_Id := N + 239; -- GNAT
+ Name_Time_Slice : constant Name_Id := N + 240; -- GNAT
+ Name_Title : constant Name_Id := N + 241; -- GNAT
+ Name_Unchecked_Union : constant Name_Id := N + 242; -- GNAT
+ Name_Unimplemented_Unit : constant Name_Id := N + 243; -- GNAT
+ Name_Unreferenced : constant Name_Id := N + 244; -- GNAT
+ Name_Unreserve_All_Interrupts : constant Name_Id := N + 245; -- GNAT
+ Name_Volatile : constant Name_Id := N + 246;
+ Name_Volatile_Components : constant Name_Id := N + 247;
+ Name_Weak_External : constant Name_Id := N + 248; -- GNAT
+ Last_Pragma_Name : constant Name_Id := N + 248;
+
+ -- Language convention names for pragma Convention/Export/Import/Interface
+ -- Note that Name_C is not included in this list, since it was already
+ -- declared earlier in the context of one-character identifier names
+ -- (where the order is critical to the fast look up process).
+
+ -- Note: there are no convention names corresponding to the conventions
+ -- Entry and Protected, this is because these conventions cannot be
+ -- specified by a pragma.
+
+ First_Convention_Name : constant Name_Id := N + 249;
+ Name_Ada : constant Name_Id := N + 249;
+ Name_Assembler : constant Name_Id := N + 250;
+ Name_COBOL : constant Name_Id := N + 251;
+ Name_CPP : constant Name_Id := N + 252;
+ Name_Fortran : constant Name_Id := N + 253;
+ Name_Intrinsic : constant Name_Id := N + 254;
+ Name_Java : constant Name_Id := N + 255;
+ Name_Stdcall : constant Name_Id := N + 256;
+ Name_Stubbed : constant Name_Id := N + 257;
+ Last_Convention_Name : constant Name_Id := N + 257;
+
+ -- The following names are preset as synonyms for Assembler
+
+ Name_Asm : constant Name_Id := N + 258;
+ Name_Assembly : constant Name_Id := N + 259;
+
+ -- The following names are preset as synonyms for C
+
+ Name_Default : constant Name_Id := N + 260;
+ -- Name_Exernal (previously defined as pragma)
+
+ -- The following names are present as synonyms for Stdcall
+
+ Name_DLL : constant Name_Id := N + 261;
+ Name_Win32 : constant Name_Id := N + 262;
+
+ -- Other special names used in processing pragmas
+
+ Name_As_Is : constant Name_Id := N + 263;
+ Name_Body_File_Name : constant Name_Id := N + 264;
+ Name_Boolean_Entry_Barriers : constant Name_Id := N + 265;
+ Name_Casing : constant Name_Id := N + 266;
+ Name_Code : constant Name_Id := N + 267;
+ Name_Component : constant Name_Id := N + 268;
+ Name_Component_Size_4 : constant Name_Id := N + 269;
+ Name_Copy : constant Name_Id := N + 270;
+ Name_D_Float : constant Name_Id := N + 271;
+ Name_Descriptor : constant Name_Id := N + 272;
+ Name_Dot_Replacement : constant Name_Id := N + 273;
+ Name_Dynamic : constant Name_Id := N + 274;
+ Name_Entity : constant Name_Id := N + 275;
+ Name_External_Name : constant Name_Id := N + 276;
+ Name_First_Optional_Parameter : constant Name_Id := N + 277;
+ Name_Form : constant Name_Id := N + 278;
+ Name_G_Float : constant Name_Id := N + 279;
+ Name_Gcc : constant Name_Id := N + 280;
+ Name_Gnat : constant Name_Id := N + 281;
+ Name_GPL : constant Name_Id := N + 282;
+ Name_IEEE_Float : constant Name_Id := N + 283;
+ Name_Internal : constant Name_Id := N + 284;
+ Name_Link_Name : constant Name_Id := N + 285;
+ Name_Lowercase : constant Name_Id := N + 286;
+ Name_Max_Entry_Queue_Depth : constant Name_Id := N + 287;
+ Name_Max_Entry_Queue_Length : constant Name_Id := N + 288;
+ Name_Max_Size : constant Name_Id := N + 289;
+ Name_Mechanism : constant Name_Id := N + 290;
+ Name_Mixedcase : constant Name_Id := N + 291;
+ Name_Modified_GPL : constant Name_Id := N + 292;
+ Name_Name : constant Name_Id := N + 293;
+ Name_NCA : constant Name_Id := N + 294;
+ Name_No : constant Name_Id := N + 295;
+ Name_No_Dependence : constant Name_Id := N + 296;
+ Name_No_Dynamic_Attachment : constant Name_Id := N + 297;
+ Name_No_Dynamic_Interrupts : constant Name_Id := N + 298;
+ Name_No_Requeue : constant Name_Id := N + 299;
+ Name_No_Requeue_Statements : constant Name_Id := N + 300;
+ Name_No_Task_Attributes : constant Name_Id := N + 301;
+ Name_No_Task_Attributes_Package : constant Name_Id := N + 302;
+ Name_On : constant Name_Id := N + 303;
+ Name_Parameter_Types : constant Name_Id := N + 304;
+ Name_Reference : constant Name_Id := N + 305;
+ Name_Restricted : constant Name_Id := N + 306;
+ Name_Result_Mechanism : constant Name_Id := N + 307;
+ Name_Result_Type : constant Name_Id := N + 308;
+ Name_Runtime : constant Name_Id := N + 309;
+ Name_SB : constant Name_Id := N + 310;
+ Name_Secondary_Stack_Size : constant Name_Id := N + 311;
+ Name_Section : constant Name_Id := N + 312;
+ Name_Semaphore : constant Name_Id := N + 313;
+ Name_Simple_Barriers : constant Name_Id := N + 314;
+ Name_Spec_File_Name : constant Name_Id := N + 315;
+ Name_Static : constant Name_Id := N + 316;
+ Name_Stack_Size : constant Name_Id := N + 317;
+ Name_Subunit_File_Name : constant Name_Id := N + 318;
+ Name_Task_Stack_Size_Default : constant Name_Id := N + 319;
+ Name_Task_Type : constant Name_Id := N + 320;
+ Name_Time_Slicing_Enabled : constant Name_Id := N + 321;
+ Name_Top_Guard : constant Name_Id := N + 322;
+ Name_UBA : constant Name_Id := N + 323;
+ Name_UBS : constant Name_Id := N + 324;
+ Name_UBSB : constant Name_Id := N + 325;
+ Name_Unit_Name : constant Name_Id := N + 326;
+ Name_Unknown : constant Name_Id := N + 327;
+ Name_Unrestricted : constant Name_Id := N + 328;
+ Name_Uppercase : constant Name_Id := N + 329;
+ Name_User : constant Name_Id := N + 330;
+ Name_VAX_Float : constant Name_Id := N + 331;
+ Name_VMS : constant Name_Id := N + 332;
+ Name_Working_Storage : constant Name_Id := N + 333;
+
+ -- Names of recognized attributes. The entries with the comment "Ada 83"
+ -- are attributes that are defined in Ada 83, but not in Ada 95. These
+ -- attributes are implemented in both Ada 83 and Ada 95 modes in GNAT.
+
+ -- The entries marked GNAT are attributes that are defined by GNAT
+ -- and implemented in both Ada 83 and Ada 95 modes. Full descriptions
+ -- of these implementation dependent attributes may be found in the
+ -- appropriate section in package Sem_Attr in file sem-attr.ads.
+
+ -- The entries marked VMS are recognized only in OpenVMS implementations
+ -- of GNAT, and are treated as illegal in all other contexts.
+
+ First_Attribute_Name : constant Name_Id := N + 334;
+ Name_Abort_Signal : constant Name_Id := N + 334; -- GNAT
+ Name_Access : constant Name_Id := N + 335;
+ Name_Address : constant Name_Id := N + 336;
+ Name_Address_Size : constant Name_Id := N + 337; -- GNAT
+ Name_Aft : constant Name_Id := N + 338;
+ Name_Alignment : constant Name_Id := N + 339;
+ Name_Asm_Input : constant Name_Id := N + 340; -- GNAT
+ Name_Asm_Output : constant Name_Id := N + 341; -- GNAT
+ Name_AST_Entry : constant Name_Id := N + 342; -- VMS
+ Name_Bit : constant Name_Id := N + 343; -- GNAT
+ Name_Bit_Order : constant Name_Id := N + 344;
+ Name_Bit_Position : constant Name_Id := N + 345; -- GNAT
+ Name_Body_Version : constant Name_Id := N + 346;
+ Name_Callable : constant Name_Id := N + 347;
+ Name_Caller : constant Name_Id := N + 348;
+ Name_Code_Address : constant Name_Id := N + 349; -- GNAT
+ Name_Component_Size : constant Name_Id := N + 350;
+ Name_Compose : constant Name_Id := N + 351;
+ Name_Constrained : constant Name_Id := N + 352;
+ Name_Count : constant Name_Id := N + 353;
+ Name_Default_Bit_Order : constant Name_Id := N + 354; -- GNAT
+ Name_Definite : constant Name_Id := N + 355;
+ Name_Delta : constant Name_Id := N + 356;
+ Name_Denorm : constant Name_Id := N + 357;
+ Name_Digits : constant Name_Id := N + 358;
+ Name_Elaborated : constant Name_Id := N + 359; -- GNAT
+ Name_Emax : constant Name_Id := N + 360; -- Ada 83
+ Name_Enum_Rep : constant Name_Id := N + 361; -- GNAT
+ Name_Epsilon : constant Name_Id := N + 362; -- Ada 83
+ Name_Exponent : constant Name_Id := N + 363;
+ Name_External_Tag : constant Name_Id := N + 364;
+ Name_First : constant Name_Id := N + 365;
+ Name_First_Bit : constant Name_Id := N + 366;
+ Name_Fixed_Value : constant Name_Id := N + 367; -- GNAT
+ Name_Fore : constant Name_Id := N + 368;
+ Name_Has_Access_Values : constant Name_Id := N + 369; -- GNAT
+ Name_Has_Discriminants : constant Name_Id := N + 370; -- GNAT
+ Name_Identity : constant Name_Id := N + 371;
+ Name_Img : constant Name_Id := N + 372; -- GNAT
+ Name_Integer_Value : constant Name_Id := N + 373; -- GNAT
+ Name_Large : constant Name_Id := N + 374; -- Ada 83
+ Name_Last : constant Name_Id := N + 375;
+ Name_Last_Bit : constant Name_Id := N + 376;
+ Name_Leading_Part : constant Name_Id := N + 377;
+ Name_Length : constant Name_Id := N + 378;
+ Name_Machine_Emax : constant Name_Id := N + 379;
+ Name_Machine_Emin : constant Name_Id := N + 380;
+ Name_Machine_Mantissa : constant Name_Id := N + 381;
+ Name_Machine_Overflows : constant Name_Id := N + 382;
+ Name_Machine_Radix : constant Name_Id := N + 383;
+ Name_Machine_Rounds : constant Name_Id := N + 384;
+ Name_Machine_Size : constant Name_Id := N + 385; -- GNAT
+ Name_Mantissa : constant Name_Id := N + 386; -- Ada 83
+ Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 387;
+ Name_Maximum_Alignment : constant Name_Id := N + 388; -- GNAT
+ Name_Mechanism_Code : constant Name_Id := N + 389; -- GNAT
+ Name_Mod : constant Name_Id := N + 390;
+ Name_Model_Emin : constant Name_Id := N + 391;
+ Name_Model_Epsilon : constant Name_Id := N + 392;
+ Name_Model_Mantissa : constant Name_Id := N + 393;
+ Name_Model_Small : constant Name_Id := N + 394;
+ Name_Modulus : constant Name_Id := N + 395;
+ Name_Null_Parameter : constant Name_Id := N + 396; -- GNAT
+ Name_Object_Size : constant Name_Id := N + 397; -- GNAT
+ Name_Partition_ID : constant Name_Id := N + 398;
+ Name_Passed_By_Reference : constant Name_Id := N + 399; -- GNAT
+ Name_Pool_Address : constant Name_Id := N + 400;
+ Name_Pos : constant Name_Id := N + 401;
+ Name_Position : constant Name_Id := N + 402;
+ Name_Range : constant Name_Id := N + 403;
+ Name_Range_Length : constant Name_Id := N + 404; -- GNAT
+ Name_Round : constant Name_Id := N + 405;
+ Name_Safe_Emax : constant Name_Id := N + 406; -- Ada 83
+ Name_Safe_First : constant Name_Id := N + 407;
+ Name_Safe_Large : constant Name_Id := N + 408; -- Ada 83
+ Name_Safe_Last : constant Name_Id := N + 409;
+ Name_Safe_Small : constant Name_Id := N + 410; -- Ada 83
+ Name_Scale : constant Name_Id := N + 411;
+ Name_Scaling : constant Name_Id := N + 412;
+ Name_Signed_Zeros : constant Name_Id := N + 413;
+ Name_Size : constant Name_Id := N + 414;
+ Name_Small : constant Name_Id := N + 415;
+ Name_Storage_Size : constant Name_Id := N + 416;
+ Name_Storage_Unit : constant Name_Id := N + 417; -- GNAT
+ Name_Stream_Size : constant Name_Id := N + 418; -- Ada 05
+ Name_Tag : constant Name_Id := N + 419;
+ Name_Target_Name : constant Name_Id := N + 420; -- GNAT
+ Name_Terminated : constant Name_Id := N + 421;
+ Name_To_Address : constant Name_Id := N + 422; -- GNAT
+ Name_Type_Class : constant Name_Id := N + 423; -- GNAT
+ Name_UET_Address : constant Name_Id := N + 424; -- GNAT
+ Name_Unbiased_Rounding : constant Name_Id := N + 425;
+ Name_Unchecked_Access : constant Name_Id := N + 426;
+ Name_Unconstrained_Array : constant Name_Id := N + 427;
+ Name_Universal_Literal_String : constant Name_Id := N + 428; -- GNAT
+ Name_Unrestricted_Access : constant Name_Id := N + 429; -- GNAT
+ Name_VADS_Size : constant Name_Id := N + 430; -- GNAT
+ Name_Val : constant Name_Id := N + 431;
+ Name_Valid : constant Name_Id := N + 432;
+ Name_Value_Size : constant Name_Id := N + 433; -- GNAT
+ Name_Version : constant Name_Id := N + 434;
+ Name_Wchar_T_Size : constant Name_Id := N + 435; -- GNAT
+ Name_Wide_Wide_Width : constant Name_Id := N + 436; -- Ada 05
+ Name_Wide_Width : constant Name_Id := N + 437;
+ Name_Width : constant Name_Id := N + 438;
+ Name_Word_Size : constant Name_Id := N + 439; -- GNAT
+
+ -- Attributes that designate attributes returning renamable functions,
+ -- i.e. functions that return other than a universal value and that
+ -- have non-universal arguments.
+
+ First_Renamable_Function_Attribute : constant Name_Id := N + 440;
+ Name_Adjacent : constant Name_Id := N + 440;
+ Name_Ceiling : constant Name_Id := N + 441;
+ Name_Copy_Sign : constant Name_Id := N + 442;
+ Name_Floor : constant Name_Id := N + 443;
+ Name_Fraction : constant Name_Id := N + 444;
+ Name_Image : constant Name_Id := N + 445;
+ Name_Input : constant Name_Id := N + 446;
+ Name_Machine : constant Name_Id := N + 447;
+ Name_Max : constant Name_Id := N + 448;
+ Name_Min : constant Name_Id := N + 449;
+ Name_Model : constant Name_Id := N + 450;
+ Name_Pred : constant Name_Id := N + 451;
+ Name_Remainder : constant Name_Id := N + 452;
+ Name_Rounding : constant Name_Id := N + 453;
+ Name_Succ : constant Name_Id := N + 454;
+ Name_Truncation : constant Name_Id := N + 455;
+ Name_Value : constant Name_Id := N + 456;
+ Name_Wide_Image : constant Name_Id := N + 457;
+ Name_Wide_Wide_Image : constant Name_Id := N + 458;
+ Name_Wide_Value : constant Name_Id := N + 459;
+ Name_Wide_Wide_Value : constant Name_Id := N + 460;
+ Last_Renamable_Function_Attribute : constant Name_Id := N + 460;
+
+ -- Attributes that designate procedures
+
+ First_Procedure_Attribute : constant Name_Id := N + 461;
+ Name_Output : constant Name_Id := N + 461;
+ Name_Read : constant Name_Id := N + 462;
+ Name_Write : constant Name_Id := N + 463;
+ Last_Procedure_Attribute : constant Name_Id := N + 463;
+
+ -- Remaining attributes are ones that return entities
+
+ First_Entity_Attribute_Name : constant Name_Id := N + 464;
+ Name_Elab_Body : constant Name_Id := N + 464; -- GNAT
+ Name_Elab_Spec : constant Name_Id := N + 465; -- GNAT
+ Name_Storage_Pool : constant Name_Id := N + 466;
+
+ -- These attributes are the ones that return types
+
+ First_Type_Attribute_Name : constant Name_Id := N + 467;
+ Name_Base : constant Name_Id := N + 467;
+ Name_Class : constant Name_Id := N + 468;
+ Last_Type_Attribute_Name : constant Name_Id := N + 468;
+ Last_Entity_Attribute_Name : constant Name_Id := N + 468;
+ Last_Attribute_Name : constant Name_Id := N + 468;
+
+ -- Names of recognized locking policy identifiers
+
+ -- Note: policies are identified by the first character of the
+ -- name (e.g. C for Ceiling_Locking). If new policy names are added,
+ -- the first character must be distinct.
+
+ First_Locking_Policy_Name : constant Name_Id := N + 469;
+ Name_Ceiling_Locking : constant Name_Id := N + 469;
+ Name_Inheritance_Locking : constant Name_Id := N + 470;
+ Last_Locking_Policy_Name : constant Name_Id := N + 470;
+
+ -- Names of recognized queuing policy identifiers.
+
+ -- Note: policies are identified by the first character of the
+ -- name (e.g. F for FIFO_Queuing). If new policy names are added,
+ -- the first character must be distinct.
+
+ First_Queuing_Policy_Name : constant Name_Id := N + 471;
+ Name_FIFO_Queuing : constant Name_Id := N + 471;
+ Name_Priority_Queuing : constant Name_Id := N + 472;
+ Last_Queuing_Policy_Name : constant Name_Id := N + 472;
+
+ -- Names of recognized task dispatching policy identifiers
+
+ -- Note: policies are identified by the first character of the
+ -- name (e.g. F for FIFO_WIthinn_Priorities). If new policy names
+ -- are added, the first character must be distinct.
+
+ First_Task_Dispatching_Policy_Name : constant Name_Id := N + 473;
+ Name_FIFO_Within_Priorities : constant Name_Id := N + 473;
+ Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 473;
+
+ -- Names of recognized checks for pragma Suppress
+
+ First_Check_Name : constant Name_Id := N + 474;
+ Name_Access_Check : constant Name_Id := N + 474;
+ Name_Accessibility_Check : constant Name_Id := N + 475;
+ Name_Discriminant_Check : constant Name_Id := N + 476;
+ Name_Division_Check : constant Name_Id := N + 477;
+ Name_Elaboration_Check : constant Name_Id := N + 478;
+ Name_Index_Check : constant Name_Id := N + 479;
+ Name_Length_Check : constant Name_Id := N + 480;
+ Name_Overflow_Check : constant Name_Id := N + 481;
+ Name_Range_Check : constant Name_Id := N + 482;
+ Name_Storage_Check : constant Name_Id := N + 483;
+ Name_Tag_Check : constant Name_Id := N + 484;
+ Name_All_Checks : constant Name_Id := N + 485;
+ Last_Check_Name : constant Name_Id := N + 485;
+
+ -- Names corresponding to reserved keywords, excluding those already
+ -- declared in the attribute list (Access, Delta, Digits, Mod, Range).
+
+ Name_Abort : constant Name_Id := N + 486;
+ Name_Abs : constant Name_Id := N + 487;
+ Name_Accept : constant Name_Id := N + 488;
+ Name_And : constant Name_Id := N + 489;
+ Name_All : constant Name_Id := N + 490;
+ Name_Array : constant Name_Id := N + 491;
+ Name_At : constant Name_Id := N + 492;
+ Name_Begin : constant Name_Id := N + 493;
+ Name_Body : constant Name_Id := N + 494;
+ Name_Case : constant Name_Id := N + 495;
+ Name_Constant : constant Name_Id := N + 496;
+ Name_Declare : constant Name_Id := N + 497;
+ Name_Delay : constant Name_Id := N + 498;
+ Name_Do : constant Name_Id := N + 499;
+ Name_Else : constant Name_Id := N + 500;
+ Name_Elsif : constant Name_Id := N + 501;
+ Name_End : constant Name_Id := N + 502;
+ Name_Entry : constant Name_Id := N + 503;
+ Name_Exception : constant Name_Id := N + 504;
+ Name_Exit : constant Name_Id := N + 505;
+ Name_For : constant Name_Id := N + 506;
+ Name_Function : constant Name_Id := N + 507;
+ Name_Generic : constant Name_Id := N + 508;
+ Name_Goto : constant Name_Id := N + 509;
+ Name_If : constant Name_Id := N + 510;
+ Name_In : constant Name_Id := N + 511;
+ Name_Is : constant Name_Id := N + 512;
+ Name_Limited : constant Name_Id := N + 513;
+ Name_Loop : constant Name_Id := N + 514;
+ Name_New : constant Name_Id := N + 515;
+ Name_Not : constant Name_Id := N + 516;
+ Name_Null : constant Name_Id := N + 517;
+ Name_Of : constant Name_Id := N + 518;
+ Name_Or : constant Name_Id := N + 519;
+ Name_Others : constant Name_Id := N + 520;
+ Name_Out : constant Name_Id := N + 521;
+ Name_Package : constant Name_Id := N + 522;
+ Name_Pragma : constant Name_Id := N + 523;
+ Name_Private : constant Name_Id := N + 524;
+ Name_Procedure : constant Name_Id := N + 525;
+ Name_Raise : constant Name_Id := N + 526;
+ Name_Record : constant Name_Id := N + 527;
+ Name_Rem : constant Name_Id := N + 528;
+ Name_Renames : constant Name_Id := N + 529;
+ Name_Return : constant Name_Id := N + 530;
+ Name_Reverse : constant Name_Id := N + 531;
+ Name_Select : constant Name_Id := N + 532;
+ Name_Separate : constant Name_Id := N + 533;
+ Name_Subtype : constant Name_Id := N + 534;
+ Name_Task : constant Name_Id := N + 535;
+ Name_Terminate : constant Name_Id := N + 536;
+ Name_Then : constant Name_Id := N + 537;
+ Name_Type : constant Name_Id := N + 538;
+ Name_Use : constant Name_Id := N + 539;
+ Name_When : constant Name_Id := N + 540;
+ Name_While : constant Name_Id := N + 541;
+ Name_With : constant Name_Id := N + 542;
+ Name_Xor : constant Name_Id := N + 543;
+
+ -- Names of intrinsic subprograms
+
+ -- Note: Asm is missing from this list, since Asm is a legitimate
+ -- convention name. So is To_Adress, which is a GNAT attribute.
+
+ First_Intrinsic_Name : constant Name_Id := N + 544;
+ Name_Divide : constant Name_Id := N + 544;
+ Name_Enclosing_Entity : constant Name_Id := N + 545;
+ Name_Exception_Information : constant Name_Id := N + 546;
+ Name_Exception_Message : constant Name_Id := N + 547;
+ Name_Exception_Name : constant Name_Id := N + 548;
+ Name_File : constant Name_Id := N + 549;
+ Name_Import_Address : constant Name_Id := N + 550;
+ Name_Import_Largest_Value : constant Name_Id := N + 551;
+ Name_Import_Value : constant Name_Id := N + 552;
+ Name_Is_Negative : constant Name_Id := N + 553;
+ Name_Line : constant Name_Id := N + 554;
+ Name_Rotate_Left : constant Name_Id := N + 555;
+ Name_Rotate_Right : constant Name_Id := N + 556;
+ Name_Shift_Left : constant Name_Id := N + 557;
+ Name_Shift_Right : constant Name_Id := N + 558;
+ Name_Shift_Right_Arithmetic : constant Name_Id := N + 559;
+ Name_Source_Location : constant Name_Id := N + 560;
+ Name_Unchecked_Conversion : constant Name_Id := N + 561;
+ Name_Unchecked_Deallocation : constant Name_Id := N + 562;
+ Name_To_Pointer : constant Name_Id := N + 563;
+ Last_Intrinsic_Name : constant Name_Id := N + 563;
+
+ -- Reserved words used only in Ada 95
+
+ First_95_Reserved_Word : constant Name_Id := N + 564;
+ Name_Abstract : constant Name_Id := N + 564;
+ Name_Aliased : constant Name_Id := N + 565;
+ Name_Protected : constant Name_Id := N + 566;
+ Name_Until : constant Name_Id := N + 567;
+ Name_Requeue : constant Name_Id := N + 568;
+ Name_Tagged : constant Name_Id := N + 569;
+ Last_95_Reserved_Word : constant Name_Id := N + 569;
+
+ subtype Ada_95_Reserved_Words is
+ Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
+
+ -- Miscellaneous names used in semantic checking
+
+ Name_Raise_Exception : constant Name_Id := N + 570;
+
+ -- Additional reserved words and identifiers used in GNAT Project Files
+ -- Note that Name_External is already previously declared
+
+ Name_Ada_Roots : constant Name_Id := N + 571;
+ Name_Binder : constant Name_Id := N + 572;
+ Name_Binder_Driver : constant Name_Id := N + 573;
+ Name_Body_Suffix : constant Name_Id := N + 574;
+ Name_Builder : constant Name_Id := N + 575;
+ Name_Compiler : constant Name_Id := N + 576;
+ Name_Compiler_Driver : constant Name_Id := N + 577;
+ Name_Compiler_Kind : constant Name_Id := N + 578;
+ Name_Compute_Dependency : constant Name_Id := N + 579;
+ Name_Cross_Reference : constant Name_Id := N + 580;
+ Name_Default_Linker : constant Name_Id := N + 581;
+ Name_Default_Switches : constant Name_Id := N + 582;
+ Name_Dependency_Option : constant Name_Id := N + 583;
+ Name_Exec_Dir : constant Name_Id := N + 584;
+ Name_Executable : constant Name_Id := N + 585;
+ Name_Executable_Suffix : constant Name_Id := N + 586;
+ Name_Extends : constant Name_Id := N + 587;
+ Name_Externally_Built : constant Name_Id := N + 588;
+ Name_Finder : constant Name_Id := N + 589;
+ Name_Global_Configuration_Pragmas : constant Name_Id := N + 590;
+ Name_Gnatls : constant Name_Id := N + 591;
+ Name_Gnatstub : constant Name_Id := N + 592;
+ Name_Implementation : constant Name_Id := N + 593;
+ Name_Implementation_Exceptions : constant Name_Id := N + 594;
+ Name_Implementation_Suffix : constant Name_Id := N + 595;
+ Name_Include_Option : constant Name_Id := N + 596;
+ Name_Language_Processing : constant Name_Id := N + 597;
+ Name_Languages : constant Name_Id := N + 598;
+ Name_Library_Dir : constant Name_Id := N + 599;
+ Name_Library_Auto_Init : constant Name_Id := N + 600;
+ Name_Library_GCC : constant Name_Id := N + 601;
+ Name_Library_Interface : constant Name_Id := N + 602;
+ Name_Library_Kind : constant Name_Id := N + 603;
+ Name_Library_Name : constant Name_Id := N + 604;
+ Name_Library_Options : constant Name_Id := N + 605;
+ Name_Library_Reference_Symbol_File : constant Name_Id := N + 606;
+ Name_Library_Src_Dir : constant Name_Id := N + 607;
+ Name_Library_Symbol_File : constant Name_Id := N + 608;
+ Name_Library_Symbol_Policy : constant Name_Id := N + 609;
+ Name_Library_Version : constant Name_Id := N + 610;
+ Name_Linker : constant Name_Id := N + 611;
+ Name_Local_Configuration_Pragmas : constant Name_Id := N + 612;
+ Name_Locally_Removed_Files : constant Name_Id := N + 613;
+ Name_Metrics : constant Name_Id := N + 614;
+ Name_Naming : constant Name_Id := N + 615;
+ Name_Object_Dir : constant Name_Id := N + 616;
+ Name_Pretty_Printer : constant Name_Id := N + 617;
+ Name_Project : constant Name_Id := N + 618;
+ Name_Separate_Suffix : constant Name_Id := N + 619;
+ Name_Source_Dirs : constant Name_Id := N + 620;
+ Name_Source_Files : constant Name_Id := N + 621;
+ Name_Source_List_File : constant Name_Id := N + 622;
+ Name_Spec : constant Name_Id := N + 623;
+ Name_Spec_Suffix : constant Name_Id := N + 624;
+ Name_Specification : constant Name_Id := N + 625;
+ Name_Specification_Exceptions : constant Name_Id := N + 626;
+ Name_Specification_Suffix : constant Name_Id := N + 627;
+ Name_Switches : constant Name_Id := N + 628;
+
+ -- Other miscellaneous names used in front end
+
+ Name_Unaligned_Valid : constant Name_Id := N + 629;
+
+ -- ----------------------------------------------------------------
+ First_2005_Reserved_Word : constant Name_Id := N + 630;
+ Name_Interface : constant Name_Id := N + 630;
+ Name_Overriding : constant Name_Id := N + 631;
+ Name_Synchronized : constant Name_Id := N + 632;
+ Last_2005_Reserved_Word : constant Name_Id := N + 632;
+
+ subtype Ada_2005_Reserved_Words is
+ Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
+
+ -- Mark last defined name for consistency check in Snames body
+
+ Last_Predefined_Name : constant Name_Id := N + 632;
+
+ subtype Any_Operator_Name is Name_Id range
+ First_Operator_Name .. Last_Operator_Name;
+
+ ------------------------------
+ -- Attribute ID Definitions --
+ ------------------------------
+
+ type Attribute_Id is (
+ Attribute_Abort_Signal,
+ Attribute_Access,
+ Attribute_Address,
+ Attribute_Address_Size,
+ Attribute_Aft,
+ Attribute_Alignment,
+ Attribute_Asm_Input,
+ Attribute_Asm_Output,
+ Attribute_AST_Entry,
+ Attribute_Bit,
+ Attribute_Bit_Order,
+ Attribute_Bit_Position,
+ Attribute_Body_Version,
+ Attribute_Callable,
+ Attribute_Caller,
+ Attribute_Code_Address,
+ Attribute_Component_Size,
+ Attribute_Compose,
+ Attribute_Constrained,
+ Attribute_Count,
+ Attribute_Default_Bit_Order,
+ Attribute_Definite,
+ Attribute_Delta,
+ Attribute_Denorm,
+ Attribute_Digits,
+ Attribute_Elaborated,
+ Attribute_Emax,
+ Attribute_Enum_Rep,
+ Attribute_Epsilon,
+ Attribute_Exponent,
+ Attribute_External_Tag,
+ Attribute_First,
+ Attribute_First_Bit,
+ Attribute_Fixed_Value,
+ Attribute_Fore,
+ Attribute_Has_Access_Values,
+ Attribute_Has_Discriminants,
+ Attribute_Identity,
+ Attribute_Img,
+ Attribute_Integer_Value,
+ Attribute_Large,
+ Attribute_Last,
+ Attribute_Last_Bit,
+ Attribute_Leading_Part,
+ Attribute_Length,
+ Attribute_Machine_Emax,
+ Attribute_Machine_Emin,
+ Attribute_Machine_Mantissa,
+ Attribute_Machine_Overflows,
+ Attribute_Machine_Radix,
+ Attribute_Machine_Rounds,
+ Attribute_Machine_Size,
+ Attribute_Mantissa,
+ Attribute_Max_Size_In_Storage_Elements,
+ Attribute_Maximum_Alignment,
+ Attribute_Mechanism_Code,
+ Attribute_Mod,
+ Attribute_Model_Emin,
+ Attribute_Model_Epsilon,
+ Attribute_Model_Mantissa,
+ Attribute_Model_Small,
+ Attribute_Modulus,
+ Attribute_Null_Parameter,
+ Attribute_Object_Size,
+ Attribute_Partition_ID,
+ Attribute_Passed_By_Reference,
+ Attribute_Pool_Address,
+ Attribute_Pos,
+ Attribute_Position,
+ Attribute_Range,
+ Attribute_Range_Length,
+ Attribute_Round,
+ Attribute_Safe_Emax,
+ Attribute_Safe_First,
+ Attribute_Safe_Large,
+ Attribute_Safe_Last,
+ Attribute_Safe_Small,
+ Attribute_Scale,
+ Attribute_Scaling,
+ Attribute_Signed_Zeros,
+ Attribute_Size,
+ Attribute_Small,
+ Attribute_Storage_Size,
+ Attribute_Storage_Unit,
+ Attribute_Stream_Size,
+ Attribute_Tag,
+ Attribute_Target_Name,
+ Attribute_Terminated,
+ Attribute_To_Address,
+ Attribute_Type_Class,
+ Attribute_UET_Address,
+ Attribute_Unbiased_Rounding,
+ Attribute_Unchecked_Access,
+ Attribute_Unconstrained_Array,
+ Attribute_Universal_Literal_String,
+ Attribute_Unrestricted_Access,
+ Attribute_VADS_Size,
+ Attribute_Val,
+ Attribute_Valid,
+ Attribute_Value_Size,
+ Attribute_Version,
+ Attribute_Wchar_T_Size,
+ Attribute_Wide_Wide_Width,
+ Attribute_Wide_Width,
+ Attribute_Width,
+ Attribute_Word_Size,
+
+ -- Attributes designating renamable functions
+
+ Attribute_Adjacent,
+ Attribute_Ceiling,
+ Attribute_Copy_Sign,
+ Attribute_Floor,
+ Attribute_Fraction,
+ Attribute_Image,
+ Attribute_Input,
+ Attribute_Machine,
+ Attribute_Max,
+ Attribute_Min,
+ Attribute_Model,
+ Attribute_Pred,
+ Attribute_Remainder,
+ Attribute_Rounding,
+ Attribute_Succ,
+ Attribute_Truncation,
+ Attribute_Value,
+ Attribute_Wide_Image,
+ Attribute_Wide_Wide_Image,
+ Attribute_Wide_Value,
+ Attribute_Wide_Wide_Value,
+
+ -- Attributes designating procedures
+
+ Attribute_Output,
+ Attribute_Read,
+ Attribute_Write,
+
+ -- Entity attributes (includes type attributes)
+
+ Attribute_Elab_Body,
+ Attribute_Elab_Spec,
+ Attribute_Storage_Pool,
+
+ -- Type attributes
+
+ Attribute_Base,
+ Attribute_Class);
+
+ ------------------------------------
+ -- Convention Name ID Definitions --
+ ------------------------------------
+
+ type Convention_Id is (
+
+ -- The conventions that are defined by the RM come first
+
+ Convention_Ada,
+ Convention_Intrinsic,
+ Convention_Entry,
+ Convention_Protected,
+
+ -- The remaining conventions are foreign language conventions
+
+ Convention_Assembler, -- also Asm, Assembly
+ Convention_C, -- also Default, External
+ Convention_COBOL,
+ Convention_CPP,
+ Convention_Fortran,
+ Convention_Java,
+ Convention_Stdcall, -- also DLL, Win32
+ Convention_Stubbed);
+
+ -- Note: Convention C_Pass_By_Copy is allowed only for record
+ -- types (where it is treated like C except that the appropriate
+ -- flag is set in the record type). Recognizion of this convention
+ -- is specially handled in Sem_Prag.
+
+ for Convention_Id'Size use 8;
+ -- Plenty of space for expansion
+
+ subtype Foreign_Convention is
+ Convention_Id range Convention_Assembler .. Convention_Stdcall;
+
+ -----------------------------------
+ -- Locking Policy ID Definitions --
+ -----------------------------------
+
+ type Locking_Policy_Id is (
+ Locking_Policy_Inheritance_Locking,
+ Locking_Policy_Ceiling_Locking);
+
+ ---------------------------
+ -- Pragma ID Definitions --
+ ---------------------------
+
+ type Pragma_Id is (
+
+ -- Configuration pragmas
+
+ Pragma_Ada_83,
+ Pragma_Ada_95,
+ Pragma_Ada_05,
+ Pragma_C_Pass_By_Copy,
+ Pragma_Compile_Time_Warning,
+ Pragma_Component_Alignment,
+ Pragma_Convention_Identifier,
+ Pragma_Detect_Blocking,
+ Pragma_Discard_Names,
+ Pragma_Elaboration_Checks,
+ Pragma_Eliminate,
+ Pragma_Explicit_Overriding,
+ Pragma_Extend_System,
+ Pragma_Extensions_Allowed,
+ Pragma_External_Name_Casing,
+ Pragma_Float_Representation,
+ Pragma_Initialize_Scalars,
+ Pragma_Interrupt_State,
+ Pragma_License,
+ Pragma_Locking_Policy,
+ Pragma_Long_Float,
+ Pragma_No_Run_Time,
+ Pragma_No_Strict_Aliasing,
+ Pragma_Normalize_Scalars,
+ Pragma_Polling,
+ Pragma_Persistent_Data,
+ Pragma_Persistent_Object,
+ Pragma_Profile,
+ Pragma_Profile_Warnings,
+ Pragma_Propagate_Exceptions,
+ Pragma_Queuing_Policy,
+ Pragma_Ravenscar,
+ Pragma_Restricted_Run_Time,
+ Pragma_Restrictions,
+ Pragma_Restriction_Warnings,
+ Pragma_Reviewable,
+ Pragma_Source_File_Name,
+ Pragma_Source_File_Name_Project,
+ Pragma_Style_Checks,
+ Pragma_Suppress,
+ Pragma_Suppress_Exception_Locations,
+ Pragma_Task_Dispatching_Policy,
+ Pragma_Universal_Data,
+ Pragma_Unsuppress,
+ Pragma_Use_VADS_Size,
+ Pragma_Validity_Checks,
+ Pragma_Warnings,
+
+ -- Remaining (non-configuration) pragmas
+
+ Pragma_Abort_Defer,
+ Pragma_All_Calls_Remote,
+ Pragma_Annotate,
+ Pragma_Assert,
+ Pragma_Asynchronous,
+ Pragma_Atomic,
+ Pragma_Atomic_Components,
+ Pragma_Attach_Handler,
+ Pragma_Comment,
+ Pragma_Common_Object,
+ Pragma_Complex_Representation,
+ Pragma_Controlled,
+ Pragma_Convention,
+ Pragma_CPP_Class,
+ Pragma_CPP_Constructor,
+ Pragma_CPP_Virtual,
+ Pragma_CPP_Vtable,
+ Pragma_Debug,
+ Pragma_Elaborate,
+ Pragma_Elaborate_All,
+ Pragma_Elaborate_Body,
+ Pragma_Export,
+ Pragma_Export_Exception,
+ Pragma_Export_Function,
+ Pragma_Export_Object,
+ Pragma_Export_Procedure,
+ Pragma_Export_Value,
+ Pragma_Export_Valued_Procedure,
+ Pragma_External,
+ Pragma_Finalize_Storage_Only,
+ Pragma_Ident,
+ Pragma_Import,
+ Pragma_Import_Exception,
+ Pragma_Import_Function,
+ Pragma_Import_Object,
+ Pragma_Import_Procedure,
+ Pragma_Import_Valued_Procedure,
+ Pragma_Inline,
+ Pragma_Inline_Always,
+ Pragma_Inline_Generic,
+ Pragma_Inspection_Point,
+ Pragma_Interface_Name,
+ Pragma_Interrupt_Handler,
+ Pragma_Interrupt_Priority,
+ Pragma_Java_Constructor,
+ Pragma_Java_Interface,
+ Pragma_Keep_Names,
+ Pragma_Link_With,
+ Pragma_Linker_Alias,
+ Pragma_Linker_Options,
+ Pragma_Linker_Section,
+ Pragma_List,
+ Pragma_Machine_Attribute,
+ Pragma_Main,
+ Pragma_Main_Storage,
+ Pragma_Memory_Size,
+ Pragma_No_Return,
+ Pragma_Obsolescent,
+ Pragma_Optimize,
+ Pragma_Optional_Overriding,
+ Pragma_Pack,
+ Pragma_Page,
+ Pragma_Passive,
+ Pragma_Preelaborate,
+ Pragma_Priority,
+ Pragma_Psect_Object,
+ Pragma_Pure,
+ Pragma_Pure_Function,
+ Pragma_Remote_Call_Interface,
+ Pragma_Remote_Types,
+ Pragma_Share_Generic,
+ Pragma_Shared,
+ Pragma_Shared_Passive,
+ Pragma_Source_Reference,
+ Pragma_Stream_Convert,
+ Pragma_Subtitle,
+ Pragma_Suppress_All,
+ Pragma_Suppress_Debug_Info,
+ Pragma_Suppress_Initialization,
+ Pragma_System_Name,
+ Pragma_Task_Info,
+ Pragma_Task_Name,
+ Pragma_Task_Storage,
+ Pragma_Thread_Body,
+ Pragma_Time_Slice,
+ Pragma_Title,
+ Pragma_Unchecked_Union,
+ Pragma_Unimplemented_Unit,
+ Pragma_Unreferenced,
+ Pragma_Unreserve_All_Interrupts,
+ Pragma_Volatile,
+ Pragma_Volatile_Components,
+ Pragma_Weak_External,
+
+ -- The following pragmas are on their own, out of order, because of
+ -- the special processing required to deal with the fact that their
+ -- names match existing attribute names.
+
+ Pragma_AST_Entry,
+ Pragma_Interface,
+ Pragma_Storage_Size,
+ Pragma_Storage_Unit,
+
+ -- The value to represent an unknown or unrecognized pragma
+
+ Unknown_Pragma);
+
+ -----------------------------------
+ -- Queuing Policy ID definitions --
+ -----------------------------------
+
+ type Queuing_Policy_Id is (
+ Queuing_Policy_FIFO_Queuing,
+ Queuing_Policy_Priority_Queuing);
+
+ --------------------------------------------
+ -- Task Dispatching Policy ID definitions --
+ --------------------------------------------
+
+ type Task_Dispatching_Policy_Id is (
+ Task_Dispatching_FIFO_Within_Priorities);
+ -- Id values used to identify task dispatching policies
+
+ -----------------
+ -- Subprograms --
+ -----------------
+
+ procedure Initialize;
+ -- Called to initialize the preset names in the names table.
+
+ function Is_Attribute_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized attribute
+
+ function Is_Entity_Attribute_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized entity attribute,
+ -- i.e. an attribute reference that returns an entity.
+
+ function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized attribute that
+ -- designates a procedure (and can therefore appear as a statement).
+
+ function Is_Function_Attribute_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized attribute
+ -- that designates a renameable function, and can therefore appear in
+ -- a renaming statement. Note that not all attributes designating
+ -- functions are renamable, in particular, thos returning a universal
+ -- value cannot be renamed.
+
+ function Is_Type_Attribute_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized type attribute,
+ -- i.e. an attribute reference that returns a type
+
+ function Is_Check_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized suppress check
+ -- as required by pragma Suppress.
+
+ function Is_Convention_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of one of the recognized
+ -- language conventions, as required by pragma Convention, Import,
+ -- Export, Interface. Returns True if so. Also returns True for a
+ -- name that has been specified by a Convention_Identifier pragma.
+ -- If neither case holds, returns False.
+
+ function Is_Locking_Policy_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized locking policy
+
+ function Is_Operator_Symbol_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of an operator symbol
+
+ function Is_Pragma_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized pragma. Note
+ -- that pragmas AST_Entry, Storage_Size, and Storage_Unit are recognized
+ -- as pragmas by this function even though their names are separate from
+ -- the other pragma names.
+
+ function Is_Queuing_Policy_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized queuing policy
+
+ function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean;
+ -- Test to see if the name N is the name of a recognized task
+ -- dispatching policy.
+
+ function Get_Attribute_Id (N : Name_Id) return Attribute_Id;
+ -- Returns Id of attribute corresponding to given name. It is an error to
+ -- call this function with a name that is not the name of a attribute.
+
+ function Get_Convention_Id (N : Name_Id) return Convention_Id;
+ -- Returns Id of language convention corresponding to given name. It is an
+ -- to call this function with a name that is not the name of a convention,
+ -- or one previously given in a call to Record_Convention_Identifier.
+
+ function Get_Check_Id (N : Name_Id) return Check_Id;
+ -- Returns Id of suppress check corresponding to given name. It is an error
+ -- to call this function with a name that is not the name of a check.
+
+ function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id;
+ -- Returns Id of locking policy corresponding to given name. It is an error
+ -- to call this function with a name that is not the name of a check.
+
+ function Get_Pragma_Id (N : Name_Id) return Pragma_Id;
+ -- Returns Id of pragma corresponding to given name. Returns Unknown_Pragma
+ -- if N is not a name of a known (Ada defined or GNAT-specific) pragma.
+ -- Note that the function also works correctly for names of pragmas that
+ -- are not in the main list of pragma Names (AST_Entry, Storage_Size, and
+ -- Storage_Unit (e.g. Name_Storage_Size returns Pragma_Storage_Size).
+
+ function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id;
+ -- Returns Id of queuing policy corresponding to given name. It is an error
+ -- to call this function with a name that is not the name of a check.
+
+ function Get_Task_Dispatching_Policy_Id
+ (N : Name_Id)
+ return Task_Dispatching_Policy_Id;
+ -- Returns Id of task dispatching policy corresponding to given name.
+ -- It is an error to call this function with a name that is not the
+ -- name of a check.
+
+ procedure Record_Convention_Identifier
+ (Id : Name_Id;
+ Convention : Convention_Id);
+ -- A call to this procedure, resulting from an occurrence of a pragma
+ -- Convention_Identifier, records that from now on an occurrence of
+ -- Id will be recognized as a name for the specified convention.
+
+private
+ pragma Inline (Is_Attribute_Name);
+ pragma Inline (Is_Entity_Attribute_Name);
+ pragma Inline (Is_Type_Attribute_Name);
+ pragma Inline (Is_Check_Name);
+ pragma Inline (Is_Locking_Policy_Name);
+ pragma Inline (Is_Operator_Symbol_Name);
+ pragma Inline (Is_Queuing_Policy_Name);
+ pragma Inline (Is_Pragma_Name);
+ pragma Inline (Is_Task_Dispatching_Policy_Name);
+
+end Snames;
diff --git a/gcc/ada/snames.h b/gcc/ada/snames.h
index 18cb4edc31a..e7ecb5d8d35 100644
--- a/gcc/ada/snames.h
+++ b/gcc/ada/snames.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2004 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- *
@@ -129,57 +129,61 @@ extern unsigned char Get_Attribute_Id (int);
#define Attr_Small 81
#define Attr_Storage_Size 82
#define Attr_Storage_Unit 83
-#define Attr_Tag 84
-#define Attr_Target_Name 85
-#define Attr_Terminated 86
-#define Attr_To_Address 87
-#define Attr_Type_Class 88
-#define Attr_UET_Address 89
-#define Attr_Unbiased_Rounding 90
-#define Attr_Unchecked_Access 91
-#define Attr_Unconstrained_Array 92
-#define Attr_Universal_Literal_String 93
-#define Attr_Unrestricted_Access 94
-#define Attr_VADS_Size 95
-#define Attr_Val 96
-#define Attr_Valid 97
-#define Attr_Value_Size 98
-#define Attr_Version 99
-#define Attr_Wide_Character_Size 100
-#define Attr_Wide_Width 101
-#define Attr_Width 102
-#define Attr_Word_Size 103
+#define Attr_Stream_Size 84
+#define Attr_Tag 85
+#define Attr_Target_Name 86
+#define Attr_Terminated 87
+#define Attr_To_Address 88
+#define Attr_Type_Class 89
+#define Attr_UET_Address 90
+#define Attr_Unbiased_Rounding 91
+#define Attr_Unchecked_Access 92
+#define Attr_Unconstrained_Array 93
+#define Attr_Universal_Literal_String 94
+#define Attr_Unrestricted_Access 95
+#define Attr_VADS_Size 96
+#define Attr_Val 97
+#define Attr_Valid 98
+#define Attr_Value_Size 99
+#define Attr_Version 100
+#define Attr_Wchar_T_Size 101
+#define Attr_Wide_Wide_Width 102
+#define Attr_Wide_Width 103
+#define Attr_Width 104
+#define Attr_Word_Size 105
-#define Attr_Adjacent 104
-#define Attr_Ceiling 105
-#define Attr_Copy_Sign 106
-#define Attr_Floor 107
-#define Attr_Fraction 108
-#define Attr_Image 109
-#define Attr_Input 110
-#define Attr_Machine 111
-#define Attr_Max 112
-#define Attr_Min 113
-#define Attr_Model 114
-#define Attr_Pred 115
-#define Attr_Remainder 116
-#define Attr_Rounding 117
-#define Attr_Succ 118
-#define Attr_Truncation 119
-#define Attr_Value 120
-#define Attr_Wide_Image 121
-#define Attr_Wide_Value 122
+#define Attr_Adjacent 106
+#define Attr_Ceiling 107
+#define Attr_Copy_Sign 108
+#define Attr_Floor 109
+#define Attr_Fraction 110
+#define Attr_Image 111
+#define Attr_Input 112
+#define Attr_Machine 113
+#define Attr_Max 114
+#define Attr_Min 115
+#define Attr_Model 116
+#define Attr_Pred 117
+#define Attr_Remainder 118
+#define Attr_Rounding 119
+#define Attr_Succ 120
+#define Attr_Truncation 121
+#define Attr_Value 122
+#define Attr_Wide_Image 123
+#define Attr_Wide_Wide_Image 124
+#define Attr_Wide_Value 125
+#define Attr_Wide_Wide_Value 126
-#define Attr_Output 123
-#define Attr_Read 124
-#define Attr_Write 125
+#define Attr_Output 127
+#define Attr_Read 128
+#define Attr_Write 129
-#define Attr_Elab_Body 126
-#define Attr_Elab_Spec 127
-#define Attr_Storage_Pool 128
+#define Attr_Elab_Body 130
+#define Attr_Elab_Spec 131
+#define Attr_Storage_Pool 132
-#define Attr_Base 129
-#define Attr_Class 130
+#define Attr_Base 133
+#define Attr_Class 134
/* Define the function to check if a Name_Id value is a valid pragma */
@@ -289,66 +293,65 @@ extern unsigned char Get_Pragma_Id (int);
#define Pragma_Inline_Always 85
#define Pragma_Inline_Generic 86
#define Pragma_Inspection_Point 87
-#define Pragma_Interface 88
-#define Pragma_Interface_Name 89
-#define Pragma_Interrupt_Handler 90
-#define Pragma_Interrupt_Priority 91
-#define Pragma_Java_Constructor 92
-#define Pragma_Java_Interface 93
-#define Pragma_Keep_Names 94
-#define Pragma_Link_With 95
-#define Pragma_Linker_Alias 96
-#define Pragma_Linker_Options 97
-#define Pragma_Linker_Section 98
-#define Pragma_List 99
-#define Pragma_Machine_Attribute 100
-#define Pragma_Main 101
-#define Pragma_Main_Storage 102
-#define Pragma_Memory_Size 103
-#define Pragma_No_Return 104
-#define Pragma_Obsolescent 105
-#define Pragma_Optimize 106
-#define Pragma_Optional_Overriding 107
-#define Pragma_Overriding 108
-#define Pragma_Pack 109
-#define Pragma_Page 110
-#define Pragma_Passive 111
-#define Pragma_Preelaborate 112
-#define Pragma_Priority 113
-#define Pragma_Psect_Object 114
-#define Pragma_Pure 115
-#define Pragma_Pure_Function 116
-#define Pragma_Remote_Call_Interface 117
-#define Pragma_Remote_Types 118
-#define Pragma_Share_Generic 119
-#define Pragma_Shared 120
-#define Pragma_Shared_Passive 121
-#define Pragma_Source_Reference 122
-#define Pragma_Stream_Convert 123
-#define Pragma_Subtitle 124
-#define Pragma_Suppress_All 125
-#define Pragma_Suppress_Debug_Info 126
-#define Pragma_Suppress_Initialization 127
-#define Pragma_System_Name 128
-#define Pragma_Task_Info 129
-#define Pragma_Task_Name 130
-#define Pragma_Task_Storage 131
-#define Pragma_Thread_Body 132
-#define Pragma_Time_Slice 133
-#define Pragma_Title 134
-#define Pragma_Unchecked_Union 135
-#define Pragma_Unimplemented_Unit 136
-#define Pragma_Unreferenced 137
-#define Pragma_Unreserve_All_Interrupts 138
-#define Pragma_Volatile 139
-#define Pragma_Volatile_Components 140
-#define Pragma_Weak_External 141
+#define Pragma_Interface_Name 88
+#define Pragma_Interrupt_Handler 89
+#define Pragma_Interrupt_Priority 90
+#define Pragma_Java_Constructor 91
+#define Pragma_Java_Interface 92
+#define Pragma_Keep_Names 93
+#define Pragma_Link_With 94
+#define Pragma_Linker_Alias 95
+#define Pragma_Linker_Options 96
+#define Pragma_Linker_Section 97
+#define Pragma_List 98
+#define Pragma_Machine_Attribute 99
+#define Pragma_Main 100
+#define Pragma_Main_Storage 101
+#define Pragma_Memory_Size 102
+#define Pragma_No_Return 103
+#define Pragma_Obsolescent 104
+#define Pragma_Optimize 105
+#define Pragma_Optional_Overriding 106
+#define Pragma_Pack 107
+#define Pragma_Page 108
+#define Pragma_Passive 109
+#define Pragma_Preelaborate 110
+#define Pragma_Priority 111
+#define Pragma_Psect_Object 112
+#define Pragma_Pure 113
+#define Pragma_Pure_Function 114
+#define Pragma_Remote_Call_Interface 115
+#define Pragma_Remote_Types 116
+#define Pragma_Share_Generic 117
+#define Pragma_Shared 118
+#define Pragma_Shared_Passive 119
+#define Pragma_Source_Reference 120
+#define Pragma_Stream_Convert 121
+#define Pragma_Subtitle 122
+#define Pragma_Suppress_All 123
+#define Pragma_Suppress_Debug_Info 124
+#define Pragma_Suppress_Initialization 125
+#define Pragma_System_Name 126
+#define Pragma_Task_Info 127
+#define Pragma_Task_Name 128
+#define Pragma_Task_Storage 129
+#define Pragma_Thread_Body 130
+#define Pragma_Time_Slice 131
+#define Pragma_Title 132
+#define Pragma_Unchecked_Union 133
+#define Pragma_Unimplemented_Unit 134
+#define Pragma_Unreferenced 135
+#define Pragma_Unreserve_All_Interrupts 136
+#define Pragma_Volatile 137
+#define Pragma_Volatile_Components 138
+#define Pragma_Weak_External 139
/* The following are deliberately out of alphabetical order, see Snames */
-#define Pragma_AST_Entry 142
-#define Pragma_Storage_Size 143
-#define Pragma_Storage_Unit 144
+#define Pragma_AST_Entry 140
+#define Pragma_Interface 141
+#define Pragma_Storage_Size 142
+#define Pragma_Storage_Unit 143
/* Define the numeric values for the conventions. */
diff --git a/gcc/ada/sprint.adb b/gcc/ada/sprint.adb
index 0d814441c49..24998600727 100644
--- a/gcc/ada/sprint.adb
+++ b/gcc/ada/sprint.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -938,7 +938,7 @@ package body Sprint is
end if;
Write_Char_Sloc (''');
- Write_Char_Code (Char_Literal_Value (Node));
+ Write_Char_Code (UI_To_CC (Char_Literal_Value (Node)));
Write_Char (''');
when N_Code_Statement =>
@@ -1363,6 +1363,34 @@ package body Sprint is
Write_Str_With_Col_Check (" with private");
end if;
+ when N_Formal_Abstract_Subprogram_Declaration =>
+ Write_Indent_Str_Sloc ("with ");
+ Sprint_Node (Specification (Node));
+
+ Write_Str_With_Col_Check (" is abstract");
+
+ if Box_Present (Node) then
+ Write_Str_With_Col_Check (" <>");
+ elsif Present (Default_Name (Node)) then
+ Write_Str_With_Col_Check (" ");
+ Sprint_Node (Default_Name (Node));
+ end if;
+
+ Write_Char (';');
+
+ when N_Formal_Concrete_Subprogram_Declaration =>
+ Write_Indent_Str_Sloc ("with ");
+ Sprint_Node (Specification (Node));
+
+ if Box_Present (Node) then
+ Write_Str_With_Col_Check (" is <>");
+ elsif Present (Default_Name (Node)) then
+ Write_Str_With_Col_Check (" is ");
+ Sprint_Node (Default_Name (Node));
+ end if;
+
+ Write_Char (';');
+
when N_Formal_Discrete_Type_Definition =>
Write_Str_With_Col_Check_Sloc ("<>");
@@ -1424,19 +1452,6 @@ package body Sprint is
when N_Formal_Signed_Integer_Type_Definition =>
Write_Str_With_Col_Check_Sloc ("range <>");
- when N_Formal_Subprogram_Declaration =>
- Write_Indent_Str_Sloc ("with ");
- Sprint_Node (Specification (Node));
-
- if Box_Present (Node) then
- Write_Str_With_Col_Check (" is <>");
- elsif Present (Default_Name (Node)) then
- Write_Str_With_Col_Check (" is ");
- Sprint_Node (Default_Name (Node));
- end if;
-
- Write_Char (';');
-
when N_Formal_Type_Declaration =>
Write_Indent_Str_Sloc ("type ");
Write_Id (Defining_Identifier (Node));
diff --git a/gcc/ada/stand.ads b/gcc/ada/stand.ads
index 0970a06a6ee..9c7d6e82d45 100644
--- a/gcc/ada/stand.ads
+++ b/gcc/ada/stand.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -59,8 +59,10 @@ package Stand is
S_Boolean,
S_Character,
S_Wide_Character,
+ S_Wide_Wide_Character,
S_String,
S_Wide_String,
+ S_Wide_Wide_String,
S_Duration,
S_Short_Short_Integer,
@@ -92,12 +94,13 @@ package Stand is
S_Storage_Error,
S_Tasking_Error,
- -- Binary Operators declared in package Standard.
+ -- Binary Operators declared in package Standard
S_Op_Add,
S_Op_And,
S_Op_Concat,
S_Op_Concatw,
+ S_Op_Concatww,
S_Op_Divide,
S_Op_Eq,
S_Op_Expon,
@@ -250,8 +253,10 @@ package Stand is
Standard_ASCII : Entity_Id renames SE (S_ASCII);
Standard_Character : Entity_Id renames SE (S_Character);
Standard_Wide_Character : Entity_Id renames SE (S_Wide_Character);
+ Standard_Wide_Wide_Character : Entity_Id renames SE (S_Wide_Wide_Character);
Standard_String : Entity_Id renames SE (S_String);
Standard_Wide_String : Entity_Id renames SE (S_Wide_String);
+ Standard_Wide_Wide_String : Entity_Id renames SE (S_Wide_Wide_String);
Standard_Boolean : Entity_Id renames SE (S_Boolean);
Standard_False : Entity_Id renames SE (S_False);
@@ -283,6 +288,7 @@ package Stand is
Standard_Op_And : Entity_Id renames SE (S_Op_And);
Standard_Op_Concat : Entity_Id renames SE (S_Op_Concat);
Standard_Op_Concatw : Entity_Id renames SE (S_Op_Concatw);
+ Standard_Op_Concatww : Entity_Id renames SE (S_Op_Concatww);
Standard_Op_Divide : Entity_Id renames SE (S_Op_Divide);
Standard_Op_Eq : Entity_Id renames SE (S_Op_Eq);
Standard_Op_Expon : Entity_Id renames SE (S_Op_Expon);
diff --git a/gcc/ada/stringt.adb b/gcc/ada/stringt.adb
index 5f6fd969cba..5727080ceaf 100644
--- a/gcc/ada/stringt.adb
+++ b/gcc/ada/stringt.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002 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- --
@@ -355,19 +355,19 @@ package body Stringt is
procedure Write_Char_Code (Code : Char_Code) is
- procedure Write_Hex_Byte (J : Natural);
- -- Write single hex digit
+ procedure Write_Hex_Byte (J : Char_Code);
+ -- Write single hex byte (value in range 0 .. 255) as two digits
--------------------
-- Write_Hex_Byte --
--------------------
- procedure Write_Hex_Byte (J : Natural) is
- Hexd : constant String := "0123456789abcdef";
-
+ procedure Write_Hex_Byte (J : Char_Code) is
+ Hexd : constant array (Char_Code range 0 .. 15) of Character :=
+ "0123456789abcdef";
begin
- Write_Char (Hexd (J / 16 + 1));
- Write_Char (Hexd (J mod 16 + 1));
+ Write_Char (Hexd (J / 16));
+ Write_Char (Hexd (J mod 16));
end Write_Hex_Byte;
-- Start of processing for Write_Char_Code
@@ -380,11 +380,19 @@ package body Stringt is
Write_Char ('[');
Write_Char ('"');
+ if Code > 16#FF_FFFF# then
+ Write_Hex_Byte (Code / 2 ** 24);
+ end if;
+
+ if Code > 16#FFFF# then
+ Write_Hex_Byte ((Code / 2 ** 16) mod 256);
+ end if;
+
if Code > 16#FF# then
- Write_Hex_Byte (Natural (Code / 256));
+ Write_Hex_Byte ((Code / 256) mod 256);
end if;
- Write_Hex_Byte (Natural (Code mod 256));
+ Write_Hex_Byte (Code mod 256);
Write_Char ('"');
Write_Char (']');
end if;
diff --git a/gcc/ada/stringt.ads b/gcc/ada/stringt.ads
index 6a6291a5829..d6ab3893579 100644
--- a/gcc/ada/stringt.ads
+++ b/gcc/ada/stringt.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -154,8 +154,8 @@ package Stringt is
-- ASCII graphics (except for double quote) are output literally.
-- The double quote appears as two successive double quotes.
-- All other codes, are output as described for Write_Char_Code. For
- -- example, the string created by folding "A" & ASCII.LF & "Hello" will
- -- print as "A["0a"]Hello". A No_String value prints simply as "no string"
+ -- example, the string created by folding "A" & ASCII.HT & "Hello" will
+ -- print as "A["09"]Hello". A No_String value prints simply as "no string"
-- without surrounding quote marks.
private
diff --git a/gcc/ada/switch-b.adb b/gcc/ada/switch-b.adb
index 8cf9cf4fdbe..5c2f525d924 100644
--- a/gcc/ada/switch-b.adb
+++ b/gcc/ada/switch-b.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-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- --
@@ -350,6 +350,12 @@ package body Switch.B is
All_Sources := False;
Check_Source_Files := False;
+ -- Processing for X switch
+
+ when 'X' =>
+ Ptr := Ptr + 1;
+ Scan_Pos (Switch_Chars, Max, Ptr, Default_Exit_Status);
+
-- Processing for z switch
when 'z' =>
diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c
index 94aa9dc8926..7446359e90e 100644
--- a/gcc/ada/trans.c
+++ b/gcc/ada/trans.c
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
- * Copyright (C) 1992-2004, 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- *
@@ -250,7 +250,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
/* Set the current function to be the elaboration procedure and gimplify
what we have. */
current_function_decl = info->elab_proc;
- gimplify_body (&gnu_body, info->elab_proc, false);
+ gimplify_body (&gnu_body, info->elab_proc, true);
/* We should have a BIND_EXPR, but it may or may not have any statements
in it. If it doesn't have any, we have nothing to do. */
@@ -2549,7 +2549,8 @@ gnat_to_gnu (Node_Id gnat_node)
else
gnu_result
= force_fit_type
- (build_int_cst (gnu_result_type, Char_Literal_Value (gnat_node)),
+ (build_int_cst
+ (gnu_result_type, UI_To_CC (Char_Literal_Value (gnat_node))),
false, false, false);
break;
@@ -2747,7 +2748,7 @@ gnat_to_gnu (Node_Id gnat_node)
case N_Object_Renaming_Declaration:
gnat_temp = Defining_Entity (gnat_node);
- /* Don't do anything if this renaming is handled by the front end. or if
+ /* Don't do anything if this renaming is handled by the front end or if
we are just annotating types and this object has a composite or task
type, don't elaborate it. We return the result in case it has any
SAVE_EXPRs in it that need to be evaluated here. */
@@ -3023,11 +3024,8 @@ gnat_to_gnu (Node_Id gnat_node)
if (Null_Record_Present (gnat_node))
gnu_result = gnat_build_constructor (gnu_aggr_type, NULL_TREE);
- else if (TREE_CODE (gnu_aggr_type) == RECORD_TYPE)
- gnu_result
- = assoc_to_constructor (First (Component_Associations (gnat_node)),
- gnu_aggr_type);
- else if (TREE_CODE (gnu_aggr_type) == UNION_TYPE)
+ else if (TREE_CODE (gnu_aggr_type) == UNION_TYPE
+ && TYPE_UNCHECKED_UNION_P (gnu_aggr_type))
{
/* The first element is the discrimant, which we ignore. The
next is the field we're building. Convert the expression
@@ -3041,6 +3039,11 @@ gnat_to_gnu (Node_Id gnat_node)
gnu_result = convert (gnu_field_type,
gnat_to_gnu (Expression (gnat_assoc)));
}
+ else if (TREE_CODE (gnu_aggr_type) == RECORD_TYPE
+ || TREE_CODE (gnu_aggr_type) == UNION_TYPE)
+ gnu_result
+ = assoc_to_constructor (First (Component_Associations (gnat_node)),
+ gnu_aggr_type);
else if (TREE_CODE (gnu_aggr_type) == ARRAY_TYPE)
gnu_result = pos_to_constructor (First (Expressions (gnat_node)),
gnu_aggr_type,
@@ -3542,7 +3545,6 @@ gnat_to_gnu (Node_Id gnat_node)
&& Nkind (Expression (gnat_node)) == N_Function_Call)
gnu_ret_val = call_to_gnu (Expression (gnat_node),
&gnu_result_type, gnu_lhs);
-
else
{
gnu_ret_val = gnat_to_gnu (Expression (gnat_node));
diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb
index 2c52b5c98cc..3ed7fcc4351 100644
--- a/gcc/ada/treepr.adb
+++ b/gcc/ada/treepr.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -628,19 +628,6 @@ package body Treepr is
Write_Int (Int (Val));
Write_Char (')');
- elsif Val in Char_Code_Range then
- Write_Str ("Character code = ");
-
- declare
- C : constant Char_Code := Char_Code (Val - Char_Code_Bias);
-
- begin
- Write_Int (Int (C));
- Write_Str (" ('");
- Write_Char_Code (C);
- Write_Str ("')");
- end;
-
else
Print_Str ("****** Incorrect value = ");
Print_Int (Int (Val));
diff --git a/gcc/ada/ttypes.ads b/gcc/ada/ttypes.ads
index 2d31034e503..1be56738290 100644
--- a/gcc/ada/ttypes.ads
+++ b/gcc/ada/ttypes.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -142,11 +142,8 @@ package Ttypes is
Standard_Character_Size : constant Pos := Get_Char_Size;
Standard_Wide_Character_Size : constant Pos := 16;
- -- The Standard.Wide_Character type is special in the sense that
- -- it is not defined in terms of its corresponding C type (wchar_t).
- -- Unfortunately this makes the representation of Wide_Character
- -- incompatible with the C wchar_t type.
- -- ??? This is required by the RM or backward compatibility
+ Standard_Wide_Wide_Character_Size : constant Pos := 32;
+ -- Standard wide character sizes.
-- Note: there is no specific control over the representation of
-- enumeration types. The convention used is that if an enumeration
diff --git a/gcc/ada/types.adb b/gcc/ada/types.adb
index 69b019ed086..9334c311a65 100644
--- a/gcc/ada/types.adb
+++ b/gcc/ada/types.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2001 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- --
@@ -153,6 +153,16 @@ package body Types is
end Get_Hex_String;
------------------------
+ -- Get_Wide_Character --
+ ------------------------
+
+ function Get_Wide_Character (C : Char_Code) return Wide_Character is
+ begin
+ pragma Assert (C <= 65535);
+ return Wide_Character'Val (C);
+ end Get_Wide_Character;
+
+ ------------------------
-- In_Character_Range --
------------------------
@@ -161,6 +171,15 @@ package body Types is
return (C <= 255);
end In_Character_Range;
+ -----------------------------
+ -- In_Wide_Character_Range --
+ -----------------------------
+
+ function In_Wide_Character_Range (C : Char_Code) return Boolean is
+ begin
+ return (C <= 65535);
+ end In_Wide_Character_Range;
+
---------------------
-- Make_Time_Stamp --
---------------------
diff --git a/gcc/ada/types.ads b/gcc/ada/types.ads
index 75a2acbc16d..3d649baa8ae 100644
--- a/gcc/ada/types.ads
+++ b/gcc/ada/types.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004 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- --
@@ -106,6 +106,10 @@ pragma Preelaborate (Types);
subtype Line_Terminator is Character range ASCII.LF .. ASCII.CR;
-- Line terminator characters (LF, VT, FF, CR)
+ -- This definition is dubious now that we have two more wide character
+ -- sequences that constitute a line terminator. Every reference to
+ -- this subtype needs checking to make sure the wide character case
+ -- is handled appropriately.
subtype Upper_Half_Character is
Character range Character'Val (16#80#) .. Character'Val (16#FF#);
@@ -234,7 +238,6 @@ pragma Preelaborate (Types);
-- Strings (type String_Id)
-- Universal integers (type Uint)
-- Universal reals (type Ureal)
- -- Character codes (type Char_Code stored with a bias)
-- In most contexts, the strongly typed interface determines which of
-- these types is present. However, there are some situations (involving
@@ -325,10 +328,6 @@ pragma Preelaborate (Types);
-- The range of Uint values is very large, since a substantial part
-- of this range is used to store direct values, see Uintp for details.
- Char_Code_Bias : constant := 2_100_000_000;
- -- A bias value added to character code values stored in the tree which
- -- ensures that they have different values from any of the above types.
-
-- The following subtype definitions are used to provide convenient names
-- for membership tests on Int values to see what data type range they
-- lie in. Such tests appear only in the lowest level packages.
@@ -357,9 +356,6 @@ pragma Preelaborate (Types);
subtype Ureal_Range is Union_Id
range Ureal_Low_Bound .. Ureal_High_Bound;
- subtype Char_Code_Range is Union_Id
- range Char_Code_Bias .. Char_Code_Bias + 2**16 - 1;
-
-----------------------------
-- Types for Namet Package --
-----------------------------
@@ -525,16 +521,19 @@ pragma Preelaborate (Types);
-- The type Char is used for character data internally in the compiler,
-- but character codes in the source are represented by the Char_Code
-- type. Each character literal in the source is interpreted as being one
- -- of the 2**16 possible Wide_Character codes, and a unique integer value
- -- is assigned, corresponding to the POS value in the Wide_Character type.
- -- String literals are similarly interpreted as a sequence of such codes.
+ -- of the 16#8000_0000 possible Wide_Wide_Character codes, and a unique
+ -- Integer Value is assigned, corresponding to the UTF_32 value, which
+ -- also correspondds to the POS value in the Wide_Wide_Character type,
+ -- and also corresponds to the POS value in the Wide_Character and
+ -- Character types for values that are in appropriate range. String
+ -- literals are similarly interpreted as a sequence of such codes.
- -- Note: when character code values are stored in the tree, they are stored
- -- by adding a bias value (Char_Code_Bias) that results in values that can
- -- be distinguished from other types of values stored in the tree.
+ type Char_Code_Base is mod 2 ** 32;
+ for Char_Code_Base'Size use 32;
- type Char_Code is mod 2 ** 16;
- for Char_Code'Size use 16;
+ subtype Char_Code is Char_Code_Base range 0 .. 16#7FFF_FFFF#;
+ for Char_Code'Value_Size use 32;
+ for Char_Code'Object_Size use 32;
function Get_Char_Code (C : Character) return Char_Code;
pragma Inline (Get_Char_Code);
@@ -548,11 +547,21 @@ pragma Preelaborate (Types);
-- Determines if the given character code is in range of type Character,
-- and if so, returns True. If not, returns False.
+ function In_Wide_Character_Range (C : Char_Code) return Boolean;
+ pragma Inline (In_Wide_Character_Range);
+ -- Determines if the given character code is in range of the type
+ -- Wide_Character, and if so, returns True. If not, returns False.
+
function Get_Character (C : Char_Code) return Character;
pragma Inline (Get_Character);
- -- For a character C that is in character range (see above function), this
+ -- For a character C that is in Character range (see above function), this
-- function returns the corresponding Character value. It is an error to
- -- call Get_Character if C is not in character range
+ -- call Get_Character if C is not in C haracter range
+
+ function Get_Wide_Character (C : Char_Code) return Wide_Character;
+ -- For a character C that is in Wide_Character range (see above function),
+ -- this function returns the corresponding Wide_Character value. It is an
+ -- error to call Get_Wide_Character if C is not in Wide_Character range.
---------------------------------------
-- Types used for Library Management --
@@ -768,6 +777,7 @@ pragma Preelaborate (Types);
CE_Index_Check_Failed,
CE_Invalid_Data,
CE_Length_Check_Failed,
+ CE_Null_Not_Allowed,
CE_Overflow_Check_Failed,
CE_Partition_Check_Failed,
CE_Range_Check_Failed,
diff --git a/gcc/ada/types.h b/gcc/ada/types.h
index b4c4eb4419f..04d4a7e24d9 100644
--- a/gcc/ada/types.h
+++ b/gcc/ada/types.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2004, 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- *
@@ -161,8 +161,6 @@ typedef int Union_Id;
#define Uint_Table_Start 2000000000
#define Uint_High_Bound 2099999999
-#define Char_Code_Bias 2100000000
-
SUBTYPE (List_Range, Int, List_Low_Bound, List_High_Bound)
SUBTYPE (Node_Range, Int, Node_Low_Bound, Node_High_Bound)
SUBTYPE (Elist_Range, Int, Elist_Low_Bound, Elist_High_Bound)
@@ -171,7 +169,6 @@ SUBTYPE (Names_Range, Int, Names_Low_Bound, Names_High_Bound)
SUBTYPE (Strings_Range, Int, Strings_Low_Bound, Strings_High_Bound)
SUBTYPE (Uint_Range, Int, Uint_Low_Bound, Uint_High_Bound)
SUBTYPE (Ureal_Range, Int, Ureal_Low_Bound, Ureal_High_Bound)
-SUBTYPE (Char_Code_Range, Int, Char_Code_Bias, (Char_Code_Bias + 65535))
/* Types for Names_Table Package: */
@@ -286,8 +283,8 @@ typedef Int Ureal;
/* Character Code Type: */
-/* Character code value, intended to be 16 bits. */
-typedef short Char_Code;
+/* Character code value, intended to be 32 bits. */
+typedef unsigned Char_Code;
/* Types Used for Library Management: */
@@ -341,27 +338,28 @@ typedef Int Mechanism_Type;
#define CE_Index_Check_Failed 5
#define CE_Invalid_Data 6
#define CE_Length_Check_Failed 7
-#define CE_Overflow_Check_Failed 8
-#define CE_Partition_Check_Failed 9
-#define CE_Range_Check_Failed 10
-#define CE_Tag_Check_Failed 11
-#define PE_Access_Before_Elaboration 12
-#define PE_Accessibility_Check_Failed 13
-#define PE_All_Guards_Closed 14
-#define PE_Duplicated_Entry_Address 15
-#define PE_Explicit_Raise 16
-#define PE_Finalize_Raised_Exception 17
-#define PE_Misaligned_Address_Value 18
-#define PE_Missing_Return 19
-#define PE_Overlaid_Controlled_Object 20
-#define PE_Potentially_Blocking_Operation 21
-#define PE_Stubbed_Subprogram_Called 22
-#define PE_Unchecked_Union_Restriction 23
-#define PE_Illegal_RACW_E_4_18 24
-#define SE_Empty_Storage_Pool 25
-#define SE_Explicit_Raise 26
-#define SE_Infinite_Recursion 27
-#define SE_Object_Too_Large 28
-#define SE_Restriction_Violation 29
-
-#define LAST_REASON_CODE 29
+#define CE_Null_Not_Allowed 8
+#define CE_Overflow_Check_Failed 9
+#define CE_Partition_Check_Failed 10
+#define CE_Range_Check_Failed 11
+#define CE_Tag_Check_Failed 12
+#define PE_Access_Before_Elaboration 13
+#define PE_Accessibility_Check_Failed 14
+#define PE_All_Guards_Closed 15
+#define PE_Duplicated_Entry_Address 16
+#define PE_Explicit_Raise 17
+#define PE_Finalize_Raised_Exception 18
+#define PE_Misaligned_Address_Value 19
+#define PE_Missing_Return 20
+#define PE_Overlaid_Controlled_Object 21
+#define PE_Potentially_Blocking_Operation 22
+#define PE_Stubbed_Subprogram_Called 23
+#define PE_Unchecked_Union_Restriction 24
+#define PE_Illegal_RACW_E_4_18 25
+#define SE_Empty_Storage_Pool 26
+#define SE_Explicit_Raise 27
+#define SE_Infinite_Recursion 28
+#define SE_Object_Too_Large 29
+#define SE_Restriction_Violation 30
+
+#define LAST_REASON_CODE 30
diff --git a/gcc/ada/uintp.adb b/gcc/ada/uintp.adb
index 7b4e7139640..10b2b1367d9 100644
--- a/gcc/ada/uintp.adb
+++ b/gcc/ada/uintp.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2003 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- --
@@ -1559,6 +1559,15 @@ package body Uintp is
end;
end UI_Expon;
+ ----------------
+ -- UI_From_CC --
+ ----------------
+
+ function UI_From_CC (Input : Char_Code) return Uint is
+ begin
+ return UI_From_Dint (Dint (Input));
+ end UI_From_CC;
+
------------------
-- UI_From_Dint --
------------------
@@ -2384,6 +2393,39 @@ package body Uintp is
end if;
end UI_Sub;
+ --------------
+ -- UI_To_CC --
+ --------------
+
+ function UI_To_CC (Input : Uint) return Char_Code is
+ begin
+ if Direct (Input) then
+ return Char_Code (Direct_Val (Input));
+
+ -- Case of input is more than one digit
+
+ else
+ declare
+ In_Length : constant Int := N_Digits (Input);
+ In_Vec : UI_Vector (1 .. In_Length);
+ Ret_CC : Char_Code;
+
+ begin
+ Init_Operand (Input, In_Vec);
+
+ -- We assume value is positive
+
+ Ret_CC := 0;
+ for Idx in In_Vec'Range loop
+ Ret_CC := Ret_CC * Char_Code (Base) +
+ Char_Code (abs In_Vec (Idx));
+ end loop;
+
+ return Ret_CC;
+ end;
+ end if;
+ end UI_To_CC;
+
----------------
-- UI_To_Int --
----------------
diff --git a/gcc/ada/uintp.ads b/gcc/ada/uintp.ads
index f1babd179de..97206ade7d7 100644
--- a/gcc/ada/uintp.ads
+++ b/gcc/ada/uintp.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2004, 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- --
@@ -222,14 +222,21 @@ package Uintp is
-- Returns difference of two integer values
function UI_From_Dint (Input : Dint) return Uint;
- -- Converts Dint value to universal integer form.
+ -- Converts Dint value to universal integer form
function UI_From_Int (Input : Int) return Uint;
- -- Converts Int value to universal integer form.
+ -- Converts Int value to universal integer form
+
+ function UI_From_CC (Input : Char_Code) return Uint;
+ -- Converts Char_Code value to universal integer form
function UI_To_Int (Input : Uint) return Int;
- -- Converts universal integer value to Int. Fatal error
- -- if value is not in appropriate range.
+ -- Converts universal integer value to Int. Fatal error if value is not in
+ -- appropriate range.
+
+ function UI_To_CC (Input : Uint) return Char_Code;
+ -- Converts universal integer value to Char_Code. Fatal error if value is
+ -- not in Char_Code range.
function Num_Bits (Input : Uint) return Nat;
-- Approximate number of binary bits in given universal integer.
diff --git a/gcc/ada/uintp.h b/gcc/ada/uintp.h
index 35f5c9f8bc8..b055a9ed012 100644
--- a/gcc/ada/uintp.h
+++ b/gcc/ada/uintp.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 1992-2002, 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- *
@@ -39,6 +39,10 @@ struct Uint_Entry
#define UI_Is_In_Int_Range uintp__ui_is_in_int_range
extern Boolean UI_Is_In_Int_Range (Uint);
+/* Obtain Char_Code value from Uint input. Value must be in range. */
+#define UI_To_CC uintp__ui_to_cc
+extern Char_Code UI_To_CC (Uint);
+
/* Obtain Int value from Uint input. This will abort if the result is
out of range. */
#define UI_To_Int uintp__ui_to_int
@@ -48,6 +52,10 @@ extern Int UI_To_Int (Uint);
#define UI_From_Int uintp__ui_from_int
extern Uint UI_From_Int (int);
+/* Convert a Char_Code into a Uint. */
+#define UI_From_CC uintp__ui_from_cc
+extern Uint UI_From_CC (Char_Code);
+
/* Similarly, but return a GCC INTEGER_CST. Overflow is tested by the
constant-folding used to build the node. TYPE is the GCC type of the
resulting node. */
diff --git a/gcc/ada/vms_data.ads b/gcc/ada/vms_data.ads
index 0dbd0f19a32..2b028bbe2a5 100644
--- a/gcc/ada/vms_data.ads
+++ b/gcc/ada/vms_data.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1996-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 1996-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- --
@@ -498,6 +498,21 @@ package VMS_Data is
-- current unit. This is useful for code audit purposes, and also may be
-- used to improve code generation in some cases.
+ S_Bind_Return : aliased constant S := "/RETURN_CODES=" &
+ "POSIX " &
+ "!-X1 " &
+ "VMS " &
+ "-X1";
+ -- /RETURN_CODES=POSIX (D)
+ -- /RETURN_CODES=VMS
+ --
+ -- Specifies the style of default exit code returned. Must be used in
+ -- conjunction with and match the Link qualifer with same name.
+ --
+ -- POSIX (D) Return Posix success (0) by default.
+ --
+ -- VMS Return VMS success (1) by default.
+
S_Bind_RTS : aliased constant S := "/RUNTIME_SYSTEM=|" &
"--RTS=|";
-- /RUNTIME_SYSTEM=xxx
@@ -636,6 +651,7 @@ package VMS_Data is
S_Bind_Report 'Access,
S_Bind_ReportX 'Access,
S_Bind_Restr 'Access,
+ S_Bind_Return 'Access,
S_Bind_RTS 'Access,
S_Bind_Search 'Access,
S_Bind_Shared 'Access,
@@ -3368,7 +3384,8 @@ package VMS_Data is
-- /RETURN_CODES=VMS
--
-- Specifies the style of codes returned by
- -- Ada.Command_Line.Set_Exit_Status.
+ -- Ada.Command_Line.Set_Exit_Status. Must be used in conjunction with
+ -- and match the Bind qualifer with the same name.
--
-- POSIX (D) Return Posix compatible exit codes.
--
@@ -4473,7 +4490,7 @@ package VMS_Data is
S_Pretty_Align : aliased constant S := "/ALIGN=" &
"DEFAULT " &
- "-A1234 " &
+ "-A12345 " &
"OFF " &
"-A0 " &
"COLONS " &
@@ -4483,7 +4500,9 @@ package VMS_Data is
"STATEMENTS " &
"-A3 " &
"ARROWS " &
- "-A4";
+ "-A4 " &
+ "COMPONENT_CLAUSES " &
+ "-A5";
-- /ALIGN[=align-option, align-option, ...]
--
-- Set alignments. By default, all alignments (colons in declarations,
@@ -4492,11 +4511,14 @@ package VMS_Data is
--
-- align-option may be one of the following:
--
- -- OFF (D) Set all alignments to OFF
- -- COLONS Set alignments of colons in declarations to ON
- -- DECLARATIONS Set alignments of initialisations in declarations to ON
- -- STATEMENTS Set alignments of assignments statements to ON
- -- ARROWS Set alignments of arrow delimiters to ON.
+ -- OFF (D) Set all alignments to OFF
+ -- COLONS Set alignments of colons in declarations to ON
+ -- DECLARATIONS Set alignments of initialisations in declarations
+ -- to ON
+ -- STATEMENTS Set alignments of assignments statements to ON
+ -- ARROWS Set alignments of arrow delimiters to ON.
+ -- COMPONENT_CLAUSES Set alignments of AT keywords in component
+ -- clauses ON
--
-- Specifying one of the ON options without first specifying the OFF
-- option has no effect, because by default all alignments are set to ON.
diff --git a/gcc/ada/widechar.adb b/gcc/ada/widechar.adb
index 89514359e53..72cfb4ab63b 100644
--- a/gcc/ada/widechar.adb
+++ b/gcc/ada/widechar.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2002 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- --
@@ -42,14 +42,1550 @@ with System.WCh_Con; use System.WCh_Con;
package body Widechar is
+ pragma Style_Checks (Off);
+ -- Allow long lines in this unit
+
+ -----------------------------------------------
+ -- Tables for UTF_32 Categorization Routines --
+ -----------------------------------------------
+
+ -- Note these tables are derived from those given in AI-285. For details
+ -- see //www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-00285.TXT?rev=1.22.
+
+ type UTF_32_Range is record
+ Lo : Char_Code;
+ Hi : Char_Code;
+ end record;
+
+ type UTF_32_Ranges is array (Positive range <>) of UTF_32_Range;
+
+ -- The following array includes all characters considered digits, i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Number, Decimal Digit (Nd)
+
+ UTF_32_Digits : constant UTF_32_Ranges := (
+ (16#00030#, 16#00039#), -- DIGIT ZERO .. DIGIT NINE
+ (16#00660#, 16#00669#), -- ARABIC-INDIC DIGIT ZERO .. ARABIC-INDIC DIGIT NINE
+ (16#006F0#, 16#006F9#), -- EXTENDED ARABIC-INDIC DIGIT ZERO .. EXTENDED ARABIC-INDIC DIGIT NINE
+ (16#00966#, 16#0096F#), -- DEVANAGARI DIGIT ZERO .. DEVANAGARI DIGIT NINE
+ (16#009E6#, 16#009EF#), -- BENGALI DIGIT ZERO .. BENGALI DIGIT NINE
+ (16#00A66#, 16#00A6F#), -- GURMUKHI DIGIT ZERO .. GURMUKHI DIGIT NINE
+ (16#00AE6#, 16#00AEF#), -- GUJARATI DIGIT ZERO .. GUJARATI DIGIT NINE
+ (16#00B66#, 16#00B6F#), -- ORIYA DIGIT ZERO .. ORIYA DIGIT NINE
+ (16#00BE7#, 16#00BEF#), -- TAMIL DIGIT ONE .. TAMIL DIGIT NINE
+ (16#00C66#, 16#00C6F#), -- TELUGU DIGIT ZERO .. TELUGU DIGIT NINE
+ (16#00CE6#, 16#00CEF#), -- KANNADA DIGIT ZERO .. KANNADA DIGIT NINE
+ (16#00D66#, 16#00D6F#), -- MALAYALAM DIGIT ZERO .. MALAYALAM DIGIT NINE
+ (16#00E50#, 16#00E59#), -- THAI DIGIT ZERO .. THAI DIGIT NINE
+ (16#00ED0#, 16#00ED9#), -- LAO DIGIT ZERO .. LAO DIGIT NINE
+ (16#00F20#, 16#00F29#), -- TIBETAN DIGIT ZERO .. TIBETAN DIGIT NINE
+ (16#01040#, 16#01049#), -- MYANMAR DIGIT ZERO .. MYANMAR DIGIT NINE
+ (16#01369#, 16#01371#), -- ETHIOPIC DIGIT ONE .. ETHIOPIC DIGIT NINE
+ (16#017E0#, 16#017E9#), -- KHMER DIGIT ZERO .. KHMER DIGIT NINE
+ (16#01810#, 16#01819#), -- MONGOLIAN DIGIT ZERO .. MONGOLIAN DIGIT NINE
+ (16#01946#, 16#0194F#), -- LIMBU DIGIT ZERO .. LIMBU DIGIT NINE
+ (16#0FF10#, 16#0FF19#), -- FULLWIDTH DIGIT ZERO .. FULLWIDTH DIGIT NINE
+ (16#104A0#, 16#104A9#), -- OSMANYA DIGIT ZERO .. OSMANYA DIGIT NINE
+ (16#1D7CE#, 16#1D7FF#)); -- MATHEMATICAL BOLD DIGIT ZERO .. MATHEMATICAL MONOSPACE DIGIT NINE
+
+ -- The following table includes all characters considered letters, i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Letter, Uppercase (Lu)
+ -- Letter, Lowercase (Ll)
+ -- Letter, Titlecase (Lt)
+ -- Letter, Modifier (Lm)
+ -- Letter, Other (Lo)
+ -- Number, Letter (Nl)
+
+ UTF_32_Letters : constant UTF_32_Ranges := (
+ (16#00041#, 16#0005A#), -- LATIN CAPITAL LETTER A .. LATIN CAPITAL LETTER Z
+ (16#00061#, 16#0007A#), -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+ (16#000AA#, 16#000AA#), -- FEMININE ORDINAL INDICATOR .. FEMININE ORDINAL INDICATOR
+ (16#000B5#, 16#000B5#), -- MICRO SIGN .. MICRO SIGN
+ (16#000BA#, 16#000BA#), -- MASCULINE ORDINAL INDICATOR .. MASCULINE ORDINAL INDICATOR
+ (16#000C0#, 16#000D6#), -- LATIN CAPITAL LETTER A WITH GRAVE .. LATIN CAPITAL LETTER O WITH DIAERESIS
+ (16#000D8#, 16#000F6#), -- LATIN CAPITAL LETTER O WITH STROKE .. LATIN SMALL LETTER O WITH DIAERESIS
+ (16#000F8#, 16#00236#), -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER T WITH CURL
+ (16#00250#, 16#002C1#), -- LATIN SMALL LETTER TURNED A .. MODIFIER LETTER REVERSED GLOTTAL STOP
+ (16#002C6#, 16#002D1#), -- MODIFIER LETTER CIRCUMFLEX ACCENT .. MODIFIER LETTER HALF TRIANGULAR COLON
+ (16#002E0#, 16#002E4#), -- MODIFIER LETTER SMALL GAMMA .. MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+ (16#002EE#, 16#002EE#), -- MODIFIER LETTER DOUBLE APOSTROPHE .. MODIFIER LETTER DOUBLE APOSTROPHE
+ (16#0037A#, 16#0037A#), -- GREEK YPOGEGRAMMENI .. GREEK YPOGEGRAMMENI
+ (16#00386#, 16#00386#), -- GREEK CAPITAL LETTER ALPHA WITH TONOS .. GREEK CAPITAL LETTER ALPHA WITH TONOS
+ (16#00388#, 16#0038A#), -- GREEK CAPITAL LETTER EPSILON WITH TONOS .. GREEK CAPITAL LETTER IOTA WITH TONOS
+ (16#0038C#, 16#0038C#), -- GREEK CAPITAL LETTER OMICRON WITH TONOS .. GREEK CAPITAL LETTER OMICRON WITH TONOS
+ (16#0038E#, 16#003A1#), -- GREEK CAPITAL LETTER UPSILON WITH TONOS .. GREEK CAPITAL LETTER RHO
+ (16#003A3#, 16#003CE#), -- GREEK CAPITAL LETTER SIGMA .. GREEK SMALL LETTER OMEGA WITH TONOS
+ (16#003D0#, 16#003F5#), -- GREEK BETA SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+ (16#003F7#, 16#003FB#), -- GREEK CAPITAL LETTER SHO .. GREEK SMALL LETTER SAN
+ (16#00400#, 16#00481#), -- CYRILLIC CAPITAL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER KOPPA
+ (16#0048A#, 16#004CE#), -- CYRILLIC CAPITAL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+ (16#004D0#, 16#004F5#), -- CYRILLIC CAPITAL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ (16#004F8#, 16#004F9#), -- CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ (16#00500#, 16#0050F#), -- CYRILLIC CAPITAL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI TJE
+ (16#00531#, 16#00556#), -- ARMENIAN CAPITAL LETTER AYB .. ARMENIAN CAPITAL LETTER FEH
+ (16#00559#, 16#00559#), -- ARMENIAN MODIFIER LETTER LEFT HALF RING .. ARMENIAN MODIFIER LETTER LEFT HALF RING
+ (16#00561#, 16#00587#), -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LIGATURE ECH YIWN
+ (16#005D0#, 16#005EA#), -- HEBREW LETTER ALEF .. HEBREW LETTER TAV
+ (16#005F0#, 16#005F2#), -- HEBREW LIGATURE YIDDISH DOUBLE VAV .. HEBREW LIGATURE YIDDISH DOUBLE YOD
+ (16#00621#, 16#0063A#), -- ARABIC LETTER HAMZA .. ARABIC LETTER GHAIN
+ (16#00640#, 16#0064A#), -- ARABIC TATWEEL .. ARABIC LETTER YEH
+ (16#0066E#, 16#0066F#), -- ARABIC LETTER DOTLESS BEH .. ARABIC LETTER DOTLESS QAF
+ (16#00671#, 16#006D3#), -- ARABIC LETTER ALEF WASLA .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+ (16#006D5#, 16#006D5#), -- ARABIC LETTER AE .. ARABIC LETTER AE
+ (16#006E5#, 16#006E6#), -- ARABIC SMALL WAW .. ARABIC SMALL YEH
+ (16#006EE#, 16#006EF#), -- ARABIC LETTER DAL WITH INVERTED V .. ARABIC LETTER REH WITH INVERTED V
+ (16#006FA#, 16#006FC#), -- ARABIC LETTER SHEEN WITH DOT BELOW .. ARABIC LETTER GHAIN WITH DOT BELOW
+ (16#006FF#, 16#006FF#), -- ARABIC LETTER HEH WITH INVERTED V .. ARABIC LETTER HEH WITH INVERTED V
+ (16#00710#, 16#00710#), -- SYRIAC LETTER ALAPH .. SYRIAC LETTER ALAPH
+ (16#00712#, 16#0072F#), -- SYRIAC LETTER BETH .. SYRIAC LETTER PERSIAN DHALATH
+ (16#0074D#, 16#0074F#), -- SYRIAC LETTER SOGDIAN ZHAIN .. SYRIAC LETTER SOGDIAN FE
+ (16#00780#, 16#007A5#), -- THAANA LETTER HAA .. THAANA LETTER WAAVU
+ (16#007B1#, 16#007B1#), -- THAANA LETTER NAA .. THAANA LETTER NAA
+ (16#00904#, 16#00939#), -- DEVANAGARI LETTER SHORT A .. DEVANAGARI LETTER HA
+ (16#0093D#, 16#0093D#), -- DEVANAGARI SIGN AVAGRAHA .. DEVANAGARI SIGN AVAGRAHA
+ (16#00950#, 16#00950#), -- DEVANAGARI OM .. DEVANAGARI OM
+ (16#00958#, 16#00961#), -- DEVANAGARI LETTER QA .. DEVANAGARI LETTER VOCALIC LL
+ (16#00985#, 16#0098C#), -- BENGALI LETTER A .. BENGALI LETTER VOCALIC L
+ (16#0098F#, 16#00990#), -- BENGALI LETTER E .. BENGALI LETTER AI
+ (16#00993#, 16#009A8#), -- BENGALI LETTER O .. BENGALI LETTER NA
+ (16#009AA#, 16#009B0#), -- BENGALI LETTER PA .. BENGALI LETTER RA
+ (16#009B2#, 16#009B2#), -- BENGALI LETTER LA .. BENGALI LETTER LA
+ (16#009B6#, 16#009B9#), -- BENGALI LETTER SHA .. BENGALI LETTER HA
+ (16#009BD#, 16#009BD#), -- BENGALI SIGN AVAGRAHA .. BENGALI SIGN AVAGRAHA
+ (16#009DC#, 16#009DD#), -- BENGALI LETTER RRA .. BENGALI LETTER RHA
+ (16#009DF#, 16#009E1#), -- BENGALI LETTER YYA .. BENGALI LETTER VOCALIC LL
+ (16#009F0#, 16#009F1#), -- BENGALI LETTER RA WITH MIDDLE DIAGONAL .. BENGALI LETTER RA WITH LOWER DIAGONAL
+ (16#00A05#, 16#00A0A#), -- GURMUKHI LETTER A .. GURMUKHI LETTER UU
+ (16#00A0F#, 16#00A10#), -- GURMUKHI LETTER EE .. GURMUKHI LETTER AI
+ (16#00A13#, 16#00A28#), -- GURMUKHI LETTER OO .. GURMUKHI LETTER NA
+ (16#00A2A#, 16#00A30#), -- GURMUKHI LETTER PA .. GURMUKHI LETTER RA
+ (16#00A32#, 16#00A33#), -- GURMUKHI LETTER LA .. GURMUKHI LETTER LLA
+ (16#00A35#, 16#00A36#), -- GURMUKHI LETTER VA .. GURMUKHI LETTER SHA
+ (16#00A38#, 16#00A39#), -- GURMUKHI LETTER SA .. GURMUKHI LETTER HA
+ (16#00A59#, 16#00A5C#), -- GURMUKHI LETTER KHHA .. GURMUKHI LETTER RRA
+ (16#00A5E#, 16#00A5E#), -- GURMUKHI LETTER FA .. GURMUKHI LETTER FA
+ (16#00A72#, 16#00A74#), -- GURMUKHI IRI .. GURMUKHI EK ONKAR
+ (16#00A85#, 16#00A8D#), -- GUJARATI LETTER A .. GUJARATI VOWEL CANDRA E
+ (16#00A8F#, 16#00A91#), -- GUJARATI LETTER E .. GUJARATI VOWEL CANDRA O
+ (16#00A93#, 16#00AA8#), -- GUJARATI LETTER O .. GUJARATI LETTER NA
+ (16#00AAA#, 16#00AB0#), -- GUJARATI LETTER PA .. GUJARATI LETTER RA
+ (16#00AB2#, 16#00AB3#), -- GUJARATI LETTER LA .. GUJARATI LETTER LLA
+ (16#00AB5#, 16#00AB9#), -- GUJARATI LETTER VA .. GUJARATI LETTER HA
+ (16#00ABD#, 16#00ABD#), -- GUJARATI SIGN AVAGRAHA .. GUJARATI SIGN AVAGRAHA
+ (16#00AD0#, 16#00AD0#), -- GUJARATI OM .. GUJARATI OM
+ (16#00AE0#, 16#00AE1#), -- GUJARATI LETTER VOCALIC RR .. GUJARATI LETTER VOCALIC LL
+ (16#00B05#, 16#00B0C#), -- ORIYA LETTER A .. ORIYA LETTER VOCALIC L
+ (16#00B0F#, 16#00B10#), -- ORIYA LETTER E .. ORIYA LETTER AI
+ (16#00B13#, 16#00B28#), -- ORIYA LETTER O .. ORIYA LETTER NA
+ (16#00B2A#, 16#00B30#), -- ORIYA LETTER PA .. ORIYA LETTER RA
+ (16#00B32#, 16#00B33#), -- ORIYA LETTER LA .. ORIYA LETTER LLA
+ (16#00B35#, 16#00B39#), -- ORIYA LETTER VA .. ORIYA LETTER HA
+ (16#00B3D#, 16#00B3D#), -- ORIYA SIGN AVAGRAHA .. ORIYA SIGN AVAGRAHA
+ (16#00B5C#, 16#00B5D#), -- ORIYA LETTER RRA .. ORIYA LETTER RHA
+ (16#00B5F#, 16#00B61#), -- ORIYA LETTER YYA .. ORIYA LETTER VOCALIC LL
+ (16#00B71#, 16#00B71#), -- ORIYA LETTER WA .. ORIYA LETTER WA
+ (16#00B83#, 16#00B83#), -- TAMIL SIGN VISARGA .. TAMIL SIGN VISARGA
+ (16#00B85#, 16#00B8A#), -- TAMIL LETTER A .. TAMIL LETTER UU
+ (16#00B8E#, 16#00B90#), -- TAMIL LETTER E .. TAMIL LETTER AI
+ (16#00B92#, 16#00B95#), -- TAMIL LETTER O .. TAMIL LETTER KA
+ (16#00B99#, 16#00B9A#), -- TAMIL LETTER NGA .. TAMIL LETTER CA
+ (16#00B9C#, 16#00B9C#), -- TAMIL LETTER JA .. TAMIL LETTER JA
+ (16#00B9E#, 16#00B9F#), -- TAMIL LETTER NYA .. TAMIL LETTER TTA
+ (16#00BA3#, 16#00BA4#), -- TAMIL LETTER NNA .. TAMIL LETTER TA
+ (16#00BA8#, 16#00BAA#), -- TAMIL LETTER NA .. TAMIL LETTER PA
+ (16#00BAE#, 16#00BB5#), -- TAMIL LETTER MA .. TAMIL LETTER VA
+ (16#00BB7#, 16#00BB9#), -- TAMIL LETTER SSA .. TAMIL LETTER HA
+ (16#00C05#, 16#00C0C#), -- TELUGU LETTER A .. TELUGU LETTER VOCALIC L
+ (16#00C0E#, 16#00C10#), -- TELUGU LETTER E .. TELUGU LETTER AI
+ (16#00C12#, 16#00C28#), -- TELUGU LETTER O .. TELUGU LETTER NA
+ (16#00C2A#, 16#00C33#), -- TELUGU LETTER PA .. TELUGU LETTER LLA
+ (16#00C35#, 16#00C39#), -- TELUGU LETTER VA .. TELUGU LETTER HA
+ (16#00C60#, 16#00C61#), -- TELUGU LETTER VOCALIC RR .. TELUGU LETTER VOCALIC LL
+ (16#00C85#, 16#00C8C#), -- KANNADA LETTER A .. KANNADA LETTER VOCALIC L
+ (16#00C8E#, 16#00C90#), -- KANNADA LETTER E .. KANNADA LETTER AI
+ (16#00C92#, 16#00CA8#), -- KANNADA LETTER O .. KANNADA LETTER NA
+ (16#00CAA#, 16#00CB3#), -- KANNADA LETTER PA .. KANNADA LETTER LLA
+ (16#00CB5#, 16#00CB9#), -- KANNADA LETTER VA .. KANNADA LETTER HA
+ (16#00CBD#, 16#00CBD#), -- KANNADA SIGN AVAGRAHA .. KANNADA SIGN AVAGRAHA
+ (16#00CDE#, 16#00CDE#), -- KANNADA LETTER FA .. KANNADA LETTER FA
+ (16#00CE0#, 16#00CE1#), -- KANNADA LETTER VOCALIC RR .. KANNADA LETTER VOCALIC LL
+ (16#00D05#, 16#00D0C#), -- MALAYALAM LETTER A .. MALAYALAM LETTER VOCALIC L
+ (16#00D0E#, 16#00D10#), -- MALAYALAM LETTER E .. MALAYALAM LETTER AI
+ (16#00D12#, 16#00D28#), -- MALAYALAM LETTER O .. MALAYALAM LETTER NA
+ (16#00D2A#, 16#00D39#), -- MALAYALAM LETTER PA .. MALAYALAM LETTER HA
+ (16#00D60#, 16#00D61#), -- MALAYALAM LETTER VOCALIC RR .. MALAYALAM LETTER VOCALIC LL
+ (16#00D85#, 16#00D96#), -- SINHALA LETTER AYANNA .. SINHALA LETTER AUYANNA
+ (16#00D9A#, 16#00DB1#), -- SINHALA LETTER ALPAPRAANA KAYANNA .. SINHALA LETTER DANTAJA NAYANNA
+ (16#00DB3#, 16#00DBB#), -- SINHALA LETTER SANYAKA DAYANNA .. SINHALA LETTER RAYANNA
+ (16#00DBD#, 16#00DBD#), -- SINHALA LETTER DANTAJA LAYANNA .. SINHALA LETTER DANTAJA LAYANNA
+ (16#00DC0#, 16#00DC6#), -- SINHALA LETTER VAYANNA .. SINHALA LETTER FAYANNA
+ (16#00E01#, 16#00E30#), -- THAI CHARACTER KO KAI .. THAI CHARACTER SARA A
+ (16#00E32#, 16#00E33#), -- THAI CHARACTER SARA AA .. THAI CHARACTER SARA AM
+ (16#00E40#, 16#00E46#), -- THAI CHARACTER SARA E .. THAI CHARACTER MAIYAMOK
+ (16#00E81#, 16#00E82#), -- LAO LETTER KO .. LAO LETTER KHO SUNG
+ (16#00E84#, 16#00E84#), -- LAO LETTER KHO TAM .. LAO LETTER KHO TAM
+ (16#00E87#, 16#00E88#), -- LAO LETTER NGO .. LAO LETTER CO
+ (16#00E8A#, 16#00E8A#), -- LAO LETTER SO TAM .. LAO LETTER SO TAM
+ (16#00E8D#, 16#00E8D#), -- LAO LETTER NYO .. LAO LETTER NYO
+ (16#00E94#, 16#00E97#), -- LAO LETTER DO .. LAO LETTER THO TAM
+ (16#00E99#, 16#00E9F#), -- LAO LETTER NO .. LAO LETTER FO SUNG
+ (16#00EA1#, 16#00EA3#), -- LAO LETTER MO .. LAO LETTER LO LING
+ (16#00EA5#, 16#00EA5#), -- LAO LETTER LO LOOT .. LAO LETTER LO LOOT
+ (16#00EA7#, 16#00EA7#), -- LAO LETTER WO .. LAO LETTER WO
+ (16#00EAA#, 16#00EAB#), -- LAO LETTER SO SUNG .. LAO LETTER HO SUNG
+ (16#00EAD#, 16#00EB0#), -- LAO LETTER O .. LAO VOWEL SIGN A
+ (16#00EB2#, 16#00EB3#), -- LAO VOWEL SIGN AA .. LAO VOWEL SIGN AM
+ (16#00EBD#, 16#00EBD#), -- LAO SEMIVOWEL SIGN NYO .. LAO SEMIVOWEL SIGN NYO
+ (16#00EC0#, 16#00EC4#), -- LAO VOWEL SIGN E .. LAO VOWEL SIGN AI
+ (16#00EC6#, 16#00EC6#), -- LAO KO LA .. LAO KO LA
+ (16#00EDC#, 16#00EDD#), -- LAO HO NO .. LAO HO MO
+ (16#00F00#, 16#00F00#), -- TIBETAN SYLLABLE OM .. TIBETAN SYLLABLE OM
+ (16#00F40#, 16#00F47#), -- TIBETAN LETTER KA .. TIBETAN LETTER JA
+ (16#00F49#, 16#00F6A#), -- TIBETAN LETTER NYA .. TIBETAN LETTER FIXED-FORM RA
+ (16#00F88#, 16#00F8B#), -- TIBETAN SIGN LCE TSA CAN .. TIBETAN SIGN GRU MED RGYINGS
+ (16#01000#, 16#01021#), -- MYANMAR LETTER KA .. MYANMAR LETTER A
+ (16#01023#, 16#01027#), -- MYANMAR LETTER I .. MYANMAR LETTER E
+ (16#01029#, 16#0102A#), -- MYANMAR LETTER O .. MYANMAR LETTER AU
+ (16#01050#, 16#01055#), -- MYANMAR LETTER SHA .. MYANMAR LETTER VOCALIC LL
+ (16#010A0#, 16#010C5#), -- GEORGIAN CAPITAL LETTER AN .. GEORGIAN CAPITAL LETTER HOE
+ (16#010D0#, 16#010F8#), -- GEORGIAN LETTER AN .. GEORGIAN LETTER ELIFI
+ (16#01100#, 16#01159#), -- HANGUL CHOSEONG KIYEOK .. HANGUL CHOSEONG YEORINHIEUH
+ (16#0115F#, 16#011A2#), -- HANGUL CHOSEONG FILLER .. HANGUL JUNGSEONG SSANGARAEA
+ (16#011A8#, 16#011F9#), -- HANGUL JONGSEONG KIYEOK .. HANGUL JONGSEONG YEORINHIEUH
+ (16#01200#, 16#01206#), -- ETHIOPIC SYLLABLE HA .. ETHIOPIC SYLLABLE HO
+ (16#01208#, 16#01246#), -- ETHIOPIC SYLLABLE LA .. ETHIOPIC SYLLABLE QO
+ (16#01248#, 16#01248#), -- ETHIOPIC SYLLABLE QWA .. ETHIOPIC SYLLABLE QWA
+ (16#0124A#, 16#0124D#), -- ETHIOPIC SYLLABLE QWI .. ETHIOPIC SYLLABLE QWE
+ (16#01250#, 16#01256#), -- ETHIOPIC SYLLABLE QHA .. ETHIOPIC SYLLABLE QHO
+ (16#01258#, 16#01258#), -- ETHIOPIC SYLLABLE QHWA .. ETHIOPIC SYLLABLE QHWA
+ (16#0125A#, 16#0125D#), -- ETHIOPIC SYLLABLE QHWI .. ETHIOPIC SYLLABLE QHWE
+ (16#01260#, 16#01286#), -- ETHIOPIC SYLLABLE BA .. ETHIOPIC SYLLABLE XO
+ (16#01288#, 16#01288#), -- ETHIOPIC SYLLABLE XWA .. ETHIOPIC SYLLABLE XWA
+ (16#0128A#, 16#0128D#), -- ETHIOPIC SYLLABLE XWI .. ETHIOPIC SYLLABLE XWE
+ (16#01290#, 16#012AE#), -- ETHIOPIC SYLLABLE NA .. ETHIOPIC SYLLABLE KO
+ (16#012B0#, 16#012B0#), -- ETHIOPIC SYLLABLE KWA .. ETHIOPIC SYLLABLE KWA
+ (16#012B2#, 16#012B5#), -- ETHIOPIC SYLLABLE KWI .. ETHIOPIC SYLLABLE KWE
+ (16#012B8#, 16#012BE#), -- ETHIOPIC SYLLABLE KXA .. ETHIOPIC SYLLABLE KXO
+ (16#012C0#, 16#012C0#), -- ETHIOPIC SYLLABLE KXWA .. ETHIOPIC SYLLABLE KXWA
+ (16#012C2#, 16#012C5#), -- ETHIOPIC SYLLABLE KXWI .. ETHIOPIC SYLLABLE KXWE
+ (16#012C8#, 16#012CE#), -- ETHIOPIC SYLLABLE WA .. ETHIOPIC SYLLABLE WO
+ (16#012D0#, 16#012D6#), -- ETHIOPIC SYLLABLE PHARYNGEAL A .. ETHIOPIC SYLLABLE PHARYNGEAL O
+ (16#012D8#, 16#012EE#), -- ETHIOPIC SYLLABLE ZA .. ETHIOPIC SYLLABLE YO
+ (16#012F0#, 16#0130E#), -- ETHIOPIC SYLLABLE DA .. ETHIOPIC SYLLABLE GO
+ (16#01310#, 16#01310#), -- ETHIOPIC SYLLABLE GWA .. ETHIOPIC SYLLABLE GWA
+ (16#01312#, 16#01315#), -- ETHIOPIC SYLLABLE GWI .. ETHIOPIC SYLLABLE GWE
+ (16#01318#, 16#0131E#), -- ETHIOPIC SYLLABLE GGA .. ETHIOPIC SYLLABLE GGO
+ (16#01320#, 16#01346#), -- ETHIOPIC SYLLABLE THA .. ETHIOPIC SYLLABLE TZO
+ (16#01348#, 16#0135A#), -- ETHIOPIC SYLLABLE FA .. ETHIOPIC SYLLABLE FYA
+ (16#013A0#, 16#013F4#), -- CHEROKEE LETTER A .. CHEROKEE LETTER YV
+ (16#01401#, 16#0166C#), -- CANADIAN SYLLABICS E .. CANADIAN SYLLABICS CARRIER TTSA
+ (16#0166F#, 16#01676#), -- CANADIAN SYLLABICS QAI .. CANADIAN SYLLABICS NNGAA
+ (16#01681#, 16#0169A#), -- OGHAM LETTER BEITH .. OGHAM LETTER PEITH
+ (16#016A0#, 16#016EA#), -- RUNIC LETTER FEHU FEOH FE F .. RUNIC LETTER X
+ (16#016EE#, 16#016F0#), -- RUNIC ARLAUG SYMBOL .. RUNIC BELGTHOR SYMBOL
+ (16#01700#, 16#0170C#), -- TAGALOG LETTER A .. TAGALOG LETTER YA
+ (16#0170E#, 16#01711#), -- TAGALOG LETTER LA .. TAGALOG LETTER HA
+ (16#01720#, 16#01731#), -- HANUNOO LETTER A .. HANUNOO LETTER HA
+ (16#01740#, 16#01751#), -- BUHID LETTER A .. BUHID LETTER HA
+ (16#01760#, 16#0176C#), -- TAGBANWA LETTER A .. TAGBANWA LETTER YA
+ (16#0176E#, 16#01770#), -- TAGBANWA LETTER LA .. TAGBANWA LETTER SA
+ (16#01780#, 16#017B3#), -- KHMER LETTER KA .. KHMER INDEPENDENT VOWEL QAU
+ (16#017D7#, 16#017D7#), -- KHMER SIGN LEK TOO .. KHMER SIGN LEK TOO
+ (16#017DC#, 16#017DC#), -- KHMER SIGN AVAKRAHASANYA .. KHMER SIGN AVAKRAHASANYA
+ (16#01820#, 16#01877#), -- MONGOLIAN LETTER A .. MONGOLIAN LETTER MANCHU ZHA
+ (16#01880#, 16#018A8#), -- MONGOLIAN LETTER ALI GALI ANUSVARA ONE .. MONGOLIAN LETTER MANCHU ALI GALI BHA
+ (16#01900#, 16#0191C#), -- LIMBU VOWEL-CARRIER LETTER .. LIMBU LETTER HA
+ (16#01950#, 16#0196D#), -- TAI LE LETTER KA .. TAI LE LETTER AI
+ (16#01970#, 16#01974#), -- TAI LE LETTER TONE-2 .. TAI LE LETTER TONE-6
+ (16#01D00#, 16#01D6B#), -- LATIN LETTER SMALL CAPITAL A .. LATIN SMALL LETTER UE
+ (16#01E00#, 16#01E9B#), -- LATIN CAPITAL LETTER A WITH RING BELOW .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ (16#01EA0#, 16#01EF9#), -- LATIN CAPITAL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER Y WITH TILDE
+ (16#01F00#, 16#01F15#), -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ (16#01F18#, 16#01F1D#), -- GREEK CAPITAL LETTER EPSILON WITH PSILI .. GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+ (16#01F20#, 16#01F45#), -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ (16#01F48#, 16#01F4D#), -- GREEK CAPITAL LETTER OMICRON WITH PSILI .. GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+ (16#01F50#, 16#01F57#), -- GREEK SMALL LETTER UPSILON WITH PSILI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ (16#01F59#, 16#01F59#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA
+ (16#01F5B#, 16#01F5B#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+ (16#01F5D#, 16#01F5D#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA .. GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+ (16#01F5F#, 16#01F7D#), -- GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER OMEGA WITH OXIA
+ (16#01F80#, 16#01FB4#), -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+ (16#01FB6#, 16#01FBC#), -- GREEK SMALL LETTER ALPHA WITH PERISPOMENI .. GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ (16#01FBE#, 16#01FBE#), -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+ (16#01FC2#, 16#01FC4#), -- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+ (16#01FC6#, 16#01FCC#), -- GREEK SMALL LETTER ETA WITH PERISPOMENI .. GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ (16#01FD0#, 16#01FD3#), -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+ (16#01FD6#, 16#01FDB#), -- GREEK SMALL LETTER IOTA WITH PERISPOMENI .. GREEK CAPITAL LETTER IOTA WITH OXIA
+ (16#01FE0#, 16#01FEC#), -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK CAPITAL LETTER RHO WITH DASIA
+ (16#01FF2#, 16#01FF4#), -- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+ (16#01FF6#, 16#01FFC#), -- GREEK SMALL LETTER OMEGA WITH PERISPOMENI .. GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ (16#02071#, 16#02071#), -- SUPERSCRIPT LATIN SMALL LETTER I .. SUPERSCRIPT LATIN SMALL LETTER I
+ (16#0207F#, 16#0207F#), -- SUPERSCRIPT LATIN SMALL LETTER N .. SUPERSCRIPT LATIN SMALL LETTER N
+ (16#02102#, 16#02102#), -- DOUBLE-STRUCK CAPITAL C .. DOUBLE-STRUCK CAPITAL C
+ (16#02107#, 16#02107#), -- EULER CONSTANT .. EULER CONSTANT
+ (16#0210A#, 16#02113#), -- SCRIPT SMALL G .. SCRIPT SMALL L
+ (16#02115#, 16#02115#), -- DOUBLE-STRUCK CAPITAL N .. DOUBLE-STRUCK CAPITAL N
+ (16#02119#, 16#0211D#), -- DOUBLE-STRUCK CAPITAL P .. DOUBLE-STRUCK CAPITAL R
+ (16#02124#, 16#02124#), -- DOUBLE-STRUCK CAPITAL Z .. DOUBLE-STRUCK CAPITAL Z
+ (16#02126#, 16#02126#), -- OHM SIGN .. OHM SIGN
+ (16#02128#, 16#02128#), -- BLACK-LETTER CAPITAL Z .. BLACK-LETTER CAPITAL Z
+ (16#0212A#, 16#0212D#), -- KELVIN SIGN .. BLACK-LETTER CAPITAL C
+ (16#0212F#, 16#02131#), -- SCRIPT SMALL E .. SCRIPT CAPITAL F
+ (16#02133#, 16#02139#), -- SCRIPT CAPITAL M .. INFORMATION SOURCE
+ (16#0213D#, 16#0213F#), -- DOUBLE-STRUCK SMALL GAMMA .. DOUBLE-STRUCK CAPITAL PI
+ (16#02145#, 16#02149#), -- DOUBLE-STRUCK ITALIC CAPITAL D .. DOUBLE-STRUCK ITALIC SMALL J
+ (16#02160#, 16#02183#), -- ROMAN NUMERAL ONE .. ROMAN NUMERAL REVERSED ONE HUNDRED
+ (16#03005#, 16#03007#), -- IDEOGRAPHIC ITERATION MARK .. IDEOGRAPHIC NUMBER ZERO
+ (16#03021#, 16#03029#), -- HANGZHOU NUMERAL ONE .. HANGZHOU NUMERAL NINE
+ (16#03031#, 16#03035#), -- VERTICAL KANA REPEAT MARK .. VERTICAL KANA REPEAT MARK LOWER HALF
+ (16#03038#, 16#0303C#), -- HANGZHOU NUMERAL TEN .. MASU MARK
+ (16#03041#, 16#03096#), -- HIRAGANA LETTER SMALL A .. HIRAGANA LETTER SMALL KE
+ (16#0309D#, 16#0309F#), -- HIRAGANA ITERATION MARK .. HIRAGANA DIGRAPH YORI
+ (16#030A1#, 16#030FA#), -- KATAKANA LETTER SMALL A .. KATAKANA LETTER VO
+ (16#030FC#, 16#030FF#), -- KATAKANA-HIRAGANA PROLONGED SOUND MARK .. KATAKANA DIGRAPH KOTO
+ (16#03105#, 16#0312C#), -- BOPOMOFO LETTER B .. BOPOMOFO LETTER GN
+ (16#03131#, 16#0318E#), -- HANGUL LETTER KIYEOK .. HANGUL LETTER ARAEAE
+ (16#031A0#, 16#031B7#), -- BOPOMOFO LETTER BU .. BOPOMOFO FINAL LETTER H
+ (16#031F0#, 16#031FF#), -- KATAKANA LETTER SMALL KU .. KATAKANA LETTER SMALL RO
+ (16#03400#, 16#04DB5#), -- <CJK Ideograph Extension A, First> .. <CJK Ideograph Extension A, Last>
+ (16#04E00#, 16#09FA5#), -- <CJK Ideograph, First> .. <CJK Ideograph, Last>
+ (16#0A000#, 16#0A48C#), -- YI SYLLABLE IT .. YI SYLLABLE YYR
+ (16#0AC00#, 16#0D7A3#), -- <Hangul Syllable, First> .. <Hangul Syllable, Last>
+ (16#0F900#, 16#0FA2D#), -- CJK COMPATIBILITY IDEOGRAPH-F900 .. CJK COMPATIBILITY IDEOGRAPH-FA2D
+ (16#0FA30#, 16#0FA6A#), -- CJK COMPATIBILITY IDEOGRAPH-FA30 .. CJK COMPATIBILITY IDEOGRAPH-FA6A
+ (16#0FB00#, 16#0FB06#), -- LATIN SMALL LIGATURE FF .. LATIN SMALL LIGATURE ST
+ (16#0FB13#, 16#0FB17#), -- ARMENIAN SMALL LIGATURE MEN NOW .. ARMENIAN SMALL LIGATURE MEN XEH
+ (16#0FB1D#, 16#0FB1D#), -- HEBREW LETTER YOD WITH HIRIQ .. HEBREW LETTER YOD WITH HIRIQ
+ (16#0FB1F#, 16#0FB28#), -- HEBREW LIGATURE YIDDISH YOD YOD PATAH .. HEBREW LETTER WIDE TAV
+ (16#0FB2A#, 16#0FB36#), -- HEBREW LETTER SHIN WITH SHIN DOT .. HEBREW LETTER ZAYIN WITH DAGESH
+ (16#0FB38#, 16#0FB3C#), -- HEBREW LETTER TET WITH DAGESH .. HEBREW LETTER LAMED WITH DAGESH
+ (16#0FB3E#, 16#0FB3E#), -- HEBREW LETTER MEM WITH DAGESH .. HEBREW LETTER MEM WITH DAGESH
+ (16#0FB40#, 16#0FB41#), -- HEBREW LETTER NUN WITH DAGESH .. HEBREW LETTER SAMEKH WITH DAGESH
+ (16#0FB43#, 16#0FB44#), -- HEBREW LETTER FINAL PE WITH DAGESH .. HEBREW LETTER PE WITH DAGESH
+ (16#0FB46#, 16#0FBB1#), -- HEBREW LETTER TSADI WITH DAGESH .. ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+ (16#0FBD3#, 16#0FD3D#), -- ARABIC LETTER NG ISOLATED FORM .. ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+ (16#0FD50#, 16#0FD8F#), -- ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM .. ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+ (16#0FD92#, 16#0FDC7#), -- ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM .. ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+ (16#0FDF0#, 16#0FDFB#), -- ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM .. ARABIC LIGATURE JALLAJALALOUHOU
+ (16#0FE70#, 16#0FE74#), -- ARABIC FATHATAN ISOLATED FORM .. ARABIC KASRATAN ISOLATED FORM
+ (16#0FE76#, 16#0FEFC#), -- ARABIC FATHA ISOLATED FORM .. ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+ (16#0FF21#, 16#0FF3A#), -- FULLWIDTH LATIN CAPITAL LETTER A .. FULLWIDTH LATIN CAPITAL LETTER Z
+ (16#0FF41#, 16#0FF5A#), -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+ (16#0FF66#, 16#0FFBE#), -- HALFWIDTH KATAKANA LETTER WO .. HALFWIDTH HANGUL LETTER HIEUH
+ (16#0FFC2#, 16#0FFC7#), -- HALFWIDTH HANGUL LETTER A .. HALFWIDTH HANGUL LETTER E
+ (16#0FFCA#, 16#0FFCF#), -- HALFWIDTH HANGUL LETTER YEO .. HALFWIDTH HANGUL LETTER OE
+ (16#0FFD2#, 16#0FFD7#), -- HALFWIDTH HANGUL LETTER YO .. HALFWIDTH HANGUL LETTER YU
+ (16#0FFDA#, 16#0FFDC#), -- HALFWIDTH HANGUL LETTER EU .. HALFWIDTH HANGUL LETTER I
+ (16#10000#, 16#1000B#), -- LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE
+ (16#1000D#, 16#10026#), -- LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO
+ (16#10028#, 16#1003A#), -- LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO
+ (16#1003C#, 16#1003D#), -- LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE
+ (16#1003F#, 16#1004D#), -- LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO
+ (16#10050#, 16#1005D#), -- LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089
+ (16#10080#, 16#100FA#), -- LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305
+ (16#10300#, 16#1031E#), -- OLD ITALIC LETTER A .. OLD ITALIC LETTER UU
+ (16#10330#, 16#1034A#), -- GOTHIC LETTER AHSA .. GOTHIC LETTER NINE HUNDRED
+ (16#10380#, 16#1039D#), -- UGARITIC LETTER ALPA .. UGARITIC LETTER SSU
+ (16#10400#, 16#1049D#), -- DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO
+ (16#10800#, 16#10805#), -- CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA
+ (16#10808#, 16#10808#), -- CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO
+ (16#1080A#, 16#10835#), -- CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO
+ (16#10837#, 16#10838#), -- CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE
+ (16#1083C#, 16#1083C#), -- CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA
+ (16#1083F#, 16#1083F#), -- CYPRIOT SYLLABLE ZO .. CYPRIOT SYLLABLE ZO
+ (16#1D400#, 16#1D454#), -- MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G
+ (16#1D456#, 16#1D49C#), -- MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A
+ (16#1D49E#, 16#1D49F#), -- MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D
+ (16#1D4A2#, 16#1D4A2#), -- MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G
+ (16#1D4A5#, 16#1D4A6#), -- MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K
+ (16#1D4A9#, 16#1D4AC#), -- MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q
+ (16#1D4AE#, 16#1D4B9#), -- MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D
+ (16#1D4BB#, 16#1D4BB#), -- MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F
+ (16#1D4BD#, 16#1D4C3#), -- MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N
+ (16#1D4C5#, 16#1D505#), -- MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B
+ (16#1D507#, 16#1D50A#), -- MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G
+ (16#1D50D#, 16#1D514#), -- MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q
+ (16#1D516#, 16#1D51C#), -- MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y
+ (16#1D51E#, 16#1D539#), -- MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+ (16#1D53B#, 16#1D53E#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+ (16#1D540#, 16#1D544#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+ (16#1D546#, 16#1D546#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+ (16#1D54A#, 16#1D550#), -- MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+ (16#1D552#, 16#1D6A3#), -- MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL MONOSPACE SMALL Z
+ (16#1D6A8#, 16#1D6C0#), -- MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA
+ (16#1D6C2#, 16#1D6DA#), -- MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA
+ (16#1D6DC#, 16#1D6FA#), -- MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA
+ (16#1D6FC#, 16#1D714#), -- MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA
+ (16#1D716#, 16#1D734#), -- MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+ (16#1D736#, 16#1D74E#), -- MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA
+ (16#1D750#, 16#1D76E#), -- MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+ (16#1D770#, 16#1D788#), -- MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+ (16#1D78A#, 16#1D7A8#), -- MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+ (16#1D7AA#, 16#1D7C2#), -- MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+ (16#1D7C4#, 16#1D7C9#), -- MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+ (16#20000#, 16#2A6D6#), -- <CJK Ideograph Extension B, First> .. <CJK Ideograph Extension B, Last>
+ (16#2F800#, 16#2FA1D#)); -- CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+ -- The following table includes all characters considered spaces, i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Separator, Space (Zs)
+
+ UTF_32_Spaces : constant UTF_32_Ranges := (
+ (16#00020#, 16#00020#), -- SPACE .. SPACE
+ (16#000A0#, 16#000A0#), -- NO-BREAK SPACE .. NO-BREAK SPACE
+ (16#01680#, 16#01680#), -- OGHAM SPACE MARK .. OGHAM SPACE MARK
+ (16#0180E#, 16#0180E#), -- MONGOLIAN VOWEL SEPARATOR .. MONGOLIAN VOWEL SEPARATOR
+ (16#02000#, 16#0200B#), -- EN QUAD .. ZERO WIDTH SPACE
+ (16#0202F#, 16#0202F#), -- NARROW NO-BREAK SPACE .. NARROW NO-BREAK SPACE
+ (16#0205F#, 16#0205F#), -- MEDIUM MATHEMATICAL SPACE .. MEDIUM MATHEMATICAL SPACE
+ (16#03000#, 16#03000#)); -- IDEOGRAPHIC SPACE .. IDEOGRAPHIC SPACE
+
+ -- The following table includes all characters considered punctuation,
+ -- i.e. all characters from the Unicode table with categories:
+
+ -- Punctuation, Connector (Pc)
+
+ UTF_32_Punctuation : constant UTF_32_Ranges := (
+ (16#0005F#, 16#0005F#), -- LOW LINE .. LOW LINE
+ (16#0203F#, 16#02040#), -- UNDERTIE .. CHARACTER TIE
+ (16#02054#, 16#02054#), -- INVERTED UNDERTIE .. INVERTED UNDERTIE
+ (16#030FB#, 16#030FB#), -- KATAKANA MIDDLE DOT .. KATAKANA MIDDLE DOT
+ (16#0FE33#, 16#0FE34#), -- PRESENTATION FORM FOR VERTICAL LOW LINE .. PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+ (16#0FE4D#, 16#0FE4F#), -- DASHED LOW LINE .. WAVY LOW LINE
+ (16#0FF3F#, 16#0FF3F#), -- FULLWIDTH LOW LINE .. FULLWIDTH LOW LINE
+ (16#0FF65#, 16#0FF65#)); -- HALFWIDTH KATAKANA MIDDLE DOT .. HALFWIDTH KATAKANA MIDDLE DOT
+
+ -- The following table includes all characters considered as other format,
+ -- i.e. all characters from the Unicode table with categories:
+
+ -- Other, Format (Cf)
+
+ UTF_32_Other_Format : constant UTF_32_Ranges := (
+ (16#000AD#, 16#000AD#), -- SOFT HYPHEN .. SOFT HYPHEN
+ (16#00600#, 16#00603#), -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+ (16#006DD#, 16#006DD#), -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+
+ (16#0070F#, 16#0070F#), -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+ (16#017B4#, 16#017B5#), -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+ (16#0200C#, 16#0200F#), -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+ (16#0202A#, 16#0202E#), -- LEFT-TO-RIGHT EMBEDDING .. RIGHT-TO-LEFT OVERRIDE
+ (16#02060#, 16#02063#), -- WORD JOINER .. INVISIBLE SEPARATOR
+ (16#0206A#, 16#0206F#), -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+ (16#0FEFF#, 16#0FEFF#), -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+ (16#0FFF9#, 16#0FFFB#), -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+ (16#1D173#, 16#1D17A#), -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+ (16#E0001#, 16#E0001#), -- LANGUAGE TAG .. LANGUAGE TAG
+ (16#E0020#, 16#E007F#)); -- TAG SPACE .. CANCEL TAG
+
+ -- The following table includes all characters considered marks i.e.
+ -- all characters from the Unicode table with categories:
+
+ -- Mark, Nonspacing (Mn)
+ -- Mark, Spacing Combining (Mc)
+
+ UTF_32_Marks : constant UTF_32_Ranges := (
+ (16#00300#, 16#00357#), -- COMBINING GRAVE ACCENT .. COMBINING RIGHT HALF RING ABOVE
+ (16#0035D#, 16#0036F#), -- COMBINING DOUBLE BREVE .. COMBINING LATIN SMALL LETTER X
+ (16#00483#, 16#00486#), -- COMBINING CYRILLIC TITLO .. COMBINING CYRILLIC PSILI PNEUMATA
+ (16#00591#, 16#005A1#), -- HEBREW ACCENT ETNAHTA .. HEBREW ACCENT PAZER
+ (16#005A3#, 16#005B9#), -- HEBREW ACCENT MUNAH .. HEBREW POINT HOLAM
+ (16#005BB#, 16#005BD#), -- HEBREW POINT QUBUTS .. HEBREW POINT METEG
+ (16#005BF#, 16#005BF#), -- HEBREW POINT RAFE .. HEBREW POINT RAFE
+ (16#005C1#, 16#005C2#), -- HEBREW POINT SHIN DOT .. HEBREW POINT SIN DOT
+ (16#005C4#, 16#005C4#), -- HEBREW MARK UPPER DOT .. HEBREW MARK UPPER DOT
+ (16#00610#, 16#00615#), -- ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM .. ARABIC SMALL HIGH TAH
+ (16#0064B#, 16#00658#), -- ARABIC FATHATAN .. ARABIC MARK NOON GHUNNA
+ (16#00670#, 16#00670#), -- ARABIC LETTER SUPERSCRIPT ALEF .. ARABIC LETTER SUPERSCRIPT ALEF
+ (16#006D6#, 16#006DC#), -- ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA .. ARABIC SMALL HIGH SEEN
+ (16#006DF#, 16#006E4#), -- ARABIC SMALL HIGH ROUNDED ZERO .. ARABIC SMALL HIGH MADDA
+ (16#006E7#, 16#006E8#), -- ARABIC SMALL HIGH YEH .. ARABIC SMALL HIGH NOON
+ (16#006EA#, 16#006ED#), -- ARABIC EMPTY CENTRE LOW STOP .. ARABIC SMALL LOW MEEM
+ (16#00711#, 16#00711#), -- SYRIAC LETTER SUPERSCRIPT ALAPH .. SYRIAC LETTER SUPERSCRIPT ALAPH
+ (16#00730#, 16#0074A#), -- SYRIAC PTHAHA ABOVE .. SYRIAC BARREKH
+ (16#007A6#, 16#007B0#), -- THAANA ABAFILI .. THAANA SUKUN
+ (16#00901#, 16#00903#), -- DEVANAGARI SIGN CANDRABINDU .. DEVANAGARI SIGN VISARGA
+ (16#0093C#, 16#0093C#), -- DEVANAGARI SIGN NUKTA .. DEVANAGARI SIGN NUKTA
+ (16#0093E#, 16#0094D#), -- DEVANAGARI VOWEL SIGN AA .. DEVANAGARI SIGN VIRAMA
+ (16#00951#, 16#00954#), -- DEVANAGARI STRESS SIGN UDATTA .. DEVANAGARI ACUTE ACCENT
+ (16#00962#, 16#00963#), -- DEVANAGARI VOWEL SIGN VOCALIC L .. DEVANAGARI VOWEL SIGN VOCALIC LL
+ (16#00981#, 16#00983#), -- BENGALI SIGN CANDRABINDU .. BENGALI SIGN VISARGA
+ (16#009BC#, 16#009BC#), -- BENGALI SIGN NUKTA .. BENGALI SIGN NUKTA
+ (16#009BE#, 16#009C4#), -- BENGALI VOWEL SIGN AA .. BENGALI VOWEL SIGN VOCALIC RR
+ (16#009C7#, 16#009C8#), -- BENGALI VOWEL SIGN E .. BENGALI VOWEL SIGN AI
+ (16#009CB#, 16#009CD#), -- BENGALI VOWEL SIGN O .. BENGALI SIGN VIRAMA
+ (16#009D7#, 16#009D7#), -- BENGALI AU LENGTH MARK .. BENGALI AU LENGTH MARK
+ (16#009E2#, 16#009E3#), -- BENGALI VOWEL SIGN VOCALIC L .. BENGALI VOWEL SIGN VOCALIC LL
+ (16#00A01#, 16#00A03#), -- GURMUKHI SIGN ADAK BINDI .. GURMUKHI SIGN VISARGA
+ (16#00A3C#, 16#00A3C#), -- GURMUKHI SIGN NUKTA .. GURMUKHI SIGN NUKTA
+ (16#00A3E#, 16#00A42#), -- GURMUKHI VOWEL SIGN AA .. GURMUKHI VOWEL SIGN UU
+ (16#00A47#, 16#00A48#), -- GURMUKHI VOWEL SIGN EE .. GURMUKHI VOWEL SIGN AI
+ (16#00A4B#, 16#00A4D#), -- GURMUKHI VOWEL SIGN OO .. GURMUKHI SIGN VIRAMA
+ (16#00A70#, 16#00A71#), -- GURMUKHI TIPPI .. GURMUKHI ADDAK
+ (16#00A81#, 16#00A83#), -- GUJARATI SIGN CANDRABINDU .. GUJARATI SIGN VISARGA
+ (16#00ABC#, 16#00ABC#), -- GUJARATI SIGN NUKTA .. GUJARATI SIGN NUKTA
+ (16#00ABE#, 16#00AC5#), -- GUJARATI VOWEL SIGN AA .. GUJARATI VOWEL SIGN CANDRA E
+ (16#00AC7#, 16#00AC9#), -- GUJARATI VOWEL SIGN E .. GUJARATI VOWEL SIGN CANDRA O
+ (16#00ACB#, 16#00ACD#), -- GUJARATI VOWEL SIGN O .. GUJARATI SIGN VIRAMA
+ (16#00AE2#, 16#00AE3#), -- GUJARATI VOWEL SIGN VOCALIC L .. GUJARATI VOWEL SIGN VOCALIC LL
+ (16#00B01#, 16#00B03#), -- ORIYA SIGN CANDRABINDU .. ORIYA SIGN VISARGA
+ (16#00B3C#, 16#00B3C#), -- ORIYA SIGN NUKTA .. ORIYA SIGN NUKTA
+ (16#00B3E#, 16#00B43#), -- ORIYA VOWEL SIGN AA .. ORIYA VOWEL SIGN VOCALIC R
+ (16#00B47#, 16#00B48#), -- ORIYA VOWEL SIGN E .. ORIYA VOWEL SIGN AI
+ (16#00B4B#, 16#00B4D#), -- ORIYA VOWEL SIGN O .. ORIYA SIGN VIRAMA
+ (16#00B56#, 16#00B57#), -- ORIYA AI LENGTH MARK .. ORIYA AU LENGTH MARK
+ (16#00B82#, 16#00B82#), -- TAMIL SIGN ANUSVARA .. TAMIL SIGN ANUSVARA
+ (16#00BBE#, 16#00BC2#), -- TAMIL VOWEL SIGN AA .. TAMIL VOWEL SIGN UU
+ (16#00BC6#, 16#00BC8#), -- TAMIL VOWEL SIGN E .. TAMIL VOWEL SIGN AI
+ (16#00BCA#, 16#00BCD#), -- TAMIL VOWEL SIGN O .. TAMIL SIGN VIRAMA
+ (16#00BD7#, 16#00BD7#), -- TAMIL AU LENGTH MARK .. TAMIL AU LENGTH MARK
+ (16#00C01#, 16#00C03#), -- TELUGU SIGN CANDRABINDU .. TELUGU SIGN VISARGA
+ (16#00C3E#, 16#00C44#), -- TELUGU VOWEL SIGN AA .. TELUGU VOWEL SIGN VOCALIC RR
+ (16#00C46#, 16#00C48#), -- TELUGU VOWEL SIGN E .. TELUGU VOWEL SIGN AI
+ (16#00C4A#, 16#00C4D#), -- TELUGU VOWEL SIGN O .. TELUGU SIGN VIRAMA
+ (16#00C55#, 16#00C56#), -- TELUGU LENGTH MARK .. TELUGU AI LENGTH MARK
+ (16#00C82#, 16#00C83#), -- KANNADA SIGN ANUSVARA .. KANNADA SIGN VISARGA
+ (16#00CBC#, 16#00CBC#), -- KANNADA SIGN NUKTA .. KANNADA SIGN NUKTA
+ (16#00CBE#, 16#00CC4#), -- KANNADA VOWEL SIGN AA .. KANNADA VOWEL SIGN VOCALIC RR
+ (16#00CC6#, 16#00CC8#), -- KANNADA VOWEL SIGN E .. KANNADA VOWEL SIGN AI
+ (16#00CCA#, 16#00CCD#), -- KANNADA VOWEL SIGN O .. KANNADA SIGN VIRAMA
+ (16#00CD5#, 16#00CD6#), -- KANNADA LENGTH MARK .. KANNADA AI LENGTH MARK
+ (16#00D02#, 16#00D03#), -- MALAYALAM SIGN ANUSVARA .. MALAYALAM SIGN VISARGA
+ (16#00D3E#, 16#00D43#), -- MALAYALAM VOWEL SIGN AA .. MALAYALAM VOWEL SIGN VOCALIC R
+ (16#00D46#, 16#00D48#), -- MALAYALAM VOWEL SIGN E .. MALAYALAM VOWEL SIGN AI
+ (16#00D4A#, 16#00D4D#), -- MALAYALAM VOWEL SIGN O .. MALAYALAM SIGN VIRAMA
+ (16#00D57#, 16#00D57#), -- MALAYALAM AU LENGTH MARK .. MALAYALAM AU LENGTH MARK
+ (16#00D82#, 16#00D83#), -- SINHALA SIGN ANUSVARAYA .. SINHALA SIGN VISARGAYA
+ (16#00DCA#, 16#00DCA#), -- SINHALA SIGN AL-LAKUNA .. SINHALA SIGN AL-LAKUNA
+ (16#00DCF#, 16#00DD4#), -- SINHALA VOWEL SIGN AELA-PILLA .. SINHALA VOWEL SIGN KETTI PAA-PILLA
+ (16#00DD6#, 16#00DD6#), -- SINHALA VOWEL SIGN DIGA PAA-PILLA .. SINHALA VOWEL SIGN DIGA PAA-PILLA
+ (16#00DD8#, 16#00DDF#), -- SINHALA VOWEL SIGN GAETTA-PILLA .. SINHALA VOWEL SIGN GAYANUKITTA
+ (16#00DF2#, 16#00DF3#), -- SINHALA VOWEL SIGN DIGA GAETTA-PILLA .. SINHALA VOWEL SIGN DIGA GAYANUKITTA
+ (16#00E31#, 16#00E31#), -- THAI CHARACTER MAI HAN-AKAT .. THAI CHARACTER MAI HAN-AKAT
+ (16#00E34#, 16#00E3A#), -- THAI CHARACTER SARA I .. THAI CHARACTER PHINTHU
+ (16#00E47#, 16#00E4E#), -- THAI CHARACTER MAITAIKHU .. THAI CHARACTER YAMAKKAN
+ (16#00EB1#, 16#00EB1#), -- LAO VOWEL SIGN MAI KAN .. LAO VOWEL SIGN MAI KAN
+ (16#00EB4#, 16#00EB9#), -- LAO VOWEL SIGN I .. LAO VOWEL SIGN UU
+ (16#00EBB#, 16#00EBC#), -- LAO VOWEL SIGN MAI KON .. LAO SEMIVOWEL SIGN LO
+ (16#00EC8#, 16#00ECD#), -- LAO TONE MAI EK .. LAO NIGGAHITA
+ (16#00F18#, 16#00F19#), -- TIBETAN ASTROLOGICAL SIGN -KHYUD PA .. TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+ (16#00F35#, 16#00F35#), -- TIBETAN MARK NGAS BZUNG NYI ZLA .. TIBETAN MARK NGAS BZUNG NYI ZLA
+ (16#00F37#, 16#00F37#), -- TIBETAN MARK NGAS BZUNG SGOR RTAGS .. TIBETAN MARK NGAS BZUNG SGOR RTAGS
+ (16#00F39#, 16#00F39#), -- TIBETAN MARK TSA -PHRU .. TIBETAN MARK TSA -PHRU
+ (16#00F3E#, 16#00F3F#), -- TIBETAN SIGN YAR TSHES .. TIBETAN SIGN MAR TSHES
+ (16#00F71#, 16#00F84#), -- TIBETAN VOWEL SIGN AA .. TIBETAN MARK HALANTA
+ (16#00F86#, 16#00F87#), -- TIBETAN SIGN LCI RTAGS .. TIBETAN SIGN YANG RTAGS
+ (16#00F90#, 16#00F97#), -- TIBETAN SUBJOINED LETTER KA .. TIBETAN SUBJOINED LETTER JA
+ (16#00F99#, 16#00FBC#), -- TIBETAN SUBJOINED LETTER NYA .. TIBETAN SUBJOINED LETTER FIXED-FORM RA
+ (16#00FC6#, 16#00FC6#), -- TIBETAN SYMBOL PADMA GDAN .. TIBETAN SYMBOL PADMA GDAN
+ (16#0102C#, 16#01032#), -- MYANMAR VOWEL SIGN AA .. MYANMAR VOWEL SIGN AI
+ (16#01036#, 16#01039#), -- MYANMAR SIGN ANUSVARA .. MYANMAR SIGN VIRAMA
+ (16#01056#, 16#01059#), -- MYANMAR VOWEL SIGN VOCALIC R .. MYANMAR VOWEL SIGN VOCALIC LL
+ (16#01712#, 16#01714#), -- TAGALOG VOWEL SIGN I .. TAGALOG SIGN VIRAMA
+ (16#01732#, 16#01734#), -- HANUNOO VOWEL SIGN I .. HANUNOO SIGN PAMUDPOD
+ (16#01752#, 16#01753#), -- BUHID VOWEL SIGN I .. BUHID VOWEL SIGN U
+ (16#01772#, 16#01773#), -- TAGBANWA VOWEL SIGN I .. TAGBANWA VOWEL SIGN U
+ (16#017B6#, 16#017D3#), -- KHMER VOWEL SIGN AA .. KHMER SIGN BATHAMASAT
+ (16#017DD#, 16#017DD#), -- KHMER SIGN ATTHACAN .. KHMER SIGN ATTHACAN
+ (16#0180B#, 16#0180D#), -- MONGOLIAN FREE VARIATION SELECTOR ONE .. MONGOLIAN FREE VARIATION SELECTOR THREE
+ (16#018A9#, 16#018A9#), -- MONGOLIAN LETTER ALI GALI DAGALGA .. MONGOLIAN LETTER ALI GALI DAGALGA
+ (16#01920#, 16#0192B#), -- LIMBU VOWEL SIGN A .. LIMBU SUBJOINED LETTER WA
+ (16#01930#, 16#0193B#), -- LIMBU SMALL LETTER KA .. LIMBU SIGN SA-I
+ (16#020D0#, 16#020DC#), -- COMBINING LEFT HARPOON ABOVE .. COMBINING FOUR DOTS ABOVE
+ (16#020E1#, 16#020E1#), -- COMBINING LEFT RIGHT ARROW ABOVE .. COMBINING LEFT RIGHT ARROW ABOVE
+ (16#020E5#, 16#020EA#), -- COMBINING REVERSE SOLIDUS OVERLAY .. COMBINING LEFTWARDS ARROW OVERLAY
+ (16#0302A#, 16#0302F#), -- IDEOGRAPHIC LEVEL TONE MARK .. HANGUL DOUBLE DOT TONE MARK
+ (16#03099#, 16#0309A#), -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK .. COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ (16#0FB1E#, 16#0FB1E#), -- HEBREW POINT JUDEO-SPANISH VARIKA .. HEBREW POINT JUDEO-SPANISH VARIKA
+ (16#0FE00#, 16#0FE0F#), -- VARIATION SELECTOR-1 .. VARIATION SELECTOR-16
+ (16#0FE20#, 16#0FE23#), -- COMBINING LIGATURE LEFT HALF .. COMBINING DOUBLE TILDE RIGHT HALF
+ (16#1D165#, 16#1D169#), -- MUSICAL SYMBOL COMBINING STEM .. MUSICAL SYMBOL COMBINING TREMOLO-3
+ (16#1D16D#, 16#1D172#), -- MUSICAL SYMBOL COMBINING AUGMENTATION DOT .. MUSICAL SYMBOL COMBINING FLAG-5
+ (16#1D17B#, 16#1D182#), -- MUSICAL SYMBOL COMBINING ACCENT .. MUSICAL SYMBOL COMBINING LOURE
+ (16#1D185#, 16#1D18B#), -- MUSICAL SYMBOL COMBINING DOIT .. MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+ (16#1D1AA#, 16#1D1AD#), -- MUSICAL SYMBOL COMBINING DOWN BOW .. MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+ (16#E0100#, 16#E01EF#)); -- VARIATION SELECTOR-17 .. VARIATION SELECTOR-256
+
+ -- The following table includes all characters considered non-graphic,
+ -- i.e. all characters from the Unicode table with categories:
+
+ -- Other, Control (Cc)
+ -- Other, Private Use (Co)
+ -- Other, Surrogate (Cs)
+ -- Other, Format (Cf)
+ -- Separator, Line (Zl)
+ -- Separator, Paragraph (Zp)
+
+ -- In addition, the characters FFFE and FFFF are excluded. Note that the
+ -- defined Ada category of format effector is subsumed by the above set
+ -- of Unicode categories.
+
+ UTF_32_Non_Graphic : constant UTF_32_Ranges := (
+ (16#00000#, 16#0001F#), -- <control> .. <control>
+ (16#0007F#, 16#0009F#), -- <control> .. <control>
+ (16#000AD#, 16#000AD#), -- SOFT HYPHEN .. SOFT HYPHEN
+ (16#00600#, 16#00603#), -- ARABIC NUMBER SIGN .. ARABIC SIGN SAFHA
+ (16#006DD#, 16#006DD#), -- ARABIC END OF AYAH .. ARABIC END OF AYAH
+ (16#0070F#, 16#0070F#), -- SYRIAC ABBREVIATION MARK .. SYRIAC ABBREVIATION MARK
+ (16#017B4#, 16#017B5#), -- KHMER VOWEL INHERENT AQ .. KHMER VOWEL INHERENT AA
+ (16#0200C#, 16#0200F#), -- ZERO WIDTH NON-JOINER .. RIGHT-TO-LEFT MARK
+ (16#02028#, 16#0202E#), -- LINE SEPARATOR .. RIGHT-TO-LEFT OVERRIDE
+ (16#02060#, 16#02063#), -- WORD JOINER .. INVISIBLE SEPARATOR
+ (16#0206A#, 16#0206F#), -- INHIBIT SYMMETRIC SWAPPING .. NOMINAL DIGIT SHAPES
+ (16#0D800#, 16#0F8FF#), -- <Non Private Use High Surrogate, First> .. <Private Use, Last>
+ (16#0FEFF#, 16#0FEFF#), -- ZERO WIDTH NO-BREAK SPACE .. ZERO WIDTH NO-BREAK SPACE
+ (16#0FFF9#, 16#0FFFB#), -- INTERLINEAR ANNOTATION ANCHOR .. INTERLINEAR ANNOTATION TERMINATOR
+ (16#0FFFE#, 16#0FFFF#), -- excluded code positions
+ (16#1D173#, 16#1D17A#), -- MUSICAL SYMBOL BEGIN BEAM .. MUSICAL SYMBOL END PHRASE
+ (16#E0001#, 16#E0001#), -- LANGUAGE TAG .. LANGUAGE TAG
+ (16#E0020#, 16#E007F#), -- TAG SPACE .. CANCEL TAG
+ (16#F0000#, 16#FFFFD#), -- <Plane 15 Private Use, First> .. <Plane 15 Private Use, Last>
+ (16#100000#, 16#10FFFD#)); -- <Plane 16 Private Use, First> .. <Plane 16 Private Use, Last>
+
+ -- The following two tables define the mapping to upper case. The first
+ -- table gives the ranges of lower case letters. The corresponding entry
+ -- in Uppercase_Adjust shows the amount to be added (or subtracted) from
+ -- the code value to get the corresponding upper case letter.
+
+ -- Note that this folding is not reversible, for example lower case
+ -- dotless i folds to normal upper case I, and that cannot be reversed.
+
+ Lower_Case_Letters : constant UTF_32_Ranges := (
+ (16#00061#, 16#0007A#), -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+ (16#000B5#, 16#000B5#), -- MICRO SIGN .. MICRO SIGN
+ (16#000E0#, 16#000F6#), -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+ (16#000F8#, 16#000FE#), -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+ (16#000FF#, 16#000FF#), -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+ (16#00101#, 16#00101#), -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+ (16#00103#, 16#00103#), -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+ (16#00105#, 16#00105#), -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+ (16#00107#, 16#00107#), -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+ (16#00109#, 16#00109#), -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+ (16#0010B#, 16#0010B#), -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+ (16#0010D#, 16#0010D#), -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+ (16#0010F#, 16#0010F#), -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+ (16#00111#, 16#00111#), -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+ (16#00113#, 16#00113#), -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+ (16#00115#, 16#00115#), -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+ (16#00117#, 16#00117#), -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+ (16#00119#, 16#00119#), -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+ (16#0011B#, 16#0011B#), -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+ (16#0011D#, 16#0011D#), -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+ (16#0011F#, 16#0011F#), -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+ (16#00121#, 16#00121#), -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+ (16#00123#, 16#00123#), -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+ (16#00125#, 16#00125#), -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+ (16#00127#, 16#00127#), -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+ (16#00129#, 16#00129#), -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+ (16#0012B#, 16#0012B#), -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+ (16#0012D#, 16#0012D#), -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+ (16#0012F#, 16#0012F#), -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+ (16#00131#, 16#00131#), -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+ (16#00133#, 16#00133#), -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+ (16#00135#, 16#00135#), -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+ (16#00137#, 16#00137#), -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+ (16#0013A#, 16#0013A#), -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+ (16#0013C#, 16#0013C#), -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+ (16#0013E#, 16#0013E#), -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+ (16#00140#, 16#00140#), -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+ (16#00142#, 16#00142#), -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+ (16#00144#, 16#00144#), -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+ (16#00146#, 16#00146#), -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+ (16#00148#, 16#00148#), -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+ (16#0014B#, 16#0014B#), -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+ (16#0014D#, 16#0014D#), -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+ (16#0014F#, 16#0014F#), -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+ (16#00151#, 16#00151#), -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ (16#00153#, 16#00153#), -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+ (16#00155#, 16#00155#), -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+ (16#00157#, 16#00157#), -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+ (16#00159#, 16#00159#), -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+ (16#0015B#, 16#0015B#), -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+ (16#0015D#, 16#0015D#), -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+ (16#0015F#, 16#0015F#), -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+ (16#00161#, 16#00161#), -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+ (16#00163#, 16#00163#), -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+ (16#00165#, 16#00165#), -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+ (16#00167#, 16#00167#), -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+ (16#00169#, 16#00169#), -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+ (16#0016B#, 16#0016B#), -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+ (16#0016D#, 16#0016D#), -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+ (16#0016F#, 16#0016F#), -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+ (16#00171#, 16#00171#), -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ (16#00173#, 16#00173#), -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+ (16#00175#, 16#00175#), -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+ (16#00177#, 16#00177#), -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ (16#0017A#, 16#0017A#), -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+ (16#0017C#, 16#0017C#), -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+ (16#0017E#, 16#0017E#), -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+ (16#0017F#, 16#0017F#), -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+ (16#00183#, 16#00183#), -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+ (16#00185#, 16#00185#), -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+ (16#00188#, 16#00188#), -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+ (16#0018C#, 16#0018C#), -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+ (16#00192#, 16#00192#), -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+ (16#00195#, 16#00195#), -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+ (16#00199#, 16#00199#), -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+ (16#0019E#, 16#0019E#), -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+ (16#001A1#, 16#001A1#), -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+ (16#001A3#, 16#001A3#), -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+ (16#001A5#, 16#001A5#), -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+ (16#001A8#, 16#001A8#), -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+ (16#001AD#, 16#001AD#), -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+ (16#001B0#, 16#001B0#), -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+ (16#001B4#, 16#001B4#), -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+ (16#001B6#, 16#001B6#), -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+ (16#001B9#, 16#001B9#), -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+ (16#001BD#, 16#001BD#), -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+ (16#001BF#, 16#001BF#), -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+ (16#001C5#, 16#001C5#), -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ (16#001C6#, 16#001C6#), -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+ (16#001C8#, 16#001C8#), -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ (16#001C9#, 16#001C9#), -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+ (16#001CB#, 16#001CB#), -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ (16#001CC#, 16#001CC#), -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+ (16#001CE#, 16#001CE#), -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+ (16#001D0#, 16#001D0#), -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+ (16#001D2#, 16#001D2#), -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+ (16#001D4#, 16#001D4#), -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+ (16#001D6#, 16#001D6#), -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ (16#001D8#, 16#001D8#), -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ (16#001DA#, 16#001DA#), -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ (16#001DC#, 16#001DC#), -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ (16#001DD#, 16#001DD#), -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+ (16#001DF#, 16#001DF#), -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+ (16#001E1#, 16#001E1#), -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ (16#001E3#, 16#001E3#), -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+ (16#001E5#, 16#001E5#), -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+ (16#001E7#, 16#001E7#), -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+ (16#001E9#, 16#001E9#), -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+ (16#001EB#, 16#001EB#), -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+ (16#001ED#, 16#001ED#), -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ (16#001EF#, 16#001EF#), -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+ (16#001F2#, 16#001F2#), -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ (16#001F3#, 16#001F3#), -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+ (16#001F5#, 16#001F5#), -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+ (16#001F9#, 16#001F9#), -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+ (16#001FB#, 16#001FB#), -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+ (16#001FD#, 16#001FD#), -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+ (16#001FF#, 16#001FF#), -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ (16#00201#, 16#00201#), -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ (16#00203#, 16#00203#), -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+ (16#00205#, 16#00205#), -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ (16#00207#, 16#00207#), -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+ (16#00209#, 16#00209#), -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ (16#0020B#, 16#0020B#), -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+ (16#0020D#, 16#0020D#), -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ (16#0020F#, 16#0020F#), -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+ (16#00211#, 16#00211#), -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ (16#00213#, 16#00213#), -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+ (16#00215#, 16#00215#), -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ (16#00217#, 16#00217#), -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+ (16#00219#, 16#00219#), -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+ (16#0021B#, 16#0021B#), -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+ (16#0021D#, 16#0021D#), -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+ (16#0021F#, 16#0021F#), -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+ (16#00223#, 16#00223#), -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+ (16#00225#, 16#00225#), -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+ (16#00227#, 16#00227#), -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+ (16#00229#, 16#00229#), -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+ (16#0022B#, 16#0022B#), -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+ (16#0022D#, 16#0022D#), -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+ (16#0022F#, 16#0022F#), -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+ (16#00231#, 16#00231#), -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+ (16#00233#, 16#00233#), -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+ (16#00253#, 16#00253#), -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+ (16#00254#, 16#00254#), -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+ (16#00256#, 16#00257#), -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+ (16#00259#, 16#00259#), -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+ (16#0025B#, 16#0025B#), -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+ (16#00260#, 16#00260#), -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+ (16#00263#, 16#00263#), -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+ (16#00268#, 16#00268#), -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+ (16#00269#, 16#00269#), -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+ (16#0026F#, 16#0026F#), -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+ (16#00272#, 16#00272#), -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+ (16#00275#, 16#00275#), -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+ (16#00280#, 16#00280#), -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+ (16#00283#, 16#00283#), -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+ (16#00288#, 16#00288#), -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+ (16#0028A#, 16#0028B#), -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+ (16#00292#, 16#00292#), -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+ (16#003AC#, 16#003AC#), -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+ (16#003AD#, 16#003AF#), -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+ (16#003B1#, 16#003C1#), -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+ (16#003C2#, 16#003C2#), -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+ (16#003C3#, 16#003CB#), -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ (16#003CC#, 16#003CC#), -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+ (16#003CD#, 16#003CE#), -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+ (16#003D0#, 16#003D0#), -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+ (16#003D1#, 16#003D1#), -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+ (16#003D5#, 16#003D5#), -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+ (16#003D6#, 16#003D6#), -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+ (16#003D9#, 16#003D9#), -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+ (16#003DB#, 16#003DB#), -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+ (16#003DD#, 16#003DD#), -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+ (16#003DF#, 16#003DF#), -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+ (16#003E1#, 16#003E1#), -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+ (16#003E3#, 16#003E3#), -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+ (16#003E5#, 16#003E5#), -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+ (16#003E7#, 16#003E7#), -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+ (16#003E9#, 16#003E9#), -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+ (16#003EB#, 16#003EB#), -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+ (16#003ED#, 16#003ED#), -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+ (16#003EF#, 16#003EF#), -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+ (16#003F0#, 16#003F0#), -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+ (16#003F1#, 16#003F1#), -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+ (16#003F2#, 16#003F2#), -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+ (16#003F5#, 16#003F5#), -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+ (16#00430#, 16#0044F#), -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+ (16#00450#, 16#0045F#), -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+ (16#00461#, 16#00461#), -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+ (16#00463#, 16#00463#), -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+ (16#00465#, 16#00465#), -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+ (16#00467#, 16#00467#), -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+ (16#00469#, 16#00469#), -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+ (16#0046B#, 16#0046B#), -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+ (16#0046D#, 16#0046D#), -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+ (16#0046F#, 16#0046F#), -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+ (16#00471#, 16#00471#), -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+ (16#00473#, 16#00473#), -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+ (16#00475#, 16#00475#), -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+ (16#00477#, 16#00477#), -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ (16#00479#, 16#00479#), -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+ (16#0047B#, 16#0047B#), -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+ (16#0047D#, 16#0047D#), -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+ (16#0047F#, 16#0047F#), -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+ (16#00481#, 16#00481#), -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+ (16#0048B#, 16#0048B#), -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+ (16#0048D#, 16#0048D#), -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+ (16#0048F#, 16#0048F#), -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+ (16#00491#, 16#00491#), -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+ (16#00493#, 16#00493#), -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+ (16#00495#, 16#00495#), -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+ (16#00497#, 16#00497#), -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+ (16#00499#, 16#00499#), -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+ (16#0049B#, 16#0049B#), -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+ (16#0049D#, 16#0049D#), -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+ (16#0049F#, 16#0049F#), -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+ (16#004A1#, 16#004A1#), -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+ (16#004A3#, 16#004A3#), -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+ (16#004A5#, 16#004A5#), -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+ (16#004A7#, 16#004A7#), -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+ (16#004A9#, 16#004A9#), -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+ (16#004AB#, 16#004AB#), -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+ (16#004AD#, 16#004AD#), -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+ (16#004AF#, 16#004AF#), -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+ (16#004B1#, 16#004B1#), -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+ (16#004B3#, 16#004B3#), -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+ (16#004B5#, 16#004B5#), -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+ (16#004B7#, 16#004B7#), -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+ (16#004B9#, 16#004B9#), -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+ (16#004BB#, 16#004BB#), -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+ (16#004BD#, 16#004BD#), -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+ (16#004BF#, 16#004BF#), -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+ (16#004C2#, 16#004C2#), -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+ (16#004C4#, 16#004C4#), -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+ (16#004C6#, 16#004C6#), -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+ (16#004C8#, 16#004C8#), -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+ (16#004CA#, 16#004CA#), -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+ (16#004CC#, 16#004CC#), -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+ (16#004CE#, 16#004CE#), -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+ (16#004D1#, 16#004D1#), -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+ (16#004D3#, 16#004D3#), -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+ (16#004D5#, 16#004D5#), -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+ (16#004D7#, 16#004D7#), -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+ (16#004D9#, 16#004D9#), -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+ (16#004DB#, 16#004DB#), -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+ (16#004DD#, 16#004DD#), -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+ (16#004DF#, 16#004DF#), -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+ (16#004E1#, 16#004E1#), -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+ (16#004E3#, 16#004E3#), -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+ (16#004E5#, 16#004E5#), -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+ (16#004E7#, 16#004E7#), -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+ (16#004E9#, 16#004E9#), -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+ (16#004EB#, 16#004EB#), -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+ (16#004ED#, 16#004ED#), -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+ (16#004EF#, 16#004EF#), -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+ (16#004F1#, 16#004F1#), -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+ (16#004F3#, 16#004F3#), -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+ (16#004F5#, 16#004F5#), -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ (16#004F9#, 16#004F9#), -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ (16#00501#, 16#00501#), -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+ (16#00503#, 16#00503#), -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+ (16#00505#, 16#00505#), -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+ (16#00507#, 16#00507#), -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+ (16#00509#, 16#00509#), -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+ (16#0050B#, 16#0050B#), -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+ (16#0050D#, 16#0050D#), -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+ (16#0050F#, 16#0050F#), -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+ (16#00561#, 16#00586#), -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+ (16#01E01#, 16#01E01#), -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+ (16#01E03#, 16#01E03#), -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+ (16#01E05#, 16#01E05#), -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+ (16#01E07#, 16#01E07#), -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+ (16#01E09#, 16#01E09#), -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+ (16#01E0B#, 16#01E0B#), -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+ (16#01E0D#, 16#01E0D#), -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+ (16#01E0F#, 16#01E0F#), -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+ (16#01E11#, 16#01E11#), -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+ (16#01E13#, 16#01E13#), -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+ (16#01E15#, 16#01E15#), -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+ (16#01E17#, 16#01E17#), -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+ (16#01E19#, 16#01E19#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+ (16#01E1B#, 16#01E1B#), -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+ (16#01E1D#, 16#01E1D#), -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+ (16#01E1F#, 16#01E1F#), -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+ (16#01E21#, 16#01E21#), -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+ (16#01E23#, 16#01E23#), -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+ (16#01E25#, 16#01E25#), -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+ (16#01E27#, 16#01E27#), -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+ (16#01E29#, 16#01E29#), -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+ (16#01E2B#, 16#01E2B#), -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+ (16#01E2D#, 16#01E2D#), -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+ (16#01E2F#, 16#01E2F#), -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+ (16#01E31#, 16#01E31#), -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+ (16#01E33#, 16#01E33#), -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+ (16#01E35#, 16#01E35#), -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+ (16#01E37#, 16#01E37#), -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+ (16#01E39#, 16#01E39#), -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+ (16#01E3B#, 16#01E3B#), -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+ (16#01E3D#, 16#01E3D#), -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+ (16#01E3F#, 16#01E3F#), -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+ (16#01E41#, 16#01E41#), -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+ (16#01E43#, 16#01E43#), -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+ (16#01E45#, 16#01E45#), -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+ (16#01E47#, 16#01E47#), -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+ (16#01E49#, 16#01E49#), -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+ (16#01E4B#, 16#01E4B#), -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+ (16#01E4D#, 16#01E4D#), -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+ (16#01E4F#, 16#01E4F#), -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+ (16#01E51#, 16#01E51#), -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+ (16#01E53#, 16#01E53#), -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+ (16#01E55#, 16#01E55#), -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+ (16#01E57#, 16#01E57#), -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+ (16#01E59#, 16#01E59#), -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+ (16#01E5B#, 16#01E5B#), -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+ (16#01E5D#, 16#01E5D#), -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+ (16#01E5F#, 16#01E5F#), -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+ (16#01E61#, 16#01E61#), -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+ (16#01E63#, 16#01E63#), -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+ (16#01E65#, 16#01E65#), -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+ (16#01E67#, 16#01E67#), -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+ (16#01E69#, 16#01E69#), -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+ (16#01E6B#, 16#01E6B#), -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+ (16#01E6D#, 16#01E6D#), -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+ (16#01E6F#, 16#01E6F#), -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+ (16#01E71#, 16#01E71#), -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+ (16#01E73#, 16#01E73#), -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+ (16#01E75#, 16#01E75#), -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+ (16#01E77#, 16#01E77#), -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+ (16#01E79#, 16#01E79#), -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+ (16#01E7B#, 16#01E7B#), -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+ (16#01E7D#, 16#01E7D#), -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+ (16#01E7F#, 16#01E7F#), -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+ (16#01E81#, 16#01E81#), -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+ (16#01E83#, 16#01E83#), -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+ (16#01E85#, 16#01E85#), -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+ (16#01E87#, 16#01E87#), -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+ (16#01E89#, 16#01E89#), -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+ (16#01E8B#, 16#01E8B#), -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+ (16#01E8D#, 16#01E8D#), -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+ (16#01E8F#, 16#01E8F#), -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+ (16#01E91#, 16#01E91#), -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+ (16#01E93#, 16#01E93#), -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+ (16#01E95#, 16#01E95#), -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+ (16#01E9B#, 16#01E9B#), -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ (16#01EA1#, 16#01EA1#), -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+ (16#01EA3#, 16#01EA3#), -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+ (16#01EA5#, 16#01EA5#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+ (16#01EA7#, 16#01EA7#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+ (16#01EA9#, 16#01EA9#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ (16#01EAB#, 16#01EAB#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+ (16#01EAD#, 16#01EAD#), -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ (16#01EAF#, 16#01EAF#), -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+ (16#01EB1#, 16#01EB1#), -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+ (16#01EB3#, 16#01EB3#), -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+ (16#01EB5#, 16#01EB5#), -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+ (16#01EB7#, 16#01EB7#), -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+ (16#01EB9#, 16#01EB9#), -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+ (16#01EBB#, 16#01EBB#), -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+ (16#01EBD#, 16#01EBD#), -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+ (16#01EBF#, 16#01EBF#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+ (16#01EC1#, 16#01EC1#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ (16#01EC3#, 16#01EC3#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ (16#01EC5#, 16#01EC5#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+ (16#01EC7#, 16#01EC7#), -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ (16#01EC9#, 16#01EC9#), -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+ (16#01ECB#, 16#01ECB#), -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+ (16#01ECD#, 16#01ECD#), -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+ (16#01ECF#, 16#01ECF#), -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+ (16#01ED1#, 16#01ED1#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+ (16#01ED3#, 16#01ED3#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+ (16#01ED5#, 16#01ED5#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ (16#01ED7#, 16#01ED7#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+ (16#01ED9#, 16#01ED9#), -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ (16#01EDB#, 16#01EDB#), -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+ (16#01EDD#, 16#01EDD#), -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+ (16#01EDF#, 16#01EDF#), -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+ (16#01EE1#, 16#01EE1#), -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+ (16#01EE3#, 16#01EE3#), -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+ (16#01EE5#, 16#01EE5#), -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+ (16#01EE7#, 16#01EE7#), -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+ (16#01EE9#, 16#01EE9#), -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+ (16#01EEB#, 16#01EEB#), -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+ (16#01EED#, 16#01EED#), -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+ (16#01EEF#, 16#01EEF#), -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+ (16#01EF1#, 16#01EF1#), -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+ (16#01EF3#, 16#01EF3#), -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+ (16#01EF5#, 16#01EF5#), -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+ (16#01EF7#, 16#01EF7#), -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+ (16#01EF9#, 16#01EF9#), -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+ (16#01F00#, 16#01F07#), -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ (16#01F10#, 16#01F15#), -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ (16#01F20#, 16#01F27#), -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+ (16#01F30#, 16#01F37#), -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+ (16#01F40#, 16#01F45#), -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ (16#01F51#, 16#01F51#), -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+ (16#01F53#, 16#01F53#), -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+ (16#01F55#, 16#01F55#), -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+ (16#01F57#, 16#01F57#), -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ (16#01F60#, 16#01F67#), -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ (16#01F70#, 16#01F71#), -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+ (16#01F72#, 16#01F75#), -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+ (16#01F76#, 16#01F77#), -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+ (16#01F78#, 16#01F79#), -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+ (16#01F7A#, 16#01F7B#), -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+ (16#01F7C#, 16#01F7D#), -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+ (16#01F80#, 16#01F87#), -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ (16#01F90#, 16#01F97#), -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ (16#01FA0#, 16#01FA7#), -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ (16#01FB0#, 16#01FB1#), -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+ (16#01FB3#, 16#01FB3#), -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ (16#01FBE#, 16#01FBE#), -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+ (16#01FC3#, 16#01FC3#), -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ (16#01FD0#, 16#01FD1#), -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+ (16#01FE0#, 16#01FE1#), -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+ (16#01FE5#, 16#01FE5#), -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+ (16#01FF3#, 16#01FF3#), -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ (16#0FF41#, 16#0FF5A#), -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+ (16#10428#, 16#1044D#)); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+
+ Upper_Case_Adjust : constant array
+ (Lower_Case_Letters'Range) of Char_Code'Base := (
+ -32, -- LATIN SMALL LETTER A .. LATIN SMALL LETTER Z
+ 743, -- MICRO SIGN .. MICRO SIGN
+ -32, -- LATIN SMALL LETTER A WITH GRAVE .. LATIN SMALL LETTER O WITH DIAERESIS
+ -32, -- LATIN SMALL LETTER O WITH STROKE .. LATIN SMALL LETTER THORN
+ 121, -- LATIN SMALL LETTER Y WITH DIAERESIS .. LATIN SMALL LETTER Y WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER A WITH MACRON .. LATIN SMALL LETTER A WITH MACRON
+ -1, -- LATIN SMALL LETTER A WITH BREVE .. LATIN SMALL LETTER A WITH BREVE
+ -1, -- LATIN SMALL LETTER A WITH OGONEK .. LATIN SMALL LETTER A WITH OGONEK
+ -1, -- LATIN SMALL LETTER C WITH ACUTE .. LATIN SMALL LETTER C WITH ACUTE
+ -1, -- LATIN SMALL LETTER C WITH CIRCUMFLEX .. LATIN SMALL LETTER C WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER C WITH DOT ABOVE .. LATIN SMALL LETTER C WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER C WITH CARON .. LATIN SMALL LETTER C WITH CARON
+ -1, -- LATIN SMALL LETTER D WITH CARON .. LATIN SMALL LETTER D WITH CARON
+ -1, -- LATIN SMALL LETTER D WITH STROKE .. LATIN SMALL LETTER D WITH STROKE
+ -1, -- LATIN SMALL LETTER E WITH MACRON .. LATIN SMALL LETTER E WITH MACRON
+ -1, -- LATIN SMALL LETTER E WITH BREVE .. LATIN SMALL LETTER E WITH BREVE
+ -1, -- LATIN SMALL LETTER E WITH DOT ABOVE .. LATIN SMALL LETTER E WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER E WITH OGONEK .. LATIN SMALL LETTER E WITH OGONEK
+ -1, -- LATIN SMALL LETTER E WITH CARON .. LATIN SMALL LETTER E WITH CARON
+ -1, -- LATIN SMALL LETTER G WITH CIRCUMFLEX .. LATIN SMALL LETTER G WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER G WITH BREVE .. LATIN SMALL LETTER G WITH BREVE
+ -1, -- LATIN SMALL LETTER G WITH DOT ABOVE .. LATIN SMALL LETTER G WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER G WITH CEDILLA .. LATIN SMALL LETTER G WITH CEDILLA
+ -1, -- LATIN SMALL LETTER H WITH CIRCUMFLEX .. LATIN SMALL LETTER H WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER H WITH STROKE .. LATIN SMALL LETTER H WITH STROKE
+ -1, -- LATIN SMALL LETTER I WITH TILDE .. LATIN SMALL LETTER I WITH TILDE
+ -1, -- LATIN SMALL LETTER I WITH MACRON .. LATIN SMALL LETTER I WITH MACRON
+ -1, -- LATIN SMALL LETTER I WITH BREVE .. LATIN SMALL LETTER I WITH BREVE
+ -1, -- LATIN SMALL LETTER I WITH OGONEK .. LATIN SMALL LETTER I WITH OGONEK
+ -232, -- LATIN SMALL LETTER DOTLESS I .. LATIN SMALL LETTER DOTLESS I
+ -1, -- LATIN SMALL LIGATURE IJ .. LATIN SMALL LIGATURE IJ
+ -1, -- LATIN SMALL LETTER J WITH CIRCUMFLEX .. LATIN SMALL LETTER J WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER K WITH CEDILLA .. LATIN SMALL LETTER K WITH CEDILLA
+ -1, -- LATIN SMALL LETTER L WITH ACUTE .. LATIN SMALL LETTER L WITH ACUTE
+ -1, -- LATIN SMALL LETTER L WITH CEDILLA .. LATIN SMALL LETTER L WITH CEDILLA
+ -1, -- LATIN SMALL LETTER L WITH CARON .. LATIN SMALL LETTER L WITH CARON
+ -1, -- LATIN SMALL LETTER L WITH MIDDLE DOT .. LATIN SMALL LETTER L WITH MIDDLE DOT
+ -1, -- LATIN SMALL LETTER L WITH STROKE .. LATIN SMALL LETTER L WITH STROKE
+ -1, -- LATIN SMALL LETTER N WITH ACUTE .. LATIN SMALL LETTER N WITH ACUTE
+ -1, -- LATIN SMALL LETTER N WITH CEDILLA .. LATIN SMALL LETTER N WITH CEDILLA
+ -1, -- LATIN SMALL LETTER N WITH CARON .. LATIN SMALL LETTER N WITH CARON
+ -1, -- LATIN SMALL LETTER ENG .. LATIN SMALL LETTER ENG
+ -1, -- LATIN SMALL LETTER O WITH MACRON .. LATIN SMALL LETTER O WITH MACRON
+ -1, -- LATIN SMALL LETTER O WITH BREVE .. LATIN SMALL LETTER O WITH BREVE
+ -1, -- LATIN SMALL LETTER O WITH DOUBLE ACUTE .. LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ -1, -- LATIN SMALL LIGATURE OE .. LATIN SMALL LIGATURE OE
+ -1, -- LATIN SMALL LETTER R WITH ACUTE .. LATIN SMALL LETTER R WITH ACUTE
+ -1, -- LATIN SMALL LETTER R WITH CEDILLA .. LATIN SMALL LETTER R WITH CEDILLA
+ -1, -- LATIN SMALL LETTER R WITH CARON .. LATIN SMALL LETTER R WITH CARON
+ -1, -- LATIN SMALL LETTER S WITH ACUTE .. LATIN SMALL LETTER S WITH ACUTE
+ -1, -- LATIN SMALL LETTER S WITH CIRCUMFLEX .. LATIN SMALL LETTER S WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER S WITH CEDILLA .. LATIN SMALL LETTER S WITH CEDILLA
+ -1, -- LATIN SMALL LETTER S WITH CARON .. LATIN SMALL LETTER S WITH CARON
+ -1, -- LATIN SMALL LETTER T WITH CEDILLA .. LATIN SMALL LETTER T WITH CEDILLA
+ -1, -- LATIN SMALL LETTER T WITH CARON .. LATIN SMALL LETTER T WITH CARON
+ -1, -- LATIN SMALL LETTER T WITH STROKE .. LATIN SMALL LETTER T WITH STROKE
+ -1, -- LATIN SMALL LETTER U WITH TILDE .. LATIN SMALL LETTER U WITH TILDE
+ -1, -- LATIN SMALL LETTER U WITH MACRON .. LATIN SMALL LETTER U WITH MACRON
+ -1, -- LATIN SMALL LETTER U WITH BREVE .. LATIN SMALL LETTER U WITH BREVE
+ -1, -- LATIN SMALL LETTER U WITH RING ABOVE .. LATIN SMALL LETTER U WITH RING ABOVE
+ -1, -- LATIN SMALL LETTER U WITH DOUBLE ACUTE .. LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ -1, -- LATIN SMALL LETTER U WITH OGONEK .. LATIN SMALL LETTER U WITH OGONEK
+ -1, -- LATIN SMALL LETTER W WITH CIRCUMFLEX .. LATIN SMALL LETTER W WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER Y WITH CIRCUMFLEX .. LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER Z WITH ACUTE .. LATIN SMALL LETTER Z WITH ACUTE
+ -1, -- LATIN SMALL LETTER Z WITH DOT ABOVE .. LATIN SMALL LETTER Z WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER Z WITH CARON .. LATIN SMALL LETTER Z WITH CARON
+ -300, -- LATIN SMALL LETTER LONG S .. LATIN SMALL LETTER LONG S
+ -1, -- LATIN SMALL LETTER B WITH TOPBAR .. LATIN SMALL LETTER B WITH TOPBAR
+ -1, -- LATIN SMALL LETTER TONE SIX .. LATIN SMALL LETTER TONE SIX
+ -1, -- LATIN SMALL LETTER C WITH HOOK .. LATIN SMALL LETTER C WITH HOOK
+ -1, -- LATIN SMALL LETTER D WITH TOPBAR .. LATIN SMALL LETTER D WITH TOPBAR
+ -1, -- LATIN SMALL LETTER F WITH HOOK .. LATIN SMALL LETTER F WITH HOOK
+ 97, -- LATIN SMALL LETTER HV .. LATIN SMALL LETTER HV
+ -1, -- LATIN SMALL LETTER K WITH HOOK .. LATIN SMALL LETTER K WITH HOOK
+ 130, -- LATIN SMALL LETTER N WITH LONG RIGHT LEG .. LATIN SMALL LETTER N WITH LONG RIGHT LEG
+ -1, -- LATIN SMALL LETTER O WITH HORN .. LATIN SMALL LETTER O WITH HORN
+ -1, -- LATIN SMALL LETTER OI .. LATIN SMALL LETTER OI
+ -1, -- LATIN SMALL LETTER P WITH HOOK .. LATIN SMALL LETTER P WITH HOOK
+ -1, -- LATIN SMALL LETTER TONE TWO .. LATIN SMALL LETTER TONE TWO
+ -1, -- LATIN SMALL LETTER T WITH HOOK .. LATIN SMALL LETTER T WITH HOOK
+ -1, -- LATIN SMALL LETTER U WITH HORN .. LATIN SMALL LETTER U WITH HORN
+ -1, -- LATIN SMALL LETTER Y WITH HOOK .. LATIN SMALL LETTER Y WITH HOOK
+ -1, -- LATIN SMALL LETTER Z WITH STROKE .. LATIN SMALL LETTER Z WITH STROKE
+ -1, -- LATIN SMALL LETTER EZH REVERSED .. LATIN SMALL LETTER EZH REVERSED
+ -1, -- LATIN SMALL LETTER TONE FIVE .. LATIN SMALL LETTER TONE FIVE
+ 56, -- LATIN LETTER WYNN .. LATIN LETTER WYNN
+ -1, -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ -2, -- LATIN SMALL LETTER DZ WITH CARON .. LATIN SMALL LETTER DZ WITH CARON
+ -1, -- LATIN CAPITAL LETTER L WITH SMALL LETTER J .. LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ -2, -- LATIN SMALL LETTER LJ .. LATIN SMALL LETTER LJ
+ -1, -- LATIN CAPITAL LETTER N WITH SMALL LETTER J .. LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ -2, -- LATIN SMALL LETTER NJ .. LATIN SMALL LETTER NJ
+ -1, -- LATIN SMALL LETTER A WITH CARON .. LATIN SMALL LETTER A WITH CARON
+ -1, -- LATIN SMALL LETTER I WITH CARON .. LATIN SMALL LETTER I WITH CARON
+ -1, -- LATIN SMALL LETTER O WITH CARON .. LATIN SMALL LETTER O WITH CARON
+ -1, -- LATIN SMALL LETTER U WITH CARON .. LATIN SMALL LETTER U WITH CARON
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND CARON .. LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE .. LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ -79, -- LATIN SMALL LETTER TURNED E .. LATIN SMALL LETTER TURNED E
+ -1, -- LATIN SMALL LETTER A WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+ -1, -- LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ -1, -- LATIN SMALL LETTER AE WITH MACRON .. LATIN SMALL LETTER AE WITH MACRON
+ -1, -- LATIN SMALL LETTER G WITH STROKE .. LATIN SMALL LETTER G WITH STROKE
+ -1, -- LATIN SMALL LETTER G WITH CARON .. LATIN SMALL LETTER G WITH CARON
+ -1, -- LATIN SMALL LETTER K WITH CARON .. LATIN SMALL LETTER K WITH CARON
+ -1, -- LATIN SMALL LETTER O WITH OGONEK .. LATIN SMALL LETTER O WITH OGONEK
+ -1, -- LATIN SMALL LETTER O WITH OGONEK AND MACRON .. LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ -1, -- LATIN SMALL LETTER EZH WITH CARON .. LATIN SMALL LETTER EZH WITH CARON
+ -1, -- LATIN CAPITAL LETTER D WITH SMALL LETTER Z .. LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ -2, -- LATIN SMALL LETTER DZ .. LATIN SMALL LETTER DZ
+ -1, -- LATIN SMALL LETTER G WITH ACUTE .. LATIN SMALL LETTER G WITH ACUTE
+ -1, -- LATIN SMALL LETTER N WITH GRAVE .. LATIN SMALL LETTER N WITH GRAVE
+ -1, -- LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE .. LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+ -1, -- LATIN SMALL LETTER AE WITH ACUTE .. LATIN SMALL LETTER AE WITH ACUTE
+ -1, -- LATIN SMALL LETTER O WITH STROKE AND ACUTE .. LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ -1, -- LATIN SMALL LETTER A WITH DOUBLE GRAVE .. LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER A WITH INVERTED BREVE .. LATIN SMALL LETTER A WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER E WITH DOUBLE GRAVE .. LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER E WITH INVERTED BREVE .. LATIN SMALL LETTER E WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER I WITH DOUBLE GRAVE .. LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER I WITH INVERTED BREVE .. LATIN SMALL LETTER I WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER O WITH DOUBLE GRAVE .. LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER O WITH INVERTED BREVE .. LATIN SMALL LETTER O WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER R WITH DOUBLE GRAVE .. LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER R WITH INVERTED BREVE .. LATIN SMALL LETTER R WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER U WITH DOUBLE GRAVE .. LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ -1, -- LATIN SMALL LETTER U WITH INVERTED BREVE .. LATIN SMALL LETTER U WITH INVERTED BREVE
+ -1, -- LATIN SMALL LETTER S WITH COMMA BELOW .. LATIN SMALL LETTER S WITH COMMA BELOW
+ -1, -- LATIN SMALL LETTER T WITH COMMA BELOW .. LATIN SMALL LETTER T WITH COMMA BELOW
+ -1, -- LATIN SMALL LETTER YOGH .. LATIN SMALL LETTER YOGH
+ -1, -- LATIN SMALL LETTER H WITH CARON .. LATIN SMALL LETTER H WITH CARON
+ -1, -- LATIN SMALL LETTER OU .. LATIN SMALL LETTER OU
+ -1, -- LATIN SMALL LETTER Z WITH HOOK .. LATIN SMALL LETTER Z WITH HOOK
+ -1, -- LATIN SMALL LETTER A WITH DOT ABOVE .. LATIN SMALL LETTER A WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER E WITH CEDILLA .. LATIN SMALL LETTER E WITH CEDILLA
+ -1, -- LATIN SMALL LETTER O WITH DIAERESIS AND MACRON .. LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+ -1, -- LATIN SMALL LETTER O WITH TILDE AND MACRON .. LATIN SMALL LETTER O WITH TILDE AND MACRON
+ -1, -- LATIN SMALL LETTER O WITH DOT ABOVE .. LATIN SMALL LETTER O WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON .. LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+ -1, -- LATIN SMALL LETTER Y WITH MACRON .. LATIN SMALL LETTER Y WITH MACRON
+ -210, -- LATIN SMALL LETTER B WITH HOOK .. LATIN SMALL LETTER B WITH HOOK
+ -206, -- LATIN SMALL LETTER OPEN O .. LATIN SMALL LETTER OPEN O
+ -205, -- LATIN SMALL LETTER D WITH TAIL .. LATIN SMALL LETTER D WITH HOOK
+ -202, -- LATIN SMALL LETTER SCHWA .. LATIN SMALL LETTER SCHWA
+ -203, -- LATIN SMALL LETTER OPEN E .. LATIN SMALL LETTER OPEN E
+ -205, -- LATIN SMALL LETTER G WITH HOOK .. LATIN SMALL LETTER G WITH HOOK
+ -207, -- LATIN SMALL LETTER GAMMA .. LATIN SMALL LETTER GAMMA
+ -209, -- LATIN SMALL LETTER I WITH STROKE .. LATIN SMALL LETTER I WITH STROKE
+ -211, -- LATIN SMALL LETTER IOTA .. LATIN SMALL LETTER IOTA
+ -211, -- LATIN SMALL LETTER TURNED M .. LATIN SMALL LETTER TURNED M
+ -213, -- LATIN SMALL LETTER N WITH LEFT HOOK .. LATIN SMALL LETTER N WITH LEFT HOOK
+ -214, -- LATIN SMALL LETTER BARRED O .. LATIN SMALL LETTER BARRED O
+ -218, -- LATIN LETTER SMALL CAPITAL R .. LATIN LETTER SMALL CAPITAL R
+ -218, -- LATIN SMALL LETTER ESH .. LATIN SMALL LETTER ESH
+ -218, -- LATIN SMALL LETTER T WITH RETROFLEX HOOK .. LATIN SMALL LETTER T WITH RETROFLEX HOOK
+ -217, -- LATIN SMALL LETTER UPSILON .. LATIN SMALL LETTER V WITH HOOK
+ -219, -- LATIN SMALL LETTER EZH .. LATIN SMALL LETTER EZH
+ -38, -- GREEK SMALL LETTER ALPHA WITH TONOS .. GREEK SMALL LETTER ALPHA WITH TONOS
+ -37, -- GREEK SMALL LETTER EPSILON WITH TONOS .. GREEK SMALL LETTER IOTA WITH TONOS
+ -32, -- GREEK SMALL LETTER ALPHA .. GREEK SMALL LETTER RHO
+ -31, -- GREEK SMALL LETTER FINAL SIGMA .. GREEK SMALL LETTER FINAL SIGMA
+ -32, -- GREEK SMALL LETTER SIGMA .. GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ -64, -- GREEK SMALL LETTER OMICRON WITH TONOS .. GREEK SMALL LETTER OMICRON WITH TONOS
+ -63, -- GREEK SMALL LETTER UPSILON WITH TONOS .. GREEK SMALL LETTER OMEGA WITH TONOS
+ -62, -- GREEK BETA SYMBOL .. GREEK BETA SYMBOL
+ -57, -- GREEK THETA SYMBOL .. GREEK THETA SYMBOL
+ -47, -- GREEK PHI SYMBOL .. GREEK PHI SYMBOL
+ -54, -- GREEK PI SYMBOL .. GREEK PI SYMBOL
+ -1, -- GREEK SMALL LETTER ARCHAIC KOPPA .. GREEK SMALL LETTER ARCHAIC KOPPA
+ -1, -- GREEK SMALL LETTER STIGMA .. GREEK SMALL LETTER STIGMA
+ -1, -- GREEK SMALL LETTER DIGAMMA .. GREEK SMALL LETTER DIGAMMA
+ -1, -- GREEK SMALL LETTER KOPPA .. GREEK SMALL LETTER KOPPA
+ -1, -- GREEK SMALL LETTER SAMPI .. GREEK SMALL LETTER SAMPI
+ -1, -- COPTIC SMALL LETTER SHEI .. COPTIC SMALL LETTER SHEI
+ -1, -- COPTIC SMALL LETTER FEI .. COPTIC SMALL LETTER FEI
+ -1, -- COPTIC SMALL LETTER KHEI .. COPTIC SMALL LETTER KHEI
+ -1, -- COPTIC SMALL LETTER HORI .. COPTIC SMALL LETTER HORI
+ -1, -- COPTIC SMALL LETTER GANGIA .. COPTIC SMALL LETTER GANGIA
+ -1, -- COPTIC SMALL LETTER SHIMA .. COPTIC SMALL LETTER SHIMA
+ -1, -- COPTIC SMALL LETTER DEI .. COPTIC SMALL LETTER DEI
+ -86, -- GREEK KAPPA SYMBOL .. GREEK KAPPA SYMBOL
+ -80, -- GREEK RHO SYMBOL .. GREEK RHO SYMBOL
+ -79, -- GREEK LUNATE SIGMA SYMBOL .. GREEK LUNATE SIGMA SYMBOL
+ -96, -- GREEK LUNATE EPSILON SYMBOL .. GREEK LUNATE EPSILON SYMBOL
+ -32, -- CYRILLIC SMALL LETTER A .. CYRILLIC SMALL LETTER YA
+ -80, -- CYRILLIC SMALL LETTER IE WITH GRAVE .. CYRILLIC SMALL LETTER DZHE
+ -1, -- CYRILLIC SMALL LETTER OMEGA .. CYRILLIC SMALL LETTER OMEGA
+ -1, -- CYRILLIC SMALL LETTER YAT .. CYRILLIC SMALL LETTER YAT
+ -1, -- CYRILLIC SMALL LETTER IOTIFIED E .. CYRILLIC SMALL LETTER IOTIFIED E
+ -1, -- CYRILLIC SMALL LETTER LITTLE YUS .. CYRILLIC SMALL LETTER LITTLE YUS
+ -1, -- CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS .. CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+ -1, -- CYRILLIC SMALL LETTER BIG YUS .. CYRILLIC SMALL LETTER BIG YUS
+ -1, -- CYRILLIC SMALL LETTER IOTIFIED BIG YUS .. CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+ -1, -- CYRILLIC SMALL LETTER KSI .. CYRILLIC SMALL LETTER KSI
+ -1, -- CYRILLIC SMALL LETTER PSI .. CYRILLIC SMALL LETTER PSI
+ -1, -- CYRILLIC SMALL LETTER FITA .. CYRILLIC SMALL LETTER FITA
+ -1, -- CYRILLIC SMALL LETTER IZHITSA .. CYRILLIC SMALL LETTER IZHITSA
+ -1, -- CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT .. CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ -1, -- CYRILLIC SMALL LETTER UK .. CYRILLIC SMALL LETTER UK
+ -1, -- CYRILLIC SMALL LETTER ROUND OMEGA .. CYRILLIC SMALL LETTER ROUND OMEGA
+ -1, -- CYRILLIC SMALL LETTER OMEGA WITH TITLO .. CYRILLIC SMALL LETTER OMEGA WITH TITLO
+ -1, -- CYRILLIC SMALL LETTER OT .. CYRILLIC SMALL LETTER OT
+ -1, -- CYRILLIC SMALL LETTER KOPPA .. CYRILLIC SMALL LETTER KOPPA
+ -1, -- CYRILLIC SMALL LETTER SHORT I WITH TAIL .. CYRILLIC SMALL LETTER SHORT I WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER SEMISOFT SIGN .. CYRILLIC SMALL LETTER SEMISOFT SIGN
+ -1, -- CYRILLIC SMALL LETTER ER WITH TICK .. CYRILLIC SMALL LETTER ER WITH TICK
+ -1, -- CYRILLIC SMALL LETTER GHE WITH UPTURN .. CYRILLIC SMALL LETTER GHE WITH UPTURN
+ -1, -- CYRILLIC SMALL LETTER GHE WITH STROKE .. CYRILLIC SMALL LETTER GHE WITH STROKE
+ -1, -- CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+ -1, -- CYRILLIC SMALL LETTER ZHE WITH DESCENDER .. CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER ZE WITH DESCENDER .. CYRILLIC SMALL LETTER ZE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER KA WITH DESCENDER .. CYRILLIC SMALL LETTER KA WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+ -1, -- CYRILLIC SMALL LETTER KA WITH STROKE .. CYRILLIC SMALL LETTER KA WITH STROKE
+ -1, -- CYRILLIC SMALL LETTER BASHKIR KA .. CYRILLIC SMALL LETTER BASHKIR KA
+ -1, -- CYRILLIC SMALL LETTER EN WITH DESCENDER .. CYRILLIC SMALL LETTER EN WITH DESCENDER
+ -1, -- CYRILLIC SMALL LIGATURE EN GHE .. CYRILLIC SMALL LIGATURE EN GHE
+ -1, -- CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK .. CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN HA .. CYRILLIC SMALL LETTER ABKHASIAN HA
+ -1, -- CYRILLIC SMALL LETTER ES WITH DESCENDER .. CYRILLIC SMALL LETTER ES WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER TE WITH DESCENDER .. CYRILLIC SMALL LETTER TE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER STRAIGHT U .. CYRILLIC SMALL LETTER STRAIGHT U
+ -1, -- CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE .. CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+ -1, -- CYRILLIC SMALL LETTER HA WITH DESCENDER .. CYRILLIC SMALL LETTER HA WITH DESCENDER
+ -1, -- CYRILLIC SMALL LIGATURE TE TSE .. CYRILLIC SMALL LIGATURE TE TSE
+ -1, -- CYRILLIC SMALL LETTER CHE WITH DESCENDER .. CYRILLIC SMALL LETTER CHE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE .. CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+ -1, -- CYRILLIC SMALL LETTER SHHA .. CYRILLIC SMALL LETTER SHHA
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN CHE .. CYRILLIC SMALL LETTER ABKHASIAN CHE
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER .. CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+ -1, -- CYRILLIC SMALL LETTER ZHE WITH BREVE .. CYRILLIC SMALL LETTER ZHE WITH BREVE
+ -1, -- CYRILLIC SMALL LETTER KA WITH HOOK .. CYRILLIC SMALL LETTER KA WITH HOOK
+ -1, -- CYRILLIC SMALL LETTER EL WITH TAIL .. CYRILLIC SMALL LETTER EL WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER EN WITH HOOK .. CYRILLIC SMALL LETTER EN WITH HOOK
+ -1, -- CYRILLIC SMALL LETTER EN WITH TAIL .. CYRILLIC SMALL LETTER EN WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER KHAKASSIAN CHE .. CYRILLIC SMALL LETTER KHAKASSIAN CHE
+ -1, -- CYRILLIC SMALL LETTER EM WITH TAIL .. CYRILLIC SMALL LETTER EM WITH TAIL
+ -1, -- CYRILLIC SMALL LETTER A WITH BREVE .. CYRILLIC SMALL LETTER A WITH BREVE
+ -1, -- CYRILLIC SMALL LETTER A WITH DIAERESIS .. CYRILLIC SMALL LETTER A WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LIGATURE A IE .. CYRILLIC SMALL LIGATURE A IE
+ -1, -- CYRILLIC SMALL LETTER IE WITH BREVE .. CYRILLIC SMALL LETTER IE WITH BREVE
+ -1, -- CYRILLIC SMALL LETTER SCHWA .. CYRILLIC SMALL LETTER SCHWA
+ -1, -- CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS .. CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER ZHE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER ZE WITH DIAERESIS .. CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER ABKHASIAN DZE .. CYRILLIC SMALL LETTER ABKHASIAN DZE
+ -1, -- CYRILLIC SMALL LETTER I WITH MACRON .. CYRILLIC SMALL LETTER I WITH MACRON
+ -1, -- CYRILLIC SMALL LETTER I WITH DIAERESIS .. CYRILLIC SMALL LETTER I WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER O WITH DIAERESIS .. CYRILLIC SMALL LETTER O WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER BARRED O .. CYRILLIC SMALL LETTER BARRED O
+ -1, -- CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS .. CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER E WITH DIAERESIS .. CYRILLIC SMALL LETTER E WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER U WITH MACRON .. CYRILLIC SMALL LETTER U WITH MACRON
+ -1, -- CYRILLIC SMALL LETTER U WITH DIAERESIS .. CYRILLIC SMALL LETTER U WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE .. CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+ -1, -- CYRILLIC SMALL LETTER CHE WITH DIAERESIS .. CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER YERU WITH DIAERESIS .. CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ -1, -- CYRILLIC SMALL LETTER KOMI DE .. CYRILLIC SMALL LETTER KOMI DE
+ -1, -- CYRILLIC SMALL LETTER KOMI DJE .. CYRILLIC SMALL LETTER KOMI DJE
+ -1, -- CYRILLIC SMALL LETTER KOMI ZJE .. CYRILLIC SMALL LETTER KOMI ZJE
+ -1, -- CYRILLIC SMALL LETTER KOMI DZJE .. CYRILLIC SMALL LETTER KOMI DZJE
+ -1, -- CYRILLIC SMALL LETTER KOMI LJE .. CYRILLIC SMALL LETTER KOMI LJE
+ -1, -- CYRILLIC SMALL LETTER KOMI NJE .. CYRILLIC SMALL LETTER KOMI NJE
+ -1, -- CYRILLIC SMALL LETTER KOMI SJE .. CYRILLIC SMALL LETTER KOMI SJE
+ -1, -- CYRILLIC SMALL LETTER KOMI TJE .. CYRILLIC SMALL LETTER KOMI TJE
+ -48, -- ARMENIAN SMALL LETTER AYB .. ARMENIAN SMALL LETTER FEH
+ -1, -- LATIN SMALL LETTER A WITH RING BELOW .. LATIN SMALL LETTER A WITH RING BELOW
+ -1, -- LATIN SMALL LETTER B WITH DOT ABOVE .. LATIN SMALL LETTER B WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER B WITH DOT BELOW .. LATIN SMALL LETTER B WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER B WITH LINE BELOW .. LATIN SMALL LETTER B WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER C WITH CEDILLA AND ACUTE .. LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+ -1, -- LATIN SMALL LETTER D WITH DOT ABOVE .. LATIN SMALL LETTER D WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER D WITH DOT BELOW .. LATIN SMALL LETTER D WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER D WITH LINE BELOW .. LATIN SMALL LETTER D WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER D WITH CEDILLA .. LATIN SMALL LETTER D WITH CEDILLA
+ -1, -- LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER E WITH MACRON AND GRAVE .. LATIN SMALL LETTER E WITH MACRON AND GRAVE
+ -1, -- LATIN SMALL LETTER E WITH MACRON AND ACUTE .. LATIN SMALL LETTER E WITH MACRON AND ACUTE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER E WITH TILDE BELOW .. LATIN SMALL LETTER E WITH TILDE BELOW
+ -1, -- LATIN SMALL LETTER E WITH CEDILLA AND BREVE .. LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+ -1, -- LATIN SMALL LETTER F WITH DOT ABOVE .. LATIN SMALL LETTER F WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER G WITH MACRON .. LATIN SMALL LETTER G WITH MACRON
+ -1, -- LATIN SMALL LETTER H WITH DOT ABOVE .. LATIN SMALL LETTER H WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER H WITH DOT BELOW .. LATIN SMALL LETTER H WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER H WITH DIAERESIS .. LATIN SMALL LETTER H WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER H WITH CEDILLA .. LATIN SMALL LETTER H WITH CEDILLA
+ -1, -- LATIN SMALL LETTER H WITH BREVE BELOW .. LATIN SMALL LETTER H WITH BREVE BELOW
+ -1, -- LATIN SMALL LETTER I WITH TILDE BELOW .. LATIN SMALL LETTER I WITH TILDE BELOW
+ -1, -- LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE .. LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+ -1, -- LATIN SMALL LETTER K WITH ACUTE .. LATIN SMALL LETTER K WITH ACUTE
+ -1, -- LATIN SMALL LETTER K WITH DOT BELOW .. LATIN SMALL LETTER K WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER K WITH LINE BELOW .. LATIN SMALL LETTER K WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER L WITH DOT BELOW .. LATIN SMALL LETTER L WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER L WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+ -1, -- LATIN SMALL LETTER L WITH LINE BELOW .. LATIN SMALL LETTER L WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER M WITH ACUTE .. LATIN SMALL LETTER M WITH ACUTE
+ -1, -- LATIN SMALL LETTER M WITH DOT ABOVE .. LATIN SMALL LETTER M WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER M WITH DOT BELOW .. LATIN SMALL LETTER M WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER N WITH DOT ABOVE .. LATIN SMALL LETTER N WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER N WITH DOT BELOW .. LATIN SMALL LETTER N WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER N WITH LINE BELOW .. LATIN SMALL LETTER N WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER O WITH TILDE AND ACUTE .. LATIN SMALL LETTER O WITH TILDE AND ACUTE
+ -1, -- LATIN SMALL LETTER O WITH TILDE AND DIAERESIS .. LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+ -1, -- LATIN SMALL LETTER O WITH MACRON AND GRAVE .. LATIN SMALL LETTER O WITH MACRON AND GRAVE
+ -1, -- LATIN SMALL LETTER O WITH MACRON AND ACUTE .. LATIN SMALL LETTER O WITH MACRON AND ACUTE
+ -1, -- LATIN SMALL LETTER P WITH ACUTE .. LATIN SMALL LETTER P WITH ACUTE
+ -1, -- LATIN SMALL LETTER P WITH DOT ABOVE .. LATIN SMALL LETTER P WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER R WITH DOT ABOVE .. LATIN SMALL LETTER R WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER R WITH DOT BELOW .. LATIN SMALL LETTER R WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER R WITH DOT BELOW AND MACRON .. LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+ -1, -- LATIN SMALL LETTER R WITH LINE BELOW .. LATIN SMALL LETTER R WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER S WITH DOT ABOVE .. LATIN SMALL LETTER S WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER S WITH DOT BELOW .. LATIN SMALL LETTER S WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE .. LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+ -1, -- LATIN SMALL LETTER S WITH CARON AND DOT ABOVE .. LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+ -1, -- LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE .. LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+ -1, -- LATIN SMALL LETTER T WITH DOT ABOVE .. LATIN SMALL LETTER T WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER T WITH DOT BELOW .. LATIN SMALL LETTER T WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER T WITH LINE BELOW .. LATIN SMALL LETTER T WITH LINE BELOW
+ -1, -- LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER U WITH DIAERESIS BELOW .. LATIN SMALL LETTER U WITH DIAERESIS BELOW
+ -1, -- LATIN SMALL LETTER U WITH TILDE BELOW .. LATIN SMALL LETTER U WITH TILDE BELOW
+ -1, -- LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW .. LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+ -1, -- LATIN SMALL LETTER U WITH TILDE AND ACUTE .. LATIN SMALL LETTER U WITH TILDE AND ACUTE
+ -1, -- LATIN SMALL LETTER U WITH MACRON AND DIAERESIS .. LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+ -1, -- LATIN SMALL LETTER V WITH TILDE .. LATIN SMALL LETTER V WITH TILDE
+ -1, -- LATIN SMALL LETTER V WITH DOT BELOW .. LATIN SMALL LETTER V WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER W WITH GRAVE .. LATIN SMALL LETTER W WITH GRAVE
+ -1, -- LATIN SMALL LETTER W WITH ACUTE .. LATIN SMALL LETTER W WITH ACUTE
+ -1, -- LATIN SMALL LETTER W WITH DIAERESIS .. LATIN SMALL LETTER W WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER W WITH DOT ABOVE .. LATIN SMALL LETTER W WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER W WITH DOT BELOW .. LATIN SMALL LETTER W WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER X WITH DOT ABOVE .. LATIN SMALL LETTER X WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER X WITH DIAERESIS .. LATIN SMALL LETTER X WITH DIAERESIS
+ -1, -- LATIN SMALL LETTER Y WITH DOT ABOVE .. LATIN SMALL LETTER Y WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER Z WITH CIRCUMFLEX .. LATIN SMALL LETTER Z WITH CIRCUMFLEX
+ -1, -- LATIN SMALL LETTER Z WITH DOT BELOW .. LATIN SMALL LETTER Z WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER Z WITH LINE BELOW .. LATIN SMALL LETTER Z WITH LINE BELOW
+ -59, -- LATIN SMALL LETTER LONG S WITH DOT ABOVE .. LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ -1, -- LATIN SMALL LETTER A WITH DOT BELOW .. LATIN SMALL LETTER A WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER A WITH HOOK ABOVE .. LATIN SMALL LETTER A WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+ -1, -- LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND ACUTE .. LATIN SMALL LETTER A WITH BREVE AND ACUTE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND GRAVE .. LATIN SMALL LETTER A WITH BREVE AND GRAVE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE .. LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND TILDE .. LATIN SMALL LETTER A WITH BREVE AND TILDE
+ -1, -- LATIN SMALL LETTER A WITH BREVE AND DOT BELOW .. LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+ -1, -- LATIN SMALL LETTER E WITH DOT BELOW .. LATIN SMALL LETTER E WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER E WITH HOOK ABOVE .. LATIN SMALL LETTER E WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER E WITH TILDE .. LATIN SMALL LETTER E WITH TILDE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+ -1, -- LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ -1, -- LATIN SMALL LETTER I WITH HOOK ABOVE .. LATIN SMALL LETTER I WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER I WITH DOT BELOW .. LATIN SMALL LETTER I WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER O WITH DOT BELOW .. LATIN SMALL LETTER O WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER O WITH HOOK ABOVE .. LATIN SMALL LETTER O WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+ -1, -- LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW .. LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ -1, -- LATIN SMALL LETTER O WITH HORN AND ACUTE .. LATIN SMALL LETTER O WITH HORN AND ACUTE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND GRAVE .. LATIN SMALL LETTER O WITH HORN AND GRAVE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND TILDE .. LATIN SMALL LETTER O WITH HORN AND TILDE
+ -1, -- LATIN SMALL LETTER O WITH HORN AND DOT BELOW .. LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+ -1, -- LATIN SMALL LETTER U WITH DOT BELOW .. LATIN SMALL LETTER U WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER U WITH HOOK ABOVE .. LATIN SMALL LETTER U WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND ACUTE .. LATIN SMALL LETTER U WITH HORN AND ACUTE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND GRAVE .. LATIN SMALL LETTER U WITH HORN AND GRAVE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE .. LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND TILDE .. LATIN SMALL LETTER U WITH HORN AND TILDE
+ -1, -- LATIN SMALL LETTER U WITH HORN AND DOT BELOW .. LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+ -1, -- LATIN SMALL LETTER Y WITH GRAVE .. LATIN SMALL LETTER Y WITH GRAVE
+ -1, -- LATIN SMALL LETTER Y WITH DOT BELOW .. LATIN SMALL LETTER Y WITH DOT BELOW
+ -1, -- LATIN SMALL LETTER Y WITH HOOK ABOVE .. LATIN SMALL LETTER Y WITH HOOK ABOVE
+ -1, -- LATIN SMALL LETTER Y WITH TILDE .. LATIN SMALL LETTER Y WITH TILDE
+ 8, -- GREEK SMALL LETTER ALPHA WITH PSILI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER EPSILON WITH PSILI .. GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ 8, -- GREEK SMALL LETTER ETA WITH PSILI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER IOTA WITH PSILI .. GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER OMICRON WITH PSILI .. GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA .. GREEK SMALL LETTER UPSILON WITH DASIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA .. GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+ 8, -- GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI .. GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ 8, -- GREEK SMALL LETTER OMEGA WITH PSILI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ 74, -- GREEK SMALL LETTER ALPHA WITH VARIA .. GREEK SMALL LETTER ALPHA WITH OXIA
+ 86, -- GREEK SMALL LETTER EPSILON WITH VARIA .. GREEK SMALL LETTER ETA WITH OXIA
+ 100, -- GREEK SMALL LETTER IOTA WITH VARIA .. GREEK SMALL LETTER IOTA WITH OXIA
+ 128, -- GREEK SMALL LETTER OMICRON WITH VARIA .. GREEK SMALL LETTER OMICRON WITH OXIA
+ 112, -- GREEK SMALL LETTER UPSILON WITH VARIA .. GREEK SMALL LETTER UPSILON WITH OXIA
+ 126, -- GREEK SMALL LETTER OMEGA WITH VARIA .. GREEK SMALL LETTER OMEGA WITH OXIA
+ 8, -- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER ALPHA WITH VRACHY .. GREEK SMALL LETTER ALPHA WITH MACRON
+ 9, -- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ -7205, -- GREEK PROSGEGRAMMENI .. GREEK PROSGEGRAMMENI
+ 9, -- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ 8, -- GREEK SMALL LETTER IOTA WITH VRACHY .. GREEK SMALL LETTER IOTA WITH MACRON
+ 8, -- GREEK SMALL LETTER UPSILON WITH VRACHY .. GREEK SMALL LETTER UPSILON WITH MACRON
+ 7, -- GREEK SMALL LETTER RHO WITH DASIA .. GREEK SMALL LETTER RHO WITH DASIA
+ 9, -- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI .. GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ -32, -- FULLWIDTH LATIN SMALL LETTER A .. FULLWIDTH LATIN SMALL LETTER Z
+ -40); -- DESERET SMALL LETTER LONG I .. DESERET SMALL LETTER ENG
+
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ function Range_Search (U : Char_Code; R : UTF_32_Ranges) return Natural;
+ -- Searches the given ranges (which must be in ascending order by Lo value)
+ -- and returns the index of the matching range in R if U matches one of the
+ -- ranges. If U matches none of the ranges, returns zero.
+
+ ---------------------
+ -- Is_UTF_32_Digit --
+ ---------------------
+
+ function Is_UTF_32_Digit (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Digits) /= 0;
+ end Is_UTF_32_Digit;
+
+ ----------------------
+ -- Is_UTF_32_Letter --
+ ----------------------
+
+ function Is_UTF_32_Letter (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Letters) /= 0;
+ end Is_UTF_32_Letter;
+
+ -------------------------------
+ -- Is_UTF_32_Line_Terminator --
+ -------------------------------
+
+ function Is_UTF_32_Line_Terminator (U : Char_Code) return Boolean is
+ begin
+ return U in 10 .. 13 -- Ascii.LF Ascii.VT Ascii.FF Ascii.CR
+ or else U = 16#02028# -- LINE SEPARATOR
+ or else U = 16#02029#; -- PARAGRAPH SEPARATOR
+ end Is_UTF_32_Line_Terminator;
+
+ --------------------
+ -- Is_UTF_32_Mark --
+ --------------------
+
+ function Is_UTF_32_Mark (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Marks) /= 0;
+ end Is_UTF_32_Mark;
+
+ ---------------------------
+ -- Is_UTF_32_Non_Graphic --
+ ---------------------------
+
+ function Is_UTF_32_Non_Graphic (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Non_Graphic) /= 0;
+ end Is_UTF_32_Non_Graphic;
+
+ ---------------------
+ -- Is_UTF_32_Other --
+ ---------------------
+
+ function Is_UTF_32_Other (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Other_Format) /= 0;
+ end Is_UTF_32_Other;
+
+ ---------------------------
+ -- Is_UTF_32_Punctuation --
+ ---------------------------
+
+ function Is_UTF_32_Punctuation (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Punctuation) /= 0;
+ end Is_UTF_32_Punctuation;
+
+ ---------------------
+ -- Is_UTF_32_Space --
+ ---------------------
+
+ function Is_UTF_32_Space (U : Char_Code) return Boolean is
+ begin
+ return Range_Search (U, UTF_32_Spaces) /= 0;
+ end Is_UTF_32_Space;
+
---------------------------
-- Is_Start_Of_Wide_Char --
---------------------------
function Is_Start_Of_Wide_Char
- (S : Source_Buffer_Ptr;
- P : Source_Ptr)
- return Boolean
+ (S : Source_Buffer_Ptr;
+ P : Source_Ptr) return Boolean
is
begin
case Wide_Character_Encoding_Method is
@@ -79,6 +1615,42 @@ package body Widechar is
return WC_Longest_Sequence;
end Length_Wide;
+ ------------------
+ -- Range_Search --
+ ------------------
+
+ function Range_Search (U : Char_Code; R : UTF_32_Ranges) return Natural is
+ Lo : Integer;
+ Hi : Integer;
+ Mid : Integer;
+
+ begin
+ Lo := R'First;
+ Hi := R'Last;
+
+ loop
+ Mid := (Lo + Hi) / 2;
+
+ if U < R (Mid).Lo then
+ Hi := Mid - 1;
+
+ if Hi < Lo then
+ return 0;
+ end if;
+
+ elsif R (Mid).Hi < U then
+ Lo := Mid + 1;
+
+ if Hi < Lo then
+ return 0;
+ end if;
+
+ else
+ return Mid;
+ end if;
+ end loop;
+ end Range_Search;
+
---------------
-- Scan_Wide --
---------------
@@ -92,17 +1664,22 @@ package body Widechar is
function In_Char return Character;
-- Function to obtain characters of wide character escape sequence
+ -------------
+ -- In_Char --
+ -------------
+
function In_Char return Character is
begin
P := P + 1;
return S (P - 1);
end In_Char;
- function WC_In is new Char_Sequence_To_Wide_Char (In_Char);
+ function WC_In is new Char_Sequence_To_UTF_32 (In_Char);
+
+ -- Start of processingf for Scan_Wide
begin
- C := Char_Code (Wide_Character'Pos
- (WC_In (In_Char, Wide_Character_Encoding_Method)));
+ C := Char_Code (WC_In (In_Char, Wide_Character_Encoding_Method));
Err := False;
exception
@@ -124,16 +1701,22 @@ package body Widechar is
procedure Out_Char (C : Character);
-- Procedure to store one character of wide character sequence
+ --------------
+ -- Out_Char --
+ --------------
+
procedure Out_Char (C : Character) is
begin
P := P + 1;
S (P) := C;
end Out_Char;
- procedure WC_Out is new Wide_Char_To_Char_Sequence (Out_Char);
+ procedure WC_Out is new UTF_32_To_Char_Sequence (Out_Char);
+
+ -- Start of processing for Set_Wide
begin
- WC_Out (Wide_Character'Val (C), Wide_Character_Encoding_Method);
+ WC_Out (UTF_32_Code (C), Wide_Character_Encoding_Method);
end Set_Wide;
---------------
@@ -144,19 +1727,68 @@ package body Widechar is
function Skip_Char return Character;
-- Function to skip one character of wide character escape sequence
+ ---------------
+ -- Skip_Char --
+ ---------------
+
function Skip_Char return Character is
begin
P := P + 1;
return S (P - 1);
end Skip_Char;
- function WC_Skip is new Char_Sequence_To_Wide_Char (Skip_Char);
+ function WC_Skip is new Char_Sequence_To_UTF_32 (Skip_Char);
- Discard : Wide_Character;
+ Discard : UTF_32_Code;
pragma Warnings (Off, Discard);
+ -- Start of processing for Skip_Wide
+
begin
Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method);
end Skip_Wide;
+ ---------------
+ -- Skip_Wide --
+ ---------------
+
+ procedure Skip_Wide (S : Source_Buffer_Ptr; P : in out Source_Ptr) is
+ function Skip_Char return Character;
+ -- Function to skip one character of wide character escape sequence
+
+ ---------------
+ -- Skip_Char --
+ ---------------
+
+ function Skip_Char return Character is
+ begin
+ P := P + 1;
+ return S (P - 1);
+ end Skip_Char;
+
+ function WC_Skip is new Char_Sequence_To_UTF_32 (Skip_Char);
+
+ Discard : UTF_32_Code;
+ pragma Warnings (Off, Discard);
+
+ -- Start of processing for Skip_Wide
+
+ begin
+ Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method);
+ end Skip_Wide;
+
+ --------------------------
+ -- UTF_32_To_Upper_Case --
+ --------------------------
+
+ function UTF_32_To_Upper_Case (U : Char_Code) return Char_Code is
+ Index : constant Integer := Range_Search (U, Lower_Case_Letters);
+ begin
+ if Index = 0 then
+ return U;
+ else
+ return U + Upper_Case_Adjust (Index);
+ end if;
+ end UTF_32_To_Upper_Case;
+
end Widechar;
diff --git a/gcc/ada/widechar.ads b/gcc/ada/widechar.ads
index 5126d4c758a..f70fb72d680 100644
--- a/gcc/ada/widechar.ads
+++ b/gcc/ada/widechar.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-1998 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- --
@@ -31,7 +31,10 @@
-- --
------------------------------------------------------------------------------
--- Subprograms for manipulation of wide character sequences
+-- Subprograms for manipulation of wide character sequences. Note that in
+-- this package, wide character and wide wide character are not distinguished
+-- since this package is basically concerned with syntactic notions, and it
+-- deals with Char_Code values, rather than values of actual Ada types.
with Types; use Types;
@@ -40,7 +43,8 @@ package Widechar is
function Length_Wide return Nat;
-- Returns the maximum length in characters for the escape sequence that
-- is used to encode wide character literals outside the ASCII range. Used
- -- only in the implementation of the attribute Width for Wide_Character.
+ -- only in the implementation of the attribute Width for Wide_Character
+ -- and Wide_Wide_Character.
procedure Scan_Wide
(S : Source_Buffer_Ptr;
@@ -76,10 +80,88 @@ package Widechar is
-- checking is done, since this is only used on escape sequences generated
-- by Set_Wide, which are known to be correct.
+ procedure Skip_Wide (S : Source_Buffer_Ptr; P : in out Source_Ptr);
+ -- Similar to the above procedure, but operates on a source buffer
+ -- instead of a string, with P being a Source_Ptr referencing the
+ -- contents of the source buffer.
+
function Is_Start_Of_Wide_Char
- (S : Source_Buffer_Ptr;
- P : Source_Ptr)
- return Boolean;
+ (S : Source_Buffer_Ptr;
+ P : Source_Ptr) return Boolean;
-- Determines if S (P) is the start of a wide character sequence
+ function Is_UTF_32_Letter (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Letter);
+ -- Returns true iff U is a letter that can be used to start an identifier.
+ -- This means that it is in one of the following categories:
+ -- Letter, Uppercase (Lu)
+ -- Letter, Lowercase (Ll)
+ -- Letter, Titlecase (Lt)
+ -- Letter, Modifier (Lm)
+ -- Letter, Other (Lo)
+ -- Number, Letter (Nl)
+
+ function Is_UTF_32_Digit (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Digit);
+ -- Returns true iff U is a digit that can be used to extend an identifer,
+ -- which means it is in one of the following categories:
+ -- Number, Decimal_Digit (Nd)
+
+ function Is_UTF_32_Line_Terminator (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Line_Terminator);
+ -- Returns true iff U is an allowed line terminator for source programs,
+ -- which means it is in one of the following categories:
+ -- Separator, Line (Zl)
+ -- Separator, Paragraph (Zp)
+ -- or that it is a conventional line terminator (CR, LF, VT, FF)
+
+ function Is_UTF_32_Mark (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Mark);
+ -- Returns true iff U is a mark character which can be used to extend
+ -- an identifier. This means it is in one of the following categories:
+ -- Mark, Non-Spacing (Mn)
+ -- Mark, Spacing Combining (Mc)
+
+ function Is_UTF_32_Other (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Other);
+ -- Returns true iff U is an other format character, which means that it
+ -- can be used to extend an identifier, but is ignored for the purposes of
+ -- matching of identiers. This means that it is in one of the following
+ -- categories:
+ -- Other, Format (Cf)
+
+ function Is_UTF_32_Punctuation (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Punctuation);
+ -- Returns true iff U is a punctuation character that can be used to
+ -- separate pices of an identifier. This means that it is in one of the
+ -- following categories:
+ -- Punctuation, Connector (Pc)
+
+ function Is_UTF_32_Space (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Space);
+ -- Returns true iff U is considered a space to be ignored, which means
+ -- that it is in one of the following categories:
+ -- Separator, Space (Zs)
+
+ function Is_UTF_32_Non_Graphic (U : Char_Code) return Boolean;
+ pragma Inline (Is_UTF_32_Non_Graphic);
+ -- Returns true iff U is considered to be a non-graphic character,
+ -- which means that it is in one of the following categories:
+ -- Other, Control (Cc)
+ -- Other, Private Use (Co)
+ -- Other, Surrogate (Cs)
+ -- Other, Format (Cf)
+ -- Separator, Line (Zl)
+ -- Separator, Paragraph (Zp)
+ --
+ -- Note that the Ada category format effector is subsumed by the above
+ -- list of Unicode categories.
+
+ function UTF_32_To_Upper_Case (U : Char_Code) return Char_Code;
+ pragma Inline (UTF_32_To_Upper_Case);
+ -- If U represents a lower case letter, returns the corresponding upper
+ -- case letter, otherwise U is returned unchanged. The folding is locale
+ -- independent as defined by documents referenced in the note in section
+ -- 1 of ISO/IEC 10646:2003
+
end Widechar;