This patch adds the support needed to load references of entities
imported from other languages. This functionality is required by
tools processing ALI files (for example GPS).

Tested on x86_64-pc-linux-gnu, committed on trunk

2011-09-06  Javier Miranda  <mira...@adacore.com>

        * ali.adb (Scan_ALI): Add missing support to load references of
        entities imported from other languages.
        * ali.ads (Xref_Record): Adding new fields to store the language and
        name of an imported entity.
        * lib-xref.adb (Output_Import_Export_Info): Fix typo
        in comment.

Index: ali.adb
===================================================================
--- ali.adb     (revision 178565)
+++ ali.adb     (working copy)
@@ -504,6 +504,10 @@
                     or else Nextc = '<' or else Nextc = '>'
                     or else Nextc = '=';
 
+                  --  Terminate on comma
+
+                  exit when Nextc = ',';
+
                   --  Terminate if left bracket not part of wide char sequence
                   --  Note that we only recognize brackets notation so far ???
 
@@ -2389,12 +2393,21 @@
 
                         --  Imported entities reference as in:
                         --    494b<c,__gnat_copy_attribs>25
-                        --  ??? Simply skipped for now
 
                         if Nextc = '<' then
-                           while Getc /= '>' loop
-                              null;
-                           end loop;
+                           Skipc;
+                           XR.Imported_Lang := Get_Name;
+
+                           pragma Assert (Nextc = ',');
+                           Skipc;
+
+                           XR.Imported_Name := Get_Name;
+
+                           pragma Assert (Nextc = '>');
+                           Skipc;
+                        else
+                           XR.Imported_Lang := No_Name;
+                           XR.Imported_Name := No_Name;
                         end if;
 
                         XR.Col   := Get_Nat;
Index: ali.ads
===================================================================
--- ali.ads     (revision 178565)
+++ ali.ads     (working copy)
@@ -975,6 +975,10 @@
       --     ref1 is a reference to an entity that was instantied at ref2.
       --     ref2 itself is also the result of an instantiation, that took
       --     place at ref3
+
+      Imported_Lang : Name_Id := No_Name;
+      Imported_Name : Name_Id := No_Name;
+      --  Language and name of imported entity reference
    end record;
 
    package Xref is new Table.Table (
Index: lib-xref.adb
===================================================================
--- lib-xref.adb        (revision 178565)
+++ lib-xref.adb        (working copy)
@@ -1163,7 +1163,7 @@
 
       procedure Output_Import_Export_Info (Ent : Entity_Id);
       --  Output language and external name information for an interfaced
-      --  entity, using the format <language, external_name>,
+      --  entity, using the format <language, external_name>
 
       ------------------------
       -- Get_Type_Reference --

Reply via email to