exp_attr.adb, [...]: Code clean up.

2009-04-08  Robert Dewar  <dewar@adacore.com>

	* exp_attr.adb, sem_attr.adb, sem_util.adb: Code clean up.

From-SVN: r145741
This commit is contained in:
Robert Dewar 2009-04-08 14:31:44 +00:00 committed by Arnaud Charlet
parent ff69f95af0
commit ae8c7d8762
4 changed files with 22 additions and 13 deletions

View File

@ -1,3 +1,7 @@
2009-04-08 Robert Dewar <dewar@adacore.com>
* exp_attr.adb, sem_attr.adb, sem_util.adb: Code clean up.
2009-04-08 Robert Dewar <dewar@adacore.com> 2009-04-08 Robert Dewar <dewar@adacore.com>
* sem_cat.adb (Check_Categorization_Dependencies): Handle Preelaborate * sem_cat.adb (Check_Categorization_Dependencies): Handle Preelaborate

View File

@ -867,7 +867,9 @@ package body Exp_Attr is
-- If the prefix of an Access attribute is a dereference of an -- If the prefix of an Access attribute is a dereference of an
-- access parameter (or a renaming of such a dereference, or a -- access parameter (or a renaming of such a dereference, or a
-- subcomponent of such a dereference) and the context is a -- subcomponent of such a dereference) and the context is a
-- general access type (but not an anonymous access type), then -- general access type (including the type of an object or
-- component with an access_definition, but not the anonymous
-- type of an access parameter or access discriminant), then
-- apply an accessibility check to the access parameter. We used -- apply an accessibility check to the access parameter. We used
-- to rewrite the access parameter as a type conversion, but that -- to rewrite the access parameter as a type conversion, but that
-- could only be done if the immediate prefix of the Access -- could only be done if the immediate prefix of the Access
@ -882,7 +884,8 @@ package body Exp_Attr is
elsif Id = Attribute_Access elsif Id = Attribute_Access
and then Nkind (Enc_Object) = N_Explicit_Dereference and then Nkind (Enc_Object) = N_Explicit_Dereference
and then Is_Entity_Name (Prefix (Enc_Object)) and then Is_Entity_Name (Prefix (Enc_Object))
and then Ekind (Btyp) = E_General_Access_Type and then (Ekind (Btyp) = E_General_Access_Type
or else Is_Local_Anonymous_Access (Btyp))
and then Ekind (Entity (Prefix (Enc_Object))) in Formal_Kind and then Ekind (Entity (Prefix (Enc_Object))) in Formal_Kind
and then Ekind (Etype (Entity (Prefix (Enc_Object)))) and then Ekind (Etype (Entity (Prefix (Enc_Object))))
= E_Anonymous_Access_Type = E_Anonymous_Access_Type

View File

@ -713,8 +713,7 @@ package body Sem_Attr is
then then
null; null;
-- OK if reference to the current instance of a protected -- OK if reference to current instance of a protected object
-- object.
elsif Is_Protected_Self_Reference (P) then elsif Is_Protected_Self_Reference (P) then
null; null;
@ -1651,8 +1650,8 @@ package body Sem_Attr is
elsif Is_Protected_Self_Reference (P) then elsif Is_Protected_Self_Reference (P) then
Error_Attr_P Error_Attr_P
("prefix of % attribute denotes current instance " & ("prefix of % attribute denotes current instance "
"(RM 9.4(21/2))"); & "(RM 9.4(21/2))");
elsif Ekind (Entity (P)) = E_Incomplete_Type elsif Ekind (Entity (P)) = E_Incomplete_Type
and then Present (Full_View (Entity (P))) and then Present (Full_View (Entity (P)))
@ -2021,8 +2020,8 @@ package body Sem_Attr is
-- applies to other entity-denoting expressions. -- applies to other entity-denoting expressions.
if Is_Protected_Self_Reference (P) then if Is_Protected_Self_Reference (P) then
-- An Address attribute on a protected object self reference
-- is legal. -- Address attribute on a protected object self reference is legal
null; null;

View File

@ -6383,8 +6383,8 @@ package body Sem_Util is
-- Is_Protected_Self_Reference -- -- Is_Protected_Self_Reference --
--------------------------------- ---------------------------------
function Is_Protected_Self_Reference (N : Node_Id) return Boolean function Is_Protected_Self_Reference (N : Node_Id) return Boolean is
is
function In_Access_Definition (N : Node_Id) return Boolean; function In_Access_Definition (N : Node_Id) return Boolean;
-- Returns true if N belongs to an access definition -- Returns true if N belongs to an access definition
@ -6392,16 +6392,19 @@ package body Sem_Util is
-- In_Access_Definition -- -- In_Access_Definition --
-------------------------- --------------------------
function In_Access_Definition (N : Node_Id) return Boolean function In_Access_Definition (N : Node_Id) return Boolean is
is P : Node_Id;
P : Node_Id := Parent (N);
begin begin
P := Parent (N);
while Present (P) loop while Present (P) loop
if Nkind (P) = N_Access_Definition then if Nkind (P) = N_Access_Definition then
return True; return True;
end if; end if;
P := Parent (P); P := Parent (P);
end loop; end loop;
return False; return False;
end In_Access_Definition; end In_Access_Definition;