diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-04 09:51:08 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-04 09:51:08 +0200 |
commit | 2c1b72d7b658ecef2cd2cb7b09f5a7fcb40b3ea4 (patch) | |
tree | a8ac044fa68b27fb08b03dcef40c1e31eadc0c99 /gcc/ada/lib-xref-alfa.adb | |
parent | 824e9320157031e3969aabe742cfddd38a0513cd (diff) | |
download | gcc-2c1b72d7b658ecef2cd2cb7b09f5a7fcb40b3ea4.zip gcc-2c1b72d7b658ecef2cd2cb7b09f5a7fcb40b3ea4.tar.gz gcc-2c1b72d7b658ecef2cd2cb7b09f5a7fcb40b3ea4.tar.bz2 |
[multiple changes]
2011-08-04 Robert Dewar <dewar@adacore.com>
* par_sco.adb, prj-proc.adb, make.adb, bindgen.adb, prj.adb, prj.ads,
makeutl.adb, makeutl.ads, prj-nmsc.adb, exp_ch5.adb, exp_ch12.adb,
exp_ch7.ads, exp_util.ads, sem_util.ads, g-comlin.ads, exp_ch6.adb,
exp_ch6.ads, lib-xref.ads, exp_ch7.adb, exp_util.adb, exp_dist.adb,
exp_strm.adb, gnatcmd.adb, freeze.adb, g-comlin.adb, lib-xref-alfa.adb,
sem_attr.adb, sem_prag.adb, sem_util.adb, sem_elab.adb, sem_ch8.adb,
sem_ch11.adb, sem_eval.adb, sem_ch13.adb, sem_disp.adb, a-fihema.adb:
Minor reformatting and code reorganization.
2011-08-04 Emmanuel Briot <briot@adacore.com>
* projects.texi: Added doc for aggregate projects.
From-SVN: r177320
Diffstat (limited to 'gcc/ada/lib-xref-alfa.adb')
-rw-r--r-- | gcc/ada/lib-xref-alfa.adb | 238 |
1 files changed, 164 insertions, 74 deletions
diff --git a/gcc/ada/lib-xref-alfa.adb b/gcc/ada/lib-xref-alfa.adb index d325df5..b650d38 100644 --- a/gcc/ada/lib-xref-alfa.adb +++ b/gcc/ada/lib-xref-alfa.adb @@ -158,23 +158,38 @@ package body ALFA is -- Filter table Xrefs to add all references used in ALFA to the table -- ALFA_Xref_Table. + procedure Detect_And_Add_ALFA_Scope (N : Node_Id); + -- Call Add_ALFA_Scope on scopes + function Entity_Hash (E : Entity_Id) return Entity_Hashed_Range; -- Hash function for hash table - procedure Traverse_Declarations_Or_Statements (L : List_Id); - procedure Traverse_Handled_Statement_Sequence (N : Node_Id); - procedure Traverse_Package_Body (N : Node_Id); - procedure Traverse_Package_Declaration (N : Node_Id); - procedure Traverse_Subprogram_Body (N : Node_Id); - -- Traverse the corresponding construct, generating ALFA scope table - -- entries. + procedure Traverse_Compilation_Unit + (CU : Node_Id; + Process : Node_Processing); + procedure Traverse_Declarations_Or_Statements + (L : List_Id; + Process : Node_Processing); + procedure Traverse_Handled_Statement_Sequence + (N : Node_Id; + Process : Node_Processing); + procedure Traverse_Package_Body + (N : Node_Id; + Process : Node_Processing); + procedure Traverse_Package_Declaration + (N : Node_Id; + Process : Node_Processing); + procedure Traverse_Subprogram_Body + (N : Node_Id; + Process : Node_Processing); + -- Traverse the corresponding constructs, calling Process on all + -- declarations. ------------------- -- Add_ALFA_File -- ------------------- procedure Add_ALFA_File (U : Unit_Number_Type; D : Nat) is - Lu : Node_Id; From : Scope_Index; S : constant Source_File_Index := Source_Index (U); @@ -189,44 +204,7 @@ package body ALFA is From := ALFA_Scope_Table.Last + 1; - -- Get Unit (checking case of subunit) - - Lu := Unit (Cunit (U)); - - if Nkind (Lu) = N_Subunit then - Lu := Proper_Body (Lu); - end if; - - -- Traverse the unit - - if Nkind (Lu) = N_Subprogram_Body then - Traverse_Subprogram_Body (Lu); - - elsif Nkind (Lu) = N_Subprogram_Declaration then - Add_ALFA_Scope (Lu); - - elsif Nkind (Lu) = N_Package_Declaration then - Traverse_Package_Declaration (Lu); - - elsif Nkind (Lu) = N_Package_Body then - Traverse_Package_Body (Lu); - - -- ??? TBD - - elsif Nkind (Lu) = N_Generic_Package_Declaration then - null; - - -- ??? TBD - - elsif Nkind (Lu) in N_Generic_Instantiation then - null; - - -- All other cases of compilation units (e.g. renamings), generate - -- no ALFA information. - - else - null; - end if; + Traverse_Compilation_Unit (Cunit (U), Detect_And_Add_ALFA_Scope'Access); -- Update scope numbers @@ -860,6 +838,21 @@ package body ALFA is Add_ALFA_Xrefs; end Collect_ALFA; + ------------------------------- + -- Detect_And_Add_ALFA_Scope -- + ------------------------------- + + procedure Detect_And_Add_ALFA_Scope (N : Node_Id) is + begin + if Nkind_In (N, N_Subprogram_Declaration, + N_Subprogram_Body, + N_Package_Declaration, + N_Package_Body) + then + Add_ALFA_Scope (N); + end if; + end Detect_And_Add_ALFA_Scope; + ----------------- -- Entity_Hash -- ----------------- @@ -870,11 +863,84 @@ package body ALFA is Entity_Hashed_Range (E mod (Entity_Id (Entity_Hashed_Range'Last) + 1)); end Entity_Hash; + ------------------------------------ + -- Traverse_All_Compilation_Units -- + ------------------------------------ + + procedure Traverse_All_Compilation_Units (Process : Node_Processing) is + begin + for U in Units.First .. Last_Unit loop + Traverse_Compilation_Unit (Cunit (U), Process); + end loop; + end Traverse_All_Compilation_Units; + + ------------------------------- + -- Traverse_Compilation_Unit -- + ------------------------------- + + procedure Traverse_Compilation_Unit + (CU : Node_Id; + Process : Node_Processing) + is + Lu : Node_Id; + + begin + -- Get Unit (checking case of subunit) + + Lu := Unit (CU); + + if Nkind (Lu) = N_Subunit then + Lu := Proper_Body (Lu); + end if; + + -- Call Process on all declarations + + if Nkind (Lu) in N_Declaration + or else Nkind (Lu) in N_Later_Decl_Item + then + Process (Lu); + end if; + + -- Traverse the unit + + if Nkind (Lu) = N_Subprogram_Body then + Traverse_Subprogram_Body (Lu, Process); + + elsif Nkind (Lu) = N_Subprogram_Declaration then + null; + + elsif Nkind (Lu) = N_Package_Declaration then + Traverse_Package_Declaration (Lu, Process); + + elsif Nkind (Lu) = N_Package_Body then + Traverse_Package_Body (Lu, Process); + + -- ??? TBD + + elsif Nkind (Lu) = N_Generic_Package_Declaration then + null; + + -- ??? TBD + + elsif Nkind (Lu) in N_Generic_Instantiation then + null; + + -- All other cases of compilation units (e.g. renamings), are not + -- declarations. + + else + null; + end if; + end Traverse_Compilation_Unit; + ----------------------------------------- -- Traverse_Declarations_Or_Statements -- ----------------------------------------- - procedure Traverse_Declarations_Or_Statements (L : List_Id) is + procedure Traverse_Declarations_Or_Statements + (L : List_Id; + Process : Node_Processing) + is N : Node_Id; begin @@ -882,12 +948,21 @@ package body ALFA is N := First (L); while Present (N) loop + -- Call Process on all declarations + + if Nkind (N) in N_Declaration + or else + Nkind (N) in N_Later_Decl_Item + then + Process (N); + end if; + case Nkind (N) is -- Package declaration when N_Package_Declaration => - Traverse_Package_Declaration (N); + Traverse_Package_Declaration (N, Process); -- Generic package declaration ??? TBD @@ -898,13 +973,13 @@ package body ALFA is when N_Package_Body => if Ekind (Defining_Entity (N)) /= E_Generic_Package then - Traverse_Package_Body (N); + Traverse_Package_Body (N, Process); end if; -- Subprogram declaration when N_Subprogram_Declaration => - Add_ALFA_Scope (N); + null; -- Generic subprogram declaration ??? TBD @@ -915,21 +990,22 @@ package body ALFA is when N_Subprogram_Body => if not Is_Generic_Subprogram (Defining_Entity (N)) then - Traverse_Subprogram_Body (N); + Traverse_Subprogram_Body (N, Process); end if; -- Block statement when N_Block_Statement => - Traverse_Declarations_Or_Statements (Declarations (N)); + Traverse_Declarations_Or_Statements (Declarations (N), Process); Traverse_Handled_Statement_Sequence - (Handled_Statement_Sequence (N)); + (Handled_Statement_Sequence (N), Process); when N_If_Statement => -- Traverse the statements in the THEN part - Traverse_Declarations_Or_Statements (Then_Statements (N)); + Traverse_Declarations_Or_Statements + (Then_Statements (N), Process); -- Loop through ELSIF parts if present @@ -940,7 +1016,7 @@ package body ALFA is begin while Present (Elif) loop Traverse_Declarations_Or_Statements - (Then_Statements (Elif)); + (Then_Statements (Elif), Process); Next (Elif); end loop; end; @@ -948,7 +1024,8 @@ package body ALFA is -- Finally traverse the ELSE statements if present - Traverse_Declarations_Or_Statements (Else_Statements (N)); + Traverse_Declarations_Or_Statements + (Else_Statements (N), Process); -- Case statement @@ -961,7 +1038,8 @@ package body ALFA is begin Alt := First (Alternatives (N)); while Present (Alt) loop - Traverse_Declarations_Or_Statements (Statements (Alt)); + Traverse_Declarations_Or_Statements + (Statements (Alt), Process); Next (Alt); end loop; end; @@ -970,12 +1048,12 @@ package body ALFA is when N_Extended_Return_Statement => Traverse_Handled_Statement_Sequence - (Handled_Statement_Sequence (N)); + (Handled_Statement_Sequence (N), Process); -- Loop when N_Loop_Statement => - Traverse_Declarations_Or_Statements (Statements (N)); + Traverse_Declarations_Or_Statements (Statements (N), Process); when others => null; @@ -989,17 +1067,21 @@ package body ALFA is -- Traverse_Handled_Statement_Sequence -- ----------------------------------------- - procedure Traverse_Handled_Statement_Sequence (N : Node_Id) is + procedure Traverse_Handled_Statement_Sequence + (N : Node_Id; + Process : Node_Processing) + is Handler : Node_Id; begin if Present (N) then - Traverse_Declarations_Or_Statements (Statements (N)); + Traverse_Declarations_Or_Statements (Statements (N), Process); if Present (Exception_Handlers (N)) then Handler := First (Exception_Handlers (N)); while Present (Handler) loop - Traverse_Declarations_Or_Statements (Statements (Handler)); + Traverse_Declarations_Or_Statements + (Statements (Handler), Process); Next (Handler); end loop; end if; @@ -1010,34 +1092,42 @@ package body ALFA is -- Traverse_Package_Body -- --------------------------- - procedure Traverse_Package_Body (N : Node_Id) is + procedure Traverse_Package_Body + (N : Node_Id; + Process : Node_Processing) is begin - Add_ALFA_Scope (N); - Traverse_Declarations_Or_Statements (Declarations (N)); - Traverse_Handled_Statement_Sequence (Handled_Statement_Sequence (N)); + Traverse_Declarations_Or_Statements (Declarations (N), Process); + Traverse_Handled_Statement_Sequence + (Handled_Statement_Sequence (N), Process); end Traverse_Package_Body; ---------------------------------- -- Traverse_Package_Declaration -- ---------------------------------- - procedure Traverse_Package_Declaration (N : Node_Id) is + procedure Traverse_Package_Declaration + (N : Node_Id; + Process : Node_Processing) + is Spec : constant Node_Id := Specification (N); begin - Add_ALFA_Scope (N); - Traverse_Declarations_Or_Statements (Visible_Declarations (Spec)); - Traverse_Declarations_Or_Statements (Private_Declarations (Spec)); + Traverse_Declarations_Or_Statements + (Visible_Declarations (Spec), Process); + Traverse_Declarations_Or_Statements + (Private_Declarations (Spec), Process); end Traverse_Package_Declaration; ------------------------------ -- Traverse_Subprogram_Body -- ------------------------------ - procedure Traverse_Subprogram_Body (N : Node_Id) is + procedure Traverse_Subprogram_Body + (N : Node_Id; + Process : Node_Processing) is begin - Add_ALFA_Scope (N); - Traverse_Declarations_Or_Statements (Declarations (N)); - Traverse_Handled_Statement_Sequence (Handled_Statement_Sequence (N)); + Traverse_Declarations_Or_Statements (Declarations (N), Process); + Traverse_Handled_Statement_Sequence + (Handled_Statement_Sequence (N), Process); end Traverse_Subprogram_Body; end ALFA; |