lib-xref-alfa.adb (Generate_Dereference): Use Get_Code_Unit instead of Get_Source_Unit to get file for reference.
2012-03-30 Yannick Moy <moy@adacore.com> * lib-xref-alfa.adb (Generate_Dereference): Use Get_Code_Unit instead of Get_Source_Unit to get file for reference. (Traverse_Compilation_Unit): Do not add scopes for generic units. * lib-xref.adb (Generate_Reference): Use Get_Code_Unit instead of Get_Source_Unit to get file for reference. * sem_ch12.adb (Analyze_Package_Instantiation): Enable instantiation in Alfa mode. From-SVN: r186002
This commit is contained in:
parent
cdc96e3ea6
commit
23e7bf6a4e
4 changed files with 62 additions and 29 deletions
|
@ -1,3 +1,13 @@
|
|||
2012-03-30 Yannick Moy <moy@adacore.com>
|
||||
|
||||
* lib-xref-alfa.adb (Generate_Dereference): Use Get_Code_Unit
|
||||
instead of Get_Source_Unit to get file for reference.
|
||||
(Traverse_Compilation_Unit): Do not add scopes for generic units.
|
||||
* lib-xref.adb (Generate_Reference): Use Get_Code_Unit instead
|
||||
of Get_Source_Unit to get file for reference.
|
||||
* sem_ch12.adb (Analyze_Package_Instantiation): Enable
|
||||
instantiation in Alfa mode.
|
||||
|
||||
2012-03-30 Hristian Kirtchev <kirtchev@adacore.com>
|
||||
|
||||
* exp_ch7.adb (Process_Declarations): Replace
|
||||
|
|
|
@ -1051,15 +1051,13 @@ package body Alfa is
|
|||
|
||||
Loc : constant Source_Ptr := Sloc (N);
|
||||
Index : Nat;
|
||||
Ref : Source_Ptr;
|
||||
Ref_Scope : Entity_Id;
|
||||
|
||||
-- Start of processing for Generate_Dereference
|
||||
|
||||
begin
|
||||
Ref := Original_Location (Loc);
|
||||
|
||||
if Ref > No_Location then
|
||||
if Loc > No_Location then
|
||||
Drefs.Increment_Last;
|
||||
Index := Drefs.Last;
|
||||
|
||||
|
@ -1075,21 +1073,21 @@ package body Alfa is
|
|||
Ref_Scope := Enclosing_Subprogram_Or_Package (N);
|
||||
|
||||
Deref.Ent := Heap;
|
||||
Deref.Loc := Ref;
|
||||
Deref.Loc := Loc;
|
||||
Deref.Typ := Typ;
|
||||
|
||||
-- It is as if the special "Heap" was defined in every scope where
|
||||
-- it is referenced.
|
||||
|
||||
Deref.Eun := Get_Source_Unit (Ref);
|
||||
Deref.Lun := Get_Source_Unit (Ref);
|
||||
Deref.Eun := Get_Code_Unit (Loc);
|
||||
Deref.Lun := Get_Code_Unit (Loc);
|
||||
|
||||
Deref.Ref_Scope := Ref_Scope;
|
||||
Deref.Ent_Scope := Ref_Scope;
|
||||
|
||||
Deref_Entry.Def := No_Location;
|
||||
|
||||
Deref_Entry.Ent_Scope_File := Get_Source_Unit (Ref_Scope);
|
||||
Deref_Entry.Ent_Scope_File := Get_Code_Unit (N);
|
||||
end;
|
||||
end if;
|
||||
end Generate_Dereference;
|
||||
|
@ -1125,6 +1123,14 @@ package body Alfa is
|
|||
Lu := Proper_Body (Lu);
|
||||
end if;
|
||||
|
||||
-- Do not add scopes for generic units
|
||||
|
||||
if Nkind (Lu) = N_Package_Body
|
||||
and then Ekind (Corresponding_Spec (Lu)) in Generic_Unit_Kind
|
||||
then
|
||||
return;
|
||||
end if;
|
||||
|
||||
-- Call Process on all declarations
|
||||
|
||||
if Nkind (Lu) in N_Declaration
|
||||
|
|
|
@ -378,7 +378,6 @@ package body Lib.Xref is
|
|||
Def : Source_Ptr;
|
||||
Ent : Entity_Id;
|
||||
Ent_Scope : Entity_Id;
|
||||
Ent_Scope_File : Unit_Number_Type;
|
||||
Formal : Entity_Id;
|
||||
Kind : Entity_Kind;
|
||||
Nod : Node_Id;
|
||||
|
@ -633,6 +632,16 @@ package body Lib.Xref is
|
|||
or else Typ = 'i'
|
||||
or else Typ = 'k'
|
||||
or else (Typ = 'b' and then Is_Generic_Instance (E))
|
||||
|
||||
-- Allow the generation of references to reads, writes and calls
|
||||
-- in Alfa mode when the related context comes from an instance.
|
||||
|
||||
or else
|
||||
(Alfa_Mode
|
||||
and then In_Extended_Main_Code_Unit (N)
|
||||
and then (Typ = 'm'
|
||||
or else Typ = 'r'
|
||||
or else Typ = 's'))
|
||||
then
|
||||
null;
|
||||
else
|
||||
|
@ -880,11 +889,12 @@ package body Lib.Xref is
|
|||
|
||||
-- Ignore references from within an instance. The only exceptions to
|
||||
-- this are default subprograms, for which we generate an implicit
|
||||
-- reference.
|
||||
-- reference and compilations in Alfa_Mode.
|
||||
|
||||
and then
|
||||
(Instantiation_Location (Sloc (N)) = No_Location
|
||||
or else Typ = 'i')
|
||||
or else Typ = 'i'
|
||||
or else Alfa_Mode)
|
||||
|
||||
-- Ignore dummy references
|
||||
|
||||
|
@ -995,9 +1005,6 @@ package body Lib.Xref is
|
|||
|
||||
-- Record reference to entity
|
||||
|
||||
Ref := Original_Location (Sloc (Nod));
|
||||
Def := Original_Location (Sloc (Ent));
|
||||
|
||||
if Actual_Typ = 'p'
|
||||
and then Is_Subprogram (Nod)
|
||||
and then Present (Overridden_Operation (Nod))
|
||||
|
@ -1006,6 +1013,9 @@ package body Lib.Xref is
|
|||
end if;
|
||||
|
||||
if Alfa_Mode then
|
||||
Ref := Sloc (Nod);
|
||||
Def := Sloc (Ent);
|
||||
|
||||
Ref_Scope := Alfa.Enclosing_Subprogram_Or_Package (Nod);
|
||||
Ent_Scope := Alfa.Enclosing_Subprogram_Or_Package (Ent);
|
||||
|
||||
|
@ -1018,22 +1028,30 @@ package body Lib.Xref is
|
|||
return;
|
||||
end if;
|
||||
|
||||
Ent_Scope_File := Get_Source_Unit (Ent_Scope);
|
||||
else
|
||||
Ref_Scope := Empty;
|
||||
Ent_Scope := Empty;
|
||||
Ent_Scope_File := No_Unit;
|
||||
end if;
|
||||
Add_Entry
|
||||
((Ent => Ent,
|
||||
Loc => Ref,
|
||||
Typ => Actual_Typ,
|
||||
Eun => Get_Code_Unit (Def),
|
||||
Lun => Get_Code_Unit (Ref),
|
||||
Ref_Scope => Ref_Scope,
|
||||
Ent_Scope => Ent_Scope),
|
||||
Ent_Scope_File => Get_Code_Unit (Ent));
|
||||
|
||||
Add_Entry
|
||||
((Ent => Ent,
|
||||
Loc => Ref,
|
||||
Typ => Actual_Typ,
|
||||
Eun => Get_Source_Unit (Def),
|
||||
Lun => Get_Source_Unit (Ref),
|
||||
Ref_Scope => Ref_Scope,
|
||||
Ent_Scope => Ent_Scope),
|
||||
Ent_Scope_File => Ent_Scope_File);
|
||||
else
|
||||
Ref := Original_Location (Sloc (Nod));
|
||||
Def := Original_Location (Sloc (Ent));
|
||||
|
||||
Add_Entry
|
||||
((Ent => Ent,
|
||||
Loc => Ref,
|
||||
Typ => Actual_Typ,
|
||||
Eun => Get_Source_Unit (Def),
|
||||
Lun => Get_Source_Unit (Ref),
|
||||
Ref_Scope => Empty,
|
||||
Ent_Scope => Empty),
|
||||
Ent_Scope_File => No_Unit);
|
||||
end if;
|
||||
end if;
|
||||
end Generate_Reference;
|
||||
|
||||
|
|
|
@ -3704,7 +3704,6 @@ package body Sem_Ch12 is
|
|||
or else Might_Inline_Subp)
|
||||
and then not Is_Actual_Pack
|
||||
and then not Inline_Now
|
||||
and then not Alfa_Mode
|
||||
and then (Operating_Mode = Generate_Code
|
||||
or else (Operating_Mode = Check_Semantics
|
||||
and then ASIS_Mode));
|
||||
|
|
Loading…
Add table
Reference in a new issue