Commit d239991f by Gary Dismukes Committed by Arnaud Charlet

re PR ada/20300 (ICE on undefined value of type derived from Character)

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.

From-SVN: r97172
parent c857f5ed
...@@ -212,6 +212,7 @@ GNATRTL_NONTASKING_OBJS= \ ...@@ -212,6 +212,7 @@ GNATRTL_NONTASKING_OBJS= \
a-szunha$(objext) \ a-szunha$(objext) \
a-szuzti$(objext) \ a-szuzti$(objext) \
a-tags$(objext) \ a-tags$(objext) \
a-tgdico$(objext) \
a-teioed$(objext) \ a-teioed$(objext) \
a-textio$(objext) \ a-textio$(objext) \
a-ticoau$(objext) \ a-ticoau$(objext) \
......
------------------------------------------------------------------------------
-- --
-- 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);
...@@ -26,11 +26,13 @@ ...@@ -26,11 +26,13 @@
with Atree; use Atree; with Atree; use Atree;
with Einfo; use Einfo; with Einfo; use Einfo;
with Elists; use Elists;
with Errout; use Errout; with Errout; use Errout;
with Exp_Ch4; use Exp_Ch4; with Exp_Ch4; use Exp_Ch4;
with Exp_Ch7; use Exp_Ch7; with Exp_Ch7; use Exp_Ch7;
with Exp_Ch11; use Exp_Ch11; with Exp_Ch11; use Exp_Ch11;
with Exp_Code; use Exp_Code; with Exp_Code; use Exp_Code;
with Exp_Disp; use Exp_Disp;
with Exp_Fixd; use Exp_Fixd; with Exp_Fixd; use Exp_Fixd;
with Exp_Util; use Exp_Util; with Exp_Util; use Exp_Util;
with Itypes; use Itypes; with Itypes; use Itypes;
...@@ -61,6 +63,13 @@ package body Exp_Intr is ...@@ -61,6 +63,13 @@ package body Exp_Intr is
procedure Expand_Is_Negative (N : Node_Id); procedure Expand_Is_Negative (N : Node_Id);
-- Expand a call to the intrinsic Is_Negative function -- 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); procedure Expand_Exception_Call (N : Node_Id; Ent : RE_Id);
-- Expand a call to Exception_Information/Message/Name. The first -- Expand a call to Exception_Information/Message/Name. The first
-- parameter, N, is the node for the function call, and Ent is the -- parameter, N, is the node for the function call, and Ent is the
...@@ -96,6 +105,77 @@ package body Exp_Intr is ...@@ -96,6 +105,77 @@ package body Exp_Intr is
-- Name_Source_Location - expand string of form file:line -- Name_Source_Location - expand string of form file:line
-- Name_Enclosing_Entity - expand string with name of enclosing entity -- 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 -- -- Expand_Exception_Call --
--------------------------- ---------------------------
...@@ -236,6 +316,9 @@ package body Exp_Intr is ...@@ -236,6 +316,9 @@ package body Exp_Intr is
elsif Nam = Name_Exception_Name then elsif Nam = Name_Exception_Name then
Expand_Exception_Call (N, RE_Exception_Name_Simple); 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 elsif Nam = Name_Import_Address
or else or else
Nam = Name_Import_Largest_Value Nam = Name_Import_Largest_Value
......
...@@ -363,6 +363,7 @@ package body Impunit is ...@@ -363,6 +363,7 @@ package body Impunit is
"a-swunha", -- Ada.Strings.Wide_Unbounded.Hash "a-swunha", -- Ada.Strings.Wide_Unbounded.Hash
"a-szmzco", -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants; "a-szmzco", -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants;
"a-szunha", -- Ada.Strings.Wide_Wide_Unbounded.Hash "a-szunha", -- Ada.Strings.Wide_Wide_Unbounded.Hash
"a-tgdico", -- Ada.Tags.Generic_Dispatching_Constructor;
"a-tiunio", -- Ada.Text_IO.Unbounded_IO; "a-tiunio", -- Ada.Text_IO.Unbounded_IO;
"a-wwunio", -- Ada.Wide_Text_IO.Wide_Unbounded_IO; "a-wwunio", -- Ada.Wide_Text_IO.Wide_Unbounded_IO;
"a-zttest", -- Ada.Wide_Wide_Text_IO.Text_Streams "a-zttest", -- Ada.Wide_Wide_Text_IO.Text_Streams
......
...@@ -29,6 +29,7 @@ with Debug; use Debug; ...@@ -29,6 +29,7 @@ with Debug; use Debug;
with Einfo; use Einfo; with Einfo; use Einfo;
with Elists; use Elists; with Elists; use Elists;
with Errout; use Errout; with Errout; use Errout;
with Exp_Tss; use Exp_Tss;
with Exp_Util; use Exp_Util; with Exp_Util; use Exp_Util;
with Fname; use Fname; with Fname; use Fname;
with Freeze; use Freeze; with Freeze; use Freeze;
...@@ -1102,10 +1103,11 @@ package body Sem_Ch8 is ...@@ -1102,10 +1103,11 @@ package body Sem_Ch8 is
Save_AV : constant Ada_Version_Type := Ada_Version; Save_AV : constant Ada_Version_Type := Ada_Version;
Nam : constant Node_Id := Name (N); Nam : constant Node_Id := Name (N);
New_S : Entity_Id; New_S : Entity_Id;
Old_S : Entity_Id := Empty; Old_S : Entity_Id := Empty;
Rename_Spec : Entity_Id; Rename_Spec : Entity_Id;
Is_Actual : Boolean := False; Formal_Spec : constant Node_Id := Corresponding_Formal_Spec (N);
Inst_Node : Node_Id := Empty; Is_Actual : constant Boolean := Present (Formal_Spec);
Inst_Node : Node_Id := Empty;
function Original_Subprogram (Subp : Entity_Id) return Entity_Id; function Original_Subprogram (Subp : Entity_Id) return Entity_Id;
-- Find renamed entity when the declaration is a renaming_as_body -- Find renamed entity when the declaration is a renaming_as_body
...@@ -1167,8 +1169,75 @@ package body Sem_Ch8 is ...@@ -1167,8 +1169,75 @@ package body Sem_Ch8 is
-- is missing an argument when it is analyzed. -- is missing an argument when it is analyzed.
if Nkind (Nam) = N_Attribute_Reference then 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; end if;
-- Check whether this declaration corresponds to the instantiation -- Check whether this declaration corresponds to the instantiation
...@@ -1183,9 +1252,8 @@ package body Sem_Ch8 is ...@@ -1183,9 +1252,8 @@ package body Sem_Ch8 is
-- is determined in Find_Renamed_Entity. If the entity is an operator, -- is determined in Find_Renamed_Entity. If the entity is an operator,
-- Find_Renamed_Entity applies additional visibility checks. -- Find_Renamed_Entity applies additional visibility checks.
if Present (Corresponding_Formal_Spec (N)) then if Is_Actual then
Is_Actual := True; Inst_Node := Unit_Declaration_Node (Formal_Spec);
Inst_Node := Unit_Declaration_Node (Corresponding_Formal_Spec (N));
if Is_Entity_Name (Nam) if Is_Entity_Name (Nam)
and then Present (Entity (Nam)) and then Present (Entity (Nam))
...@@ -1477,9 +1545,7 @@ package body Sem_Ch8 is ...@@ -1477,9 +1545,7 @@ package body Sem_Ch8 is
-- indicate that the renaming is an abstract dispatching operation -- indicate that the renaming is an abstract dispatching operation
-- with a controlling type. -- with a controlling type.
if Is_Actual if Is_Actual and then Is_Abstract (Formal_Spec) then
and then Is_Abstract (Corresponding_Formal_Spec (N))
then
-- Mark the renaming as abstract here, so Find_Dispatching_Type -- Mark the renaming as abstract here, so Find_Dispatching_Type
-- see it as corresponding to a generic association for a -- see it as corresponding to a generic association for a
-- formal abstract subprogram -- formal abstract subprogram
...@@ -1547,7 +1613,7 @@ package body Sem_Ch8 is ...@@ -1547,7 +1613,7 @@ package body Sem_Ch8 is
if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function) if (Ekind (Old_S) = E_Procedure or else Ekind (Old_S) = E_Function)
and then Is_Abstract (Old_S) and then Is_Abstract (Old_S)
and then not Is_Abstract (Corresponding_Formal_Spec (N)) and then not Is_Abstract (Formal_Spec)
then then
Error_Msg_N Error_Msg_N
("abstract subprogram not allowed as generic actual", Nam); ("abstract subprogram not allowed as generic actual", Nam);
...@@ -2801,14 +2867,15 @@ package body Sem_Ch8 is ...@@ -2801,14 +2867,15 @@ package body Sem_Ch8 is
Case_Str : constant String := Name_Buffer (1 .. Name_Len); Case_Str : constant String := Name_Buffer (1 .. Name_Len);
Case_Stm : constant Node_Id := Parent (Parent (N)); Case_Stm : constant Node_Id := Parent (Parent (N));
Case_Typ : constant Entity_Id := Etype (Expression (Case_Stm)); Case_Typ : constant Entity_Id := Etype (Expression (Case_Stm));
Case_Rtp : constant Entity_Id := Root_Type (Case_Typ);
Lit : Node_Id; Lit : Node_Id;
begin begin
if Is_Enumeration_Type (Case_Typ) if Is_Enumeration_Type (Case_Typ)
and then Case_Typ /= Standard_Character and then Case_Rtp /= Standard_Character
and then Case_Typ /= Standard_Wide_Character and then Case_Rtp /= Standard_Wide_Character
and then Case_Typ /= Standard_Wide_Wide_Character and then Case_Rtp /= Standard_Wide_Wide_Character
then then
Lit := First_Literal (Case_Typ); Lit := First_Literal (Case_Typ);
Get_Name_String (Chars (Lit)); Get_Name_String (Chars (Lit));
......
...@@ -607,6 +607,7 @@ package body Snames is ...@@ -607,6 +607,7 @@ package body Snames is
"exception_message#" & "exception_message#" &
"exception_name#" & "exception_name#" &
"file#" & "file#" &
"generic_dispatching_constructor#" &
"import_address#" & "import_address#" &
"import_largest_value#" & "import_largest_value#" &
"import_value#" & "import_value#" &
......
...@@ -880,126 +880,127 @@ package Snames is ...@@ -880,126 +880,127 @@ package Snames is
-- Note: Asm is missing from this list, since Asm is a legitimate -- Note: Asm is missing from this list, since Asm is a legitimate
-- convention name. So is To_Adress, which is a GNAT attribute. -- convention name. So is To_Adress, which is a GNAT attribute.
First_Intrinsic_Name : constant Name_Id := N + 544; First_Intrinsic_Name : constant Name_Id := N + 544;
Name_Divide : constant Name_Id := N + 544; Name_Divide : constant Name_Id := N + 544;
Name_Enclosing_Entity : constant Name_Id := N + 545; Name_Enclosing_Entity : constant Name_Id := N + 545;
Name_Exception_Information : constant Name_Id := N + 546; Name_Exception_Information : constant Name_Id := N + 546;
Name_Exception_Message : constant Name_Id := N + 547; Name_Exception_Message : constant Name_Id := N + 547;
Name_Exception_Name : constant Name_Id := N + 548; Name_Exception_Name : constant Name_Id := N + 548;
Name_File : constant Name_Id := N + 549; Name_File : constant Name_Id := N + 549;
Name_Import_Address : constant Name_Id := N + 550; Name_Generic_Dispatching_Constructor : constant Name_Id := N + 550;
Name_Import_Largest_Value : constant Name_Id := N + 551; Name_Import_Address : constant Name_Id := N + 551;
Name_Import_Value : constant Name_Id := N + 552; Name_Import_Largest_Value : constant Name_Id := N + 552;
Name_Is_Negative : constant Name_Id := N + 553; Name_Import_Value : constant Name_Id := N + 553;
Name_Line : constant Name_Id := N + 554; Name_Is_Negative : constant Name_Id := N + 554;
Name_Rotate_Left : constant Name_Id := N + 555; Name_Line : constant Name_Id := N + 555;
Name_Rotate_Right : constant Name_Id := N + 556; Name_Rotate_Left : constant Name_Id := N + 556;
Name_Shift_Left : constant Name_Id := N + 557; Name_Rotate_Right : constant Name_Id := N + 557;
Name_Shift_Right : constant Name_Id := N + 558; Name_Shift_Left : constant Name_Id := N + 558;
Name_Shift_Right_Arithmetic : constant Name_Id := N + 559; Name_Shift_Right : constant Name_Id := N + 559;
Name_Source_Location : constant Name_Id := N + 560; Name_Shift_Right_Arithmetic : constant Name_Id := N + 560;
Name_Unchecked_Conversion : constant Name_Id := N + 561; Name_Source_Location : constant Name_Id := N + 561;
Name_Unchecked_Deallocation : constant Name_Id := N + 562; Name_Unchecked_Conversion : constant Name_Id := N + 562;
Name_To_Pointer : constant Name_Id := N + 563; Name_Unchecked_Deallocation : constant Name_Id := N + 563;
Last_Intrinsic_Name : 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 -- Reserved words used only in Ada 95
First_95_Reserved_Word : constant Name_Id := N + 564; First_95_Reserved_Word : constant Name_Id := N + 565;
Name_Abstract : constant Name_Id := N + 564; Name_Abstract : constant Name_Id := N + 565;
Name_Aliased : constant Name_Id := N + 565; Name_Aliased : constant Name_Id := N + 566;
Name_Protected : constant Name_Id := N + 566; Name_Protected : constant Name_Id := N + 567;
Name_Until : constant Name_Id := N + 567; Name_Until : constant Name_Id := N + 568;
Name_Requeue : constant Name_Id := N + 568; Name_Requeue : constant Name_Id := N + 569;
Name_Tagged : constant Name_Id := N + 569; Name_Tagged : constant Name_Id := N + 570;
Last_95_Reserved_Word : constant Name_Id := N + 569; Last_95_Reserved_Word : constant Name_Id := N + 570;
subtype Ada_95_Reserved_Words is subtype Ada_95_Reserved_Words is
Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word; Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
-- Miscellaneous names used in semantic checking -- 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 -- Additional reserved words and identifiers used in GNAT Project Files
-- Note that Name_External is already previously declared -- Note that Name_External is already previously declared
Name_Ada_Roots : constant Name_Id := N + 571; Name_Ada_Roots : constant Name_Id := N + 572;
Name_Binder : constant Name_Id := N + 572; Name_Binder : constant Name_Id := N + 573;
Name_Binder_Driver : constant Name_Id := N + 573; Name_Binder_Driver : constant Name_Id := N + 574;
Name_Body_Suffix : constant Name_Id := N + 574; Name_Body_Suffix : constant Name_Id := N + 575;
Name_Builder : constant Name_Id := N + 575; Name_Builder : constant Name_Id := N + 576;
Name_Compiler : constant Name_Id := N + 576; Name_Compiler : constant Name_Id := N + 577;
Name_Compiler_Driver : constant Name_Id := N + 577; Name_Compiler_Driver : constant Name_Id := N + 578;
Name_Compiler_Kind : constant Name_Id := N + 578; Name_Compiler_Kind : constant Name_Id := N + 579;
Name_Compute_Dependency : constant Name_Id := N + 579; Name_Compute_Dependency : constant Name_Id := N + 580;
Name_Cross_Reference : constant Name_Id := N + 580; Name_Cross_Reference : constant Name_Id := N + 581;
Name_Default_Linker : constant Name_Id := N + 581; Name_Default_Linker : constant Name_Id := N + 582;
Name_Default_Switches : constant Name_Id := N + 582; Name_Default_Switches : constant Name_Id := N + 583;
Name_Dependency_Option : constant Name_Id := N + 583; Name_Dependency_Option : constant Name_Id := N + 584;
Name_Exec_Dir : constant Name_Id := N + 584; Name_Exec_Dir : constant Name_Id := N + 585;
Name_Executable : constant Name_Id := N + 585; Name_Executable : constant Name_Id := N + 586;
Name_Executable_Suffix : constant Name_Id := N + 586; Name_Executable_Suffix : constant Name_Id := N + 587;
Name_Extends : constant Name_Id := N + 587; Name_Extends : constant Name_Id := N + 588;
Name_Externally_Built : constant Name_Id := N + 588; Name_Externally_Built : constant Name_Id := N + 589;
Name_Finder : constant Name_Id := N + 589; Name_Finder : constant Name_Id := N + 590;
Name_Global_Configuration_Pragmas : constant Name_Id := N + 590; Name_Global_Configuration_Pragmas : constant Name_Id := N + 591;
Name_Gnatls : constant Name_Id := N + 591; Name_Gnatls : constant Name_Id := N + 592;
Name_Gnatstub : constant Name_Id := N + 592; Name_Gnatstub : constant Name_Id := N + 593;
Name_Implementation : constant Name_Id := N + 593; Name_Implementation : constant Name_Id := N + 594;
Name_Implementation_Exceptions : constant Name_Id := N + 594; Name_Implementation_Exceptions : constant Name_Id := N + 595;
Name_Implementation_Suffix : constant Name_Id := N + 595; Name_Implementation_Suffix : constant Name_Id := N + 596;
Name_Include_Option : constant Name_Id := N + 596; Name_Include_Option : constant Name_Id := N + 597;
Name_Language_Processing : constant Name_Id := N + 597; Name_Language_Processing : constant Name_Id := N + 598;
Name_Languages : constant Name_Id := N + 598; Name_Languages : constant Name_Id := N + 599;
Name_Library_Dir : constant Name_Id := N + 599; Name_Library_Dir : constant Name_Id := N + 600;
Name_Library_Auto_Init : constant Name_Id := N + 600; Name_Library_Auto_Init : constant Name_Id := N + 601;
Name_Library_GCC : constant Name_Id := N + 601; Name_Library_GCC : constant Name_Id := N + 602;
Name_Library_Interface : constant Name_Id := N + 602; Name_Library_Interface : constant Name_Id := N + 603;
Name_Library_Kind : constant Name_Id := N + 603; Name_Library_Kind : constant Name_Id := N + 604;
Name_Library_Name : constant Name_Id := N + 604; Name_Library_Name : constant Name_Id := N + 605;
Name_Library_Options : constant Name_Id := N + 605; Name_Library_Options : constant Name_Id := N + 606;
Name_Library_Reference_Symbol_File : constant Name_Id := N + 606; Name_Library_Reference_Symbol_File : constant Name_Id := N + 607;
Name_Library_Src_Dir : constant Name_Id := N + 607; Name_Library_Src_Dir : constant Name_Id := N + 608;
Name_Library_Symbol_File : constant Name_Id := N + 608; Name_Library_Symbol_File : constant Name_Id := N + 609;
Name_Library_Symbol_Policy : constant Name_Id := N + 609; Name_Library_Symbol_Policy : constant Name_Id := N + 610;
Name_Library_Version : constant Name_Id := N + 610; Name_Library_Version : constant Name_Id := N + 611;
Name_Linker : constant Name_Id := N + 611; Name_Linker : constant Name_Id := N + 612;
Name_Local_Configuration_Pragmas : constant Name_Id := N + 612; Name_Local_Configuration_Pragmas : constant Name_Id := N + 613;
Name_Locally_Removed_Files : constant Name_Id := N + 613; Name_Locally_Removed_Files : constant Name_Id := N + 614;
Name_Metrics : constant Name_Id := N + 614; Name_Metrics : constant Name_Id := N + 615;
Name_Naming : constant Name_Id := N + 615; Name_Naming : constant Name_Id := N + 616;
Name_Object_Dir : constant Name_Id := N + 616; Name_Object_Dir : constant Name_Id := N + 617;
Name_Pretty_Printer : constant Name_Id := N + 617; Name_Pretty_Printer : constant Name_Id := N + 618;
Name_Project : constant Name_Id := N + 618; Name_Project : constant Name_Id := N + 619;
Name_Separate_Suffix : constant Name_Id := N + 619; Name_Separate_Suffix : constant Name_Id := N + 620;
Name_Source_Dirs : constant Name_Id := N + 620; Name_Source_Dirs : constant Name_Id := N + 621;
Name_Source_Files : constant Name_Id := N + 621; Name_Source_Files : constant Name_Id := N + 622;
Name_Source_List_File : constant Name_Id := N + 622; Name_Source_List_File : constant Name_Id := N + 623;
Name_Spec : constant Name_Id := N + 623; Name_Spec : constant Name_Id := N + 624;
Name_Spec_Suffix : constant Name_Id := N + 624; Name_Spec_Suffix : constant Name_Id := N + 625;
Name_Specification : constant Name_Id := N + 625; Name_Specification : constant Name_Id := N + 626;
Name_Specification_Exceptions : constant Name_Id := N + 626; Name_Specification_Exceptions : constant Name_Id := N + 627;
Name_Specification_Suffix : constant Name_Id := N + 627; Name_Specification_Suffix : constant Name_Id := N + 628;
Name_Switches : constant Name_Id := N + 628; Name_Switches : constant Name_Id := N + 629;
-- Other miscellaneous names used in front end -- 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; First_2005_Reserved_Word : constant Name_Id := N + 631;
Name_Interface : constant Name_Id := N + 630; Name_Interface : constant Name_Id := N + 631;
Name_Overriding : constant Name_Id := N + 631; Name_Overriding : constant Name_Id := N + 632;
Name_Synchronized : constant Name_Id := N + 632; Name_Synchronized : constant Name_Id := N + 633;
Last_2005_Reserved_Word : constant Name_Id := N + 632; Last_2005_Reserved_Word : constant Name_Id := N + 633;
subtype Ada_2005_Reserved_Words is subtype Ada_2005_Reserved_Words is
Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word; Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
-- Mark last defined name for consistency check in Snames body -- 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 subtype Any_Operator_Name is Name_Id range
First_Operator_Name .. Last_Operator_Name; First_Operator_Name .. Last_Operator_Name;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment