Commit 5a1ccfb1 by Arnaud Charlet

[multiple changes]

2009-07-20  Bob Duff  <duff@adacore.com>

	* sem_ch13.adb (Analyze_Record_Representation_Clause): Use "and then"
	instead of "and", because otherwise Parent_Last_Bit is read
	uninitialized in the case where it's not a tagged type, or the tagged
	parent does not have a complete rep clause.

2009-07-20  Robert Dewar  <dewar@adacore.com>

	* stylesw.ads: Minor documentation change.

	* types.ads: Minor reformatting

2009-07-20  Javier Miranda  <miranda@adacore.com>

	* exp_disp.ads (Apply_Access_Checks): New subprogram that takes care of
	generating the tag checks associated with dispatching calls.
	* exp_disp.adb (Apply_Access_Checks): New subprogram.
	(New_Value): This routine was previously local to expand dispatching
	calls but it is now used also by Apply_Access_Checks.
	(Expand_Dispatching_Calls): Cleanup code because the functionality of
	tag checks is now provided by Apply_Access_Checks. 
	* exp_ch6.adb (Expand_Call): Incorporate generation of tag checks in
	case of dispatching calls.

2009-07-20  Arnaud Charlet  <charlet@adacore.com>

	* gnat1drv.adb (Gnat1drv): Also disable Elaboration_Check in
	CodePeer_Mode.

From-SVN: r149821
parent 151293b5
2009-07-20 Bob Duff <duff@adacore.com>
* sem_ch13.adb (Analyze_Record_Representation_Clause): Use "and then"
instead of "and", because otherwise Parent_Last_Bit is read
uninitialized in the case where it's not a tagged type, or the tagged
parent does not have a complete rep clause.
2009-07-20 Robert Dewar <dewar@adacore.com>
* stylesw.ads: Minor documentation change.
* types.ads: Minor reformatting
2009-07-20 Javier Miranda <miranda@adacore.com>
* exp_disp.ads (Apply_Access_Checks): New subprogram that takes care of
generating the tag checks associated with dispatching calls.
* exp_disp.adb (Apply_Access_Checks): New subprogram.
(New_Value): This routine was previously local to expand dispatching
calls but it is now used also by Apply_Access_Checks.
(Expand_Dispatching_Calls): Cleanup code because the functionality of
tag checks is now provided by Apply_Access_Checks.
* exp_ch6.adb (Expand_Call): Incorporate generation of tag checks in
case of dispatching calls.
2009-07-20 Arnaud Charlet <charlet@adacore.com>
* gnat1drv.adb (Gnat1drv): Also disable Elaboration_Check in
CodePeer_Mode.
2009-07-20 Gary Dismukes <dismukes@adacore.com>
* exp_prag.adb (Expand_Pragma_Import_Export_Exception): When compiling
......
......@@ -2612,12 +2612,14 @@ package body Exp_Ch6 is
return;
-- Expansion of a dispatching call results in an indirect call, which
-- in turn causes current values to be killed (see Resolve_Call), so
-- on VM targets we do the call here to ensure consistent warnings
-- between VM and non-VM targets.
else
Apply_Tag_Checks (N);
-- Expansion of a dispatching call results in an indirect call,
-- which in turn causes current values to be killed (see
-- Resolve_Call), so on VM targets we do the call here to ensure
-- consistent warnings between VM and non-VM targets.
Kill_Current_Values;
end if;
end if;
......
......@@ -80,6 +80,11 @@ package body Exp_Disp is
-- Returns true if Prim is not a predefined dispatching primitive but it is
-- an alias of a predefined dispatching primitive (i.e. through a renaming)
function New_Value (From : Node_Id) return Node_Id;
-- From is the original Expression. New_Value is equivalent to a call
-- to Duplicate_Subexpr with an explicit dereference when From is an
-- access parameter.
function Original_View_In_Visible_Part (Typ : Entity_Id) return Boolean;
-- Check if the type has a private view or if the public view appears
-- in the visible part of a package spec.
......@@ -95,6 +100,182 @@ package body Exp_Disp is
-- Ada 2005 (AI-345): Determine the tagged kind of T and return a reference
-- to an RE_Tagged_Kind enumeration value.
----------------------
-- Apply_Tag_Checks --
----------------------
procedure Apply_Tag_Checks (Call_Node : Node_Id) is
Loc : constant Source_Ptr := Sloc (Call_Node);
Ctrl_Arg : constant Node_Id := Controlling_Argument (Call_Node);
Ctrl_Typ : constant Entity_Id := Base_Type (Etype (Ctrl_Arg));
Param_List : constant List_Id := Parameter_Associations (Call_Node);
Subp : Entity_Id;
CW_Typ : Entity_Id;
Param : Node_Id;
Typ : Entity_Id;
Eq_Prim_Op : Entity_Id := Empty;
begin
if No_Run_Time_Mode then
Error_Msg_CRT ("tagged types", Call_Node);
return;
end if;
-- Apply_Tag_Checks is called directly from the semantics, so we need
-- a check to see whether expansion is active before proceeding. In
-- addition, there is no need to expand the call when compiling under
-- restriction No_Dispatching_Calls; the semantic analyzer has
-- previously notified the violation of this restriction.
if not Expander_Active
or else Restriction_Active (No_Dispatching_Calls)
then
return;
end if;
-- Set subprogram. If this is an inherited operation that was
-- overridden, the body that is being called is its alias.
Subp := Entity (Name (Call_Node));
if Present (Alias (Subp))
and then Is_Inherited_Operation (Subp)
and then No (DTC_Entity (Subp))
then
Subp := Alias (Subp);
end if;
-- Definition of the class-wide type and the tagged type
-- If the controlling argument is itself a tag rather than a tagged
-- object, then use the class-wide type associated with the subprogram's
-- controlling type. This case can occur when a call to an inherited
-- primitive has an actual that originated from a default parameter
-- given by a tag-indeterminate call and when there is no other
-- controlling argument providing the tag (AI-239 requires dispatching).
-- This capability of dispatching directly by tag is also needed by the
-- implementation of AI-260 (for the generic dispatching constructors).
if Ctrl_Typ = RTE (RE_Tag)
or else (RTE_Available (RE_Interface_Tag)
and then Ctrl_Typ = RTE (RE_Interface_Tag))
then
CW_Typ := Class_Wide_Type (Find_Dispatching_Type (Subp));
-- Class_Wide_Type is applied to the expressions used to initialize
-- CW_Typ, to ensure that CW_Typ always denotes a class-wide type, since
-- there are cases where the controlling type is resolved to a specific
-- type (such as for designated types of arguments such as CW'Access).
elsif Is_Access_Type (Ctrl_Typ) then
CW_Typ := Class_Wide_Type (Designated_Type (Ctrl_Typ));
else
CW_Typ := Class_Wide_Type (Ctrl_Typ);
end if;
Typ := Root_Type (CW_Typ);
if Ekind (Typ) = E_Incomplete_Type then
Typ := Non_Limited_View (Typ);
end if;
if not Is_Limited_Type (Typ) then
Eq_Prim_Op := Find_Prim_Op (Typ, Name_Op_Eq);
end if;
-- Dispatching call to C++ primitive
if Is_CPP_Class (Typ) then
null;
-- Dispatching call to Ada primitive
elsif Present (Param_List) then
-- Generate the Tag checks when appropriate
Param := First_Actual (Call_Node);
while Present (Param) loop
-- No tag check with itself
if Param = Ctrl_Arg then
null;
-- No tag check for parameter whose type is neither tagged nor
-- access to tagged (for access parameters)
elsif No (Find_Controlling_Arg (Param)) then
null;
-- No tag check for function dispatching on result if the
-- Tag given by the context is this one
elsif Find_Controlling_Arg (Param) = Ctrl_Arg then
null;
-- "=" is the only dispatching operation allowed to get
-- operands with incompatible tags (it just returns false).
-- We use Duplicate_Subexpr_Move_Checks instead of calling
-- Relocate_Node because the value will be duplicated to
-- check the tags.
elsif Subp = Eq_Prim_Op then
null;
-- No check in presence of suppress flags
elsif Tag_Checks_Suppressed (Etype (Param))
or else (Is_Access_Type (Etype (Param))
and then Tag_Checks_Suppressed
(Designated_Type (Etype (Param))))
then
null;
-- Optimization: no tag checks if the parameters are identical
elsif Is_Entity_Name (Param)
and then Is_Entity_Name (Ctrl_Arg)
and then Entity (Param) = Entity (Ctrl_Arg)
then
null;
-- Now we need to generate the Tag check
else
-- Generate code for tag equality check
-- Perhaps should have Checks.Apply_Tag_Equality_Check???
Insert_Action (Ctrl_Arg,
Make_Implicit_If_Statement (Call_Node,
Condition =>
Make_Op_Ne (Loc,
Left_Opnd =>
Make_Selected_Component (Loc,
Prefix => New_Value (Ctrl_Arg),
Selector_Name =>
New_Reference_To
(First_Tag_Component (Typ), Loc)),
Right_Opnd =>
Make_Selected_Component (Loc,
Prefix =>
Unchecked_Convert_To (Typ, New_Value (Param)),
Selector_Name =>
New_Reference_To
(First_Tag_Component (Typ), Loc))),
Then_Statements =>
New_List (New_Constraint_Error (Loc))));
end if;
Next_Actual (Param);
end loop;
end if;
end Apply_Tag_Checks;
------------------------
-- Building_Static_DT --
------------------------
......@@ -469,8 +650,9 @@ package body Exp_Disp is
-- Dispatching call to C++ primitive. Create a new parameter list
-- with no tag checks.
New_Params := New_List;
if Is_CPP_Class (Typ) then
New_Params := New_List;
Param := First_Actual (Call_Node);
while Present (Param) loop
Append_To (New_Params, Relocate_Node (Param));
......@@ -480,86 +662,19 @@ package body Exp_Disp is
-- Dispatching call to Ada primitive
elsif Present (Param_List) then
Apply_Tag_Checks (Call_Node);
-- Generate the Tag checks when appropriate
New_Params := New_List;
Param := First_Actual (Call_Node);
while Present (Param) loop
-- Cases in which we may have generated runtime checks
-- No tag check with itself
if Param = Ctrl_Arg then
Append_To (New_Params,
Duplicate_Subexpr_Move_Checks (Param));
-- No tag check for parameter whose type is neither tagged nor
-- access to tagged (for access parameters)
elsif No (Find_Controlling_Arg (Param)) then
Append_To (New_Params, Relocate_Node (Param));
-- No tag check for function dispatching on result if the
-- Tag given by the context is this one
elsif Find_Controlling_Arg (Param) = Ctrl_Arg then
Append_To (New_Params, Relocate_Node (Param));
-- "=" is the only dispatching operation allowed to get
-- operands with incompatible tags (it just returns false).
-- We use Duplicate_Subexpr_Move_Checks instead of calling
-- Relocate_Node because the value will be duplicated to
-- check the tags.
elsif Subp = Eq_Prim_Op then
if Param = Ctrl_Arg
or else Subp = Eq_Prim_Op
then
Append_To (New_Params,
Duplicate_Subexpr_Move_Checks (Param));
-- No check in presence of suppress flags
elsif Tag_Checks_Suppressed (Etype (Param))
or else (Is_Access_Type (Etype (Param))
and then Tag_Checks_Suppressed
(Designated_Type (Etype (Param))))
then
Append_To (New_Params, Relocate_Node (Param));
-- Optimization: no tag checks if the parameters are identical
elsif Is_Entity_Name (Param)
and then Is_Entity_Name (Ctrl_Arg)
and then Entity (Param) = Entity (Ctrl_Arg)
then
Append_To (New_Params, Relocate_Node (Param));
-- Now we need to generate the Tag check
else
-- Generate code for tag equality check
-- Perhaps should have Checks.Apply_Tag_Equality_Check???
Insert_Action (Ctrl_Arg,
Make_Implicit_If_Statement (Call_Node,
Condition =>
Make_Op_Ne (Loc,
Left_Opnd =>
Make_Selected_Component (Loc,
Prefix => New_Value (Ctrl_Arg),
Selector_Name =>
New_Reference_To
(First_Tag_Component (Typ), Loc)),
Right_Opnd =>
Make_Selected_Component (Loc,
Prefix =>
Unchecked_Convert_To (Typ, New_Value (Param)),
Selector_Name =>
New_Reference_To
(First_Tag_Component (Typ), Loc))),
Then_Statements =>
New_List (New_Constraint_Error (Loc))));
Append_To (New_Params, Relocate_Node (Param));
end if;
......@@ -6192,6 +6307,21 @@ package body Exp_Disp is
return Result;
end Make_Tags;
---------------
-- New_Value --
---------------
function New_Value (From : Node_Id) return Node_Id is
Res : constant Node_Id := Duplicate_Subexpr (From);
begin
if Is_Access_Type (Etype (From)) then
return Make_Explicit_Dereference (Sloc (From),
Prefix => Res);
else
return Res;
end if;
end New_Value;
-----------------------------------
-- Original_View_In_Visible_Part --
-----------------------------------
......
......@@ -170,6 +170,9 @@ package Exp_Disp is
-- Exp_Disp.Default_Prim_Op_Position - indirect use
-- Exp_Disp.Set_All_DT_Position - direct use
procedure Apply_Tag_Checks (Call_Node : Node_Id);
-- Generate checks required on dispatching calls
function Building_Static_DT (Typ : Entity_Id) return Boolean;
pragma Inline (Building_Static_DT);
-- Returns true when building statically allocated dispatch tables
......
......@@ -158,20 +158,22 @@ procedure Gnat1drv is
ASIS_Mode := False;
-- Turn off dynamic elaboration checks: generates inconsitencies in
-- Suppress overflow checks and access checks since they are handled
-- implicitely by CodePeer.
-- Turn off dynamic elaboration checks: generates inconsistencies in
-- trees between specs compiled as part of a main unit or as part of
-- a with-clause.
Dynamic_Elaboration_Checks := False;
-- Suppress overflow checks and access checks since they are handled
-- implicitely by CodePeer. Enable all other language checks.
-- Enable all other language checks
Suppress_Options :=
(Overflow_Check => True,
Access_Check => True,
others => False);
(Overflow_Check => True,
Access_Check => True,
Elaboration_Check => True,
others => False);
Enable_Overflow_Checks := False;
Dynamic_Elaboration_Checks := False;
-- Kill debug of generated code, since it messes up sloc values
......
......@@ -2623,7 +2623,7 @@ package body Sem_Ch13 is
-- this component might overlap a parent field.
if Present (Tagged_Parent)
and Fbit <= Parent_Last_Bit
and then Fbit <= Parent_Last_Bit
then
Pcomp := First_Entity (Tagged_Parent);
while Present (Pcomp) loop
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
......@@ -48,28 +48,28 @@ package Stylesw is
-- other manner.
Style_Check_Array_Attribute_Index : Boolean := False;
-- This can be set True by using -gnatg or -gnatyA switches. If it is True
-- then index numbers for array attributes (like Length) are required to
-- be absent for one-dimensional arrays and present for multi-dimensional
-- This can be set True by using the -gnatyA switch. If it is True then
-- index numbers for array attributes (like Length) are required to be
-- absent for one-dimensional arrays and present for multi-dimensional
-- array attribute references.
Style_Check_Attribute_Casing : Boolean := False;
-- This can be set True by using the -gnatg or -gnatya switches. If it is
-- True, then attribute names (including keywords such as digits used as
-- attribute names) must be in mixed case.
-- This can be set True by using the -gnatya switch. If it is True, then
-- attribute names (including keywords such as digits used as attribute
-- names) must be in mixed case.
Style_Check_Blanks_At_End : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyb switches. If it is
-- True, then spaces at the end of lines are not permitted.
-- This can be set True by using the -gnatyb switch. If it is True, then
-- spaces at the end of lines are not permitted.
Style_Check_Blank_Lines : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyu switches. If it is
-- True, then multiple blank lines are not permitted, and there may not be
-- a blank line at the end of the file.
-- This can be set True by using the -gnatyu switch. If it is True, then
-- multiple blank lines are not permitted, and there may not be a blank
-- line at the end of the file.
Style_Check_Comments : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyc switches. If it is
-- True, then comments are style checked as follows:
-- This can be set True by using the -gnatyc switch. If it is True, then
-- comments are style checked as follows:
--
-- All comments must be at the start of the line, or the first minus must
-- be preceded by at least one space.
......@@ -96,27 +96,26 @@ package Stylesw is
-- comments where only a single space separates the comment characters.
Style_Check_DOS_Line_Terminator : Boolean := False;
-- This can be set true by using the -gnatg or -gnatyd switches. If it
-- is True, then the line terminator must be a single LF, without an
-- associated CR (e.g. DOS line terminator sequence CR/LF not allowed).
-- This can be set true by using the -gnatyd switch. If it is True, then
-- the line terminator must be a single LF, without an associated CR (e.g.
-- DOS line terminator sequence CR/LF not allowed).
Style_Check_End_Labels : Boolean := False;
-- This can be set True by using the -gnatg or -gnatye switches. If it is
-- True, then optional END labels must always be present.
-- This can be set True by using the -gnatye switch. If it is True, then
-- optional END labels must always be present.
Style_Check_Form_Feeds : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyf switches. If it is
-- True, then form feeds and vertical tabs are not allowed in the source
-- text.
-- This can be set True by using the -gnatyf switch. If it is True, then
-- form feeds and vertical tabs are not allowed in the source text.
Style_Check_Horizontal_Tabs : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyh switches. If it is
-- True, then horizontal tabs are not allowed in source text.
-- This can be set True by using the -gnatyh switch. If it is True, then
-- horizontal tabs are not allowed in source text.
Style_Check_If_Then_Layout : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyi switches. If it is
-- True, then a THEN keyword may not appear on the line that immediately
-- follows the line containing the corresponding IF.
-- This can be set True by using the -gnatyi switch. If it is True, then a
-- THEN keyword may not appear on the line that immediately follows the
-- line containing the corresponding IF.
--
-- This permits one of two styles for IF-THEN layout. Either the IF and
-- THEN keywords are on the same line, where the condition is short enough,
......@@ -137,28 +136,27 @@ package Stylesw is
-- is not allowed.
Style_Check_Indentation : Column_Number range 0 .. 9 := 0;
-- This can be set non-zero by using the -gnatg or -gnatyn (n a digit)
-- switches. If it is non-zero it activates indentation checking with the
-- indicated indentation value. A value of zero turns off checking. The
-- requirement is that any new statement, line comment, declaration or
-- keyword such as END, start on a column that is a multiple of the
-- indentation value.
-- This can be set non-zero by using the -gnatyn (n a digit) switch. If
-- it is non-zero it activates indentation checking with the indicated
-- indentation value. A value of zero turns off checking. The requirement
-- is that any new statement, line comment, declaration or keyword such
-- as END, start on a column that is a multiple of the indentation value.
Style_Check_Keyword_Casing : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyk switches. If it is
-- True, then keywords are required to be in all lower case. This rule does
-- not apply to keywords such as digits appearing as an attribute name.
-- This can be set True by using the -gnatyk switch. If it is True, then
-- keywords are required to be in all lower case. This rule does not apply
-- to keywords such as digits appearing as an attribute name.
Style_Check_Layout : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyl switches. If it is
-- True, it activates checks that constructs are indented as suggested by
-- the examples in the RM syntax, e.g. that the ELSE keyword must line up
-- This can be set True by using the -gnatyl switch. If it is True, it
-- activates checks that constructs are indented as suggested by the
-- examples in the RM syntax, e.g. that the ELSE keyword must line up
-- with the IF keyword.
Style_Check_Max_Line_Length : Boolean := False;
-- This can be set True by using the -gnatg or -gnatym/M switches.
-- If it is True, it activates checking for a maximum line length of
-- Style_Max_Line_Length characters.
-- This can be set True by using the -gnatym/M switches. If it is True, it
-- activates checking for a maximum line length of Style_Max_Line_Length
-- characters.
Style_Check_Max_Nesting_Level : Boolean := False;
-- This can be set True by using -gnatyLnnn with a value other than zero
......@@ -175,44 +173,44 @@ package Stylesw is
-- that mode IN is not used on its own (since it is the default).
Style_Check_Order_Subprograms : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyo switch. If it is
-- True, then names of subprogram bodies must be in alphabetical order
-- (not taking casing into account).
-- This can be set True by using the -gnatyo switch. If it is True, then
-- names of subprogram bodies must be in alphabetical order (not taking
-- casing into account).
Style_Check_Pragma_Casing : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyp switches. If it is
-- True, then pragma names must use mixed case.
-- This can be set True by using the -gnatyp switch. If it is True, then
-- pragma names must use mixed case.
Style_Check_References : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyr switches. If it is
-- True, then all references to declared identifiers are checked. The
-- requirement is that casing of the reference be the same as the casing
-- of the corresponding declaration.
-- This can be set True by using the -gnatyr switch. If it is True, then
-- all references to declared identifiers are checked. The requirement
-- is that casing of the reference be the same as the casing of the
-- corresponding declaration.
Style_Check_Separate_Stmt_Lines : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyS switches. If it is
-- TRUE, then for the case of keywords THEN (not preceded by AND) or ELSE
-- (not preceded by OR) which introduce a conditionally executed statement
-- This can be set True by using the -gnatyS switch. If it is TRUE,
-- then for the case of keywords THEN (not preceded by AND) or ELSE (not
-- preceded by OR) which introduce a conditionally executed statement
-- sequence, there must be no tokens on the same line as the keyword, so
-- that coverage testing can clearly identify execution of the statement
-- sequence. A comment is permitted, as is THEN ABORT or a PRAGMA keyword
-- after ELSE (a common style to specify the condition for the ELSE).
Style_Check_Specs : Boolean := False;
-- This can be set True by using the -gnatg or -gnatys switches. If it is
-- True, then separate specs are required to be present for all procedures
-- except parameterless library level procedures. The exception means that
-- typical main programs do not require separate specs.
-- This can be set True by using the -gnatys switches. If it is True, then
-- separate specs are required to be present for all procedures except
-- parameterless library level procedures. The exception means that typical
-- main programs do not require separate specs.
Style_Check_Standard : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyn switches. If it is
-- True, then any references to names in Standard have to be in mixed case
-- mode (e.g. Integer, Boolean).
-- This can be set True by using the -gnatyn switch. If it is True, then
-- any references to names in Standard have to be in mixed case mode (e.g.
-- Integer, Boolean).
Style_Check_Tokens : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyt switches. If it is
-- True, then the style check that requires canonical spacing between
-- various punctuation tokens as follows:
-- This can be set True by using the -gnatyt switch. If it is True, then
-- the style check that requires canonical spacing between various
-- punctuation tokens as follows:
--
-- ABS and NOT must be followed by a space
--
......@@ -254,14 +252,14 @@ package Stylesw is
-- for a space.
Style_Check_Xtra_Parens : Boolean := False;
-- This can be set True by using the -gnatg or -gnatyx switch. If true,
-- then it is not allowed to enclose entire conditional expressions in
-- parentheses (C style).
-- This can be set True by using the -gnatyx switch. If true, then it is
-- not allowed to enclose entire conditional expressions in parentheses
-- (C style).
Style_Max_Line_Length : Int := 0;
-- Value used to check maximum line length. Gets reset as a result of use
-- of -gnatym or -gnatyMnnn switches (or by use of -gnatg). This value is
-- only read if Style_Check_Max_Line_Length is True.
-- Value used to check maximum line length. Gets reset as a result of
-- use of -gnatym or -gnatyMnnn switches. This value is only read if
-- Style_Check_Max_Line_Length is True.
Style_Max_Nesting_Level : Int := 0;
-- Value used to check maximum nesting level. Gets reset as a result
......
......@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-2009 Free Software Foundation, Inc. --
-- Copyright (C) 1992-2009, 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- --
......@@ -384,10 +384,10 @@ package Types is
-- Type used to identify nodes in the tree
subtype Entity_Id is Node_Id;
-- A synonym for node types, used in the entity package to refer to
-- nodes that are entities (i.e. nodes with an Nkind of N_Defining_xxx)
-- All such nodes are extended nodes and these are the only extended
-- nodes, so that in practice entity and extended nodes are synonymous.
-- A synonym for node types, used in the entity package to refer to nodes
-- that are entities (i.e. nodes with an Nkind of N_Defining_xxx) All such
-- nodes are extended nodes and these are the only extended nodes, so that
-- in practice entity and extended nodes are synonymous.
subtype Node_Or_Entity_Id is Node_Id;
-- A synonym for node types, used in cases where a given value may be used
......
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