aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/lib-xref.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/lib-xref.ads')
-rw-r--r--gcc/ada/lib-xref.ads232
1 files changed, 134 insertions, 98 deletions
diff --git a/gcc/ada/lib-xref.ads b/gcc/ada/lib-xref.ads
index 396d846..c56a856 100644
--- a/gcc/ada/lib-xref.ads
+++ b/gcc/ada/lib-xref.ads
@@ -8,7 +8,7 @@
-- --
-- $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- --
@@ -40,37 +40,41 @@ package Lib.Xref is
-- Cross-reference sections follow the dependency section (D lines) in
-- an ALI file, so that they need not be read by gnatbind, gnatmake etc.
- --
+
-- A cross reference section has a header of the form
- --
+
-- X dependency-number filename
- --
+
-- This header precedes xref information (entities/references from
-- the unit, identified by dependency number and file name. The
-- dependency number is the index into the generated D lines and
-- is ones origin (i.e. 2 = reference to second generated D line).
- --
+
-- Note that the filename here will reflect the original name if
-- a Source_Reference pragma was encountered (since all line number
-- references will be with respect to the original file).
- --
+
-- The lines following the header look like
- --
+
-- line type col level entity renameref typeref ref ref ref
- --
- -- line is the line number of the referenced entity. It starts
- -- in column one.
- --
+
+ -- line is the line number of the referenced entity. The name of
+ -- the entity starts in column col. Columns are numbered from one,
+ -- and if horizontal tab characters are present, the column number
+ -- is computed assuming standard 1,9,17,.. tab stops. For example,
+ -- if the entity is the first token on the line, and is preceded
+ -- by space-HT-space, then the column would be column 10.
+
-- type is a single letter identifying the type of the entity.
-- See next section (Cross-Reference Entity Identifiers) for a
-- full list of the characters used).
- --
+
-- col is the column number of the referenced entity
- --
+
-- level is a single character that separates the col and
-- entity fields. It is an asterisk for a top level library
-- entity that is publicly visible, and space otherwise.
- --
+
-- entity is the name of the referenced entity, with casing in
-- the canical casing for the source file where it is defined.
@@ -79,32 +83,33 @@ package Lib.Xref is
-- a renaming declaration, and the renaming refers to an entity
-- with a simple identifier or expanded name, then renameref has
-- the form:
- --
+
-- =line:col
- --
+
-- Here line:col give the reference to the identifier that
-- appears in the renaming declaration. Note that we never need
-- a file entry, since this identifier is always in the current
-- file in which the entity is declared. Currently, renameref
-- appears only for the simple renaming case. If the renaming
-- reference is a complex expressions, then renameref is omitted.
- --
+ -- Here line/col give line/column as defined above.
+
-- typeref is the reference for a related type. This part is
-- optional. It is present for the following cases:
- --
+
-- derived types (points to the parent type) LR=<>
-- access types (points to designated type) LR=()
-- subtypes (points to ancestor type) LR={}
-- functions (points to result type) LR={}
-- enumeration literals (points to enum type) LR={}
-- objects and components (points to type) LR={}
- --
+
-- In the above list LR shows the brackets used in the output,
-- which has one of the two following forms:
- --
+
-- L file | line type col R user entity
-- L name-in-lower-case R standard entity
- --
+
-- For the form for a user entity, file is the dependency number
-- of the file containing the declaration of the related type.
-- This number and the following vertical bar are omitted if the
@@ -113,26 +118,32 @@ package Lib.Xref is
-- specify the location of the relevant type declaration in the
-- referenced file. For the standard entity form, the name between
-- the brackets is the normal name of the entity in lower case.
- --
+
-- There may be zero or more ref entries on each line
- --
+
-- file | line type col [...]
- --
+
-- file is the dependency number of the file with the reference.
-- It and the following vertical bar are omitted if the file is
-- the same as the previous ref, and the refs for the current
-- file are first (and do not need a bar).
- --
+
+ -- line is the line number of the reference
+
+ -- col is the column number of the reference, as defined above.
+
-- type is one of
- -- r = reference
- -- m = modification
-- b = body entity
-- c = completion of private or incomplete type
- -- x = type extension
- -- i = implicit reference
-- e = end of spec
+ -- i = implicit reference
+ -- l = label on end line
+ -- m = modification
+ -- p = primitive operation
+ -- r = reference
-- t = end of body
- --
+ -- x = type extension
+
-- b is used for spec entities that are repeated in a body,
-- including the unit (subprogram, package, task, protected
-- body, protected entry) name itself, and in the case of a
@@ -141,53 +152,72 @@ package Lib.Xref is
-- are not considered to be definitions for cross-referencing
-- purposes, but rather are considered to be references to the
-- corresponding spec entities, marked with this special type.
- --
- -- c is similarly used to mark the completion of a private or
- -- incomplete type. Again, the completion is not regarded as
- -- a separate definition, but rather a reference to the initial
- -- declaration, marked with this special type.
- --
- -- x is used to identify the reference as the entity from which
- -- a tagged type is extended. This allows immediate access to
- -- the parent of a tagged type.
- --
- -- i is used to identify a reference to the entity in a generic
- -- actual or in a default in a call. The node that denotes the
- -- entity does not come from source, but it has the Sloc of the
- -- source node that generates the implicit reference, and it is
- -- useful to record this one.
- --
+
+ -- c is similar to b but is used to mark the completion of a
+ -- private or incomplete type. As with b, the completion is not
+ -- regarded as a separate definition, but rather a reference to
+ -- the initial declaration, marked with this special type.
+
-- e is used to identify the end of a construct in the following
-- cases:
- --
+
-- Block Statement end [block_IDENTIFIER];
-- Loop Statement end loop [loop_IDENTIFIER];
-- Package Specification end [[PARENT_UNIT_NAME .] IDENTIFIER];
-- Task Definition end [task_IDENTIFIER];
-- Protected Definition end [protected_IDENTIFIER];
-- Record Definition end record;
- --
- -- Note that 'e' entries are special in that you get they appear
- -- even in referencing units (normally xref entries appear only
+ -- Enumeration Definition );
+
+ -- Note that 'e' entries are special in that they appear even
+ -- in referencing units (normally xref entries appear only
-- for references in the extended main source unit (see Lib) to
-- which the ali applies. But 'e' entries are really structural
-- and simply indicate where packages end. This information can
-- be used to reconstruct scope information for any entities
- -- referenced from within the package.
- --
- -- t is similarly used to identify the end of a corresponding
+ -- referenced from within the package. The line/column values
+ -- for these entries point to the semicolon ending the construct.
+
+ -- i is used to identify a reference to the entity in a generic
+ -- actual or in a default in a call. The node that denotes the
+ -- entity does not come from source, but it has the Sloc of the
+ -- source node that generates the implicit reference, and it is
+ -- useful to record this one.
+
+ -- l is used to identify the occurrence in the source of the
+ -- name on an end line. This is just a syntactic reference
+ -- which can be ignored for semantic purposes (such as call
+ -- graph construction). Again, in the case of an accept there
+ -- can be multiple l lines.
+
+ -- p is used to mark a primitive operation of the given entity.
+ -- For example, if we have a type Tx, and a primitive operation
+ -- Pq of this type, then an entry in the list of references to
+ -- Tx will point to the declaration of Pq. Note that this entry
+ -- type is unusual because it an implicit rather than explicit,
+ -- and the name of the refrerence does not match the name of the
+ -- entity for which a reference is generated. These entries are
+ -- generated only for entities declared in the extended main
+ -- source unit (main unit itself, its separate spec (if any).
+ -- and all subunits (considered recursively).
+
+ -- t is similar to e. It identifies the end of a corresponding
-- body (such a reference always links up with a b reference)
- --
+
-- Subprogram Body end [DESIGNATOR];
-- Package Body end [[PARENT_UNIT_NAME .] IDENTIFIER];
-- Task Body end [task_IDENTIFIER];
-- Entry Body end [entry_IDENTIFIER];
-- Protected Body end [protected_IDENTIFIER]
-- Accept Statement end [entry_IDENTIFIER]];
- --
+
-- Note that in the case of accept statements, there can
- -- be multiple b and T/t entries for the same entity.
- --
+ -- be multiple b and t entries for the same entity.
+
+ -- x is used to identify the reference as the entity from which
+ -- a tagged type is extended. This allows immediate access to
+ -- the parent of a tagged type.
+
-- [..] is used for generic instantiation references. These
-- references are present only if the entity in question is
-- a generic entity, and in that case the [..] contains the
@@ -199,58 +229,58 @@ package Lib.Xref is
-- of file numbers in such references follows the normal
-- rules (present only if needed, and resets the current
-- file for subsequent references).
- --
+
-- Examples:
- --
+
-- 44B5*Flag_Type{boolean} 5r23 6m45 3|9r35 11r56
- --
+
-- This line gives references for the publicly visible Boolean
-- type Flag_Type declared on line 44, column 5. There are four
-- references
- --
+
-- a reference on line 5, column 23 of the current file
- --
+
-- a modification on line 6, column 45 of the current file
- --
+
-- a reference on line 9, column 35 of unit number 3
- --
+
-- a reference on line 11, column 56 of unit number 3
- --
+
-- 2U13 p3=2:35 5b13 8r4 12r13 12t15
- --
+
-- This line gives references for the non-publicly visible
-- procedure p3 declared on line 2, column 13. This procedure
-- renames the procedure whose identifier reference is at
-- line 2 column 35. There are four references:
- --
+
-- the corresponding body entity at line 5, column 13,
-- of the current file.
- --
+
-- a reference (e.g. a call) at line 8 column 4 of the
-- of the current file.
- --
+
-- the END line of the body has an explict reference to
-- the name of the procedure at line 12, column 13.
- --
+
-- the body ends at line 12, column 15, just past this label.
- --
+
-- 16I9*My_Type<2|4I9> 18r8
- --
+
-- This line gives references for the publicly visible Integer
-- derived type My_Type declared on line 16, column 9. It also
-- gives references to the parent type declared in the unit
-- number 2 on line 4, column 9. There is one reference:
- --
+
-- a reference (e.g. a variable declaration) at line 18 column
-- 4 of the current file.
- --
+
-- 10I3*Genv{integer} 3|4I10[6|12]
- --
+
-- This line gives a reference for the entity Genv in a generic
-- package. The reference in file 3, line 4, col 10, refers to
-- an instance of the generic where the instantiation can be
-- found in file 6 at line 12.
- --
+
-- Continuation lines are used if the reference list gets too long,
-- a continuation line starts with a period, and then has references
-- continuing from the previous line. The references are sorted first
@@ -439,15 +469,15 @@ package Lib.Xref is
-- This procedure is called to record a reference. N is the location
-- of the reference and E is the referenced entity. Typ is one of:
--
- -- 'b' body entity (see below)
+ -- 'b' body entity
-- 'c' completion of incomplete or private type (see below)
- -- 'E' end of spec (label present)
- -- 'e' end of spec (no label present)
+ -- 'e' end of construct
-- 'i' implicit reference
+ -- 'l' label on end line
-- 'm' modification
+ -- 'p' primitive operation
-- 'r' standard reference
- -- 'T' end of body (label present)
- -- 't' end of body (no label present)
+ -- 't' end of body
-- 'x' type extension
-- ' ' dummy reference (see below)
--
@@ -459,23 +489,29 @@ package Lib.Xref is
-- for the spec. The entity in the body is treated as a reference
-- with type 'b'. Similar handling for references to subprogram formals.
--
- -- The call has no effect if N is not in the extended main source unit.
- -- If N is in the extended main source unit, then the Is_Referenced
- -- flag of E is set. In addition, if appropriate, a cross-reference
- -- entry is made. The entry is made if:
- --
- -- cross-reference collection is enabled
- -- both entity and reference come from source (or Force is True)
- -- the entity is one for which xrefs are appropriate
- -- the type letter is non-blank
- -- the node N is an identifier, defining identifier, or expanded name
- --
- -- If all these conditions are met, then a cross-reference entry is
- -- made for later output when Output_References is called.
- --
- -- Note: the dummy entry is for the convenience of some callers, who
- -- find it easier to pass a space to suppress the entry than to do a
- -- specific test. The call has no effect if the type is a space.
+ -- The call has no effect if N is not in the extended main source unit
+ -- This check is omitted for type 'e' references (where it is useful to
+ -- have structural scoping information for other than the main source),
+ -- and for 'p' (since we want to pick up inherited primitive operations
+ -- that are defined in other packages).
+ --
+ -- The call also has no effect if any of the following conditions hold:
+ --
+ -- cross-reference collection is disabled
+ -- entity does not come from source (and Force is False)
+ -- reference does not come from source (and Force is False)
+ -- the entity is not one for which xrefs are appropriate
+ -- the type letter is blank
+ -- the node N is not an identifier, defining identifier, or expanded name
+ -- the type is 'p' and the entity is not in the extended main source
+ --
+ -- If all these conditions are met, then the Is_Referenced flag of E
+ -- is set (unless Set_Ref is False) and a cross-reference entry is
+ -- recorded for later output when Output_References is called.
+ --
+ -- Note: the dummy space entry is for the convenience of some callers,
+ -- who find it easier to pass a space to suppress the entry than to do
+ -- a specific test. The call has no effect if the type is a space.
--
-- The parameter Set_Ref is normally True, and indicates that in
-- addition to generating a cross-reference, the Referenced flag