lib-xref.adb (Output_References): Output progenitors of synchronized tagged types, for source navigation.
2014-01-23 Ed Schonberg <schonberg@adacore.com> * lib-xref.adb (Output_References): Output progenitors of synchronized tagged types, for source navigation. From-SVN: r206981
This commit is contained in:
parent
53c53f6dc8
commit
8925374285
@ -1,3 +1,8 @@
|
|||||||
|
2014-01-23 Ed Schonberg <schonberg@adacore.com>
|
||||||
|
|
||||||
|
* lib-xref.adb (Output_References): Output progenitors of
|
||||||
|
synchronized tagged types, for source navigation.
|
||||||
|
|
||||||
2014-01-23 Robert Dewar <dewar@adacore.com>
|
2014-01-23 Robert Dewar <dewar@adacore.com>
|
||||||
|
|
||||||
* exp_util.adb, sinfo.adb, sinfo.ads, sem.adb, sem_res.adb,
|
* exp_util.adb, sinfo.adb, sinfo.ads, sem.adb, sem_res.adb,
|
||||||
|
@ -1309,22 +1309,6 @@ package body Lib.Xref is
|
|||||||
Right := '>';
|
Right := '>';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- For a synchronized type that implements an interface, we
|
|
||||||
-- treat the first progenitor as the parent. This is only
|
|
||||||
-- needed when compiling a package declaration on its own,
|
|
||||||
-- if the body is present interfaces are handled properly.
|
|
||||||
|
|
||||||
elsif Is_Concurrent_Type (Tref)
|
|
||||||
and then Is_Tagged_Type (Tref)
|
|
||||||
and then not Expander_Active
|
|
||||||
then
|
|
||||||
if Left /= '(' then
|
|
||||||
Left := '<';
|
|
||||||
Right := '>';
|
|
||||||
end if;
|
|
||||||
|
|
||||||
Tref := Entity (First (Interface_List (Parent (Tref))));
|
|
||||||
|
|
||||||
-- If the completion of a private type is itself a derived
|
-- If the completion of a private type is itself a derived
|
||||||
-- type, we need the parent of the full view.
|
-- type, we need the parent of the full view.
|
||||||
|
|
||||||
@ -2430,25 +2414,42 @@ package body Lib.Xref is
|
|||||||
|
|
||||||
Check_Type_Reference (XE.Key.Ent, False);
|
Check_Type_Reference (XE.Key.Ent, False);
|
||||||
|
|
||||||
-- Additional information for types with progenitors
|
-- Additional information for types with progenitors,
|
||||||
|
-- including synchronized tagged types.
|
||||||
|
|
||||||
if Is_Record_Type (XE.Key.Ent)
|
declare
|
||||||
and then Present (Interfaces (XE.Key.Ent))
|
Typ : constant Entity_Id := XE.Key.Ent;
|
||||||
then
|
Elmt : Elmt_Id;
|
||||||
declare
|
|
||||||
Elmt : Elmt_Id :=
|
begin
|
||||||
First_Elmt (Interfaces (XE.Key.Ent));
|
if Is_Record_Type (Typ)
|
||||||
begin
|
and then Present (Interfaces (Typ))
|
||||||
while Present (Elmt) loop
|
then
|
||||||
Check_Type_Reference (Node (Elmt), True);
|
Elmt := First_Elmt (Interfaces (Typ));
|
||||||
Next_Elmt (Elmt);
|
|
||||||
end loop;
|
elsif Is_Concurrent_Type (Typ)
|
||||||
end;
|
and then Present (Corresponding_Record_Type (Typ))
|
||||||
|
and then Present (
|
||||||
|
Interfaces (Corresponding_Record_Type (Typ)))
|
||||||
|
then
|
||||||
|
Elmt :=
|
||||||
|
First_Elmt (
|
||||||
|
Interfaces (Corresponding_Record_Type (Typ)));
|
||||||
|
|
||||||
|
else
|
||||||
|
Elmt := No_Elmt;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
while Present (Elmt) loop
|
||||||
|
Check_Type_Reference (Node (Elmt), True);
|
||||||
|
Next_Elmt (Elmt);
|
||||||
|
end loop;
|
||||||
|
end;
|
||||||
|
|
||||||
-- For array types, list index types as well. (This is
|
-- For array types, list index types as well. (This is
|
||||||
-- not C, indexes have distinct types).
|
-- not C, indexes have distinct types).
|
||||||
|
|
||||||
elsif Is_Array_Type (XE.Key.Ent) then
|
if Is_Array_Type (XE.Key.Ent) then
|
||||||
declare
|
declare
|
||||||
Indx : Node_Id;
|
Indx : Node_Id;
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user