summaryrefslogtreecommitdiff
path: root/gcc/ada/xref_lib.adb
diff options
context:
space:
mode:
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-08 20:11:04 +0000
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2002-03-08 20:11:04 +0000
commitf15731c43ae5e8cea424ea40f905c19afa1bd2e4 (patch)
treeb584a79288c93215b05fb451943291ccd039388b /gcc/ada/xref_lib.adb
parent1d347c236ad815c77bd345611ed221b0bd6091de (diff)
downloadgcc-f15731c43ae5e8cea424ea40f905c19afa1bd2e4.tar.gz
* 41intnam.ads, 42intnam.ads, 4aintnam.ads, 4cintnam.ads,
4dintnam.ads, 4gintnam.ads, 4hintnam.ads, 4lintnam.ads, 4mintnam.ads, 4pintnam.ads, 4rintnam.ads, 4sintnam.ads, 4uintnam.ads, 4vcalend.adb, 4zintnam.ads, 52system.ads, 5amastop.adb, 5asystem.ads, 5ataprop.adb, 5atpopsp.adb, 5avxwork.ads, 5bosinte.adb, 5bsystem.ads, 5esystem.ads, 5fsystem.ads, 5ftaprop.adb, 5ginterr.adb, 5gmastop.adb, 5gsystem.ads, 5gtaprop.adb, 5gtasinf.adb, 5gtasinf.ads, 5hparame.ads, 5hsystem.ads, 5htaprop.adb, 5htraceb.adb, 5itaprop.adb, 5ksystem.ads, 5kvxwork.ads, 5lintman.adb, 5lsystem.ads, 5mvxwork.ads, 5ninmaop.adb, 5nosinte.ads, 5ntaprop.adb, 5ointerr.adb, 5omastop.adb, 5oosinte.adb, 5osystem.ads, 5otaprop.adb, 5otaspri.ads, 5pvxwork.ads, 5qtaprop.adb, 5sintman.adb, 5ssystem.ads, 5staprop.adb, 5stpopse.adb, 5svxwork.ads, 5tosinte.ads, 5uintman.adb, 5vasthan.adb, 5vinmaop.adb, 5vinterr.adb, 5vintman.adb, 5vmastop.adb, 5vparame.ads, 5vsystem.ads, 5vtaprop.adb, 5vtpopde.adb, 5wmemory.adb, 5wsystem.ads, 5wtaprop.adb, 5ysystem.ads, 5zinterr.adb, 5zintman.adb, 5zosinte.adb, 5zosinte.ads, 5zsystem.ads, 5ztaprop.adb, 6vcpp.adb, 6vcstrea.adb, 7sintman.adb, 7staprop.adb, 7stpopsp.adb, 9drpc.adb, Make-lang.in, Makefile.in, a-caldel.adb, a-comlin.ads, a-dynpri.adb, a-except.adb, a-except.ads, a-finali.adb, a-ncelfu.ads, a-reatim.adb, a-retide.adb, a-stream.ads, a-ststio.adb, a-ststio.ads, a-stwifi.adb, a-tags.adb, a-tasatt.adb, a-textio.adb, a-tideau.adb, a-tiflau.adb, a-tigeau.adb, a-tigeau.ads, a-tiinau.adb, a-timoau.adb, a-witeio.adb, a-wtdeau.adb, a-wtenau.adb, a-wtflau.adb, a-wtgeau.adb, a-wtgeau.ads, a-wtinau.adb, a-wtmoau.adb, ada-tree.def, ada-tree.h, adaint.c, adaint.h, ali-util.adb, ali.adb, ali.ads, atree.adb, atree.ads, atree.h, back_end.adb, bcheck.adb, bindgen.adb, bindusg.adb, checks.adb, comperr.adb, config-lang.in, csets.adb, csets.ads, cstand.adb, cstreams.c, debug.adb, debug.ads, decl.c, einfo.adb, einfo.ads, einfo.h, elists.h, errout.adb, errout.ads, eval_fat.adb, exp_aggr.adb, exp_attr.adb, exp_ch11.adb, exp_ch12.adb, exp_ch13.adb, exp_ch2.adb, exp_ch3.adb, exp_ch3.ads, exp_ch4.adb, exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch7.ads, exp_ch9.adb, exp_ch9.ads, exp_dbug.adb, exp_dbug.ads, exp_disp.ads, exp_dist.adb, exp_fixd.adb, exp_intr.adb, exp_pakd.adb, exp_prag.adb, exp_strm.adb, exp_util.adb, exp_util.ads, expander.adb, expect.c, fe.h, fmap.adb, fmap.ads, fname-uf.adb, freeze.adb, frontend.adb, g-awk.adb, g-cgideb.adb, g-comlin.adb, g-comlin.ads, g-debpoo.adb, g-dirope.adb, g-dirope.ads, g-dyntab.adb, g-expect.adb, g-expect.ads, g-io.ads, g-io_aux.adb, g-io_aux.ads, g-locfil.adb, g-locfil.ads, g-os_lib.adb, g-os_lib.ads, g-regexp.adb, g-regpat.adb, g-socket.adb, g-socket.ads, g-spipat.adb, g-table.adb, g-trasym.adb, g-trasym.ads, gigi.h, gmem.c, gnat1drv.adb, gnatbind.adb, gnatbl.c, gnatchop.adb, gnatcmd.adb, gnatdll.adb, gnatfind.adb, gnatlbr.adb, gnatlink.adb, gnatls.adb, gnatmem.adb, gnatprep.adb, gnatvsn.ads, gnatxref.adb, hlo.adb, hostparm.ads, i-cobol.adb, i-cpp.adb, i-cstrea.ads, i-cstrin.adb, i-pacdec.adb, i-vxwork.ads, impunit.adb, init.c, inline.adb, io-aux.c, layout.adb, lib-load.adb, lib-util.adb, lib-writ.adb, lib-writ.ads, lib-xref.adb, lib-xref.ads, lib.adb, lib.ads, make.adb, makeusg.adb, mdll.adb, memroot.adb, misc.c, mlib-tgt.adb, mlib-utl.adb, mlib-utl.ads, mlib.adb, namet.adb, namet.ads, namet.h, nlists.h, nmake.adb, nmake.ads, nmake.adt, opt.adb, opt.ads, osint.adb, osint.ads, output.adb, output.ads, par-ch2.adb, par-ch3.adb, par-ch5.adb, par-prag.adb, par-tchk.adb, par-util.adb, par.adb, prj-attr.adb, prj-dect.adb, prj-env.adb, prj-env.ads, prj-nmsc.adb, prj-part.adb, prj-proc.adb, prj-strt.adb, prj-tree.adb, prj-tree.ads, prj.adb, prj.ads, raise.c, raise.h, repinfo.adb, restrict.adb, restrict.ads, rident.ads, rtsfind.adb, rtsfind.ads, s-arit64.adb, s-asthan.adb, s-atacco.adb, s-atacco.ads, s-auxdec.adb, s-crc32.adb, s-crc32.ads, s-direio.adb, s-fatgen.adb, s-fileio.adb, s-finimp.adb, s-gloloc.adb, s-gloloc.ads, s-interr.adb, s-mastop.adb, s-mastop.ads, s-memory.adb, s-parame.ads, s-parint.adb, s-pooglo.adb, s-pooloc.adb, s-rpc.adb, s-secsta.adb, s-sequio.adb, s-shasto.adb, s-soflin.adb, s-soflin.ads, s-stache.adb, s-taasde.adb, s-taasde.ads, s-tadeca.adb, s-tadeca.ads, s-tadert.adb, s-tadert.ads, s-taenca.adb, s-taenca.ads, s-taprob.adb, s-taprop.ads, s-tarest.adb, s-tasdeb.adb, s-tasini.adb, s-tasini.ads, s-taskin.adb, s-taskin.ads, s-tasque.adb, s-tasque.ads, s-tasren.adb, s-tasren.ads, s-tassta.adb, s-tasuti.adb, s-tasuti.ads, s-tataat.adb, s-tataat.ads, s-tpoben.adb, s-tpoben.ads, s-tpobop.adb, s-tposen.adb, s-tposen.ads, s-traceb.adb, s-traceb.ads, s-unstyp.ads, s-widenu.adb, scn-nlit.adb, scn.adb, sem.adb, sem_aggr.adb, sem_attr.adb, sem_attr.ads, sem_case.adb, sem_ch10.adb, sem_ch11.adb, sem_ch11.ads, sem_ch12.adb, sem_ch13.adb, sem_ch13.ads, sem_ch2.adb, sem_ch3.adb, sem_ch3.ads, sem_ch4.adb, sem_ch5.adb, sem_ch6.adb, sem_ch6.ads, sem_ch7.adb, sem_ch8.adb, sem_ch8.ads, sem_ch9.adb, sem_disp.adb, sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_elim.ads, sem_eval.adb, sem_intr.adb, sem_mech.adb, sem_prag.adb, sem_res.adb, sem_type.adb, sem_util.adb, sem_util.ads, sem_vfpt.adb, sem_warn.adb, sinfo.adb, sinfo.ads, sinfo.h, sinput-l.adb, sinput-l.ads, sinput.adb, sinput.ads, snames.adb, snames.ads, snames.h, sprint.adb, sprint.ads, stringt.adb, stringt.ads, stringt.h, style.adb, switch.adb, switch.ads, sysdep.c, system.ads, table.adb, targparm.adb, targparm.ads, targtyps.c, tbuild.adb, tbuild.ads, tracebak.c, trans.c, tree_gen.adb, tree_io.adb, treepr.adb, treepr.ads, treeprs.ads, treeprs.adt, ttypes.ads, types.adb, types.ads, types.h, uintp.ads, urealp.ads, usage.adb, utils.c, utils2.c, validsw.adb, xnmake.adb, xr_tabls.adb, xr_tabls.ads, xref_lib.adb, xref_lib.ads : Merge in ACT changes. * 1ssecsta.adb, 1ssecsta.ads, a-chlat9.ads, a-cwila9.ads, g-enblsp.adb, g-md5.adb, g-md5.ads, gnatname.adb, gnatname.ads, mkdir.c, osint-b.adb, osint-b.ads, osint-c.adb, osint-c.ads, osint-l.adb, osint-l.ads, osint-m.adb, osint-m.ads : New files * 3lsoccon.ads, 5qparame.ads, 5qvxwork.ads, 5smastop.adb, 5zparame.ads, gnatmain.adb, gnatmain.ads, gnatpsys.adb : Removed * mdllfile.adb, mdllfile.ads, mdlltool.adb, mdlltool.ads : Renamed to mdll-fil.ad[bs] and mdll-util.ad[bs] * mdll-fil.adb, mdll-fil.ads, mdll-utl.adb, mdll-utl.ads : Renamed from mdllfile.ad[bs] and mdlltool.ad[bs] git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@50451 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/xref_lib.adb')
-rw-r--r--gcc/ada/xref_lib.adb310
1 files changed, 169 insertions, 141 deletions
diff --git a/gcc/ada/xref_lib.adb b/gcc/ada/xref_lib.adb
index d3dfe37859a..ca3e26a4f96 100644
--- a/gcc/ada/xref_lib.adb
+++ b/gcc/ada/xref_lib.adb
@@ -6,9 +6,9 @@
-- --
-- B o d y --
-- --
--- $Revision: 1.55 $
+-- $Revision$
-- --
--- Copyright (C) 1998-2001 Free Software Foundation, Inc. --
+-- Copyright (C) 1998-2002 Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -25,14 +25,16 @@
-- --
------------------------------------------------------------------------------
-with Ada.Strings.Fixed; use Ada.Strings.Fixed;
-with GNAT.Command_Line; use GNAT.Command_Line;
-with GNAT.IO_Aux; use GNAT.IO_Aux;
with Osint;
with Output; use Output;
with Types; use Types;
with Unchecked_Deallocation;
+with Ada.Strings.Fixed; use Ada.Strings.Fixed;
+
+with GNAT.Command_Line; use GNAT.Command_Line;
+with GNAT.IO_Aux; use GNAT.IO_Aux;
+
package body Xref_Lib is
Type_Position : constant := 50;
@@ -42,11 +44,6 @@ package body Xref_Lib is
-- Local Variables --
---------------------
- D : constant Character := 'D';
- X : constant Character := 'X';
- W : constant Character := 'W';
- Dot : constant Character := '.';
-
Pipe : constant Character := '|';
-- First character on xref lines in the .ali file
@@ -60,9 +57,6 @@ package body Xref_Lib is
subtype File_Offset is Natural;
- function End_Of_Line_Index (File : ALI_File) return Integer;
- -- Returns the index of the last character of the current_line
-
procedure Read_File
(FD : File_Descriptor;
Contents : out String_Access;
@@ -259,41 +253,41 @@ package body Xref_Lib is
end if;
end if;
- Add_File (Entity (File_Start .. Line_Start - 1),
+ Add_To_Xref_File (Entity (File_Start .. Line_Start - 1),
File_Existed,
File_Ref,
Visited => True);
Add_Line (File_Ref, Line_Num, Col_Num);
- Add_File
+ Add_To_Xref_File
(ALI_File_Name (Entity (File_Start .. Line_Start - 1)),
File_Existed, File_Ref,
Visited => False,
Emit_Warning => True);
end Add_Entity;
- --------------
- -- Add_File --
- --------------
+ -------------------
+ -- Add_Xref_File --
+ -------------------
- procedure Add_File (File : String) is
+ procedure Add_Xref_File (File : String) is
File_Ref : File_Reference := Empty_File;
File_Existed : Boolean;
Iterator : Expansion_Iterator;
- procedure Add_File_Internal (File : String);
+ procedure Add_Xref_File_Internal (File : String);
-- Do the actual addition of the file
- -----------------------
- -- Add_File_Internal --
- -----------------------
+ ----------------------------
+ -- Add_Xref_File_Internal --
+ ----------------------------
- procedure Add_File_Internal (File : String) is
+ procedure Add_Xref_File_Internal (File : String) is
begin
-- Case where we have an ALI file, accept it even though this is
-- not official usage, since the intention is obvious
if Tail (File, 4) = ".ali" then
- Add_File
+ Add_To_Xref_File
(File,
File_Existed,
File_Ref,
@@ -303,22 +297,22 @@ package body Xref_Lib is
-- Normal non-ali file case
else
- Add_File
+ Add_To_Xref_File
(File,
File_Existed,
File_Ref,
Visited => True);
- Add_File
+ Add_To_Xref_File
(ALI_File_Name (File),
File_Existed,
File_Ref,
Visited => False,
Emit_Warning => True);
end if;
- end Add_File_Internal;
+ end Add_Xref_File_Internal;
- -- Start of processing for Add_File
+ -- Start of processing for Add_Xref_File
begin
-- Check if we need to do the expansion
@@ -334,14 +328,14 @@ package body Xref_Lib is
begin
exit when S'Length = 0;
- Add_File_Internal (S);
+ Add_Xref_File_Internal (S);
end;
end loop;
else
- Add_File_Internal (File);
+ Add_Xref_File_Internal (File);
end if;
- end Add_File;
+ end Add_Xref_File;
-----------------------
-- Current_Xref_File --
@@ -387,22 +381,6 @@ package body Xref_Lib is
when Directory_Error => return String'(1 .. 0 => ' ');
end Default_Project_File;
- -----------------------
- -- End_Of_Line_Index --
- -----------------------
-
- function End_Of_Line_Index (File : ALI_File) return Integer is
- Index : Integer := File.Current_Line;
- begin
- while Index <= File.Buffer'Last
- and then File.Buffer (Index) /= ASCII.LF
- loop
- Index := Index + 1;
- end loop;
-
- return Index;
- end End_Of_Line_Index;
-
---------------
-- File_Name --
---------------
@@ -478,7 +456,10 @@ package body Xref_Lib is
end if;
elsif Last > 4 and then Dir_Ent (Last - 3 .. Last) = ".ali" then
- Add_File (Dir_Ent (1 .. Last), File_Existed, File_Ref,
+ Add_To_Xref_File
+ (Dir_Ent (1 .. Last),
+ File_Existed,
+ File_Ref,
Visited => False);
Set_Directory (File_Ref, Current_Obj_Dir);
end if;
@@ -609,7 +590,7 @@ package body Xref_Lib is
while Ali (Ptr) /= EOF loop
- if Ali (Ptr) = D then
+ if Ali (Ptr) = 'D' then
-- Found dependency information. Format looks like:
-- D source-name time-stamp checksum [subunit-name] \
-- [line:file-name]
@@ -645,14 +626,14 @@ package body Xref_Lib is
Token := Gnatchop_Name + 1;
end if;
- Add_File
+ Add_To_Xref_File
(Ali (File_Start .. File_End),
File_Existed,
File.Dep.Table (Num_Dependencies),
Gnatchop_File => Ali (Token .. Ptr - 1),
Gnatchop_Offset => Gnatchop_Offset);
- elsif Dependencies and then Ali (Ptr) = W then
+ elsif Dependencies and then Ali (Ptr) = 'W' then
-- Found with-clause information. Format looks like:
-- "W debug%s debug.adb debug.ali"
@@ -662,12 +643,13 @@ package body Xref_Lib is
Parse_Token (Ali, Ptr, Token);
Parse_Token (Ali, Ptr, Token);
- Add_File
+ Add_To_Xref_File
(Ali (Token .. Ptr - 1),
- File_Existed, File_Ref,
+ File_Existed,
+ File_Ref,
Visited => False);
- elsif Ali (Ptr) = X then
+ elsif Ali (Ptr) = 'X' then
-- Found a cross-referencing line - stop processing
File.Current_Line := Ptr;
@@ -852,7 +834,10 @@ package body Xref_Lib is
Decl_Ref := Add_Declaration
(File.X_File, Ali (E_Name .. Ptr - 1), E_Line, E_Col, E_Type);
- if Ali (Ptr) = '<' then
+ if Ali (Ptr) = '<'
+ or else Ali (Ptr) = '('
+ or else Ali (Ptr) = '{'
+ then
-- Here we have a type derivation information. The format is
-- <3|12I45> which means that the current entity is derived from the
@@ -860,115 +845,137 @@ package body Xref_Lib is
-- unit number is optional. It is specified only if the parent type
-- is not defined in the current unit.
+ -- We could also have something like
+ -- 16I9*I<integer>
+ -- that indicates that I derives from the predefined type integer.
+
Ptr := Ptr + 1;
- Parse_Derived_Info : declare
- P_Line : Natural; -- parent entity line
- P_Column : Natural; -- parent entity column
- P_Type : Character; -- parent entity type
- P_Eun : Positive; -- parent entity file number
+ if Ali (Ptr) in '0' .. '9' then
+ Parse_Derived_Info : declare
+ P_Line : Natural; -- parent entity line
+ P_Column : Natural; -- parent entity column
+ P_Type : Character; -- parent entity type
+ P_Eun : Positive; -- parent entity file number
- begin
- Parse_Number (Ali, Ptr, P_Line);
+ begin
+ Parse_Number (Ali, Ptr, P_Line);
- -- If we have a pipe then the first number was the unit number
+ -- If we have a pipe then the first number was the unit number
- if Ali (Ptr) = '|' then
- P_Eun := P_Line;
- Ptr := Ptr + 1;
+ if Ali (Ptr) = '|' then
+ P_Eun := P_Line;
+ Ptr := Ptr + 1;
- -- Now we have the line number
+ -- Now we have the line number
- Parse_Number (Ali, Ptr, P_Line);
+ Parse_Number (Ali, Ptr, P_Line);
- else
- -- We don't have a unit number specified, so we set P_Eun to
- -- the current unit.
+ else
+ -- We don't have a unit number specified, so we set P_Eun to
+ -- the current unit.
- for K in Dependencies_Tables.First .. Last (File.Dep) loop
- P_Eun := K;
- exit when File.Dep.Table (K) = File_Ref;
- end loop;
- end if;
+ for K in Dependencies_Tables.First .. Last (File.Dep) loop
+ P_Eun := K;
+ exit when File.Dep.Table (K) = File_Ref;
+ end loop;
+ end if;
- -- Then parse the type and column number
+ -- Then parse the type and column number
- P_Type := Ali (Ptr);
- Ptr := Ptr + 1;
- Parse_Number (Ali, Ptr, P_Column);
-
- -- Skip '>'
+ P_Type := Ali (Ptr);
+ Ptr := Ptr + 1;
+ Parse_Number (Ali, Ptr, P_Column);
- Ptr := Ptr + 1;
+ -- Skip '>', or ')' or '>'
- -- The derived info is needed only is the derived info mode is on
- -- or if we want to output the type hierarchy
+ Ptr := Ptr + 1;
- if Der_Info or else Type_Tree then
- Add_Parent
- (Decl_Ref,
- Get_Symbol_Name (P_Eun, P_Line, P_Column),
- P_Line,
- P_Column,
- File.Dep.Table (P_Eun));
- end if;
+ -- The derived info is needed only is the derived info mode is
+ -- on or if we want to output the type hierarchy
- if Type_Tree then
- Search_Parent_Tree : declare
- Pattern : Search_Pattern; -- Parent type pattern
- File_Pos_Backup : Positive;
+ if Der_Info or else Type_Tree then
+ Add_Parent
+ (Decl_Ref,
+ Get_Symbol_Name (P_Eun, P_Line, P_Column),
+ P_Line,
+ P_Column,
+ File.Dep.Table (P_Eun));
+ end if;
- begin
- Add_Entity
- (Pattern,
- Get_Symbol_Name (P_Eun, P_Line, P_Column)
- & ':' & Get_Gnatchop_File (File.Dep.Table (P_Eun))
- & ':' & Get_Line (Get_Parent (Decl_Ref))
- & ':' & Get_Column (Get_Parent (Decl_Ref)),
+ if Type_Tree then
+ Search_Parent_Tree : declare
+ Pattern : Search_Pattern; -- Parent type pattern
+ File_Pos_Backup : Positive;
+
+ begin
+ Add_Entity
+ (Pattern,
+ Get_Symbol_Name (P_Eun, P_Line, P_Column)
+ & ':' & Get_Gnatchop_File (File.Dep.Table (P_Eun))
+ & ':' & Get_Line (Get_Parent (Decl_Ref))
+ & ':' & Get_Column (Get_Parent (Decl_Ref)),
False);
- -- No default match is needed to look for the parent type
- -- since we are using the fully qualified symbol name:
- -- symbol:file:line:column
+ -- No default match is needed to look for the parent type
+ -- since we are using the fully qualified symbol name:
+ -- symbol:file:line:column
- Set_Default_Match (False);
+ Set_Default_Match (False);
- -- The parent type is defined in the same unit as the
- -- derived type. So we want to revisit the unit.
+ -- The parent type is defined in the same unit as the
+ -- derived type. So we want to revisit the unit.
- File_Pos_Backup := File.Current_Line;
+ File_Pos_Backup := File.Current_Line;
- if File.Dep.Table (P_Eun) = File_Ref then
+ if File.Dep.Table (P_Eun) = File_Ref then
- -- set file pointer at the start of the xref lines
+ -- set file pointer at the start of the xref lines
- File.Current_Line := File.Xref_Line;
+ File.Current_Line := File.Xref_Line;
- Revisit_ALI_File : declare
- File_Existed : Boolean;
- File_Ref : File_Reference;
- begin
- Add_File
- (ALI_File_Name (Get_File (File.Dep.Table (P_Eun))),
- File_Existed,
- File_Ref,
- Visited => False);
- Set_Unvisited (File_Ref);
- end Revisit_ALI_File;
- end if;
+ Revisit_ALI_File : declare
+ File_Existed : Boolean;
+ File_Ref : File_Reference;
- Search (Pattern,
- Local_Symbols, False, False, Der_Info, Type_Tree);
+ begin
+ Add_To_Xref_File
+ (ALI_File_Name
+ (Get_File (File.Dep.Table (P_Eun))),
+ File_Existed,
+ File_Ref,
+ Visited => False);
+ Set_Unvisited (File_Ref);
+ end Revisit_ALI_File;
+ end if;
- File.Current_Line := File_Pos_Backup;
+ Search (Pattern,
+ Local_Symbols, False, False, Der_Info, Type_Tree);
- -- in this mode there is no need to parse the remaining of
- -- the lines.
+ File.Current_Line := File_Pos_Backup;
+ end Search_Parent_Tree;
+ end if;
+ end Parse_Derived_Info;
- return;
- end Search_Parent_Tree;
- end if;
- end Parse_Derived_Info;
+ else
+ while Ali (Ptr) /= '>'
+ and then Ali (Ptr) /= ')'
+ and then Ali (Ptr) /= '}'
+ loop
+ Ptr := Ptr + 1;
+ end loop;
+ Ptr := Ptr + 1;
+ end if;
+
+ elsif Ali (Ptr) = '=' then
+ declare
+ P_Line, P_Column : Natural;
+ begin
+ Ptr := Ptr + 1;
+ Parse_Number (Ali, Ptr, P_Line);
+ Ptr := Ptr + 1;
+ Parse_Number (Ali, Ptr, P_Column);
+ end;
end if;
-- To find the body, we will have to parse the file too
@@ -981,8 +988,8 @@ package body Xref_Lib is
Get_Gnatchop_File (File.X_File);
begin
- Add_File (ALI_File_Name (File_Name),
- File_Existed, File_Ref, False);
+ Add_To_Xref_File
+ (ALI_File_Name (File_Name), File_Existed, File_Ref, False);
end;
end if;
@@ -1017,6 +1024,24 @@ package body Xref_Lib is
Add_Reference (Decl_Ref, File_Ref, R_Line, R_Col, R_Type);
+ -- Skip generic information, if any
+
+ if Ali (Ptr) = '[' then
+ declare
+ Num_Nested : Integer := 1;
+ begin
+ Ptr := Ptr + 1;
+ while Num_Nested /= 0 loop
+ if Ali (Ptr) = ']' then
+ Num_Nested := Num_Nested - 1;
+ elsif Ali (Ptr) = '[' then
+ Num_Nested := Num_Nested + 1;
+ end if;
+ Ptr := Ptr + 1;
+ end loop;
+ end;
+ end if;
+
end loop;
Parse_EOL (Ali, Ptr);
@@ -1076,8 +1101,11 @@ package body Xref_Lib is
while (In_Quotes or else
not (Source (Ptr) = ' '
- or else Source (Ptr) = ASCII.HT
- or else Source (Ptr) = '<'))
+ or else Source (Ptr) = ASCII.HT
+ or else Source (Ptr) = '<'
+ or else Source (Ptr) = '{'
+ or else Source (Ptr) = '='
+ or else Source (Ptr) = '('))
and then Source (Ptr) >= ' '
loop
if Source (Ptr) = '"' then
@@ -1098,7 +1126,7 @@ package body Xref_Lib is
File_Nr : Natural;
begin
- while Ali (Ptr) = X loop
+ while Ali (Ptr) = 'X' loop
-- The current line is the start of a new Xref file section,
-- whose format looks like: