summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-29 16:15:45 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-29 16:15:45 +0000
commit1843cecac270adb73f35b5420c1a1b43db1d455c (patch)
treee6b0e275d222d8952cb61f29f30b8e056a79aee2 /gcc
parente33a28e8b2f9a6c11c3eb81348ad4b14dc58ae4a (diff)
downloadgcc-1843cecac270adb73f35b5420c1a1b43db1d455c.tar.gz
2005-03-29 Gary Dismukes <dismukes@adacore.com>
Robert Dewar <dewar@adacore.com> * exp_intr.adb (Expand_Dispatching_Constructor_Call): New procedure to expand a call to an instance of Ada.Tags.Generic_Dispatching_Constructor into a dispatching call to the Constructor actual of the instance. A class-wide membership check is also generated, to ensure that the tag passed to the instance denotes a type in the class. (Expand_Intrinsic_Call): Call Expand_Dispatching_Constructor in the case of Name_Generic_Dispatching_Constructor. * Makefile.rtl: Add a-tgdico.ads to the list of library units (new Ada 05 unit for AI-260-02). * a-tgdico.ads: New file. * impunit.adb (Non_Imp_File_Names_05): Add entry "a-tgdico" for new predefined Ada 05 generic unit Ada.Tags.Generic_Dispatching_Constructor. * snames.ads, snames.adb (Preset_Names): Add entry for Generic_Dispatching_Constructor. PR ada/20300 * sem_ch8.adb (Find_Direct_Name): Go to root type for check of character type cases. (Analyze_Subprogram_Renaming): Add special handling for the case of renaming of stream attributes when the renaming denotes a generic formal subprogram association for an abstract formal subprogram. Check that the attribute is a primitive stream attribute (and not a class-wide stream attribute) and then rewrite the attribute name as the name of the appropriate compiler-generated stream primitive. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97172 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/Makefile.rtl1
-rw-r--r--gcc/ada/a-tgdico.ads29
-rw-r--r--gcc/ada/exp_intr.adb83
-rw-r--r--gcc/ada/impunit.adb1
-rw-r--r--gcc/ada/sem_ch8.adb97
-rw-r--r--gcc/ada/snames.adb1
-rw-r--r--gcc/ada/snames.ads193
7 files changed, 294 insertions, 111 deletions
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
index 282cbff9569..7687c33e6bc 100644
--- a/gcc/ada/Makefile.rtl
+++ b/gcc/ada/Makefile.rtl
@@ -212,6 +212,7 @@ GNATRTL_NONTASKING_OBJS= \
a-szunha$(objext) \
a-szuzti$(objext) \
a-tags$(objext) \
+ a-tgdico$(objext) \
a-teioed$(objext) \
a-textio$(objext) \
a-ticoau$(objext) \
diff --git a/gcc/ada/a-tgdico.ads b/gcc/ada/a-tgdico.ads
new file mode 100644
index 00000000000..8534d9f2957
--- /dev/null
+++ b/gcc/ada/a-tgdico.ads
@@ -0,0 +1,29 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- ADA.TAGS.GENERIC_DISPATCHING_CONSTRUCTOR --
+-- --
+-- S p e c --
+-- --
+-- This specification is adapted from the Ada Reference Manual for use with --
+-- GNAT. In accordance with the copyright of that document, you can freely --
+-- copy and modify this specification, provided that if you redistribute a --
+-- modified version, any changes that you have made are clearly indicated. --
+-- --
+------------------------------------------------------------------------------
+
+generic
+ type T (<>) is abstract tagged limited private;
+ type Parameters (<>) is limited private;
+ with function Constructor (Params : access Parameters) return T is abstract;
+
+function Ada.Tags.Generic_Dispatching_Constructor
+ (The_Tag : Tag; Params : access Parameters) return T'Class;
+
+-- pragma Preelaborate (Generic_Dispatching_Constructor);
+-- Commented out temporarily because various other predefined units do not
+-- yet have proper categorization as specified by AI-362 (such as Ada.Tags,
+-- Ada.Exceptions, etc.).
+
+pragma Import (Intrinsic, Generic_Dispatching_Constructor);
diff --git a/gcc/ada/exp_intr.adb b/gcc/ada/exp_intr.adb
index 1efd42bb6b3..b46b8f09c7d 100644
--- a/gcc/ada/exp_intr.adb
+++ b/gcc/ada/exp_intr.adb
@@ -26,11 +26,13 @@
with Atree; use Atree;
with Einfo; use Einfo;
+with Elists; use Elists;
with Errout; use Errout;
with Exp_Ch4; use Exp_Ch4;
with Exp_Ch7; use Exp_Ch7;
with Exp_Ch11; use Exp_Ch11;
with Exp_Code; use Exp_Code;
+with Exp_Disp; use Exp_Disp;
with Exp_Fixd; use Exp_Fixd;
with Exp_Util; use Exp_Util;
with Itypes; use Itypes;
@@ -61,6 +63,13 @@ package body Exp_Intr is
procedure Expand_Is_Negative (N : Node_Id);
-- Expand a call to the intrinsic Is_Negative function
+ procedure Expand_Dispatching_Constructor_Call (N : Node_Id);
+ -- Expand a call to an instantiation of Generic_Dispatching_Constructor
+ -- into a dispatching call to the actual subprogram associated with the
+ -- Constructor formal subprogram, passing it the Parameters actual of
+ -- the call to the instantiation and dispatching based on call's Tag
+ -- parameter.
+
procedure Expand_Exception_Call (N : Node_Id; Ent : RE_Id);
-- Expand a call to Exception_Information/Message/Name. The first
-- parameter, N, is the node for the function call, and Ent is the
@@ -96,6 +105,77 @@ package body Exp_Intr is
-- Name_Source_Location - expand string of form file:line
-- Name_Enclosing_Entity - expand string with name of enclosing entity
+ -----------------------------------------
+ -- Expand_Dispatching_Constructor_Call --
+ -----------------------------------------
+
+ -- Transform a call to an instantiation of Generic_Dispatching_Constructor
+ -- of the form:
+
+ -- GDC_Instance (The_Tag, Parameters'Access)
+
+ -- to a class-wide conversion of a dispatching call to the actual
+ -- associated with the formal subprogram Construct, designating
+ -- The_Tag as the controlling tag of the call:
+
+ -- T'Class (Construct'Actual (Params)) -- Controlling tag is The_Tag
+
+ -- which will eventually be expanded to the following:
+
+ -- T'Class (The_Tag.all (Construct'Actual'Index).all (Params))
+
+ -- A class-wide membership test is also generated, preceding the call,
+ -- to ensure that the controlling tag denotes a type in T'Class.
+
+ procedure Expand_Dispatching_Constructor_Call (N : Node_Id) is
+ Loc : constant Source_Ptr := Sloc (N);
+ Tag_Arg : constant Node_Id := First_Actual (N);
+ Param_Arg : constant Node_Id := Next_Actual (Tag_Arg);
+ Subp_Decl : constant Node_Id := Parent (Parent (Entity (Name (N))));
+ Inst_Pkg : constant Node_Id := Parent (Subp_Decl);
+ Act_Rename : constant Node_Id :=
+ Next (Next (First (Visible_Declarations (Inst_Pkg))));
+ Act_Constr : constant Entity_Id := Entity (Name (Act_Rename));
+ Result_Typ : constant Entity_Id := Class_Wide_Type (Etype (Act_Constr));
+ Cnstr_Call : Node_Id;
+
+ begin
+ -- Create the call to the actual Constructor function
+
+ Cnstr_Call :=
+ Make_Function_Call (Loc,
+ Name => New_Occurrence_Of (Act_Constr, Loc),
+ Parameter_Associations => New_List (Relocate_Node (Param_Arg)));
+
+ -- Establish its controlling tag from the tag passed to the instance
+
+ Set_Controlling_Argument (Cnstr_Call, Relocate_Node (Tag_Arg));
+
+ -- Rewrite and analyze the call to the instance as a class-wide
+ -- conversion of the call to the actual constructor.
+
+ Rewrite (N, Convert_To (Result_Typ, Cnstr_Call));
+ Analyze_And_Resolve (N, Etype (Act_Constr));
+
+ -- Generate a class-wide membership test to ensure that the call's tag
+ -- argument denotes a type within the class.
+
+ Insert_Action (N,
+ Make_Implicit_If_Statement (N,
+ Condition =>
+ Make_Op_Not (Loc,
+ Make_DT_Access_Action (Result_Typ,
+ Action => CW_Membership,
+ Args => New_List (
+ Duplicate_Subexpr (Tag_Arg),
+ New_Reference_To (
+ Node (First_Elmt (Access_Disp_Table (
+ Root_Type (Result_Typ)))), Loc)))),
+ Then_Statements =>
+ New_List (Make_Raise_Statement (Loc,
+ New_Occurrence_Of (RTE (RE_Tag_Error), Loc)))));
+ end Expand_Dispatching_Constructor_Call;
+
---------------------------
-- Expand_Exception_Call --
---------------------------
@@ -236,6 +316,9 @@ package body Exp_Intr is
elsif Nam = Name_Exception_Name then
Expand_Exception_Call (N, RE_Exception_Name_Simple);
+ elsif Nam = Name_Generic_Dispatching_Constructor then
+ Expand_Dispatching_Constructor_Call (N);
+
elsif Nam = Name_Import_Address
or else
Nam = Name_Import_Largest_Value
diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb
index 9aae8522193..f1303a2eb0a 100644
--- a/gcc/ada/impunit.adb
+++ b/gcc/ada/impunit.adb
@@ -363,6 +363,7 @@ package body Impunit is
"a-swunha", -- Ada.Strings.Wide_Unbounded.Hash
"a-szmzco", -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
"a-szunha", -- Ada.Strings.Wide_Wide_Unbounded.Hash
+ "a-tgdico", -- Ada.Tags.Generic_Dispatching_Constructor;
"a-tiunio", -- Ada.Text_IO.Unbounded_IO;
"a-wwunio", -- Ada.Wide_Text_IO.Wide_Unbounded_IO;
"a-zttest", -- Ada.Wide_Wide_Text_IO.Text_Streams
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index 5f8de03efc1..394f6dbb8e9 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -29,6 +29,7 @@ with Debug; use Debug;
with Einfo; use Einfo;
with Elists; use Elists;
with Errout; use Errout;
+with Exp_Tss; use Exp_Tss;
with Exp_Util; use Exp_Util;
with Fname; use Fname;
with Freeze; use Freeze;
@@ -1102,10 +1103,11 @@ package body Sem_Ch8 is
Save_AV : constant Ada_Version_Type := Ada_Version;
Nam : constant Node_Id := Name (N);
New_S : Entity_Id;
- Old_S : Entity_Id := Empty;
+ Old_S : Entity_Id := Empty;
Rename_Spec : Entity_Id;
- Is_Actual : Boolean := False;
- Inst_Node : Node_Id := Empty;
+ Formal_Spec : constant Node_Id := Corresponding_Formal_Spec (N);
+ Is_Actual : constant Boolean := Present (Formal_Spec);
+ Inst_Node : Node_Id := Empty;
function Original_Subprogram (Subp : Entity_Id) return Entity_Id;
-- Find renamed entity when the declaration is a renaming_as_body
@@ -1167,8 +1169,75 @@ package body Sem_Ch8 is
-- is missing an argument when it is analyzed.
if Nkind (Nam) = N_Attribute_Reference then
- Attribute_Renaming (N);
- return;
+
+ -- In the case of an abstract formal subprogram association,
+ -- rewrite an actual given by a stream attribute as the name
+ -- of the corresponding stream primitive of the type.
+
+ if Is_Actual and then Is_Abstract (Formal_Spec) then
+ declare
+ Stream_Prim : Entity_Id;
+ Prefix_Type : constant Entity_Id := Entity (Prefix (Nam));
+
+ begin
+ -- The class-wide forms of the stream attributes are not
+ -- primitive dispatching operations (even though they
+ -- internally dispatch to a stream attribute).
+
+ if Is_Class_Wide_Type (Prefix_Type) then
+ Error_Msg_N
+ ("attribute must be a primitive dispatching operation",
+ Nam);
+ return;
+ end if;
+
+ -- Retrieve the primitive subprogram associated with the
+ -- attribute. This can only be a stream attribute, since
+ -- those are the only ones that are dispatching (and the
+ -- actual for an abstract formal subprogram must be a
+ -- dispatching operation).
+
+ case Attribute_Name (Nam) is
+ when Name_Input =>
+ Stream_Prim :=
+ Find_Prim_Op (Prefix_Type, TSS_Stream_Input);
+ when Name_Output =>
+ Stream_Prim :=
+ Find_Prim_Op (Prefix_Type, TSS_Stream_Output);
+ when Name_Read =>
+ Stream_Prim :=
+ Find_Prim_Op (Prefix_Type, TSS_Stream_Read);
+ when Name_Write =>
+ Stream_Prim :=
+ Find_Prim_Op (Prefix_Type, TSS_Stream_Write);
+ when others =>
+ Error_Msg_N
+ ("attribute must be a primitive dispatching operation",
+ Nam);
+ return;
+ end case;
+
+ -- Rewrite the attribute into the name of its corresponding
+ -- primitive dispatching subprogram. We can then proceed with
+ -- the usual processing for subprogram renamings.
+
+ declare
+ Prim_Name : constant Node_Id :=
+ Make_Identifier (Sloc (Nam),
+ Chars => Chars (Stream_Prim));
+ begin
+ Set_Entity (Prim_Name, Stream_Prim);
+ Rewrite (Nam, Prim_Name);
+ Analyze (Nam);
+ end;
+ end;
+
+ -- Normal processing for a renaming of an attribute
+
+ else
+ Attribute_Renaming (N);
+ return;
+ end if;
end if;
-- Check whether this declaration corresponds to the instantiation
@@ -1183,9 +1252,8 @@ package body Sem_Ch8 is
-- is determined in Find_Renamed_Entity. If the entity is an operator,
-- Find_Renamed_Entity applies additional visibility checks.
- if Present (Corresponding_Formal_Spec (N)) then
- Is_Actual := True;
- Inst_Node := Unit_Declaration_Node (Corresponding_Formal_Spec (N));
+ if Is_Actual then
+ Inst_Node := Unit_Declaration_Node (Formal_Spec);
if Is_Entity_Name (Nam)
and then Present (Entity (Nam))
@@ -1477,9 +1545,7 @@ package body Sem_Ch8 is
-- indicate that the renaming is an abstract dispatching operation
-- with a controlling type.
- if Is_Actual
- and then Is_Abstract (Corresponding_Formal_Spec (N))
- then
+ if Is_Actual and then Is_Abstract (Formal_Spec) then
-- Mark the renaming as abstract here, so Find_Dispatching_Type
-- see it as corresponding to a generic association for a
-- formal abstract subprogram
@@ -1547,7 +1613,7 @@ package body Sem_Ch8 is
if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function)
and then Is_Abstract (Old_S)
- and then not Is_Abstract (Corresponding_Formal_Spec (N))
+ and then not Is_Abstract (Formal_Spec)
then
Error_Msg_N
("abstract subprogram not allowed as generic actual", Nam);
@@ -2801,14 +2867,15 @@ package body Sem_Ch8 is
Case_Str : constant String := Name_Buffer (1 .. Name_Len);
Case_Stm : constant Node_Id := Parent (Parent (N));
Case_Typ : constant Entity_Id := Etype (Expression (Case_Stm));
+ Case_Rtp : constant Entity_Id := Root_Type (Case_Typ);
Lit : Node_Id;
begin
if Is_Enumeration_Type (Case_Typ)
- and then Case_Typ /= Standard_Character
- and then Case_Typ /= Standard_Wide_Character
- and then Case_Typ /= Standard_Wide_Wide_Character
+ and then Case_Rtp /= Standard_Character
+ and then Case_Rtp /= Standard_Wide_Character
+ and then Case_Rtp /= Standard_Wide_Wide_Character
then
Lit := First_Literal (Case_Typ);
Get_Name_String (Chars (Lit));
diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb
index 66f13453c50..237984600d7 100644
--- a/gcc/ada/snames.adb
+++ b/gcc/ada/snames.adb
@@ -607,6 +607,7 @@ package body Snames is
"exception_message#" &
"exception_name#" &
"file#" &
+ "generic_dispatching_constructor#" &
"import_address#" &
"import_largest_value#" &
"import_value#" &
diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads
index 9b79ae448dc..4c8d2547ef0 100644
--- a/gcc/ada/snames.ads
+++ b/gcc/ada/snames.ads
@@ -880,126 +880,127 @@ package Snames is
-- Note: Asm is missing from this list, since Asm is a legitimate
-- convention name. So is To_Adress, which is a GNAT attribute.
- First_Intrinsic_Name : constant Name_Id := N + 544;
- Name_Divide : constant Name_Id := N + 544;
- Name_Enclosing_Entity : constant Name_Id := N + 545;
- Name_Exception_Information : constant Name_Id := N + 546;
- Name_Exception_Message : constant Name_Id := N + 547;
- Name_Exception_Name : constant Name_Id := N + 548;
- Name_File : constant Name_Id := N + 549;
- Name_Import_Address : constant Name_Id := N + 550;
- Name_Import_Largest_Value : constant Name_Id := N + 551;
- Name_Import_Value : constant Name_Id := N + 552;
- Name_Is_Negative : constant Name_Id := N + 553;
- Name_Line : constant Name_Id := N + 554;
- Name_Rotate_Left : constant Name_Id := N + 555;
- Name_Rotate_Right : constant Name_Id := N + 556;
- Name_Shift_Left : constant Name_Id := N + 557;
- Name_Shift_Right : constant Name_Id := N + 558;
- Name_Shift_Right_Arithmetic : constant Name_Id := N + 559;
- Name_Source_Location : constant Name_Id := N + 560;
- Name_Unchecked_Conversion : constant Name_Id := N + 561;
- Name_Unchecked_Deallocation : constant Name_Id := N + 562;
- Name_To_Pointer : constant Name_Id := N + 563;
- Last_Intrinsic_Name : constant Name_Id := N + 563;
+ First_Intrinsic_Name : constant Name_Id := N + 544;
+ Name_Divide : constant Name_Id := N + 544;
+ Name_Enclosing_Entity : constant Name_Id := N + 545;
+ Name_Exception_Information : constant Name_Id := N + 546;
+ Name_Exception_Message : constant Name_Id := N + 547;
+ Name_Exception_Name : constant Name_Id := N + 548;
+ Name_File : constant Name_Id := N + 549;
+ Name_Generic_Dispatching_Constructor : constant Name_Id := N + 550;
+ Name_Import_Address : constant Name_Id := N + 551;
+ Name_Import_Largest_Value : constant Name_Id := N + 552;
+ Name_Import_Value : constant Name_Id := N + 553;
+ Name_Is_Negative : constant Name_Id := N + 554;
+ Name_Line : constant Name_Id := N + 555;
+ Name_Rotate_Left : constant Name_Id := N + 556;
+ Name_Rotate_Right : constant Name_Id := N + 557;
+ Name_Shift_Left : constant Name_Id := N + 558;
+ Name_Shift_Right : constant Name_Id := N + 559;
+ Name_Shift_Right_Arithmetic : constant Name_Id := N + 560;
+ Name_Source_Location : constant Name_Id := N + 561;
+ Name_Unchecked_Conversion : constant Name_Id := N + 562;
+ Name_Unchecked_Deallocation : constant Name_Id := N + 563;
+ Name_To_Pointer : constant Name_Id := N + 564;
+ Last_Intrinsic_Name : constant Name_Id := N + 564;
-- Reserved words used only in Ada 95
- First_95_Reserved_Word : constant Name_Id := N + 564;
- Name_Abstract : constant Name_Id := N + 564;
- Name_Aliased : constant Name_Id := N + 565;
- Name_Protected : constant Name_Id := N + 566;
- Name_Until : constant Name_Id := N + 567;
- Name_Requeue : constant Name_Id := N + 568;
- Name_Tagged : constant Name_Id := N + 569;
- Last_95_Reserved_Word : constant Name_Id := N + 569;
+ First_95_Reserved_Word : constant Name_Id := N + 565;
+ Name_Abstract : constant Name_Id := N + 565;
+ Name_Aliased : constant Name_Id := N + 566;
+ Name_Protected : constant Name_Id := N + 567;
+ Name_Until : constant Name_Id := N + 568;
+ Name_Requeue : constant Name_Id := N + 569;
+ Name_Tagged : constant Name_Id := N + 570;
+ Last_95_Reserved_Word : constant Name_Id := N + 570;
subtype Ada_95_Reserved_Words is
Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
-- Miscellaneous names used in semantic checking
- Name_Raise_Exception : constant Name_Id := N + 570;
+ Name_Raise_Exception : constant Name_Id := N + 571;
-- Additional reserved words and identifiers used in GNAT Project Files
-- Note that Name_External is already previously declared
- Name_Ada_Roots : constant Name_Id := N + 571;
- Name_Binder : constant Name_Id := N + 572;
- Name_Binder_Driver : constant Name_Id := N + 573;
- Name_Body_Suffix : constant Name_Id := N + 574;
- Name_Builder : constant Name_Id := N + 575;
- Name_Compiler : constant Name_Id := N + 576;
- Name_Compiler_Driver : constant Name_Id := N + 577;
- Name_Compiler_Kind : constant Name_Id := N + 578;
- Name_Compute_Dependency : constant Name_Id := N + 579;
- Name_Cross_Reference : constant Name_Id := N + 580;
- Name_Default_Linker : constant Name_Id := N + 581;
- Name_Default_Switches : constant Name_Id := N + 582;
- Name_Dependency_Option : constant Name_Id := N + 583;
- Name_Exec_Dir : constant Name_Id := N + 584;
- Name_Executable : constant Name_Id := N + 585;
- Name_Executable_Suffix : constant Name_Id := N + 586;
- Name_Extends : constant Name_Id := N + 587;
- Name_Externally_Built : constant Name_Id := N + 588;
- Name_Finder : constant Name_Id := N + 589;
- Name_Global_Configuration_Pragmas : constant Name_Id := N + 590;
- Name_Gnatls : constant Name_Id := N + 591;
- Name_Gnatstub : constant Name_Id := N + 592;
- Name_Implementation : constant Name_Id := N + 593;
- Name_Implementation_Exceptions : constant Name_Id := N + 594;
- Name_Implementation_Suffix : constant Name_Id := N + 595;
- Name_Include_Option : constant Name_Id := N + 596;
- Name_Language_Processing : constant Name_Id := N + 597;
- Name_Languages : constant Name_Id := N + 598;
- Name_Library_Dir : constant Name_Id := N + 599;
- Name_Library_Auto_Init : constant Name_Id := N + 600;
- Name_Library_GCC : constant Name_Id := N + 601;
- Name_Library_Interface : constant Name_Id := N + 602;
- Name_Library_Kind : constant Name_Id := N + 603;
- Name_Library_Name : constant Name_Id := N + 604;
- Name_Library_Options : constant Name_Id := N + 605;
- Name_Library_Reference_Symbol_File : constant Name_Id := N + 606;
- Name_Library_Src_Dir : constant Name_Id := N + 607;
- Name_Library_Symbol_File : constant Name_Id := N + 608;
- Name_Library_Symbol_Policy : constant Name_Id := N + 609;
- Name_Library_Version : constant Name_Id := N + 610;
- Name_Linker : constant Name_Id := N + 611;
- Name_Local_Configuration_Pragmas : constant Name_Id := N + 612;
- Name_Locally_Removed_Files : constant Name_Id := N + 613;
- Name_Metrics : constant Name_Id := N + 614;
- Name_Naming : constant Name_Id := N + 615;
- Name_Object_Dir : constant Name_Id := N + 616;
- Name_Pretty_Printer : constant Name_Id := N + 617;
- Name_Project : constant Name_Id := N + 618;
- Name_Separate_Suffix : constant Name_Id := N + 619;
- Name_Source_Dirs : constant Name_Id := N + 620;
- Name_Source_Files : constant Name_Id := N + 621;
- Name_Source_List_File : constant Name_Id := N + 622;
- Name_Spec : constant Name_Id := N + 623;
- Name_Spec_Suffix : constant Name_Id := N + 624;
- Name_Specification : constant Name_Id := N + 625;
- Name_Specification_Exceptions : constant Name_Id := N + 626;
- Name_Specification_Suffix : constant Name_Id := N + 627;
- Name_Switches : constant Name_Id := N + 628;
+ Name_Ada_Roots : constant Name_Id := N + 572;
+ Name_Binder : constant Name_Id := N + 573;
+ Name_Binder_Driver : constant Name_Id := N + 574;
+ Name_Body_Suffix : constant Name_Id := N + 575;
+ Name_Builder : constant Name_Id := N + 576;
+ Name_Compiler : constant Name_Id := N + 577;
+ Name_Compiler_Driver : constant Name_Id := N + 578;
+ Name_Compiler_Kind : constant Name_Id := N + 579;
+ Name_Compute_Dependency : constant Name_Id := N + 580;
+ Name_Cross_Reference : constant Name_Id := N + 581;
+ Name_Default_Linker : constant Name_Id := N + 582;
+ Name_Default_Switches : constant Name_Id := N + 583;
+ Name_Dependency_Option : constant Name_Id := N + 584;
+ Name_Exec_Dir : constant Name_Id := N + 585;
+ Name_Executable : constant Name_Id := N + 586;
+ Name_Executable_Suffix : constant Name_Id := N + 587;
+ Name_Extends : constant Name_Id := N + 588;
+ Name_Externally_Built : constant Name_Id := N + 589;
+ Name_Finder : constant Name_Id := N + 590;
+ Name_Global_Configuration_Pragmas : constant Name_Id := N + 591;
+ Name_Gnatls : constant Name_Id := N + 592;
+ Name_Gnatstub : constant Name_Id := N + 593;
+ Name_Implementation : constant Name_Id := N + 594;
+ Name_Implementation_Exceptions : constant Name_Id := N + 595;
+ Name_Implementation_Suffix : constant Name_Id := N + 596;
+ Name_Include_Option : constant Name_Id := N + 597;
+ Name_Language_Processing : constant Name_Id := N + 598;
+ Name_Languages : constant Name_Id := N + 599;
+ Name_Library_Dir : constant Name_Id := N + 600;
+ Name_Library_Auto_Init : constant Name_Id := N + 601;
+ Name_Library_GCC : constant Name_Id := N + 602;
+ Name_Library_Interface : constant Name_Id := N + 603;
+ Name_Library_Kind : constant Name_Id := N + 604;
+ Name_Library_Name : constant Name_Id := N + 605;
+ Name_Library_Options : constant Name_Id := N + 606;
+ Name_Library_Reference_Symbol_File : constant Name_Id := N + 607;
+ Name_Library_Src_Dir : constant Name_Id := N + 608;
+ Name_Library_Symbol_File : constant Name_Id := N + 609;
+ Name_Library_Symbol_Policy : constant Name_Id := N + 610;
+ Name_Library_Version : constant Name_Id := N + 611;
+ Name_Linker : constant Name_Id := N + 612;
+ Name_Local_Configuration_Pragmas : constant Name_Id := N + 613;
+ Name_Locally_Removed_Files : constant Name_Id := N + 614;
+ Name_Metrics : constant Name_Id := N + 615;
+ Name_Naming : constant Name_Id := N + 616;
+ Name_Object_Dir : constant Name_Id := N + 617;
+ Name_Pretty_Printer : constant Name_Id := N + 618;
+ Name_Project : constant Name_Id := N + 619;
+ Name_Separate_Suffix : constant Name_Id := N + 620;
+ Name_Source_Dirs : constant Name_Id := N + 621;
+ Name_Source_Files : constant Name_Id := N + 622;
+ Name_Source_List_File : constant Name_Id := N + 623;
+ Name_Spec : constant Name_Id := N + 624;
+ Name_Spec_Suffix : constant Name_Id := N + 625;
+ Name_Specification : constant Name_Id := N + 626;
+ Name_Specification_Exceptions : constant Name_Id := N + 627;
+ Name_Specification_Suffix : constant Name_Id := N + 628;
+ Name_Switches : constant Name_Id := N + 629;
-- Other miscellaneous names used in front end
- Name_Unaligned_Valid : constant Name_Id := N + 629;
+ Name_Unaligned_Valid : constant Name_Id := N + 630;
-- ----------------------------------------------------------------
- First_2005_Reserved_Word : constant Name_Id := N + 630;
- Name_Interface : constant Name_Id := N + 630;
- Name_Overriding : constant Name_Id := N + 631;
- Name_Synchronized : constant Name_Id := N + 632;
- Last_2005_Reserved_Word : constant Name_Id := N + 632;
+ First_2005_Reserved_Word : constant Name_Id := N + 631;
+ Name_Interface : constant Name_Id := N + 631;
+ Name_Overriding : constant Name_Id := N + 632;
+ Name_Synchronized : constant Name_Id := N + 633;
+ Last_2005_Reserved_Word : constant Name_Id := N + 633;
subtype Ada_2005_Reserved_Words is
Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
-- Mark last defined name for consistency check in Snames body
- Last_Predefined_Name : constant Name_Id := N + 632;
+ Last_Predefined_Name : constant Name_Id := N + 633;
subtype Any_Operator_Name is Name_Id range
First_Operator_Name .. Last_Operator_Name;