From 1843cecac270adb73f35b5420c1a1b43db1d455c Mon Sep 17 00:00:00 2001 From: charlet Date: Tue, 29 Mar 2005 16:15:45 +0000 Subject: [PATCH] 2005-03-29 Gary Dismukes Robert Dewar * 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 --- gcc/ada/Makefile.rtl | 1 + gcc/ada/a-tgdico.ads | 29 ++++++++ gcc/ada/exp_intr.adb | 83 ++++++++++++++++++++++ gcc/ada/impunit.adb | 1 + gcc/ada/sem_ch8.adb | 97 ++++++++++++++++++++++---- gcc/ada/snames.adb | 1 + gcc/ada/snames.ads | 193 ++++++++++++++++++++++++++------------------------- 7 files changed, 294 insertions(+), 111 deletions(-) create mode 100644 gcc/ada/a-tgdico.ads diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl index 282cbff..7687c33 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 0000000..8534d9f --- /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 1efd42b..b46b8f0 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 9aae852..f1303a2 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 5f8de03..394f6db 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 66f1345..2379846 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 9b79ae4..4c8d254 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; -- 2.7.4