OSDN Git Service

2006-02-13 Thomas Quinot <quinot@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Feb 2006 09:32:12 +0000 (09:32 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Feb 2006 09:32:12 +0000 (09:32 +0000)
    Vincent Celier  <celier@adacore.com>
    Robert Dewar  <dewar@adacore.com>

* ali-util.adb (Get_File_Checksum): Update to account for change in
profile of Initialize_Scanner.

* gprep.adb (Gnatprep): Update to account for change in profile of
Initialize_Scanner.
(Process_One_File): Same.

* lib.adb (Get_Code_Or_Source_Unit): New subprogram factoring the
common code between Get_Code_Unit and Get_Source_Unit. Reimplement
that behaviour using the new Unit information recorded in the source
files table, rather than going through all units every time.
(Get_Code_Unit): Reimplement in terms of Get_Code_Or_Source_Unit.
(Get_Source_Unit): Same.

* prepcomp.adb (Parse_Preprocessing_Data_File): Update to account for
change in profile of Initialize_Scanner.
(Prepare_To_Preprocess): Same.

* lib.ads: Fix typo in comment (templace -> template).

* prj-part.adb (Parse_Single_Project): Update to account for change in
profile of Initialize_Scanner.

* scn.adb (Initialize_Scanner): Account for change in profile of
Scng.Initialize_Scanner: set Current_Source_Unit in Scn instead of Scng.
Also record the association of the given Source_File_Index to the
corresponding Unit_Number_Type.

* scng.ads, scng.adb (Initialize_Scanner.Set_Reserved): Remove
procedure.
(Initialize_Scanner): Call Scans.Initialize_Ada_Keywords.
Remove Unit formal for generic scanner: this formal
is only relevant to Scn (the scanner instance used to parse Ada source
files), not to other instances. Update comment accordingly.
(Scan): Use new function Snames.Is_Keyword_Name.

* sinfo-cn.adb: Fix typo in comment.

* sinput.adb (Unit, Set_Unit): Accessors for new source file attribute
Unit.

* sinput.ads (Source_File_Record): New component Unit, used to capture
the unit identifier (if any) associated to a source file.

* sinput-c.adb, sinput-l.adb (Load_File): Initialize new component
Unit in Source_File_Record.

* sinput-p.adb (Source_File_Is_Subunit): Update to account for change
in profile of Initialize_Scanner.

* scans.adb (Initialize_Ada_Keywords): New procedure

* scans.ads (Initialize_Ada_Keywords): New procedure to initialize the
Ada keywords in the Namet table, without the need to call
Initialize_Scanner.

* snames.adb: Add pragma Ada_2005 (synonym for Ada_05)
(Is_Keyword_Name): New function

* snames.ads: Add subtype Configuration_Pragma_Names
Add pragma Ada_2005 (synonym for Ada_05)
(Is_Keyword_Name): New function

* snames.h: Add pragma Ada_2005 (synonym for Ada_05)

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111032 138bc75d-0d04-0410-961f-82ee72b054a4

20 files changed:
gcc/ada/ali-util.adb
gcc/ada/gprep.adb
gcc/ada/lib.adb
gcc/ada/lib.ads
gcc/ada/prepcomp.adb
gcc/ada/prj-part.adb
gcc/ada/scans.adb
gcc/ada/scans.ads
gcc/ada/scn.adb
gcc/ada/scng.adb
gcc/ada/scng.ads
gcc/ada/sinfo-cn.adb
gcc/ada/sinput-c.adb
gcc/ada/sinput-l.adb
gcc/ada/sinput-p.adb
gcc/ada/sinput.adb
gcc/ada/sinput.ads
gcc/ada/snames.adb
gcc/ada/snames.ads
gcc/ada/snames.h

index 28819c7..a336977 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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,7 +154,7 @@ package body ALI.Util is
          return Checksum_Error;
       end if;
 
-      Scanner.Initialize_Scanner (Types.No_Unit, Source_Index);
+      Scanner.Initialize_Scanner (Source_Index);
 
       --  Make sure that the project language reserved words are not
       --  recognized as reserved words, but as identifiers. The byte info for
index ebe5184..3a3e282 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2002-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 2002-2006, 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- --
@@ -27,7 +27,7 @@
 with Csets;
 with Err_Vars; use Err_Vars;
 with Errutil;
-with Gnatvsn;
+with Gnatvsn;  use Gnatvsn;
 with Namet;    use Namet;
 with Opt;
 with Osint;    use Osint;
@@ -137,7 +137,9 @@ package body GPrep is
    begin
       if not Copyright_Displayed then
          Write_Line ("GNAT Preprocessor " & Gnatvsn.Gnat_Version_String);
-         Write_Line ("Copyright 1996-2005, Free Software Foundation, Inc.");
+         Write_Line ("Copyright 1996-" &
+                     Current_Year &
+                     ", Free Software Foundation, Inc.");
          Copyright_Displayed := True;
       end if;
    end Display_Copyright;
@@ -241,7 +243,7 @@ package body GPrep is
                      """");
             end if;
 
-            Scanner.Initialize_Scanner (No_Unit, Deffile);
+            Scanner.Initialize_Scanner (Deffile);
 
             Prep.Parse_Def_File;
          end;
@@ -502,7 +504,7 @@ package body GPrep is
 
          Sinput.Main_Source_File := Infile;
 
-         Scanner.Initialize_Scanner (No_Unit, Infile);
+         Scanner.Initialize_Scanner (Infile);
 
          --  Output the SFN pragma if asked to
 
index e02ebb0..420f969 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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- --
@@ -66,6 +66,12 @@ package body Lib is
    --  Used by In_Same_Extended_Unit and Earlier_In_Extended_Unit. Returns
    --  value as described above.
 
+   function Get_Code_Or_Source_Unit
+     (S                : Source_Ptr;
+      Unwind_Instances : Boolean) return Unit_Number_Type;
+   --  Common code for Get_Code_Unit (get unit of instantiation for location)
+   --  and Get_Source_Unit (get unit of template for location).
+
    --------------------------------------------
    -- Access Functions for Unit Table Fields --
    --------------------------------------------
@@ -486,11 +492,14 @@ package body Lib is
       end if;
    end Generic_Separately_Compiled;
 
-   -------------------
-   -- Get_Code_Unit --
-   -------------------
+   -----------------------------
+   -- Get_Code_Or_Source_Unit --
+   -----------------------------
 
-   function Get_Code_Unit (S : Source_Ptr) return Unit_Number_Type is
+   function Get_Code_Or_Source_Unit
+     (S                : Source_Ptr;
+      Unwind_Instances : Boolean) return Unit_Number_Type
+   is
    begin
       --  Search table unless we have No_Location, which can happen if the
       --  relevant location has not been set yet. Happens for example when
@@ -498,22 +507,41 @@ package body Lib is
 
       if S /= No_Location then
          declare
-            Source_File : constant Source_File_Index :=
-                            Get_Source_File_Index (Top_Level_Location (S));
+            Source_File : Source_File_Index;
+            Source_Unit : Unit_Number_Type;
 
          begin
-            for U in Units.First .. Units.Last loop
-               if Source_Index (U) = Source_File then
-                  return U;
-               end if;
-            end loop;
+            Source_File := Get_Source_File_Index (S);
+
+            if Unwind_Instances then
+               while Template (Source_File) /= No_Source_File loop
+                  Source_File := Template (Source_File);
+               end loop;
+            end if;
+
+            Source_Unit := Unit (Source_File);
+
+            if Source_Unit /= No_Unit then
+               return Source_Unit;
+            end if;
          end;
       end if;
 
-      --  If S was No_Location, or was not in the table, we must be in the
-      --  main source unit (and the value has not been placed in the table yet)
+      --  If S was No_Location, or was not in the table, we must be in the main
+      --  source unit (and the value has not been placed in the table yet),
+      --  or in one of the configuration pragma files.
 
       return Main_Unit;
+   end Get_Code_Or_Source_Unit;
+
+   -------------------
+   -- Get_Code_Unit --
+   -------------------
+
+   function Get_Code_Unit (S : Source_Ptr) return Unit_Number_Type is
+   begin
+      return Get_Code_Or_Source_Unit (Top_Level_Location (S),
+        Unwind_Instances => False);
    end Get_Code_Unit;
 
    function Get_Code_Unit (N : Node_Or_Entity_Id) return Unit_Number_Type is
@@ -579,33 +607,7 @@ package body Lib is
 
    function Get_Source_Unit (S : Source_Ptr) return Unit_Number_Type is
    begin
-      --  Search table unless we have No_Location, which can happen if the
-      --  relevant location has not been set yet. Happens for example when
-      --  we obtain Sloc (Cunit (Main_Unit)) before it is set.
-
-      if S /= No_Location then
-         declare
-            Source_File : Source_File_Index :=
-                            Get_Source_File_Index (Top_Level_Location (S));
-
-         begin
-            Source_File := Get_Source_File_Index (S);
-            while Template (Source_File) /= No_Source_File loop
-               Source_File := Template (Source_File);
-            end loop;
-
-            for U in Units.First .. Units.Last loop
-               if Source_Index (U) = Source_File then
-                  return U;
-               end if;
-            end loop;
-         end;
-      end if;
-
-      --  If S was No_Location, or was not in the table, we must be in the
-      --  main source unit (and the value has not got put into the table yet)
-
-      return Main_Unit;
+      return Get_Code_Or_Source_Unit (S, Unwind_Instances => True);
    end Get_Source_Unit;
 
    function Get_Source_Unit (N : Node_Or_Entity_Id) return Unit_Number_Type is
index 159ccc3..e02555a 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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- --
@@ -424,10 +424,10 @@ package Lib is
    --  Return unit number of file identified by given source pointer value.
    --  This call must always succeed, since any valid source pointer value
    --  belongs to some previously loaded module. If the given source pointer
-   --  value is within an instantiation, this function returns the unit
-   --  number of the templace, i.e. the unit containing the source code
-   --  corresponding to the given Source_Ptr value. The version taking
-   --  a Node_Id argument, N, simply applies the function to Sloc (N).
+   --  value is within an instantiation, this function returns the unit number
+   --  of the template, i.e. the unit containing the source code corresponding
+   --  to the given Source_Ptr value. The version taking a Node_Id argument, N,
+   --  simply applies the function to Sloc (N).
 
    function Get_Code_Unit (N : Node_Or_Entity_Id) return Unit_Number_Type;
    pragma Inline (Get_Code_Unit);
index e81c976..7fd1984 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2003-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 2003-2006, 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- --
@@ -248,8 +248,7 @@ package body Prepcomp is
 
       --  Initialize the sanner and set its behavior for a processing data file
 
-      Scn.Scanner.Initialize_Scanner
-        (No_Unit, Source_Index_Of_Preproc_Data_File);
+      Scn.Scanner.Initialize_Scanner (Source_Index_Of_Preproc_Data_File);
       Scn.Scanner.Set_End_Of_Line_As_Token (True);
       Scn.Scanner.Reset_Special_Characters;
 
@@ -676,7 +675,7 @@ package body Prepcomp is
 
             --  Initialize the scanner and process the definition file
 
-            Scn.Scanner.Initialize_Scanner (No_Unit, Deffile);
+            Scn.Scanner.Initialize_Scanner (Deffile);
             Prep.Parse_Def_File;
 
             --  Reset the behaviour of the scanner to the default
index f39bd48..8e9f963 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2001-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 2001-2006, 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- --
@@ -1040,7 +1040,7 @@ package body Prj.Part is
          return;
       end if;
 
-      Prj.Err.Scanner.Initialize_Scanner (Types.No_Unit, Source_Index);
+      Prj.Err.Scanner.Initialize_Scanner (Source_Index);
       Tree.Reset_State;
       Scan (In_Tree);
 
index 42c393f..a22fdfd 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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- --
 --                                                                          --
 ------------------------------------------------------------------------------
 
+with Namet;  use Namet;
+with Snames; use Snames;
+
 package body Scans is
 
+   -----------------------------
+   -- Initialize_Ada_Keywords --
+   -----------------------------
+
+   procedure Initialize_Ada_Keywords is
+      procedure Set_Reserved (N : Name_Id; T : Token_Type);
+      pragma Inline (Set_Reserved);
+      --  Set given name as a reserved word (T is the corresponding token)
+
+      ------------------
+      -- Set_Reserved --
+      ------------------
+
+      procedure Set_Reserved (N : Name_Id; T : Token_Type) is
+      begin
+         --  Set up Token_Type values in Names table entries for reserved
+         --  words. We use the Pos value of the Token_Type value. Note that
+         --  Is_Keyword_Name relies 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_Ada_Keywords
+
+   begin
+      --  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);
+
+   end Initialize_Ada_Keywords;
+
    ------------------------
    -- Restore_Scan_State --
    ------------------------
 
-   procedure Restore_Scan_State (Saved_State : in Saved_Scan_State) is
+   procedure Restore_Scan_State (Saved_State : Saved_Scan_State) is
    begin
       Scan_Ptr                 := Saved_State.Save_Scan_Ptr;
       Token                    := Saved_State.Save_Token;
index 7e2a580..694a603 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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,9 +46,9 @@ package Scans is
    --  The class column in this table indicates the token classes which
    --  apply to the token, as defined by subsquent subtype declarations.
 
-   --  Note: the coding in SCN depends on the fact that the first entry in
-   --  this type declaration is *not* for a reserved word. For details on
-   --  why there is this requirement, see Scn.Initialize_Scanner.
+   --  Note: Namet.Is_Keyword_Name depends on the fact that the first entry in
+   --  this type declaration is *not* for a reserved word. For details on why
+   --  there is this requirement, see Scans.Initialize_Ada_Keywords.
 
    type Token_Type is (
 
@@ -223,117 +223,122 @@ package Scans is
    --  The following subtype declarations group the token types into classes.
    --  These are used for class tests in the parser.
 
-      subtype Token_Class_Numeric_Literal is
-        Token_Type range Tok_Integer_Literal .. Tok_Real_Literal;
-      --  Numeric literal
-
-      subtype Token_Class_Literal is
-        Token_Type range Tok_Integer_Literal .. Tok_Operator_Symbol;
-      --  Literal
-
-      subtype Token_Class_Lit_Or_Name is
-        Token_Type range Tok_Integer_Literal .. Tok_Identifier;
-
-      subtype Token_Class_Binary_Addop is
-        Token_Type range Tok_Ampersand .. Tok_Plus;
-      --  Binary adding operator (& + -)
-
-      subtype Token_Class_Unary_Addop is
-        Token_Type range Tok_Minus .. Tok_Plus;
-      --  Unary adding operator (+ -)
-
-      subtype Token_Class_Mulop is
-        Token_Type range Tok_Asterisk .. Tok_Slash;
-      --  Multiplying operator
-
-      subtype Token_Class_Logop is
-        Token_Type range Tok_And .. Tok_Xor;
-      --  Logical operator (and, or, xor)
-
-      subtype Token_Class_Relop is
-        Token_Type range Tok_Less .. Tok_Box;
-      --  Relational operator (= /= < <= > >= not, in plus <> to catch misuse
-      --  of Pascal style not equal operator).
-
-      subtype Token_Class_Name is
-        Token_Type range Tok_Char_Literal .. Tok_Identifier;
-      --  First token of name (4.1),
-      --    (identifier, char literal, operator symbol)
-
-      subtype Token_Class_Desig is
-        Token_Type range Tok_Operator_Symbol .. Tok_Identifier;
-      --  Token which can be a Designator (identifier, operator symbol)
-
-      subtype Token_Class_Namext is
-        Token_Type range Tok_Dot .. Tok_Left_Paren;
-      --  Name extension tokens. These are tokens which can appear immediately
-      --  after a name to extend it recursively (period, quote, left paren)
-
-      subtype Token_Class_Consk is
-        Token_Type range Tok_Left_Paren .. Tok_Range;
-      --  Keywords which can start constraint
-      --    (left paren, delta, digits, range)
-
-      subtype Token_Class_Eterm is
-        Token_Type range Tok_Colon_Equal .. Tok_Semicolon;
-      --  Expression terminators. These tokens can never appear within a simple
-      --  expression. This is used for error recovery purposes (if we encounter
-      --  an error in an expression, we simply scan to the next Eterm token).
-
-      subtype Token_Class_Sterm is
-        Token_Type range Tok_Delta .. Tok_Dot_Dot;
-      --  Simple_Expression terminators. A Simple_Expression must be followed
-      --  by a token in this class, or an error message is issued complaining
-      --  about a missing binary operator.
-
-      subtype Token_Class_Atkwd is
-        Token_Type range Tok_Delta .. Tok_Range;
-      --  Attribute keywords. This class includes keywords which can be used
-      --  as an Attribute_Designator, namely DELTA, DIGITS and RANGE
-
-      subtype Token_Class_Cterm is
-        Token_Type range Tok_EOF .. Tok_Vertical_Bar;
-      --  Choice terminators. These tokens terminate a choice. This is used for
-      --  error recovery purposes (if we encounter an error in a Choice, we
-      --  simply scan to the next Cterm token).
-
-      subtype Token_Class_Chtok is
-        Token_Type range Tok_Arrow .. Tok_Dot_Dot;
-      --  Choice tokens. These tokens signal a choice when used in an Aggregate
-
-      subtype Token_Class_Cunit is
-        Token_Type range Tok_Function .. Tok_Separate;
-      --  Tokens which can begin a compilation unit
-
-      subtype Token_Class_Declk is
-        Token_Type range Tok_Entry .. Tok_Procedure;
-      --  Keywords which start a declaration
-
-      subtype Token_Class_Deckn is
-        Token_Type range Tok_Entry .. Tok_Use;
-      --  Keywords which start a declaration but can't start a compilation unit
-
-      subtype Token_Class_After_SM is
-        Token_Type range Tok_Less_Less .. Tok_EOF;
-      --  Tokens which always, or almost always, appear after a semicolon. Used
-      --  in the Resync_Past_Semicolon routine to avoid gobbling up stuff when
-      --  a semicolon is missing. Of significance only for error recovery.
-
-      subtype Token_Class_Labeled_Stmt is
-        Token_Type range Tok_Begin .. Tok_While;
-      --  Tokens which start labeled statements
-
-      type Token_Flag_Array is array (Token_Type) of Boolean;
-      Is_Reserved_Keyword : constant Token_Flag_Array := Token_Flag_Array'(
-         Tok_Mod      .. Tok_Rem      => True,
-         Tok_New      .. Tok_Null     => True,
-         Tok_Delta    .. Tok_Range    => True,
-         Tok_And      .. Tok_Xor      => True,
-         Tok_In       .. Tok_Not      => True,
-         Tok_Abstract .. Tok_Then     => True,
-         Tok_Abort    .. Tok_Separate => True,
-         others                       => False);
-      --  Flag array used to test for reserved word
+   subtype Token_Class_Numeric_Literal is
+     Token_Type range Tok_Integer_Literal .. Tok_Real_Literal;
+   --  Numeric literal
+
+   subtype Token_Class_Literal is
+     Token_Type range Tok_Integer_Literal .. Tok_Operator_Symbol;
+   --  Literal
+
+   subtype Token_Class_Lit_Or_Name is
+     Token_Type range Tok_Integer_Literal .. Tok_Identifier;
+
+   subtype Token_Class_Binary_Addop is
+     Token_Type range Tok_Ampersand .. Tok_Plus;
+   --  Binary adding operator (& + -)
+
+   subtype Token_Class_Unary_Addop is
+     Token_Type range Tok_Minus .. Tok_Plus;
+   --  Unary adding operator (+ -)
+
+   subtype Token_Class_Mulop is
+     Token_Type range Tok_Asterisk .. Tok_Slash;
+   --  Multiplying operator
+
+   subtype Token_Class_Logop is
+     Token_Type range Tok_And .. Tok_Xor;
+   --  Logical operator (and, or, xor)
+
+   subtype Token_Class_Relop is
+     Token_Type range Tok_Less .. Tok_Box;
+   --  Relational operator (= /= < <= > >= not, in plus <> to catch misuse
+   --  of Pascal style not equal operator).
+
+   subtype Token_Class_Name is
+     Token_Type range Tok_Char_Literal .. Tok_Identifier;
+   --  First token of name (4.1),
+   --    (identifier, char literal, operator symbol)
+
+   subtype Token_Class_Desig is
+     Token_Type range Tok_Operator_Symbol .. Tok_Identifier;
+   --  Token which can be a Designator (identifier, operator symbol)
+
+   subtype Token_Class_Namext is
+     Token_Type range Tok_Dot .. Tok_Left_Paren;
+   --  Name extension tokens. These are tokens which can appear immediately
+   --  after a name to extend it recursively (period, quote, left paren)
+
+   subtype Token_Class_Consk is
+     Token_Type range Tok_Left_Paren .. Tok_Range;
+   --  Keywords which can start constraint
+   --    (left paren, delta, digits, range)
+
+   subtype Token_Class_Eterm is
+     Token_Type range Tok_Colon_Equal .. Tok_Semicolon;
+   --  Expression terminators. These tokens can never appear within a simple
+   --  expression. This is used for error recovery purposes (if we encounter
+   --  an error in an expression, we simply scan to the next Eterm token).
+
+   subtype Token_Class_Sterm is
+     Token_Type range Tok_Delta .. Tok_Dot_Dot;
+   --  Simple_Expression terminators. A Simple_Expression must be followed
+   --  by a token in this class, or an error message is issued complaining
+   --  about a missing binary operator.
+
+   subtype Token_Class_Atkwd is
+     Token_Type range Tok_Delta .. Tok_Range;
+   --  Attribute keywords. This class includes keywords which can be used
+   --  as an Attribute_Designator, namely DELTA, DIGITS and RANGE
+
+   subtype Token_Class_Cterm is
+     Token_Type range Tok_EOF .. Tok_Vertical_Bar;
+   --  Choice terminators. These tokens terminate a choice. This is used for
+   --  error recovery purposes (if we encounter an error in a Choice, we
+   --  simply scan to the next Cterm token).
+
+   subtype Token_Class_Chtok is
+     Token_Type range Tok_Arrow .. Tok_Dot_Dot;
+   --  Choice tokens. These tokens signal a choice when used in an Aggregate
+
+   subtype Token_Class_Cunit is
+     Token_Type range Tok_Function .. Tok_Separate;
+   --  Tokens which can begin a compilation unit
+
+   subtype Token_Class_Declk is
+     Token_Type range Tok_Entry .. Tok_Procedure;
+   --  Keywords which start a declaration
+
+   subtype Token_Class_Deckn is
+     Token_Type range Tok_Entry .. Tok_Use;
+   --  Keywords which start a declaration but can't start a compilation unit
+
+   subtype Token_Class_After_SM is
+     Token_Type range Tok_Less_Less .. Tok_EOF;
+   --  Tokens which always, or almost always, appear after a semicolon. Used
+   --  in the Resync_Past_Semicolon routine to avoid gobbling up stuff when
+   --  a semicolon is missing. Of significance only for error recovery.
+
+   subtype Token_Class_Labeled_Stmt is
+     Token_Type range Tok_Begin .. Tok_While;
+   --  Tokens which start labeled statements
+
+   type Token_Flag_Array is array (Token_Type) of Boolean;
+   Is_Reserved_Keyword : constant Token_Flag_Array :=
+                           Token_Flag_Array'
+                             (Tok_Mod      .. Tok_Rem      => True,
+                              Tok_New      .. Tok_Null     => True,
+                              Tok_Delta    .. Tok_Range    => True,
+                              Tok_And      .. Tok_Xor      => True,
+                              Tok_In       .. Tok_Not      => True,
+                              Tok_Abstract .. Tok_Then     => True,
+                              Tok_Abort    .. Tok_Separate => True,
+                              others                       => False);
+   --  Flag array used to test for reserved word
+
+   procedure Initialize_Ada_Keywords;
+   --  Set up Token_Type values in Names table entries for Ada reserved
+   --  words.
 
    --------------------------
    -- Scan State Variables --
@@ -444,7 +449,7 @@ package Scans is
    --  Saves the current scan state for possible later restoration. Note that
    --  there is no harm in saving the state and then never restoring it.
 
-   procedure Restore_Scan_State (Saved_State : in Saved_Scan_State);
+   procedure Restore_Scan_State (Saved_State : Saved_Scan_State);
    pragma Inline (Restore_Scan_State);
    --  Restores a scan state saved by a call to Save_Scan_State.
    --  The saved scan state must refer to the current source file.
index 4a6f4f9..52a9fac 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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,13 @@ package body Scn is
       GNAT_Hedr : constant Text_Buffer (1 .. 78) := (others => '-');
 
    begin
-      Scanner.Initialize_Scanner (Unit, Index);
+      Scanner.Initialize_Scanner (Index);
+
+      if Index /= Internal_Source_File then
+         Set_Unit (Index, Unit);
+      end if;
+
+      Current_Source_Unit := Unit;
 
       --  Set default for Comes_From_Source (except if we are going to process
       --  an artificial string internally created within the compiler and
index 1f1fe15..ad7f3b3 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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- --
@@ -141,113 +141,16 @@ package body Scng is
    -- Initialize_Scanner --
    ------------------------
 
-   procedure Initialize_Scanner
-     (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
-
+   procedure Initialize_Scanner (Index : Source_File_Index) is
    begin
       --  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);
+      Scans.Initialize_Ada_Keywords;
 
       --  Initialize scan control variables
 
       Current_Source_File       := Index;
       Source                    := Source_Text (Current_Source_File);
-      Current_Source_Unit       := Unit;
       Scan_Ptr                  := Source_First (Current_Source_File);
       Token                     := No_Token;
       Token_Ptr                 := Scan_Ptr;
@@ -2330,12 +2233,7 @@ package body Scng is
 
          --  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
+         if Is_Keyword_Name (Token_Name) then
             Token := Token_Type'Val (Get_Name_Table_Byte (Token_Name));
 
             --  Deal with possible style check for non-lower case keyword, but
index e48aa3b..201ce9d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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,14 +60,8 @@ generic
 
 package Scng is
 
-   procedure Initialize_Scanner
-     (Unit  : Unit_Number_Type;
-      Index : Source_File_Index);
-   --  Initialize lexical scanner for scanning a new file. The caller has
-   --  completed the construction of the Units.Table entry for the specified
-   --  Unit and Index references the corresponding source file. A special
-   --  case is when Unit = No_Unit_Number, and Index corresponds to the
-   --  source index for reading the configuration pragma file.
+   procedure Initialize_Scanner (Index : Source_File_Index);
+   --  Initialize lexical scanner for scanning a new file referenced by Index.
    --  Initialize_Scanner does not call Scan.
 
    procedure Scan;
index dee27ca..9ccfeda 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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,7 +26,7 @@
 
 --  This child package of Sinfo contains some routines that permit in place
 --  alteration of existing tree nodes by changing the value in the Nkind
---  field. Since Nkind functions logically in a manner similart to a variant
+--  field. Since Nkind functions logically in a manner similar to a variant
 --  record discriminant part, such alterations cannot be permitted in a
 --  general manner, but in some specific cases, the fields of related nodes
 --  have been deliberately layed out in a manner that permits such alteration.
index 9ad678f..39e2332 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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- --
@@ -193,6 +193,7 @@ package body Sinput.C is
                Source_Last         => Hi,
                Source_Text         => Src,
                Template            => No_Source_File,
+               Unit                => No_Unit,
                Time_Stamp          => Empty_Time_Stamp);
 
          Alloc_Line_Tables (S, Opt.Table_Factor * Alloc.Lines_Initial);
index 43b2200..9e29dbc 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2004 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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- --
@@ -441,6 +441,7 @@ package body Sinput.L is
                   Source_Last         => Hi,
                   Source_Text         => Src,
                   Template            => No_Source_File,
+                  Unit                => No_Unit,
                   Time_Stamp          => Osint.Current_Source_File_Stamp);
 
             Alloc_Line_Tables (S, Opt.Table_Factor * Alloc.Lines_Initial);
@@ -497,7 +498,7 @@ package body Sinput.L is
                --  Initialize the scanner and set its behavior for
                --  preprocessing, then preprocess.
 
-               Scn.Scanner.Initialize_Scanner (No_Unit, X);
+               Scn.Scanner.Initialize_Scanner (X);
 
                Scn.Scanner.Set_Special_Character ('#');
                Scn.Scanner.Set_Special_Character ('$');
index 102e437..a333b09 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2003 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2006, 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- --
@@ -57,7 +57,7 @@ package body Sinput.P is
    --------------------------------
 
    procedure Restore_Project_Scan_State
-     (Saved_State : in Saved_Project_Scan_State)
+     (Saved_State : Saved_Project_Scan_State)
    is
    begin
       Restore_Scan_State (Saved_State.Scan_State);
@@ -84,7 +84,7 @@ package body Sinput.P is
 
    function Source_File_Is_Subunit (X : Source_File_Index) return Boolean is
    begin
-      Prj.Err.Scanner.Initialize_Scanner (No_Unit, X);
+      Prj.Err.Scanner.Initialize_Scanner (X);
 
       --  We scan past junk to the first interesting compilation unit
       --  token, to see if it is SEPARATE. We ignore WITH keywords during
index d20adf5..7efc71a 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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- --
@@ -1155,6 +1155,11 @@ package body Sinput is
       return Source_File.Table (S).Time_Stamp;
    end Time_Stamp;
 
+   function Unit (S : SFI) return Unit_Number_Type is
+   begin
+      return Source_File.Table (S).Unit;
+   end Unit;
+
    ------------------------------------------
    -- Set Procedures for Source File Table --
    ------------------------------------------
@@ -1174,6 +1179,11 @@ package body Sinput is
       Source_File.Table (S).License := L;
    end Set_License;
 
+   procedure Set_Unit (S : SFI; U : Unit_Number_Type) is
+   begin
+      Source_File.Table (S).Unit := U;
+   end Set_Unit;
+
    ----------------------
    -- Trim_Lines_Table --
    ----------------------
index 092707c..cd472c6 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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- --
@@ -268,6 +268,10 @@ package Sinput is
    --    is a generic instantiation. Set to No_Source_File for the normal case
    --    of a non-instantiation entry. See Sinput-L for details.
 
+   --  Unit : Unit_Number_Type;
+   --    Identifies the unit contained in this source file. Set by
+   --    Initialize_Scanner, must not be subsequently altered.
+
    --  The source file table is accessed by clients using the following
    --  subprogram interface:
 
@@ -299,11 +303,13 @@ package Sinput is
    function Source_Last       (S : SFI) return Source_Ptr;
    function Source_Text       (S : SFI) return Source_Buffer_Ptr;
    function Template          (S : SFI) return Source_File_Index;
+   function Unit              (S : SFI) return Unit_Number_Type;
    function Time_Stamp        (S : SFI) return Time_Stamp_Type;
 
    procedure Set_Keyword_Casing    (S : SFI; C : Casing_Type);
    procedure Set_Identifier_Casing (S : SFI; C : Casing_Type);
    procedure Set_License           (S : SFI; L : License_Type);
+   procedure Set_Unit              (S : SFI; U : Unit_Number_Type);
 
    function Last_Source_File return Source_File_Index;
    --  Index of last source file table entry
@@ -686,6 +692,7 @@ private
       Identifier_Casing : Casing_Type;
       Instantiation     : Source_Ptr;
       Template          : Source_File_Index;
+      Unit              : Unit_Number_Type;
 
       --  The following fields are for internal use only (i.e. only in the
       --  body of Sinput or its children, with no direct access by clients).
index cd7ae14..513ba1f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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,6 +32,7 @@
 ------------------------------------------------------------------------------
 
 with Namet; use Namet;
+with Opt;   use Opt;
 with Table;
 
 package body Snames is
@@ -174,6 +175,7 @@ package body Snames is
      "ada_83#" &
      "ada_95#" &
      "ada_05#" &
+     "ada_2005#" &
      "assertion_policy#" &
      "c_pass_by_copy#" &
      "compile_time_warning#" &
@@ -992,6 +994,19 @@ package body Snames is
           Last_Renamable_Function_Attribute;
    end Is_Function_Attribute_Name;
 
+   ---------------------
+   -- Is_Keyword_Name --
+   ---------------------
+
+   function Is_Keyword_Name (N : Name_Id) return Boolean is
+   begin
+      return Get_Name_Table_Byte (N) /= 0
+        and then (Ada_Version >= Ada_95
+                  or else N not in Ada_95_Reserved_Words)
+        and then (Ada_Version >= Ada_05
+                  or else N not in Ada_2005_Reserved_Words);
+   end Is_Keyword_Name;
+
    ----------------------------
    -- Is_Locking_Policy_Name --
    ----------------------------
index 9722502..2191b79 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, 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- --
@@ -336,58 +336,59 @@ package Snames is
    Name_Ada_83                         : constant Name_Id := N + 114; -- GNAT
    Name_Ada_95                         : constant Name_Id := N + 115; -- GNAT
    Name_Ada_05                         : constant Name_Id := N + 116; -- GNAT
-   Name_Assertion_Policy               : constant Name_Id := N + 117; -- Ada 05
-   Name_C_Pass_By_Copy                 : constant Name_Id := N + 118; -- GNAT
-   Name_Compile_Time_Warning           : constant Name_Id := N + 119; -- GNAT
-   Name_Component_Alignment            : constant Name_Id := N + 120; -- GNAT
-   Name_Convention_Identifier          : constant Name_Id := N + 121; -- GNAT
-   Name_Debug_Policy                   : constant Name_Id := N + 122; -- GNAT
-   Name_Detect_Blocking                : constant Name_Id := N + 123; -- Ada 05
-   Name_Discard_Names                  : constant Name_Id := N + 124;
-   Name_Elaboration_Checks             : constant Name_Id := N + 125; -- GNAT
-   Name_Eliminate                      : constant Name_Id := N + 126; -- GNAT
-   Name_Explicit_Overriding            : constant Name_Id := N + 127; -- Ada 05
-   Name_Extend_System                  : constant Name_Id := N + 128; -- GNAT
-   Name_Extensions_Allowed             : constant Name_Id := N + 129; -- GNAT
-   Name_External_Name_Casing           : constant Name_Id := N + 130; -- GNAT
-   Name_Float_Representation           : constant Name_Id := N + 131; -- GNAT
-   Name_Initialize_Scalars             : constant Name_Id := N + 132; -- GNAT
-   Name_Interrupt_State                : constant Name_Id := N + 133; -- GNAT
-   Name_License                        : constant Name_Id := N + 134; -- GNAT
-   Name_Locking_Policy                 : constant Name_Id := N + 135;
-   Name_Long_Float                     : constant Name_Id := N + 136; -- VMS
-   Name_No_Run_Time                    : constant Name_Id := N + 137; -- GNAT
-   Name_No_Strict_Aliasing             : constant Name_Id := N + 138; -- GNAT
-   Name_Normalize_Scalars              : constant Name_Id := N + 139;
-   Name_Polling                        : constant Name_Id := N + 140; -- GNAT
-   Name_Persistent_BSS                 : constant Name_Id := N + 141; -- GNAT
-   Name_Profile                        : constant Name_Id := N + 142; -- Ada 05
-   Name_Profile_Warnings               : constant Name_Id := N + 143; -- GNAT
-   Name_Propagate_Exceptions           : constant Name_Id := N + 144; -- GNAT
-   Name_Queuing_Policy                 : constant Name_Id := N + 145;
-   Name_Ravenscar                      : constant Name_Id := N + 146; -- Ada 05
-   Name_Restricted_Run_Time            : constant Name_Id := N + 147; -- GNAT
-   Name_Restrictions                   : constant Name_Id := N + 148;
-   Name_Restriction_Warnings           : constant Name_Id := N + 149; -- GNAT
-   Name_Reviewable                     : constant Name_Id := N + 150;
-   Name_Source_File_Name               : constant Name_Id := N + 151; -- GNAT
-   Name_Source_File_Name_Project       : constant Name_Id := N + 152; -- GNAT
-   Name_Style_Checks                   : constant Name_Id := N + 153; -- GNAT
-   Name_Suppress                       : constant Name_Id := N + 154;
-   Name_Suppress_Exception_Locations   : constant Name_Id := N + 155; -- GNAT
-   Name_Task_Dispatching_Policy        : constant Name_Id := N + 156;
-   Name_Universal_Data                 : constant Name_Id := N + 157; -- AAMP
-   Name_Unsuppress                     : constant Name_Id := N + 158; -- GNAT
-   Name_Use_VADS_Size                  : constant Name_Id := N + 159; -- GNAT
-   Name_Validity_Checks                : constant Name_Id := N + 160; -- GNAT
-   Name_Warnings                       : constant Name_Id := N + 161; -- GNAT
-   Last_Configuration_Pragma_Name      : constant Name_Id := N + 161;
+   Name_Ada_2005                       : constant Name_Id := N + 117; -- GNAT
+   Name_Assertion_Policy               : constant Name_Id := N + 118; -- Ada 05
+   Name_C_Pass_By_Copy                 : constant Name_Id := N + 119; -- GNAT
+   Name_Compile_Time_Warning           : constant Name_Id := N + 120; -- GNAT
+   Name_Component_Alignment            : constant Name_Id := N + 121; -- GNAT
+   Name_Convention_Identifier          : constant Name_Id := N + 122; -- GNAT
+   Name_Debug_Policy                   : constant Name_Id := N + 123; -- GNAT
+   Name_Detect_Blocking                : constant Name_Id := N + 124; -- Ada 05
+   Name_Discard_Names                  : constant Name_Id := N + 125;
+   Name_Elaboration_Checks             : constant Name_Id := N + 126; -- GNAT
+   Name_Eliminate                      : constant Name_Id := N + 127; -- GNAT
+   Name_Explicit_Overriding            : constant Name_Id := N + 128; -- Ada 05
+   Name_Extend_System                  : constant Name_Id := N + 129; -- GNAT
+   Name_Extensions_Allowed             : constant Name_Id := N + 130; -- GNAT
+   Name_External_Name_Casing           : constant Name_Id := N + 131; -- GNAT
+   Name_Float_Representation           : constant Name_Id := N + 132; -- GNAT
+   Name_Initialize_Scalars             : constant Name_Id := N + 133; -- GNAT
+   Name_Interrupt_State                : constant Name_Id := N + 134; -- GNAT
+   Name_License                        : constant Name_Id := N + 135; -- GNAT
+   Name_Locking_Policy                 : constant Name_Id := N + 136;
+   Name_Long_Float                     : constant Name_Id := N + 137; -- VMS
+   Name_No_Run_Time                    : constant Name_Id := N + 138; -- GNAT
+   Name_No_Strict_Aliasing             : constant Name_Id := N + 139; -- GNAT
+   Name_Normalize_Scalars              : constant Name_Id := N + 140;
+   Name_Polling                        : constant Name_Id := N + 141; -- GNAT
+   Name_Persistent_BSS                 : constant Name_Id := N + 142; -- GNAT
+   Name_Profile                        : constant Name_Id := N + 143; -- Ada 05
+   Name_Profile_Warnings               : constant Name_Id := N + 144; -- GNAT
+   Name_Propagate_Exceptions           : constant Name_Id := N + 145; -- GNAT
+   Name_Queuing_Policy                 : constant Name_Id := N + 146;
+   Name_Ravenscar                      : constant Name_Id := N + 147; -- Ada 05
+   Name_Restricted_Run_Time            : constant Name_Id := N + 148; -- GNAT
+   Name_Restrictions                   : constant Name_Id := N + 149;
+   Name_Restriction_Warnings           : constant Name_Id := N + 150; -- GNAT
+   Name_Reviewable                     : constant Name_Id := N + 151;
+   Name_Source_File_Name               : constant Name_Id := N + 152; -- GNAT
+   Name_Source_File_Name_Project       : constant Name_Id := N + 153; -- GNAT
+   Name_Style_Checks                   : constant Name_Id := N + 154; -- GNAT
+   Name_Suppress                       : constant Name_Id := N + 155;
+   Name_Suppress_Exception_Locations   : constant Name_Id := N + 156; -- GNAT
+   Name_Task_Dispatching_Policy        : constant Name_Id := N + 157;
+   Name_Universal_Data                 : constant Name_Id := N + 158; -- AAMP
+   Name_Unsuppress                     : constant Name_Id := N + 159; -- GNAT
+   Name_Use_VADS_Size                  : constant Name_Id := N + 160; -- GNAT
+   Name_Validity_Checks                : constant Name_Id := N + 161; -- GNAT
+   Name_Warnings                       : constant Name_Id := N + 162; -- GNAT
+   Last_Configuration_Pragma_Name      : constant Name_Id := N + 162;
 
    --  Remaining pragma names
 
-   Name_Abort_Defer                    : constant Name_Id := N + 162; -- GNAT
-   Name_All_Calls_Remote               : constant Name_Id := N + 163;
-   Name_Annotate                       : constant Name_Id := N + 164; -- GNAT
+   Name_Abort_Defer                    : constant Name_Id := N + 163; -- GNAT
+   Name_All_Calls_Remote               : constant Name_Id := N + 164;
+   Name_Annotate                       : constant Name_Id := N + 165; -- 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
@@ -395,81 +396,81 @@ package Snames is
    --  and Check_Pragma_Id correctly recognize and process Name_AST_Entry.
    --  AST_Entry is a VMS specific pragma.
 
-   Name_Assert                         : constant Name_Id := N + 165; -- Ada 05
-   Name_Asynchronous                   : constant Name_Id := N + 166;
-   Name_Atomic                         : constant Name_Id := N + 167;
-   Name_Atomic_Components              : constant Name_Id := N + 168;
-   Name_Attach_Handler                 : constant Name_Id := N + 169;
-   Name_Comment                        : constant Name_Id := N + 170; -- GNAT
-   Name_Common_Object                  : constant Name_Id := N + 171; -- GNAT
-   Name_Complete_Representation        : constant Name_Id := N + 172; -- GNAT
-   Name_Complex_Representation         : constant Name_Id := N + 173; -- GNAT
-   Name_Controlled                     : constant Name_Id := N + 174;
-   Name_Convention                     : constant Name_Id := N + 175;
-   Name_CPP_Class                      : constant Name_Id := N + 176; -- GNAT
-   Name_CPP_Constructor                : constant Name_Id := N + 177; -- GNAT
-   Name_CPP_Virtual                    : constant Name_Id := N + 178; -- GNAT
-   Name_CPP_Vtable                     : constant Name_Id := N + 179; -- GNAT
-   Name_Debug                          : constant Name_Id := N + 180; -- GNAT
-   Name_Elaborate                      : constant Name_Id := N + 181; -- Ada 83
-   Name_Elaborate_All                  : constant Name_Id := N + 182;
-   Name_Elaborate_Body                 : constant Name_Id := N + 183;
-   Name_Export                         : constant Name_Id := N + 184;
-   Name_Export_Exception               : constant Name_Id := N + 185; -- VMS
-   Name_Export_Function                : constant Name_Id := N + 186; -- GNAT
-   Name_Export_Object                  : constant Name_Id := N + 187; -- GNAT
-   Name_Export_Procedure               : constant Name_Id := N + 188; -- GNAT
-   Name_Export_Value                   : constant Name_Id := N + 189; -- GNAT
-   Name_Export_Valued_Procedure        : constant Name_Id := N + 190; -- GNAT
-   Name_External                       : constant Name_Id := N + 191; -- GNAT
-   Name_Finalize_Storage_Only          : constant Name_Id := N + 192; -- GNAT
-   Name_Ident                          : constant Name_Id := N + 193; -- VMS
-   Name_Import                         : constant Name_Id := N + 194;
-   Name_Import_Exception               : constant Name_Id := N + 195; -- VMS
-   Name_Import_Function                : constant Name_Id := N + 196; -- GNAT
-   Name_Import_Object                  : constant Name_Id := N + 197; -- GNAT
-   Name_Import_Procedure               : constant Name_Id := N + 198; -- GNAT
-   Name_Import_Valued_Procedure        : constant Name_Id := N + 199; -- GNAT
-   Name_Inline                         : constant Name_Id := N + 200;
-   Name_Inline_Always                  : constant Name_Id := N + 201; -- GNAT
-   Name_Inline_Generic                 : constant Name_Id := N + 202; -- GNAT
-   Name_Inspection_Point               : constant Name_Id := N + 203;
-   Name_Interface_Name                 : constant Name_Id := N + 204; -- GNAT
-   Name_Interrupt_Handler              : constant Name_Id := N + 205;
-   Name_Interrupt_Priority             : constant Name_Id := N + 206;
-   Name_Java_Constructor               : constant Name_Id := N + 207; -- GNAT
-   Name_Java_Interface                 : constant Name_Id := N + 208; -- GNAT
-   Name_Keep_Names                     : constant Name_Id := N + 209; -- GNAT
-   Name_Link_With                      : constant Name_Id := N + 210; -- GNAT
-   Name_Linker_Alias                   : constant Name_Id := N + 211; -- GNAT
-   Name_Linker_Constructor             : constant Name_Id := N + 212; -- GNAT
-   Name_Linker_Destructor              : constant Name_Id := N + 213; -- GNAT
-   Name_Linker_Options                 : constant Name_Id := N + 214;
-   Name_Linker_Section                 : constant Name_Id := N + 215; -- GNAT
-   Name_List                           : constant Name_Id := N + 216;
-   Name_Machine_Attribute              : constant Name_Id := N + 217; -- GNAT
-   Name_Main                           : constant Name_Id := N + 218; -- GNAT
-   Name_Main_Storage                   : constant Name_Id := N + 219; -- GNAT
-   Name_Memory_Size                    : constant Name_Id := N + 220; -- Ada 83
-   Name_No_Return                      : constant Name_Id := N + 221; -- GNAT
-   Name_Obsolescent                    : constant Name_Id := N + 222; -- GNAT
-   Name_Optimize                       : constant Name_Id := N + 223;
-   Name_Optional_Overriding            : constant Name_Id := N + 224; -- Ada 05
-   Name_Pack                           : constant Name_Id := N + 225;
-   Name_Page                           : constant Name_Id := N + 226;
-   Name_Passive                        : constant Name_Id := N + 227; -- GNAT
-   Name_Preelaborate                   : constant Name_Id := N + 228;
-   Name_Preelaborate_05                : constant Name_Id := N + 229; -- GNAT
-   Name_Priority                       : constant Name_Id := N + 230;
-   Name_Psect_Object                   : constant Name_Id := N + 231; -- VMS
-   Name_Pure                           : constant Name_Id := N + 232;
-   Name_Pure_05                        : constant Name_Id := N + 233; -- GNAT
-   Name_Pure_Function                  : constant Name_Id := N + 234; -- GNAT
-   Name_Remote_Call_Interface          : constant Name_Id := N + 235;
-   Name_Remote_Types                   : constant Name_Id := N + 236;
-   Name_Share_Generic                  : constant Name_Id := N + 237; -- GNAT
-   Name_Shared                         : constant Name_Id := N + 238; -- Ada 83
-   Name_Shared_Passive                 : constant Name_Id := N + 239;
+   Name_Assert                         : constant Name_Id := N + 166; -- Ada 05
+   Name_Asynchronous                   : constant Name_Id := N + 167;
+   Name_Atomic                         : constant Name_Id := N + 168;
+   Name_Atomic_Components              : constant Name_Id := N + 169;
+   Name_Attach_Handler                 : constant Name_Id := N + 170;
+   Name_Comment                        : constant Name_Id := N + 171; -- GNAT
+   Name_Common_Object                  : constant Name_Id := N + 172; -- GNAT
+   Name_Complete_Representation        : constant Name_Id := N + 173; -- GNAT
+   Name_Complex_Representation         : constant Name_Id := N + 174; -- GNAT
+   Name_Controlled                     : constant Name_Id := N + 175;
+   Name_Convention                     : constant Name_Id := N + 176;
+   Name_CPP_Class                      : constant Name_Id := N + 177; -- GNAT
+   Name_CPP_Constructor                : constant Name_Id := N + 178; -- GNAT
+   Name_CPP_Virtual                    : constant Name_Id := N + 179; -- GNAT
+   Name_CPP_Vtable                     : constant Name_Id := N + 180; -- GNAT
+   Name_Debug                          : constant Name_Id := N + 181; -- GNAT
+   Name_Elaborate                      : constant Name_Id := N + 182; -- Ada 83
+   Name_Elaborate_All                  : constant Name_Id := N + 183;
+   Name_Elaborate_Body                 : constant Name_Id := N + 184;
+   Name_Export                         : constant Name_Id := N + 185;
+   Name_Export_Exception               : constant Name_Id := N + 186; -- VMS
+   Name_Export_Function                : constant Name_Id := N + 187; -- GNAT
+   Name_Export_Object                  : constant Name_Id := N + 188; -- GNAT
+   Name_Export_Procedure               : constant Name_Id := N + 189; -- GNAT
+   Name_Export_Value                   : constant Name_Id := N + 190; -- GNAT
+   Name_Export_Valued_Procedure        : constant Name_Id := N + 191; -- GNAT
+   Name_External                       : constant Name_Id := N + 192; -- GNAT
+   Name_Finalize_Storage_Only          : constant Name_Id := N + 193; -- GNAT
+   Name_Ident                          : constant Name_Id := N + 194; -- VMS
+   Name_Import                         : constant Name_Id := N + 195;
+   Name_Import_Exception               : constant Name_Id := N + 196; -- VMS
+   Name_Import_Function                : constant Name_Id := N + 197; -- GNAT
+   Name_Import_Object                  : constant Name_Id := N + 198; -- GNAT
+   Name_Import_Procedure               : constant Name_Id := N + 199; -- GNAT
+   Name_Import_Valued_Procedure        : constant Name_Id := N + 200; -- GNAT
+   Name_Inline                         : constant Name_Id := N + 201;
+   Name_Inline_Always                  : constant Name_Id := N + 202; -- GNAT
+   Name_Inline_Generic                 : constant Name_Id := N + 203; -- GNAT
+   Name_Inspection_Point               : constant Name_Id := N + 204;
+   Name_Interface_Name                 : constant Name_Id := N + 205; -- GNAT
+   Name_Interrupt_Handler              : constant Name_Id := N + 206;
+   Name_Interrupt_Priority             : constant Name_Id := N + 207;
+   Name_Java_Constructor               : constant Name_Id := N + 208; -- GNAT
+   Name_Java_Interface                 : constant Name_Id := N + 209; -- GNAT
+   Name_Keep_Names                     : constant Name_Id := N + 210; -- GNAT
+   Name_Link_With                      : constant Name_Id := N + 211; -- GNAT
+   Name_Linker_Alias                   : constant Name_Id := N + 212; -- GNAT
+   Name_Linker_Constructor             : constant Name_Id := N + 213; -- GNAT
+   Name_Linker_Destructor              : constant Name_Id := N + 214; -- GNAT
+   Name_Linker_Options                 : constant Name_Id := N + 215;
+   Name_Linker_Section                 : constant Name_Id := N + 216; -- GNAT
+   Name_List                           : constant Name_Id := N + 217;
+   Name_Machine_Attribute              : constant Name_Id := N + 218; -- GNAT
+   Name_Main                           : constant Name_Id := N + 219; -- GNAT
+   Name_Main_Storage                   : constant Name_Id := N + 220; -- GNAT
+   Name_Memory_Size                    : constant Name_Id := N + 221; -- Ada 83
+   Name_No_Return                      : constant Name_Id := N + 222; -- GNAT
+   Name_Obsolescent                    : constant Name_Id := N + 223; -- GNAT
+   Name_Optimize                       : constant Name_Id := N + 224;
+   Name_Optional_Overriding            : constant Name_Id := N + 225; -- Ada 05
+   Name_Pack                           : constant Name_Id := N + 226;
+   Name_Page                           : constant Name_Id := N + 227;
+   Name_Passive                        : constant Name_Id := N + 228; -- GNAT
+   Name_Preelaborate                   : constant Name_Id := N + 229;
+   Name_Preelaborate_05                : constant Name_Id := N + 230; -- GNAT
+   Name_Priority                       : constant Name_Id := N + 231;
+   Name_Psect_Object                   : constant Name_Id := N + 232; -- VMS
+   Name_Pure                           : constant Name_Id := N + 233;
+   Name_Pure_05                        : constant Name_Id := N + 234; -- GNAT
+   Name_Pure_Function                  : constant Name_Id := N + 235; -- GNAT
+   Name_Remote_Call_Interface          : constant Name_Id := N + 236;
+   Name_Remote_Types                   : constant Name_Id := N + 237;
+   Name_Share_Generic                  : constant Name_Id := N + 238; -- GNAT
+   Name_Shared                         : constant Name_Id := N + 239; -- Ada 83
+   Name_Shared_Passive                 : constant Name_Id := N + 240;
 
    --  Note: Storage_Size is not in this list because its name matches the
    --  name of the corresponding attribute. However, it is included in the
@@ -479,27 +480,27 @@ package Snames is
    --  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 + 240; -- GNAT
-   Name_Stream_Convert                 : constant Name_Id := N + 241; -- GNAT
-   Name_Subtitle                       : constant Name_Id := N + 242; -- GNAT
-   Name_Suppress_All                   : constant Name_Id := N + 243; -- GNAT
-   Name_Suppress_Debug_Info            : constant Name_Id := N + 244; -- GNAT
-   Name_Suppress_Initialization        : constant Name_Id := N + 245; -- GNAT
-   Name_System_Name                    : constant Name_Id := N + 246; -- Ada 83
-   Name_Task_Info                      : constant Name_Id := N + 247; -- GNAT
-   Name_Task_Name                      : constant Name_Id := N + 248; -- GNAT
-   Name_Task_Storage                   : constant Name_Id := N + 249; -- VMS
-   Name_Thread_Body                    : constant Name_Id := N + 250; -- GNAT
-   Name_Time_Slice                     : constant Name_Id := N + 251; -- GNAT
-   Name_Title                          : constant Name_Id := N + 252; -- GNAT
-   Name_Unchecked_Union                : constant Name_Id := N + 253; -- GNAT
-   Name_Unimplemented_Unit             : constant Name_Id := N + 254; -- GNAT
-   Name_Unreferenced                   : constant Name_Id := N + 255; -- GNAT
-   Name_Unreserve_All_Interrupts       : constant Name_Id := N + 256; -- GNAT
-   Name_Volatile                       : constant Name_Id := N + 257;
-   Name_Volatile_Components            : constant Name_Id := N + 258;
-   Name_Weak_External                  : constant Name_Id := N + 259; -- GNAT
-   Last_Pragma_Name                    : constant Name_Id := N + 259;
+   Name_Source_Reference               : constant Name_Id := N + 241; -- GNAT
+   Name_Stream_Convert                 : constant Name_Id := N + 242; -- GNAT
+   Name_Subtitle                       : constant Name_Id := N + 243; -- GNAT
+   Name_Suppress_All                   : constant Name_Id := N + 244; -- GNAT
+   Name_Suppress_Debug_Info            : constant Name_Id := N + 245; -- GNAT
+   Name_Suppress_Initialization        : constant Name_Id := N + 246; -- GNAT
+   Name_System_Name                    : constant Name_Id := N + 247; -- Ada 83
+   Name_Task_Info                      : constant Name_Id := N + 248; -- GNAT
+   Name_Task_Name                      : constant Name_Id := N + 249; -- GNAT
+   Name_Task_Storage                   : constant Name_Id := N + 250; -- VMS
+   Name_Thread_Body                    : constant Name_Id := N + 251; -- GNAT
+   Name_Time_Slice                     : constant Name_Id := N + 252; -- GNAT
+   Name_Title                          : constant Name_Id := N + 253; -- GNAT
+   Name_Unchecked_Union                : constant Name_Id := N + 254; -- GNAT
+   Name_Unimplemented_Unit             : constant Name_Id := N + 255; -- GNAT
+   Name_Unreferenced                   : constant Name_Id := N + 256; -- GNAT
+   Name_Unreserve_All_Interrupts       : constant Name_Id := N + 257; -- GNAT
+   Name_Volatile                       : constant Name_Id := N + 258;
+   Name_Volatile_Components            : constant Name_Id := N + 259;
+   Name_Weak_External                  : constant Name_Id := N + 260; -- GNAT
+   Last_Pragma_Name                    : constant Name_Id := N + 260;
 
    --  Language convention names for pragma Convention/Export/Import/Interface
    --  Note that Name_C is not included in this list, since it was already
@@ -510,114 +511,114 @@ package Snames is
    --  Entry and Protected, this is because these conventions cannot be
    --  specified by a pragma.
 
-   First_Convention_Name               : constant Name_Id := N + 260;
-   Name_Ada                            : constant Name_Id := N + 260;
-   Name_Assembler                      : constant Name_Id := N + 261;
-   Name_COBOL                          : constant Name_Id := N + 262;
-   Name_CPP                            : constant Name_Id := N + 263;
-   Name_Fortran                        : constant Name_Id := N + 264;
-   Name_Intrinsic                      : constant Name_Id := N + 265;
-   Name_Java                           : constant Name_Id := N + 266;
-   Name_Stdcall                        : constant Name_Id := N + 267;
-   Name_Stubbed                        : constant Name_Id := N + 268;
-   Last_Convention_Name                : constant Name_Id := N + 268;
+   First_Convention_Name               : constant Name_Id := N + 261;
+   Name_Ada                            : constant Name_Id := N + 261;
+   Name_Assembler                      : constant Name_Id := N + 262;
+   Name_COBOL                          : constant Name_Id := N + 263;
+   Name_CPP                            : constant Name_Id := N + 264;
+   Name_Fortran                        : constant Name_Id := N + 265;
+   Name_Intrinsic                      : constant Name_Id := N + 266;
+   Name_Java                           : constant Name_Id := N + 267;
+   Name_Stdcall                        : constant Name_Id := N + 268;
+   Name_Stubbed                        : constant Name_Id := N + 269;
+   Last_Convention_Name                : constant Name_Id := N + 269;
 
    --  The following names are preset as synonyms for Assembler
 
-   Name_Asm                            : constant Name_Id := N + 269;
-   Name_Assembly                       : constant Name_Id := N + 270;
+   Name_Asm                            : constant Name_Id := N + 270;
+   Name_Assembly                       : constant Name_Id := N + 271;
 
    --  The following names are preset as synonyms for C
 
-   Name_Default                        : constant Name_Id := N + 271;
+   Name_Default                        : constant Name_Id := N + 272;
    --  Name_Exernal (previously defined as pragma)
 
    --  The following names are present as synonyms for Stdcall
 
-   Name_DLL                            : constant Name_Id := N + 272;
-   Name_Win32                          : constant Name_Id := N + 273;
+   Name_DLL                            : constant Name_Id := N + 273;
+   Name_Win32                          : constant Name_Id := N + 274;
 
    --  Other special names used in processing pragmas
 
-   Name_As_Is                          : constant Name_Id := N + 274;
-   Name_Attribute_Name                 : constant Name_Id := N + 275;
-   Name_Body_File_Name                 : constant Name_Id := N + 276;
-   Name_Boolean_Entry_Barriers         : constant Name_Id := N + 277;
-   Name_Check                          : constant Name_Id := N + 278;
-   Name_Casing                         : constant Name_Id := N + 279;
-   Name_Code                           : constant Name_Id := N + 280;
-   Name_Component                      : constant Name_Id := N + 281;
-   Name_Component_Size_4               : constant Name_Id := N + 282;
-   Name_Copy                           : constant Name_Id := N + 283;
-   Name_D_Float                        : constant Name_Id := N + 284;
-   Name_Descriptor                     : constant Name_Id := N + 285;
-   Name_Dot_Replacement                : constant Name_Id := N + 286;
-   Name_Dynamic                        : constant Name_Id := N + 287;
-   Name_Entity                         : constant Name_Id := N + 288;
-   Name_Entry_Count                    : constant Name_Id := N + 289;
-   Name_External_Name                  : constant Name_Id := N + 290;
-   Name_First_Optional_Parameter       : constant Name_Id := N + 291;
-   Name_Form                           : constant Name_Id := N + 292;
-   Name_G_Float                        : constant Name_Id := N + 293;
-   Name_Gcc                            : constant Name_Id := N + 294;
-   Name_Gnat                           : constant Name_Id := N + 295;
-   Name_GPL                            : constant Name_Id := N + 296;
-   Name_IEEE_Float                     : constant Name_Id := N + 297;
-   Name_Ignore                         : constant Name_Id := N + 298;
-   Name_Info                           : constant Name_Id := N + 299;
-   Name_Internal                       : constant Name_Id := N + 300;
-   Name_Link_Name                      : constant Name_Id := N + 301;
-   Name_Lowercase                      : constant Name_Id := N + 302;
-   Name_Max_Entry_Queue_Depth          : constant Name_Id := N + 303;
-   Name_Max_Entry_Queue_Length         : constant Name_Id := N + 304;
-   Name_Max_Size                       : constant Name_Id := N + 305;
-   Name_Mechanism                      : constant Name_Id := N + 306;
-   Name_Message                        : constant Name_Id := N + 307;
-   Name_Mixedcase                      : constant Name_Id := N + 308;
-   Name_Modified_GPL                   : constant Name_Id := N + 309;
-   Name_Name                           : constant Name_Id := N + 310;
-   Name_NCA                            : constant Name_Id := N + 311;
-   Name_No                             : constant Name_Id := N + 312;
-   Name_No_Dependence                  : constant Name_Id := N + 313;
-   Name_No_Dynamic_Attachment          : constant Name_Id := N + 314;
-   Name_No_Dynamic_Interrupts          : constant Name_Id := N + 315;
-   Name_No_Requeue                     : constant Name_Id := N + 316;
-   Name_No_Requeue_Statements          : constant Name_Id := N + 317;
-   Name_No_Task_Attributes             : constant Name_Id := N + 318;
-   Name_No_Task_Attributes_Package     : constant Name_Id := N + 319;
-   Name_On                             : constant Name_Id := N + 320;
-   Name_Parameter_Types                : constant Name_Id := N + 321;
-   Name_Reference                      : constant Name_Id := N + 322;
-   Name_Restricted                     : constant Name_Id := N + 323;
-   Name_Result_Mechanism               : constant Name_Id := N + 324;
-   Name_Result_Type                    : constant Name_Id := N + 325;
-   Name_Runtime                        : constant Name_Id := N + 326;
-   Name_SB                             : constant Name_Id := N + 327;
-   Name_Secondary_Stack_Size           : constant Name_Id := N + 328;
-   Name_Section                        : constant Name_Id := N + 329;
-   Name_Semaphore                      : constant Name_Id := N + 330;
-   Name_Simple_Barriers                : constant Name_Id := N + 331;
-   Name_Spec_File_Name                 : constant Name_Id := N + 332;
-   Name_State                          : constant Name_Id := N + 333;
-   Name_Static                         : constant Name_Id := N + 334;
-   Name_Stack_Size                     : constant Name_Id := N + 335;
-   Name_Subunit_File_Name              : constant Name_Id := N + 336;
-   Name_Task_Stack_Size_Default        : constant Name_Id := N + 337;
-   Name_Task_Type                      : constant Name_Id := N + 338;
-   Name_Time_Slicing_Enabled           : constant Name_Id := N + 339;
-   Name_Top_Guard                      : constant Name_Id := N + 340;
-   Name_UBA                            : constant Name_Id := N + 341;
-   Name_UBS                            : constant Name_Id := N + 342;
-   Name_UBSB                           : constant Name_Id := N + 343;
-   Name_Unit_Name                      : constant Name_Id := N + 344;
-   Name_Unknown                        : constant Name_Id := N + 345;
-   Name_Unrestricted                   : constant Name_Id := N + 346;
-   Name_Uppercase                      : constant Name_Id := N + 347;
-   Name_User                           : constant Name_Id := N + 348;
-   Name_VAX_Float                      : constant Name_Id := N + 349;
-   Name_VMS                            : constant Name_Id := N + 350;
-   Name_Vtable_Ptr                     : constant Name_Id := N + 351;
-   Name_Working_Storage                : constant Name_Id := N + 352;
+   Name_As_Is                          : constant Name_Id := N + 275;
+   Name_Attribute_Name                 : constant Name_Id := N + 276;
+   Name_Body_File_Name                 : constant Name_Id := N + 277;
+   Name_Boolean_Entry_Barriers         : constant Name_Id := N + 278;
+   Name_Check                          : constant Name_Id := N + 279;
+   Name_Casing                         : constant Name_Id := N + 280;
+   Name_Code                           : constant Name_Id := N + 281;
+   Name_Component                      : constant Name_Id := N + 282;
+   Name_Component_Size_4               : constant Name_Id := N + 283;
+   Name_Copy                           : constant Name_Id := N + 284;
+   Name_D_Float                        : constant Name_Id := N + 285;
+   Name_Descriptor                     : constant Name_Id := N + 286;
+   Name_Dot_Replacement                : constant Name_Id := N + 287;
+   Name_Dynamic                        : constant Name_Id := N + 288;
+   Name_Entity                         : constant Name_Id := N + 289;
+   Name_Entry_Count                    : constant Name_Id := N + 290;
+   Name_External_Name                  : constant Name_Id := N + 291;
+   Name_First_Optional_Parameter       : constant Name_Id := N + 292;
+   Name_Form                           : constant Name_Id := N + 293;
+   Name_G_Float                        : constant Name_Id := N + 294;
+   Name_Gcc                            : constant Name_Id := N + 295;
+   Name_Gnat                           : constant Name_Id := N + 296;
+   Name_GPL                            : constant Name_Id := N + 297;
+   Name_IEEE_Float                     : constant Name_Id := N + 298;
+   Name_Ignore                         : constant Name_Id := N + 299;
+   Name_Info                           : constant Name_Id := N + 300;
+   Name_Internal                       : constant Name_Id := N + 301;
+   Name_Link_Name                      : constant Name_Id := N + 302;
+   Name_Lowercase                      : constant Name_Id := N + 303;
+   Name_Max_Entry_Queue_Depth          : constant Name_Id := N + 304;
+   Name_Max_Entry_Queue_Length         : constant Name_Id := N + 305;
+   Name_Max_Size                       : constant Name_Id := N + 306;
+   Name_Mechanism                      : constant Name_Id := N + 307;
+   Name_Message                        : constant Name_Id := N + 308;
+   Name_Mixedcase                      : constant Name_Id := N + 309;
+   Name_Modified_GPL                   : constant Name_Id := N + 310;
+   Name_Name                           : constant Name_Id := N + 311;
+   Name_NCA                            : constant Name_Id := N + 312;
+   Name_No                             : constant Name_Id := N + 313;
+   Name_No_Dependence                  : constant Name_Id := N + 314;
+   Name_No_Dynamic_Attachment          : constant Name_Id := N + 315;
+   Name_No_Dynamic_Interrupts          : constant Name_Id := N + 316;
+   Name_No_Requeue                     : constant Name_Id := N + 317;
+   Name_No_Requeue_Statements          : constant Name_Id := N + 318;
+   Name_No_Task_Attributes             : constant Name_Id := N + 319;
+   Name_No_Task_Attributes_Package     : constant Name_Id := N + 320;
+   Name_On                             : constant Name_Id := N + 321;
+   Name_Parameter_Types                : constant Name_Id := N + 322;
+   Name_Reference                      : constant Name_Id := N + 323;
+   Name_Restricted                     : constant Name_Id := N + 324;
+   Name_Result_Mechanism               : constant Name_Id := N + 325;
+   Name_Result_Type                    : constant Name_Id := N + 326;
+   Name_Runtime                        : constant Name_Id := N + 327;
+   Name_SB                             : constant Name_Id := N + 328;
+   Name_Secondary_Stack_Size           : constant Name_Id := N + 329;
+   Name_Section                        : constant Name_Id := N + 330;
+   Name_Semaphore                      : constant Name_Id := N + 331;
+   Name_Simple_Barriers                : constant Name_Id := N + 332;
+   Name_Spec_File_Name                 : constant Name_Id := N + 333;
+   Name_State                          : constant Name_Id := N + 334;
+   Name_Static                         : constant Name_Id := N + 335;
+   Name_Stack_Size                     : constant Name_Id := N + 336;
+   Name_Subunit_File_Name              : constant Name_Id := N + 337;
+   Name_Task_Stack_Size_Default        : constant Name_Id := N + 338;
+   Name_Task_Type                      : constant Name_Id := N + 339;
+   Name_Time_Slicing_Enabled           : constant Name_Id := N + 340;
+   Name_Top_Guard                      : constant Name_Id := N + 341;
+   Name_UBA                            : constant Name_Id := N + 342;
+   Name_UBS                            : constant Name_Id := N + 343;
+   Name_UBSB                           : constant Name_Id := N + 344;
+   Name_Unit_Name                      : constant Name_Id := N + 345;
+   Name_Unknown                        : constant Name_Id := N + 346;
+   Name_Unrestricted                   : constant Name_Id := N + 347;
+   Name_Uppercase                      : constant Name_Id := N + 348;
+   Name_User                           : constant Name_Id := N + 349;
+   Name_VAX_Float                      : constant Name_Id := N + 350;
+   Name_VMS                            : constant Name_Id := N + 351;
+   Name_Vtable_Ptr                     : constant Name_Id := N + 352;
+   Name_Working_Storage                : constant Name_Id := N + 353;
 
    --  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
@@ -631,166 +632,166 @@ package Snames is
    --  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 + 353;
-   Name_Abort_Signal                   : constant Name_Id := N + 353; -- GNAT
-   Name_Access                         : constant Name_Id := N + 354;
-   Name_Address                        : constant Name_Id := N + 355;
-   Name_Address_Size                   : constant Name_Id := N + 356; -- GNAT
-   Name_Aft                            : constant Name_Id := N + 357;
-   Name_Alignment                      : constant Name_Id := N + 358;
-   Name_Asm_Input                      : constant Name_Id := N + 359; -- GNAT
-   Name_Asm_Output                     : constant Name_Id := N + 360; -- GNAT
-   Name_AST_Entry                      : constant Name_Id := N + 361; -- VMS
-   Name_Bit                            : constant Name_Id := N + 362; -- GNAT
-   Name_Bit_Order                      : constant Name_Id := N + 363;
-   Name_Bit_Position                   : constant Name_Id := N + 364; -- GNAT
-   Name_Body_Version                   : constant Name_Id := N + 365;
-   Name_Callable                       : constant Name_Id := N + 366;
-   Name_Caller                         : constant Name_Id := N + 367;
-   Name_Code_Address                   : constant Name_Id := N + 368; -- GNAT
-   Name_Component_Size                 : constant Name_Id := N + 369;
-   Name_Compose                        : constant Name_Id := N + 370;
-   Name_Constrained                    : constant Name_Id := N + 371;
-   Name_Count                          : constant Name_Id := N + 372;
-   Name_Default_Bit_Order              : constant Name_Id := N + 373; -- GNAT
-   Name_Definite                       : constant Name_Id := N + 374;
-   Name_Delta                          : constant Name_Id := N + 375;
-   Name_Denorm                         : constant Name_Id := N + 376;
-   Name_Digits                         : constant Name_Id := N + 377;
-   Name_Elaborated                     : constant Name_Id := N + 378; -- GNAT
-   Name_Emax                           : constant Name_Id := N + 379; -- Ada 83
-   Name_Enum_Rep                       : constant Name_Id := N + 380; -- GNAT
-   Name_Epsilon                        : constant Name_Id := N + 381; -- Ada 83
-   Name_Exponent                       : constant Name_Id := N + 382;
-   Name_External_Tag                   : constant Name_Id := N + 383;
-   Name_First                          : constant Name_Id := N + 384;
-   Name_First_Bit                      : constant Name_Id := N + 385;
-   Name_Fixed_Value                    : constant Name_Id := N + 386; -- GNAT
-   Name_Fore                           : constant Name_Id := N + 387;
-   Name_Has_Access_Values              : constant Name_Id := N + 388; -- GNAT
-   Name_Has_Discriminants              : constant Name_Id := N + 389; -- GNAT
-   Name_Identity                       : constant Name_Id := N + 390;
-   Name_Img                            : constant Name_Id := N + 391; -- GNAT
-   Name_Integer_Value                  : constant Name_Id := N + 392; -- GNAT
-   Name_Large                          : constant Name_Id := N + 393; -- Ada 83
-   Name_Last                           : constant Name_Id := N + 394;
-   Name_Last_Bit                       : constant Name_Id := N + 395;
-   Name_Leading_Part                   : constant Name_Id := N + 396;
-   Name_Length                         : constant Name_Id := N + 397;
-   Name_Machine_Emax                   : constant Name_Id := N + 398;
-   Name_Machine_Emin                   : constant Name_Id := N + 399;
-   Name_Machine_Mantissa               : constant Name_Id := N + 400;
-   Name_Machine_Overflows              : constant Name_Id := N + 401;
-   Name_Machine_Radix                  : constant Name_Id := N + 402;
-   Name_Machine_Rounding               : constant Name_Id := N + 403; -- Ada 05
-   Name_Machine_Rounds                 : constant Name_Id := N + 404;
-   Name_Machine_Size                   : constant Name_Id := N + 405; -- GNAT
-   Name_Mantissa                       : constant Name_Id := N + 406; -- Ada 83
-   Name_Max_Size_In_Storage_Elements   : constant Name_Id := N + 407;
-   Name_Maximum_Alignment              : constant Name_Id := N + 408; -- GNAT
-   Name_Mechanism_Code                 : constant Name_Id := N + 409; -- GNAT
-   Name_Mod                            : constant Name_Id := N + 410;
-   Name_Model_Emin                     : constant Name_Id := N + 411;
-   Name_Model_Epsilon                  : constant Name_Id := N + 412;
-   Name_Model_Mantissa                 : constant Name_Id := N + 413;
-   Name_Model_Small                    : constant Name_Id := N + 414;
-   Name_Modulus                        : constant Name_Id := N + 415;
-   Name_Null_Parameter                 : constant Name_Id := N + 416; -- GNAT
-   Name_Object_Size                    : constant Name_Id := N + 417; -- GNAT
-   Name_Partition_ID                   : constant Name_Id := N + 418;
-   Name_Passed_By_Reference            : constant Name_Id := N + 419; -- GNAT
-   Name_Pool_Address                   : constant Name_Id := N + 420;
-   Name_Pos                            : constant Name_Id := N + 421;
-   Name_Position                       : constant Name_Id := N + 422;
-   Name_Range                          : constant Name_Id := N + 423;
-   Name_Range_Length                   : constant Name_Id := N + 424; -- GNAT
-   Name_Round                          : constant Name_Id := N + 425;
-   Name_Safe_Emax                      : constant Name_Id := N + 426; -- Ada 83
-   Name_Safe_First                     : constant Name_Id := N + 427;
-   Name_Safe_Large                     : constant Name_Id := N + 428; -- Ada 83
-   Name_Safe_Last                      : constant Name_Id := N + 429;
-   Name_Safe_Small                     : constant Name_Id := N + 430; -- Ada 83
-   Name_Scale                          : constant Name_Id := N + 431;
-   Name_Scaling                        : constant Name_Id := N + 432;
-   Name_Signed_Zeros                   : constant Name_Id := N + 433;
-   Name_Size                           : constant Name_Id := N + 434;
-   Name_Small                          : constant Name_Id := N + 435;
-   Name_Storage_Size                   : constant Name_Id := N + 436;
-   Name_Storage_Unit                   : constant Name_Id := N + 437; -- GNAT
-   Name_Stream_Size                    : constant Name_Id := N + 438; -- Ada 05
-   Name_Tag                            : constant Name_Id := N + 439;
-   Name_Target_Name                    : constant Name_Id := N + 440; -- GNAT
-   Name_Terminated                     : constant Name_Id := N + 441;
-   Name_To_Address                     : constant Name_Id := N + 442; -- GNAT
-   Name_Type_Class                     : constant Name_Id := N + 443; -- GNAT
-   Name_UET_Address                    : constant Name_Id := N + 444; -- GNAT
-   Name_Unbiased_Rounding              : constant Name_Id := N + 445;
-   Name_Unchecked_Access               : constant Name_Id := N + 446;
-   Name_Unconstrained_Array            : constant Name_Id := N + 447;
-   Name_Universal_Literal_String       : constant Name_Id := N + 448; -- GNAT
-   Name_Unrestricted_Access            : constant Name_Id := N + 449; -- GNAT
-   Name_VADS_Size                      : constant Name_Id := N + 450; -- GNAT
-   Name_Val                            : constant Name_Id := N + 451;
-   Name_Valid                          : constant Name_Id := N + 452;
-   Name_Value_Size                     : constant Name_Id := N + 453; -- GNAT
-   Name_Version                        : constant Name_Id := N + 454;
-   Name_Wchar_T_Size                   : constant Name_Id := N + 455; -- GNAT
-   Name_Wide_Wide_Width                : constant Name_Id := N + 456; -- Ada 05
-   Name_Wide_Width                     : constant Name_Id := N + 457;
-   Name_Width                          : constant Name_Id := N + 458;
-   Name_Word_Size                      : constant Name_Id := N + 459; -- GNAT
+   First_Attribute_Name                : constant Name_Id := N + 354;
+   Name_Abort_Signal                   : constant Name_Id := N + 354; -- GNAT
+   Name_Access                         : constant Name_Id := N + 355;
+   Name_Address                        : constant Name_Id := N + 356;
+   Name_Address_Size                   : constant Name_Id := N + 357; -- GNAT
+   Name_Aft                            : constant Name_Id := N + 358;
+   Name_Alignment                      : constant Name_Id := N + 359;
+   Name_Asm_Input                      : constant Name_Id := N + 360; -- GNAT
+   Name_Asm_Output                     : constant Name_Id := N + 361; -- GNAT
+   Name_AST_Entry                      : constant Name_Id := N + 362; -- VMS
+   Name_Bit                            : constant Name_Id := N + 363; -- GNAT
+   Name_Bit_Order                      : constant Name_Id := N + 364;
+   Name_Bit_Position                   : constant Name_Id := N + 365; -- GNAT
+   Name_Body_Version                   : constant Name_Id := N + 366;
+   Name_Callable                       : constant Name_Id := N + 367;
+   Name_Caller                         : constant Name_Id := N + 368;
+   Name_Code_Address                   : constant Name_Id := N + 369; -- GNAT
+   Name_Component_Size                 : constant Name_Id := N + 370;
+   Name_Compose                        : constant Name_Id := N + 371;
+   Name_Constrained                    : constant Name_Id := N + 372;
+   Name_Count                          : constant Name_Id := N + 373;
+   Name_Default_Bit_Order              : constant Name_Id := N + 374; -- GNAT
+   Name_Definite                       : constant Name_Id := N + 375;
+   Name_Delta                          : constant Name_Id := N + 376;
+   Name_Denorm                         : constant Name_Id := N + 377;
+   Name_Digits                         : constant Name_Id := N + 378;
+   Name_Elaborated                     : constant Name_Id := N + 379; -- GNAT
+   Name_Emax                           : constant Name_Id := N + 380; -- Ada 83
+   Name_Enum_Rep                       : constant Name_Id := N + 381; -- GNAT
+   Name_Epsilon                        : constant Name_Id := N + 382; -- Ada 83
+   Name_Exponent                       : constant Name_Id := N + 383;
+   Name_External_Tag                   : constant Name_Id := N + 384;
+   Name_First                          : constant Name_Id := N + 385;
+   Name_First_Bit                      : constant Name_Id := N + 386;
+   Name_Fixed_Value                    : constant Name_Id := N + 387; -- GNAT
+   Name_Fore                           : constant Name_Id := N + 388;
+   Name_Has_Access_Values              : constant Name_Id := N + 389; -- GNAT
+   Name_Has_Discriminants              : constant Name_Id := N + 390; -- GNAT
+   Name_Identity                       : constant Name_Id := N + 391;
+   Name_Img                            : constant Name_Id := N + 392; -- GNAT
+   Name_Integer_Value                  : constant Name_Id := N + 393; -- GNAT
+   Name_Large                          : constant Name_Id := N + 394; -- Ada 83
+   Name_Last                           : constant Name_Id := N + 395;
+   Name_Last_Bit                       : constant Name_Id := N + 396;
+   Name_Leading_Part                   : constant Name_Id := N + 397;
+   Name_Length                         : constant Name_Id := N + 398;
+   Name_Machine_Emax                   : constant Name_Id := N + 399;
+   Name_Machine_Emin                   : constant Name_Id := N + 400;
+   Name_Machine_Mantissa               : constant Name_Id := N + 401;
+   Name_Machine_Overflows              : constant Name_Id := N + 402;
+   Name_Machine_Radix                  : constant Name_Id := N + 403;
+   Name_Machine_Rounding               : constant Name_Id := N + 404; -- Ada 05
+   Name_Machine_Rounds                 : constant Name_Id := N + 405;
+   Name_Machine_Size                   : constant Name_Id := N + 406; -- GNAT
+   Name_Mantissa                       : constant Name_Id := N + 407; -- Ada 83
+   Name_Max_Size_In_Storage_Elements   : constant Name_Id := N + 408;
+   Name_Maximum_Alignment              : constant Name_Id := N + 409; -- GNAT
+   Name_Mechanism_Code                 : constant Name_Id := N + 410; -- GNAT
+   Name_Mod                            : constant Name_Id := N + 411;
+   Name_Model_Emin                     : constant Name_Id := N + 412;
+   Name_Model_Epsilon                  : constant Name_Id := N + 413;
+   Name_Model_Mantissa                 : constant Name_Id := N + 414;
+   Name_Model_Small                    : constant Name_Id := N + 415;
+   Name_Modulus                        : constant Name_Id := N + 416;
+   Name_Null_Parameter                 : constant Name_Id := N + 417; -- GNAT
+   Name_Object_Size                    : constant Name_Id := N + 418; -- GNAT
+   Name_Partition_ID                   : constant Name_Id := N + 419;
+   Name_Passed_By_Reference            : constant Name_Id := N + 420; -- GNAT
+   Name_Pool_Address                   : constant Name_Id := N + 421;
+   Name_Pos                            : constant Name_Id := N + 422;
+   Name_Position                       : constant Name_Id := N + 423;
+   Name_Range                          : constant Name_Id := N + 424;
+   Name_Range_Length                   : constant Name_Id := N + 425; -- GNAT
+   Name_Round                          : constant Name_Id := N + 426;
+   Name_Safe_Emax                      : constant Name_Id := N + 427; -- Ada 83
+   Name_Safe_First                     : constant Name_Id := N + 428;
+   Name_Safe_Large                     : constant Name_Id := N + 429; -- Ada 83
+   Name_Safe_Last                      : constant Name_Id := N + 430;
+   Name_Safe_Small                     : constant Name_Id := N + 431; -- Ada 83
+   Name_Scale                          : constant Name_Id := N + 432;
+   Name_Scaling                        : constant Name_Id := N + 433;
+   Name_Signed_Zeros                   : constant Name_Id := N + 434;
+   Name_Size                           : constant Name_Id := N + 435;
+   Name_Small                          : constant Name_Id := N + 436;
+   Name_Storage_Size                   : constant Name_Id := N + 437;
+   Name_Storage_Unit                   : constant Name_Id := N + 438; -- GNAT
+   Name_Stream_Size                    : constant Name_Id := N + 439; -- Ada 05
+   Name_Tag                            : constant Name_Id := N + 440;
+   Name_Target_Name                    : constant Name_Id := N + 441; -- GNAT
+   Name_Terminated                     : constant Name_Id := N + 442;
+   Name_To_Address                     : constant Name_Id := N + 443; -- GNAT
+   Name_Type_Class                     : constant Name_Id := N + 444; -- GNAT
+   Name_UET_Address                    : constant Name_Id := N + 445; -- GNAT
+   Name_Unbiased_Rounding              : constant Name_Id := N + 446;
+   Name_Unchecked_Access               : constant Name_Id := N + 447;
+   Name_Unconstrained_Array            : constant Name_Id := N + 448;
+   Name_Universal_Literal_String       : constant Name_Id := N + 449; -- GNAT
+   Name_Unrestricted_Access            : constant Name_Id := N + 450; -- GNAT
+   Name_VADS_Size                      : constant Name_Id := N + 451; -- GNAT
+   Name_Val                            : constant Name_Id := N + 452;
+   Name_Valid                          : constant Name_Id := N + 453;
+   Name_Value_Size                     : constant Name_Id := N + 454; -- GNAT
+   Name_Version                        : constant Name_Id := N + 455;
+   Name_Wchar_T_Size                   : constant Name_Id := N + 456; -- GNAT
+   Name_Wide_Wide_Width                : constant Name_Id := N + 457; -- Ada 05
+   Name_Wide_Width                     : constant Name_Id := N + 458;
+   Name_Width                          : constant Name_Id := N + 459;
+   Name_Word_Size                      : constant Name_Id := N + 460; -- 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 + 460;
-   Name_Adjacent                       : constant Name_Id := N + 460;
-   Name_Ceiling                        : constant Name_Id := N + 461;
-   Name_Copy_Sign                      : constant Name_Id := N + 462;
-   Name_Floor                          : constant Name_Id := N + 463;
-   Name_Fraction                       : constant Name_Id := N + 464;
-   Name_Image                          : constant Name_Id := N + 465;
-   Name_Input                          : constant Name_Id := N + 466;
-   Name_Machine                        : constant Name_Id := N + 467;
-   Name_Max                            : constant Name_Id := N + 468;
-   Name_Min                            : constant Name_Id := N + 469;
-   Name_Model                          : constant Name_Id := N + 470;
-   Name_Pred                           : constant Name_Id := N + 471;
-   Name_Remainder                      : constant Name_Id := N + 472;
-   Name_Rounding                       : constant Name_Id := N + 473;
-   Name_Succ                           : constant Name_Id := N + 474;
-   Name_Truncation                     : constant Name_Id := N + 475;
-   Name_Value                          : constant Name_Id := N + 476;
-   Name_Wide_Image                     : constant Name_Id := N + 477;
-   Name_Wide_Wide_Image                : constant Name_Id := N + 478;
-   Name_Wide_Value                     : constant Name_Id := N + 479;
-   Name_Wide_Wide_Value                : constant Name_Id := N + 480;
-   Last_Renamable_Function_Attribute   : constant Name_Id := N + 480;
+   First_Renamable_Function_Attribute  : constant Name_Id := N + 461;
+   Name_Adjacent                       : constant Name_Id := N + 461;
+   Name_Ceiling                        : constant Name_Id := N + 462;
+   Name_Copy_Sign                      : constant Name_Id := N + 463;
+   Name_Floor                          : constant Name_Id := N + 464;
+   Name_Fraction                       : constant Name_Id := N + 465;
+   Name_Image                          : constant Name_Id := N + 466;
+   Name_Input                          : constant Name_Id := N + 467;
+   Name_Machine                        : constant Name_Id := N + 468;
+   Name_Max                            : constant Name_Id := N + 469;
+   Name_Min                            : constant Name_Id := N + 470;
+   Name_Model                          : constant Name_Id := N + 471;
+   Name_Pred                           : constant Name_Id := N + 472;
+   Name_Remainder                      : constant Name_Id := N + 473;
+   Name_Rounding                       : constant Name_Id := N + 474;
+   Name_Succ                           : constant Name_Id := N + 475;
+   Name_Truncation                     : constant Name_Id := N + 476;
+   Name_Value                          : constant Name_Id := N + 477;
+   Name_Wide_Image                     : constant Name_Id := N + 478;
+   Name_Wide_Wide_Image                : constant Name_Id := N + 479;
+   Name_Wide_Value                     : constant Name_Id := N + 480;
+   Name_Wide_Wide_Value                : constant Name_Id := N + 481;
+   Last_Renamable_Function_Attribute   : constant Name_Id := N + 481;
 
    --  Attributes that designate procedures
 
-   First_Procedure_Attribute           : constant Name_Id := N + 481;
-   Name_Output                         : constant Name_Id := N + 481;
-   Name_Read                           : constant Name_Id := N + 482;
-   Name_Write                          : constant Name_Id := N + 483;
-   Last_Procedure_Attribute            : constant Name_Id := N + 483;
+   First_Procedure_Attribute           : constant Name_Id := N + 482;
+   Name_Output                         : constant Name_Id := N + 482;
+   Name_Read                           : constant Name_Id := N + 483;
+   Name_Write                          : constant Name_Id := N + 484;
+   Last_Procedure_Attribute            : constant Name_Id := N + 484;
 
    --  Remaining attributes are ones that return entities
 
-   First_Entity_Attribute_Name         : constant Name_Id := N + 484;
-   Name_Elab_Body                      : constant Name_Id := N + 484; -- GNAT
-   Name_Elab_Spec                      : constant Name_Id := N + 485; -- GNAT
-   Name_Storage_Pool                   : constant Name_Id := N + 486;
+   First_Entity_Attribute_Name         : constant Name_Id := N + 485;
+   Name_Elab_Body                      : constant Name_Id := N + 485; -- GNAT
+   Name_Elab_Spec                      : constant Name_Id := N + 486; -- GNAT
+   Name_Storage_Pool                   : constant Name_Id := N + 487;
 
    --  These attributes are the ones that return types
 
-   First_Type_Attribute_Name           : constant Name_Id := N + 487;
-   Name_Base                           : constant Name_Id := N + 487;
-   Name_Class                          : constant Name_Id := N + 488;
-   Last_Type_Attribute_Name            : constant Name_Id := N + 488;
-   Last_Entity_Attribute_Name          : constant Name_Id := N + 488;
-   Last_Attribute_Name                 : constant Name_Id := N + 488;
+   First_Type_Attribute_Name           : constant Name_Id := N + 488;
+   Name_Base                           : constant Name_Id := N + 488;
+   Name_Class                          : constant Name_Id := N + 489;
+   Last_Type_Attribute_Name            : constant Name_Id := N + 489;
+   Last_Entity_Attribute_Name          : constant Name_Id := N + 489;
+   Last_Attribute_Name                 : constant Name_Id := N + 489;
 
    --  Names of recognized locking policy identifiers
 
@@ -798,10 +799,10 @@ package Snames is
    --  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 + 489;
-   Name_Ceiling_Locking                : constant Name_Id := N + 489;
-   Name_Inheritance_Locking            : constant Name_Id := N + 490;
-   Last_Locking_Policy_Name            : constant Name_Id := N + 490;
+   First_Locking_Policy_Name           : constant Name_Id := N + 490;
+   Name_Ceiling_Locking                : constant Name_Id := N + 490;
+   Name_Inheritance_Locking            : constant Name_Id := N + 491;
+   Last_Locking_Policy_Name            : constant Name_Id := N + 491;
 
    --  Names of recognized queuing policy identifiers
 
@@ -809,10 +810,10 @@ package Snames is
    --  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 + 491;
-   Name_FIFO_Queuing                   : constant Name_Id := N + 491;
-   Name_Priority_Queuing               : constant Name_Id := N + 492;
-   Last_Queuing_Policy_Name            : constant Name_Id := N + 492;
+   First_Queuing_Policy_Name           : constant Name_Id := N + 492;
+   Name_FIFO_Queuing                   : constant Name_Id := N + 492;
+   Name_Priority_Queuing               : constant Name_Id := N + 493;
+   Last_Queuing_Policy_Name            : constant Name_Id := N + 493;
 
    --  Names of recognized task dispatching policy identifiers
 
@@ -820,224 +821,232 @@ package Snames is
    --  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 + 493;
-   Name_FIFO_Within_Priorities         : constant Name_Id := N + 493;
-   Last_Task_Dispatching_Policy_Name   : constant Name_Id := N + 493;
+   First_Task_Dispatching_Policy_Name  : constant Name_Id := N + 494;
+   Name_FIFO_Within_Priorities         : constant Name_Id := N + 494;
+   Last_Task_Dispatching_Policy_Name   : constant Name_Id := N + 494;
 
    --  Names of recognized checks for pragma Suppress
 
-   First_Check_Name                    : constant Name_Id := N + 494;
-   Name_Access_Check                   : constant Name_Id := N + 494;
-   Name_Accessibility_Check            : constant Name_Id := N + 495;
-   Name_Discriminant_Check             : constant Name_Id := N + 496;
-   Name_Division_Check                 : constant Name_Id := N + 497;
-   Name_Elaboration_Check              : constant Name_Id := N + 498;
-   Name_Index_Check                    : constant Name_Id := N + 499;
-   Name_Length_Check                   : constant Name_Id := N + 500;
-   Name_Overflow_Check                 : constant Name_Id := N + 501;
-   Name_Range_Check                    : constant Name_Id := N + 502;
-   Name_Storage_Check                  : constant Name_Id := N + 503;
-   Name_Tag_Check                      : constant Name_Id := N + 504;
-   Name_All_Checks                     : constant Name_Id := N + 505;
-   Last_Check_Name                     : constant Name_Id := N + 505;
+   First_Check_Name                    : constant Name_Id := N + 495;
+   Name_Access_Check                   : constant Name_Id := N + 495;
+   Name_Accessibility_Check            : constant Name_Id := N + 496;
+   Name_Discriminant_Check             : constant Name_Id := N + 497;
+   Name_Division_Check                 : constant Name_Id := N + 498;
+   Name_Elaboration_Check              : constant Name_Id := N + 499;
+   Name_Index_Check                    : constant Name_Id := N + 500;
+   Name_Length_Check                   : constant Name_Id := N + 501;
+   Name_Overflow_Check                 : constant Name_Id := N + 502;
+   Name_Range_Check                    : constant Name_Id := N + 503;
+   Name_Storage_Check                  : constant Name_Id := N + 504;
+   Name_Tag_Check                      : constant Name_Id := N + 505;
+   Name_All_Checks                     : constant Name_Id := N + 506;
+   Last_Check_Name                     : constant Name_Id := N + 506;
 
    --  Names corresponding to reserved keywords, excluding those already
    --  declared in the attribute list (Access, Delta, Digits, Mod, Range).
 
-   Name_Abort                          : constant Name_Id := N + 506;
-   Name_Abs                            : constant Name_Id := N + 507;
-   Name_Accept                         : constant Name_Id := N + 508;
-   Name_And                            : constant Name_Id := N + 509;
-   Name_All                            : constant Name_Id := N + 510;
-   Name_Array                          : constant Name_Id := N + 511;
-   Name_At                             : constant Name_Id := N + 512;
-   Name_Begin                          : constant Name_Id := N + 513;
-   Name_Body                           : constant Name_Id := N + 514;
-   Name_Case                           : constant Name_Id := N + 515;
-   Name_Constant                       : constant Name_Id := N + 516;
-   Name_Declare                        : constant Name_Id := N + 517;
-   Name_Delay                          : constant Name_Id := N + 518;
-   Name_Do                             : constant Name_Id := N + 519;
-   Name_Else                           : constant Name_Id := N + 520;
-   Name_Elsif                          : constant Name_Id := N + 521;
-   Name_End                            : constant Name_Id := N + 522;
-   Name_Entry                          : constant Name_Id := N + 523;
-   Name_Exception                      : constant Name_Id := N + 524;
-   Name_Exit                           : constant Name_Id := N + 525;
-   Name_For                            : constant Name_Id := N + 526;
-   Name_Function                       : constant Name_Id := N + 527;
-   Name_Generic                        : constant Name_Id := N + 528;
-   Name_Goto                           : constant Name_Id := N + 529;
-   Name_If                             : constant Name_Id := N + 530;
-   Name_In                             : constant Name_Id := N + 531;
-   Name_Is                             : constant Name_Id := N + 532;
-   Name_Limited                        : constant Name_Id := N + 533;
-   Name_Loop                           : constant Name_Id := N + 534;
-   Name_New                            : constant Name_Id := N + 535;
-   Name_Not                            : constant Name_Id := N + 536;
-   Name_Null                           : constant Name_Id := N + 537;
-   Name_Of                             : constant Name_Id := N + 538;
-   Name_Or                             : constant Name_Id := N + 539;
-   Name_Others                         : constant Name_Id := N + 540;
-   Name_Out                            : constant Name_Id := N + 541;
-   Name_Package                        : constant Name_Id := N + 542;
-   Name_Pragma                         : constant Name_Id := N + 543;
-   Name_Private                        : constant Name_Id := N + 544;
-   Name_Procedure                      : constant Name_Id := N + 545;
-   Name_Raise                          : constant Name_Id := N + 546;
-   Name_Record                         : constant Name_Id := N + 547;
-   Name_Rem                            : constant Name_Id := N + 548;
-   Name_Renames                        : constant Name_Id := N + 549;
-   Name_Return                         : constant Name_Id := N + 550;
-   Name_Reverse                        : constant Name_Id := N + 551;
-   Name_Select                         : constant Name_Id := N + 552;
-   Name_Separate                       : constant Name_Id := N + 553;
-   Name_Subtype                        : constant Name_Id := N + 554;
-   Name_Task                           : constant Name_Id := N + 555;
-   Name_Terminate                      : constant Name_Id := N + 556;
-   Name_Then                           : constant Name_Id := N + 557;
-   Name_Type                           : constant Name_Id := N + 558;
-   Name_Use                            : constant Name_Id := N + 559;
-   Name_When                           : constant Name_Id := N + 560;
-   Name_While                          : constant Name_Id := N + 561;
-   Name_With                           : constant Name_Id := N + 562;
-   Name_Xor                            : constant Name_Id := N + 563;
+   Name_Abort                          : constant Name_Id := N + 507;
+   Name_Abs                            : constant Name_Id := N + 508;
+   Name_Accept                         : constant Name_Id := N + 509;
+   Name_And                            : constant Name_Id := N + 510;
+   Name_All                            : constant Name_Id := N + 511;
+   Name_Array                          : constant Name_Id := N + 512;
+   Name_At                             : constant Name_Id := N + 513;
+   Name_Begin                          : constant Name_Id := N + 514;
+   Name_Body                           : constant Name_Id := N + 515;
+   Name_Case                           : constant Name_Id := N + 516;
+   Name_Constant                       : constant Name_Id := N + 517;
+   Name_Declare                        : constant Name_Id := N + 518;
+   Name_Delay                          : constant Name_Id := N + 519;
+   Name_Do                             : constant Name_Id := N + 520;
+   Name_Else                           : constant Name_Id := N + 521;
+   Name_Elsif                          : constant Name_Id := N + 522;
+   Name_End                            : constant Name_Id := N + 523;
+   Name_Entry                          : constant Name_Id := N + 524;
+   Name_Exception                      : constant Name_Id := N + 525;
+   Name_Exit                           : constant Name_Id := N + 526;
+   Name_For                            : constant Name_Id := N + 527;
+   Name_Function                       : constant Name_Id := N + 528;
+   Name_Generic                        : constant Name_Id := N + 529;
+   Name_Goto                           : constant Name_Id := N + 530;
+   Name_If                             : constant Name_Id := N + 531;
+   Name_In                             : constant Name_Id := N + 532;
+   Name_Is                             : constant Name_Id := N + 533;
+   Name_Limited                        : constant Name_Id := N + 534;
+   Name_Loop                           : constant Name_Id := N + 535;
+   Name_New                            : constant Name_Id := N + 536;
+   Name_Not                            : constant Name_Id := N + 537;
+   Name_Null                           : constant Name_Id := N + 538;
+   Name_Of                             : constant Name_Id := N + 539;
+   Name_Or                             : constant Name_Id := N + 540;
+   Name_Others                         : constant Name_Id := N + 541;
+   Name_Out                            : constant Name_Id := N + 542;
+   Name_Package                        : constant Name_Id := N + 543;
+   Name_Pragma                         : constant Name_Id := N + 544;
+   Name_Private                        : constant Name_Id := N + 545;
+   Name_Procedure                      : constant Name_Id := N + 546;
+   Name_Raise                          : constant Name_Id := N + 547;
+   Name_Record                         : constant Name_Id := N + 548;
+   Name_Rem                            : constant Name_Id := N + 549;
+   Name_Renames                        : constant Name_Id := N + 550;
+   Name_Return                         : constant Name_Id := N + 551;
+   Name_Reverse                        : constant Name_Id := N + 552;
+   Name_Select                         : constant Name_Id := N + 553;
+   Name_Separate                       : constant Name_Id := N + 554;
+   Name_Subtype                        : constant Name_Id := N + 555;
+   Name_Task                           : constant Name_Id := N + 556;
+   Name_Terminate                      : constant Name_Id := N + 557;
+   Name_Then                           : constant Name_Id := N + 558;
+   Name_Type                           : constant Name_Id := N + 559;
+   Name_Use                            : constant Name_Id := N + 560;
+   Name_When                           : constant Name_Id := N + 561;
+   Name_While                          : constant Name_Id := N + 562;
+   Name_With                           : constant Name_Id := N + 563;
+   Name_Xor                            : constant Name_Id := N + 564;
 
    --  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 + 564;
-   Name_Divide                          : constant Name_Id := N + 564;
-   Name_Enclosing_Entity                : constant Name_Id := N + 565;
-   Name_Exception_Information           : constant Name_Id := N + 566;
-   Name_Exception_Message               : constant Name_Id := N + 567;
-   Name_Exception_Name                  : constant Name_Id := N + 568;
-   Name_File                            : constant Name_Id := N + 569;
-   Name_Generic_Dispatching_Constructor : constant Name_Id := N + 570;
-   Name_Import_Address                  : constant Name_Id := N + 571;
-   Name_Import_Largest_Value            : constant Name_Id := N + 572;
-   Name_Import_Value                    : constant Name_Id := N + 573;
-   Name_Is_Negative                     : constant Name_Id := N + 574;
-   Name_Line                            : constant Name_Id := N + 575;
-   Name_Rotate_Left                     : constant Name_Id := N + 576;
-   Name_Rotate_Right                    : constant Name_Id := N + 577;
-   Name_Shift_Left                      : constant Name_Id := N + 578;
-   Name_Shift_Right                     : constant Name_Id := N + 579;
-   Name_Shift_Right_Arithmetic          : constant Name_Id := N + 580;
-   Name_Source_Location                 : constant Name_Id := N + 581;
-   Name_Unchecked_Conversion            : constant Name_Id := N + 582;
-   Name_Unchecked_Deallocation          : constant Name_Id := N + 583;
-   Name_To_Pointer                      : constant Name_Id := N + 584;
-   Last_Intrinsic_Name                  : constant Name_Id := N + 584;
+   First_Intrinsic_Name                 : constant Name_Id := N + 565;
+   Name_Divide                          : constant Name_Id := N + 565;
+   Name_Enclosing_Entity                : constant Name_Id := N + 566;
+   Name_Exception_Information           : constant Name_Id := N + 567;
+   Name_Exception_Message               : constant Name_Id := N + 568;
+   Name_Exception_Name                  : constant Name_Id := N + 569;
+   Name_File                            : constant Name_Id := N + 570;
+   Name_Generic_Dispatching_Constructor : constant Name_Id := N + 571;
+   Name_Import_Address                  : constant Name_Id := N + 572;
+   Name_Import_Largest_Value            : constant Name_Id := N + 573;
+   Name_Import_Value                    : constant Name_Id := N + 574;
+   Name_Is_Negative                     : constant Name_Id := N + 575;
+   Name_Line                            : constant Name_Id := N + 576;
+   Name_Rotate_Left                     : constant Name_Id := N + 577;
+   Name_Rotate_Right                    : constant Name_Id := N + 578;
+   Name_Shift_Left                      : constant Name_Id := N + 579;
+   Name_Shift_Right                     : constant Name_Id := N + 580;
+   Name_Shift_Right_Arithmetic          : constant Name_Id := N + 581;
+   Name_Source_Location                 : constant Name_Id := N + 582;
+   Name_Unchecked_Conversion            : constant Name_Id := N + 583;
+   Name_Unchecked_Deallocation          : constant Name_Id := N + 584;
+   Name_To_Pointer                      : constant Name_Id := N + 585;
+   Last_Intrinsic_Name                  : constant Name_Id := N + 585;
 
    --  Names used in processing intrinsic calls
 
-   Name_Free                           : constant Name_Id := N + 585;
+   Name_Free                           : constant Name_Id := N + 586;
 
    --  Reserved words used only in Ada 95
 
-   First_95_Reserved_Word              : constant Name_Id := N + 586;
-   Name_Abstract                       : constant Name_Id := N + 586;
-   Name_Aliased                        : constant Name_Id := N + 587;
-   Name_Protected                      : constant Name_Id := N + 588;
-   Name_Until                          : constant Name_Id := N + 589;
-   Name_Requeue                        : constant Name_Id := N + 590;
-   Name_Tagged                         : constant Name_Id := N + 591;
-   Last_95_Reserved_Word               : constant Name_Id := N + 591;
+   First_95_Reserved_Word              : constant Name_Id := N + 587;
+   Name_Abstract                       : constant Name_Id := N + 587;
+   Name_Aliased                        : constant Name_Id := N + 588;
+   Name_Protected                      : constant Name_Id := N + 589;
+   Name_Until                          : constant Name_Id := N + 590;
+   Name_Requeue                        : constant Name_Id := N + 591;
+   Name_Tagged                         : constant Name_Id := N + 592;
+   Last_95_Reserved_Word               : constant Name_Id := N + 592;
 
    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 + 592;
+   Name_Raise_Exception                : constant Name_Id := N + 593;
 
    --  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 + 593;
-   Name_Binder                         : constant Name_Id := N + 594;
-   Name_Binder_Driver                  : constant Name_Id := N + 595;
-   Name_Body_Suffix                    : constant Name_Id := N + 596;
-   Name_Builder                        : constant Name_Id := N + 597;
-   Name_Compiler                       : constant Name_Id := N + 598;
-   Name_Compiler_Driver                : constant Name_Id := N + 599;
-   Name_Compiler_Kind                  : constant Name_Id := N + 600;
-   Name_Compute_Dependency             : constant Name_Id := N + 601;
-   Name_Cross_Reference                : constant Name_Id := N + 602;
-   Name_Default_Linker                 : constant Name_Id := N + 603;
-   Name_Default_Switches               : constant Name_Id := N + 604;
-   Name_Dependency_Option              : constant Name_Id := N + 605;
-   Name_Exec_Dir                       : constant Name_Id := N + 606;
-   Name_Executable                     : constant Name_Id := N + 607;
-   Name_Executable_Suffix              : constant Name_Id := N + 608;
-   Name_Extends                        : constant Name_Id := N + 609;
-   Name_Externally_Built               : constant Name_Id := N + 610;
-   Name_Finder                         : constant Name_Id := N + 611;
-   Name_Global_Configuration_Pragmas   : constant Name_Id := N + 612;
-   Name_Gnatls                         : constant Name_Id := N + 613;
-   Name_Gnatstub                       : constant Name_Id := N + 614;
-   Name_Implementation                 : constant Name_Id := N + 615;
-   Name_Implementation_Exceptions      : constant Name_Id := N + 616;
-   Name_Implementation_Suffix          : constant Name_Id := N + 617;
-   Name_Include_Option                 : constant Name_Id := N + 618;
-   Name_Language_Processing            : constant Name_Id := N + 619;
-   Name_Languages                      : constant Name_Id := N + 620;
-   Name_Library_Ali_Dir                : constant Name_Id := N + 621;
-   Name_Library_Dir                    : constant Name_Id := N + 622;
-   Name_Library_Auto_Init              : constant Name_Id := N + 623;
-   Name_Library_GCC                    : constant Name_Id := N + 624;
-   Name_Library_Interface              : constant Name_Id := N + 625;
-   Name_Library_Kind                   : constant Name_Id := N + 626;
-   Name_Library_Name                   : constant Name_Id := N + 627;
-   Name_Library_Options                : constant Name_Id := N + 628;
-   Name_Library_Reference_Symbol_File  : constant Name_Id := N + 629;
-   Name_Library_Src_Dir                : constant Name_Id := N + 630;
-   Name_Library_Symbol_File            : constant Name_Id := N + 631;
-   Name_Library_Symbol_Policy          : constant Name_Id := N + 632;
-   Name_Library_Version                : constant Name_Id := N + 633;
-   Name_Linker                         : constant Name_Id := N + 634;
-   Name_Local_Configuration_Pragmas    : constant Name_Id := N + 635;
-   Name_Locally_Removed_Files          : constant Name_Id := N + 636;
-   Name_Metrics                        : constant Name_Id := N + 637;
-   Name_Naming                         : constant Name_Id := N + 638;
-   Name_Object_Dir                     : constant Name_Id := N + 639;
-   Name_Pretty_Printer                 : constant Name_Id := N + 640;
-   Name_Project                        : constant Name_Id := N + 641;
-   Name_Separate_Suffix                : constant Name_Id := N + 642;
-   Name_Source_Dirs                    : constant Name_Id := N + 643;
-   Name_Source_Files                   : constant Name_Id := N + 644;
-   Name_Source_List_File               : constant Name_Id := N + 645;
-   Name_Spec                           : constant Name_Id := N + 646;
-   Name_Spec_Suffix                    : constant Name_Id := N + 647;
-   Name_Specification                  : constant Name_Id := N + 648;
-   Name_Specification_Exceptions       : constant Name_Id := N + 649;
-   Name_Specification_Suffix           : constant Name_Id := N + 650;
-   Name_Switches                       : constant Name_Id := N + 651;
+   Name_Ada_Roots                      : constant Name_Id := N + 594;
+   Name_Binder                         : constant Name_Id := N + 595;
+   Name_Binder_Driver                  : constant Name_Id := N + 596;
+   Name_Body_Suffix                    : constant Name_Id := N + 597;
+   Name_Builder                        : constant Name_Id := N + 598;
+   Name_Compiler                       : constant Name_Id := N + 599;
+   Name_Compiler_Driver                : constant Name_Id := N + 600;
+   Name_Compiler_Kind                  : constant Name_Id := N + 601;
+   Name_Compute_Dependency             : constant Name_Id := N + 602;
+   Name_Cross_Reference                : constant Name_Id := N + 603;
+   Name_Default_Linker                 : constant Name_Id := N + 604;
+   Name_Default_Switches               : constant Name_Id := N + 605;
+   Name_Dependency_Option              : constant Name_Id := N + 606;
+   Name_Exec_Dir                       : constant Name_Id := N + 607;
+   Name_Executable                     : constant Name_Id := N + 608;
+   Name_Executable_Suffix              : constant Name_Id := N + 609;
+   Name_Extends                        : constant Name_Id := N + 610;
+   Name_Externally_Built               : constant Name_Id := N + 611;
+   Name_Finder                         : constant Name_Id := N + 612;
+   Name_Global_Configuration_Pragmas   : constant Name_Id := N + 613;
+   Name_Gnatls                         : constant Name_Id := N + 614;
+   Name_Gnatstub                       : constant Name_Id := N + 615;
+   Name_Implementation                 : constant Name_Id := N + 616;
+   Name_Implementation_Exceptions      : constant Name_Id := N + 617;
+   Name_Implementation_Suffix          : constant Name_Id := N + 618;
+   Name_Include_Option                 : constant Name_Id := N + 619;
+   Name_Language_Processing            : constant Name_Id := N + 620;
+   Name_Languages                      : constant Name_Id := N + 621;
+   Name_Library_Ali_Dir                : constant Name_Id := N + 622;
+   Name_Library_Dir                    : constant Name_Id := N + 623;
+   Name_Library_Auto_Init              : constant Name_Id := N + 624;
+   Name_Library_GCC                    : constant Name_Id := N + 625;
+   Name_Library_Interface              : constant Name_Id := N + 626;
+   Name_Library_Kind                   : constant Name_Id := N + 627;
+   Name_Library_Name                   : constant Name_Id := N + 628;
+   Name_Library_Options                : constant Name_Id := N + 629;
+   Name_Library_Reference_Symbol_File  : constant Name_Id := N + 630;
+   Name_Library_Src_Dir                : constant Name_Id := N + 631;
+   Name_Library_Symbol_File            : constant Name_Id := N + 632;
+   Name_Library_Symbol_Policy          : constant Name_Id := N + 633;
+   Name_Library_Version                : constant Name_Id := N + 634;
+   Name_Linker                         : constant Name_Id := N + 635;
+   Name_Local_Configuration_Pragmas    : constant Name_Id := N + 636;
+   Name_Locally_Removed_Files          : constant Name_Id := N + 637;
+   Name_Metrics                        : constant Name_Id := N + 638;
+   Name_Naming                         : constant Name_Id := N + 639;
+   Name_Object_Dir                     : constant Name_Id := N + 640;
+   Name_Pretty_Printer                 : constant Name_Id := N + 641;
+   Name_Project                        : constant Name_Id := N + 642;
+   Name_Separate_Suffix                : constant Name_Id := N + 643;
+   Name_Source_Dirs                    : constant Name_Id := N + 644;
+   Name_Source_Files                   : constant Name_Id := N + 645;
+   Name_Source_List_File               : constant Name_Id := N + 646;
+   Name_Spec                           : constant Name_Id := N + 647;
+   Name_Spec_Suffix                    : constant Name_Id := N + 648;
+   Name_Specification                  : constant Name_Id := N + 649;
+   Name_Specification_Exceptions       : constant Name_Id := N + 650;
+   Name_Specification_Suffix           : constant Name_Id := N + 651;
+   Name_Switches                       : constant Name_Id := N + 652;
 
    --  Other miscellaneous names used in front end
 
-   Name_Unaligned_Valid                : constant Name_Id := N + 652;
+   Name_Unaligned_Valid                : constant Name_Id := N + 653;
 
-   --  ----------------------------------------------------------------
-   First_2005_Reserved_Word            : constant Name_Id := N + 653;
-   Name_Interface                      : constant Name_Id := N + 653;
-   Name_Overriding                     : constant Name_Id := N + 654;
-   Name_Synchronized                   : constant Name_Id := N + 655;
-   Last_2005_Reserved_Word             : constant Name_Id := N + 655;
+   --  Ada 2005 reserved words
+
+   First_2005_Reserved_Word            : constant Name_Id := N + 654;
+   Name_Interface                      : constant Name_Id := N + 654;
+   Name_Overriding                     : constant Name_Id := N + 655;
+   Name_Synchronized                   : constant Name_Id := N + 656;
+   Last_2005_Reserved_Word             : constant Name_Id := N + 656;
 
    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 + 655;
+   Last_Predefined_Name                : constant Name_Id := N + 656;
+
+   ---------------------------------------
+   -- Subtypes Defining Name Categories --
+   ---------------------------------------
 
    subtype Any_Operator_Name is Name_Id range
      First_Operator_Name .. Last_Operator_Name;
 
+   subtype Configuration_Pragma_Names is Name_Id range
+     First_Pragma_Name .. Last_Configuration_Pragma_Name;
+
    ------------------------------
    -- Attribute ID Definitions --
    ------------------------------
@@ -1246,6 +1255,7 @@ package Snames is
       Pragma_Ada_83,
       Pragma_Ada_95,
       Pragma_Ada_05,
+      Pragma_Ada_2005,
       Pragma_Assertion_Policy,
       Pragma_C_Pass_By_Copy,
       Pragma_Compile_Time_Warning,
@@ -1393,9 +1403,9 @@ package Snames is
       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.
+      --  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,
@@ -1462,6 +1472,13 @@ package Snames is
    --  name that has been specified by a Convention_Identifier pragma.
    --  If neither case holds, returns False.
 
+   function Is_Keyword_Name (N : Name_Id) return Boolean;
+   --  Test to see if the name N is one of the (reserved) keyword names. This
+   --  includes all the keywords defined in the Ada standard (taking into
+   --  effect the Ada version). It also includes additional keywords in
+   --  contexts where additional keywords have been added. For example, in the
+   --  context of parsing project files, keywords such as PROJECT are included.
+
    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
 
index d16232e..1064730 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                              C Header File                               *
  *                                                                          *
- *          Copyright (C) 1992-2005, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2006, 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- *
@@ -215,152 +215,153 @@ extern unsigned char Get_Pragma_Id (int);
 #define  Pragma_Ada_83                        0
 #define  Pragma_Ada_95                        1
 #define  Pragma_Ada_05                        2
-#define  Pragma_Assertion_Policy              3
-#define  Pragma_C_Pass_By_Copy                4
-#define  Pragma_Compile_Time_Warning          5
-#define  Pragma_Component_Alignment           6
-#define  Pragma_Convention_Identifier         7
-#define  Pragma_Debug_Policy                  8
-#define  Pragma_Detect_Blocking               9
-#define  Pragma_Discard_Names                 10
-#define  Pragma_Elaboration_Checks            11
-#define  Pragma_Eliminate                     12
-#define  Pragma_Explicit_Overriding           13
-#define  Pragma_Extend_System                 14
-#define  Pragma_Extensions_Allowed            15
-#define  Pragma_External_Name_Casing          16
-#define  Pragma_Float_Representation          17
-#define  Pragma_Initialize_Scalars            18
-#define  Pragma_Interrupt_State               19
-#define  Pragma_License                       20
-#define  Pragma_Locking_Policy                21
-#define  Pragma_Long_Float                    22
-#define  Pragma_No_Run_Time                   23
-#define  Pragma_No_Strict_Aliasing            24
-#define  Pragma_Normalize_Scalars             25
-#define  Pragma_Polling                       26
-#define  Pragma_Persistent_BSS                27
-#define  Pragma_Profile                       28
-#define  Pragma_Profile_Warnings              29
-#define  Pragma_Propagate_Exceptions          30
-#define  Pragma_Queuing_Policy                31
-#define  Pragma_Ravenscar                     32
-#define  Pragma_Restricted_Run_Time           33
-#define  Pragma_Restrictions                  34
-#define  Pragma_Restriction_Warnings          35
-#define  Pragma_Reviewable                    36
-#define  Pragma_Source_File_Name              37
-#define  Pragma_Source_File_Name_Project      38
-#define  Pragma_Style_Checks                  39
-#define  Pragma_Suppress                      40
-#define  Pragma_Suppress_Exception_Locations  41
-#define  Pragma_Task_Dispatching_Policy       42
-#define  Pragma_Universal_Data                43
-#define  Pragma_Unsuppress                    44
-#define  Pragma_Use_VADS_Size                 45
-#define  Pragma_Validity_Checks               46
-#define  Pragma_Warnings                      47
-#define  Pragma_Abort_Defer                   48
-#define  Pragma_All_Calls_Remote              49
-#define  Pragma_Annotate                      50
-#define  Pragma_Assert                        51
-#define  Pragma_Asynchronous                  52
-#define  Pragma_Atomic                        53
-#define  Pragma_Atomic_Components             54
-#define  Pragma_Attach_Handler                55
-#define  Pragma_Comment                       56
-#define  Pragma_Common_Object                 57
-#define  Pragma_Complete_Representation       58
-#define  Pragma_Complex_Representation        59
-#define  Pragma_Controlled                    60
-#define  Pragma_Convention                    61
-#define  Pragma_CPP_Class                     62
-#define  Pragma_CPP_Constructor               63
-#define  Pragma_CPP_Virtual                   64
-#define  Pragma_CPP_Vtable                    65
-#define  Pragma_Debug                         66
-#define  Pragma_Elaborate                     67
-#define  Pragma_Elaborate_All                 68
-#define  Pragma_Elaborate_Body                69
-#define  Pragma_Export                        70
-#define  Pragma_Export_Exception              71
-#define  Pragma_Export_Function               72
-#define  Pragma_Export_Object                 73
-#define  Pragma_Export_Procedure              74
-#define  Pragma_Export_Value                  75
-#define  Pragma_Export_Valued_Procedure       76
-#define  Pragma_External                      77
-#define  Pragma_Finalize_Storage_Only         78
-#define  Pragma_Ident                         79
-#define  Pragma_Import                        80
-#define  Pragma_Import_Exception              81
-#define  Pragma_Import_Function               82
-#define  Pragma_Import_Object                 83
-#define  Pragma_Import_Procedure              84
-#define  Pragma_Import_Valued_Procedure       85
-#define  Pragma_Inline                        86
-#define  Pragma_Inline_Always                 87
-#define  Pragma_Inline_Generic                88
-#define  Pragma_Inspection_Point              89
-#define  Pragma_Interface_Name                90
-#define  Pragma_Interrupt_Handler             91
-#define  Pragma_Interrupt_Priority            92
-#define  Pragma_Java_Constructor              93
-#define  Pragma_Java_Interface                94
-#define  Pragma_Keep_Names                    95
-#define  Pragma_Link_With                     96
-#define  Pragma_Linker_Alias                  97
-#define  Pragma_Linker_Constructor            98
-#define  Pragma_Linker_Destructor             99
-#define  Pragma_Linker_Options                100
-#define  Pragma_Linker_Section                101
-#define  Pragma_List                          102
-#define  Pragma_Machine_Attribute             103
-#define  Pragma_Main                          104
-#define  Pragma_Main_Storage                  105
-#define  Pragma_Memory_Size                   106
-#define  Pragma_No_Return                     107
-#define  Pragma_Obsolescent                   108
-#define  Pragma_Optimize                      109
-#define  Pragma_Optional_Overriding           110
-#define  Pragma_Pack                          111
-#define  Pragma_Page                          112
-#define  Pragma_Passive                       113
-#define  Pragma_Preelaborate                  114
-#define  Pragma_Preelaborate_05               115
-#define  Pragma_Priority                      116
-#define  Pragma_Psect_Object                  117
-#define  Pragma_Pure                          118
-#define  Pragma_Pure_05                       119
-#define  Pragma_Pure_Function                 120
-#define  Pragma_Remote_Call_Interface         121
-#define  Pragma_Remote_Types                  122
-#define  Pragma_Share_Generic                 123
-#define  Pragma_Shared                        124
-#define  Pragma_Shared_Passive                125
-#define  Pragma_Source_Reference              126
-#define  Pragma_Stream_Convert                127
-#define  Pragma_Subtitle                      128
-#define  Pragma_Suppress_All                  129
-#define  Pragma_Suppress_Debug_Info           130
-#define  Pragma_Suppress_Initialization       131
-#define  Pragma_System_Name                   132
-#define  Pragma_Task_Info                     133
-#define  Pragma_Task_Name                     134
-#define  Pragma_Task_Storage                  135
-#define  Pragma_Thread_Body                   136
-#define  Pragma_Time_Slice                    137
-#define  Pragma_Title                         138
-#define  Pragma_Unchecked_Union               139
-#define  Pragma_Unimplemented_Unit            140
-#define  Pragma_Unreferenced                  141
-#define  Pragma_Unreserve_All_Interrupts      142
-#define  Pragma_Volatile                      143
-#define  Pragma_Volatile_Components           144
-#define  Pragma_Weak_External                 145
-#define  Pragma_AST_Entry                     146
-#define  Pragma_Interface                     147
-#define  Pragma_Storage_Size                  148
-#define  Pragma_Storage_Unit                  149
+#define  Pragma_Ada_2005                      3
+#define  Pragma_Assertion_Policy              4
+#define  Pragma_C_Pass_By_Copy                5
+#define  Pragma_Compile_Time_Warning          6
+#define  Pragma_Component_Alignment           7
+#define  Pragma_Convention_Identifier         8
+#define  Pragma_Debug_Policy                  9
+#define  Pragma_Detect_Blocking               10
+#define  Pragma_Discard_Names                 11
+#define  Pragma_Elaboration_Checks            12
+#define  Pragma_Eliminate                     13
+#define  Pragma_Explicit_Overriding           14
+#define  Pragma_Extend_System                 15
+#define  Pragma_Extensions_Allowed            16
+#define  Pragma_External_Name_Casing          17
+#define  Pragma_Float_Representation          18
+#define  Pragma_Initialize_Scalars            19
+#define  Pragma_Interrupt_State               20
+#define  Pragma_License                       21
+#define  Pragma_Locking_Policy                22
+#define  Pragma_Long_Float                    23
+#define  Pragma_No_Run_Time                   24
+#define  Pragma_No_Strict_Aliasing            25
+#define  Pragma_Normalize_Scalars             26
+#define  Pragma_Polling                       27
+#define  Pragma_Persistent_BSS                28
+#define  Pragma_Profile                       29
+#define  Pragma_Profile_Warnings              30
+#define  Pragma_Propagate_Exceptions          31
+#define  Pragma_Queuing_Policy                32
+#define  Pragma_Ravenscar                     33
+#define  Pragma_Restricted_Run_Time           34
+#define  Pragma_Restrictions                  35
+#define  Pragma_Restriction_Warnings          36
+#define  Pragma_Reviewable                    37
+#define  Pragma_Source_File_Name              38
+#define  Pragma_Source_File_Name_Project      39
+#define  Pragma_Style_Checks                  40
+#define  Pragma_Suppress                      41
+#define  Pragma_Suppress_Exception_Locations  42
+#define  Pragma_Task_Dispatching_Policy       43
+#define  Pragma_Universal_Data                44
+#define  Pragma_Unsuppress                    45
+#define  Pragma_Use_VADS_Size                 46
+#define  Pragma_Validity_Checks               47
+#define  Pragma_Warnings                      48
+#define  Pragma_Abort_Defer                   49
+#define  Pragma_All_Calls_Remote              50
+#define  Pragma_Annotate                      51
+#define  Pragma_Assert                        52
+#define  Pragma_Asynchronous                  53
+#define  Pragma_Atomic                        54
+#define  Pragma_Atomic_Components             55
+#define  Pragma_Attach_Handler                56
+#define  Pragma_Comment                       57
+#define  Pragma_Common_Object                 58
+#define  Pragma_Complete_Representation       59
+#define  Pragma_Complex_Representation        60
+#define  Pragma_Controlled                    61
+#define  Pragma_Convention                    62
+#define  Pragma_CPP_Class                     63
+#define  Pragma_CPP_Constructor               64
+#define  Pragma_CPP_Virtual                   65
+#define  Pragma_CPP_Vtable                    66
+#define  Pragma_Debug                         67
+#define  Pragma_Elaborate                     68
+#define  Pragma_Elaborate_All                 69
+#define  Pragma_Elaborate_Body                70
+#define  Pragma_Export                        71
+#define  Pragma_Export_Exception              72
+#define  Pragma_Export_Function               73
+#define  Pragma_Export_Object                 74
+#define  Pragma_Export_Procedure              75
+#define  Pragma_Export_Value                  76
+#define  Pragma_Export_Valued_Procedure       77
+#define  Pragma_External                      78
+#define  Pragma_Finalize_Storage_Only         79
+#define  Pragma_Ident                         80
+#define  Pragma_Import                        81
+#define  Pragma_Import_Exception              82
+#define  Pragma_Import_Function               83
+#define  Pragma_Import_Object                 84
+#define  Pragma_Import_Procedure              85
+#define  Pragma_Import_Valued_Procedure       86
+#define  Pragma_Inline                        87
+#define  Pragma_Inline_Always                 88
+#define  Pragma_Inline_Generic                89
+#define  Pragma_Inspection_Point              90
+#define  Pragma_Interface_Name                91
+#define  Pragma_Interrupt_Handler             92
+#define  Pragma_Interrupt_Priority            93
+#define  Pragma_Java_Constructor              94
+#define  Pragma_Java_Interface                95
+#define  Pragma_Keep_Names                    96
+#define  Pragma_Link_With                     97
+#define  Pragma_Linker_Alias                  98
+#define  Pragma_Linker_Constructor            99
+#define  Pragma_Linker_Destructor             100
+#define  Pragma_Linker_Options                101
+#define  Pragma_Linker_Section                102
+#define  Pragma_List                          103
+#define  Pragma_Machine_Attribute             104
+#define  Pragma_Main                          105
+#define  Pragma_Main_Storage                  106
+#define  Pragma_Memory_Size                   107
+#define  Pragma_No_Return                     108
+#define  Pragma_Obsolescent                   109
+#define  Pragma_Optimize                      110
+#define  Pragma_Optional_Overriding           111
+#define  Pragma_Pack                          112
+#define  Pragma_Page                          113
+#define  Pragma_Passive                       114
+#define  Pragma_Preelaborate                  115
+#define  Pragma_Preelaborate_05               116
+#define  Pragma_Priority                      117
+#define  Pragma_Psect_Object                  118
+#define  Pragma_Pure                          119
+#define  Pragma_Pure_05                       120
+#define  Pragma_Pure_Function                 121
+#define  Pragma_Remote_Call_Interface         122
+#define  Pragma_Remote_Types                  123
+#define  Pragma_Share_Generic                 124
+#define  Pragma_Shared                        125
+#define  Pragma_Shared_Passive                126
+#define  Pragma_Source_Reference              127
+#define  Pragma_Stream_Convert                128
+#define  Pragma_Subtitle                      129
+#define  Pragma_Suppress_All                  130
+#define  Pragma_Suppress_Debug_Info           131
+#define  Pragma_Suppress_Initialization       132
+#define  Pragma_System_Name                   133
+#define  Pragma_Task_Info                     134
+#define  Pragma_Task_Name                     135
+#define  Pragma_Task_Storage                  136
+#define  Pragma_Thread_Body                   137
+#define  Pragma_Time_Slice                    138
+#define  Pragma_Title                         139
+#define  Pragma_Unchecked_Union               140
+#define  Pragma_Unimplemented_Unit            141
+#define  Pragma_Unreferenced                  142
+#define  Pragma_Unreserve_All_Interrupts      143
+#define  Pragma_Volatile                      144
+#define  Pragma_Volatile_Components           145
+#define  Pragma_Weak_External                 146
+#define  Pragma_AST_Entry                     147
+#define  Pragma_Interface                     148
+#define  Pragma_Storage_Size                  149
+#define  Pragma_Storage_Unit                  150
 
 /* End of snames.h (C version of Snames package spec) */