-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2005 Free Software Foundation, Inc. --
+-- Copyright (C) 1998-2009, 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- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
-- for more details. You should have received a copy of the GNU General --
--- Public License distributed with GNAT; see file COPYING. If not, write --
--- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
--- MA 02111-1307, USA. --
+-- Public License distributed with GNAT; see file COPYING3. If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license. --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
No_Xref_Information : exception;
-- Exception raised when there is no cross-referencing information in
- -- the .ali files
+ -- the .ali files.
procedure Parse_EOL
- (Source : access String;
+ (Source : not null access String;
Ptr : in out Positive;
Skip_Continuation_Line : Boolean := False);
-- On return Source (Ptr) is the first character of the next line
-- the .ali files.
procedure Open
- (Name : in String;
+ (Name : String;
File : out ALI_File;
- Dependencies : in Boolean := False);
+ Dependencies : Boolean := False);
-- Open a new ALI file. If Dependencies is True, the insert every library
-- file 'with'ed in the files database (used for gnatxref)
-- The entity will never be reported as unreferenced by gnatxref -u
procedure Parse_Token
- (Source : access String;
+ (Source : not null access String;
Ptr : in out Positive;
Token_Ptr : out Positive);
-- Skips any separators and stores the start of the token in Token_Ptr.
-- and ASCII.HT. Parse_Token will never skip to the next line.
procedure Parse_Number
- (Source : access String;
+ (Source : not null access String;
Ptr : in out Positive;
Number : out Natural);
- -- Skips any separators and parses Source upto the first character that
+ -- Skips any separators and parses Source up to the first character that
-- is not a decimal digit. Returns value of parsed digits or 0 if none.
procedure Parse_X_Filename (File : in out ALI_File);
Entity : String;
Glob : Boolean := False)
is
- File_Start : Natural;
- Line_Start : Natural;
- Col_Start : Natural;
- Line_Num : Natural := 0;
- Col_Num : Natural := 0;
- File_Ref : File_Reference := Empty_File;
+ File_Start : Natural;
+ Line_Start : Natural;
+ Col_Start : Natural;
+ Line_Num : Natural := 0;
+ Col_Num : Natural := 0;
+
+ File_Ref : File_Reference := Empty_File;
+ pragma Warnings (Off, File_Ref);
begin
-- Find the end of the first item in Entity (pattern or file?)
Add_To_Xref_File
(Entity (File_Start .. Line_Start - 1), Visited => True);
Pattern.File_Ref := File_Ref;
+
Add_Line (Pattern.File_Ref, Line_Num, Col_Num);
+
File_Ref :=
Add_To_Xref_File
(ALI_File_Name (Entity (File_Start .. Line_Start - 1)),
-- 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
+ if Tail (File, 4) = "." & Osint.ALI_Suffix.all then
File_Ref := Add_To_Xref_File
(File, Visited => False, Emit_Warning => True);
if Tail (Dir_Ent (1 .. Last), 4) = ".adp" then
- -- The first project file found is the good one.
+ -- The first project file found is the good one
Close (My_Dir);
return Dir_Ent (1 .. Last);
return;
end if;
- elsif Last > 4 and then Dir_Ent (Last - 3 .. Last) = ".ali" then
+ elsif Last > 4
+ and then Dir_Ent (Last - 3 .. Last) = "." & Osint.ALI_Suffix.all
+ then
File_Ref :=
Add_To_Xref_File (Dir_Ent (1 .. Last), Visited => False);
end if;
function Get_Full_Type (Decl : Declaration_Reference) return String is
function Param_String return String;
- -- Return the string to display depending on whether Decl is a
- -- parameter or not
+ -- Return the string to display depending on whether Decl is a parameter
------------------
-- Param_String --
when 'd' => return Param_String & "decimal object";
when 'e' => return Param_String & "enumeration object";
when 'f' => return Param_String & "float object";
+ when 'h' => return "interface";
when 'i' => return Param_String & "integer object";
when 'm' => return Param_String & "modular object";
when 'o' => return Param_String & "fixed object";
Dependencies : Boolean := False)
is
Ali : String_Access renames File.Buffer;
+ pragma Warnings (Off, Ali);
begin
if File.Buffer /= null then
---------------
procedure Parse_EOL
- (Source : access String;
+ (Source : not null access String;
Ptr : in out Positive;
Skip_Continuation_Line : Boolean := False)
is
Ptr := Ptr + 1;
end loop;
+ -- Skip CR or LF if not at end of file
+
if Source (Ptr) /= EOF then
- Ptr := Ptr + 1; -- skip CR or LF
+ Ptr := Ptr + 1;
end if;
-- Skip past CR/LF or LF/CR combination
exit when Ali (Ptr) = EOF;
end loop;
- -- We were not able to find the symbol, this should not happend but
+ -- We were not able to find the symbol, this should not happen but
-- since we don't want to stop here we return a string of three
-- question marks as the symbol name.
if Ali (Ptr) = '[' then
Skip_To_Matching_Closing_Bracket;
+ end if;
+
+ -- Skip any renaming indication
- elsif Ali (Ptr) = '<'
+ if Ali (Ptr) = '=' then
+ declare
+ P_Line, P_Column : Natural;
+ pragma Warnings (Off, P_Line);
+ pragma Warnings (Off, P_Column);
+ begin
+ Ptr := Ptr + 1;
+ Parse_Number (Ali, Ptr, P_Line);
+ Ptr := Ptr + 1;
+ Parse_Number (Ali, Ptr, P_Column);
+ end;
+ end if;
+
+ if Ali (Ptr) = '<'
or else Ali (Ptr) = '('
or else Ali (Ptr) = '{'
then
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
loop
-- Process references on current line
- while Ali (Ptr) = ' ' or Ali (Ptr) = ASCII.HT loop
+ while Ali (Ptr) = ' ' or else Ali (Ptr) = ASCII.HT loop
-- For every reference read the line, type and column,
-- optionally preceded by a file number and a pipe symbol.
------------------
procedure Parse_Number
- (Source : access String;
+ (Source : not null access String;
Ptr : in out Positive;
Number : out Natural)
is
-----------------
procedure Parse_Token
- (Source : access String;
+ (Source : not null access String;
Ptr : in out Positive;
Token_Ptr : out Positive)
is
-- Print_Unused --
------------------
- procedure Print_Unused (Full_Path_Name : in Boolean) is
+ procedure Print_Unused (Full_Path_Name : Boolean) is
Decls : constant Declaration_Array_Access := Get_Declarations;
Decl : Declaration_Reference;
Arr : Reference_Array_Access;
-- Print_Vi --
--------------
- procedure Print_Vi (Full_Path_Name : in Boolean) is
+ procedure Print_Vi (Full_Path_Name : Boolean) is
Tab : constant Character := ASCII.HT;
Decls : constant Declaration_Array_Access :=
Get_Declarations (Sorted => False);
-- Print_Xref --
----------------
- procedure Print_Xref (Full_Path_Name : in Boolean) is
+ procedure Print_Xref (Full_Path_Name : Boolean) is
Decls : constant Declaration_Array_Access := Get_Declarations;
Decl : Declaration_Reference;
procedure New_Line80;
-- Go to start of new line
- procedure Print80 (S : in String);
- -- Print the text, respecting the 80 columns rule.
+ procedure Print80 (S : String);
+ -- Print the text, respecting the 80 columns rule
procedure Print_Ref (Line, Column : String);
-- The beginning of the output is aligned on a column multiple of 9
-- Print80 --
-------------
- procedure Print80 (S : in String) is
+ procedure Print80 (S : String) is
Align : Natural := Margin - (Integer (Column) mod Margin);
begin
Write_Str (Get_Symbol (Decl));
- while Column < Type_Position loop
+ -- Put the declaration type in column Type_Position, but if the
+ -- declaration name is too long, put at least one space between its
+ -- name and its type.
+
+ while Column < Type_Position - 1 loop
Write_Char (' ');
end loop;
+ Write_Char (' ');
+
Write_Line (Get_Full_Type (Decl));
Write_Parent_Info : declare