home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / xref_tab.ads < prev    next >
Text File  |  1996-09-28  |  25KB  |  617 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                             X R E F _ T A B                              --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.38 $                             --
  10. --                                                                          --
  11. --           Copyright (c) 1992,1993,1994 NYU, All Rights Reserved          --
  12. --                                                                          --
  13. -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  14. -- terms of the  GNU General Public License as published  by the Free Soft- --
  15. -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
  16. -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  17. -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  18. -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  19. -- for  more details.  You should have  received  a copy of the GNU General --
  20. -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
  21. -- to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. --
  22. --                                                                          --
  23. ------------------------------------------------------------------------------
  24.  
  25. --  This package offers the data type Entity_Table and its methods.
  26. --  Etable is used to store all the definition/use information we need
  27. --  to build a cross reference file or required interfaces.
  28.  
  29. --  Note that we store here both the Node_Id and the corresponding entitiy
  30. --  information like 'Chars', 'Sloc' or 'Line_Number'. We do this since
  31. --  program trees get lost whenever we start to compile a new unit. Node_Id
  32. --  is only a pointer into program trees.
  33.  
  34. with Einfo; use Einfo;
  35. with Types; use Types;
  36.  
  37. package Xref_Tab is
  38.  
  39.    -------------------
  40.    -- Entity Tables --
  41.    -------------------
  42.  
  43.    --  An Entity_Table is used to store the information about entities
  44.    --  and their references. We divide the huge amount of information into
  45.    --  several parts: One Entity_Table for each compilation unit.
  46.  
  47.    --  An Entity_Table is defined as a twodimensional data list. The entities
  48.    --  and their references appear in the same order as in the program tree
  49.    --  (lower Node_Ids first). This represents also the order within the Ada
  50.    --  programs and is important if we want to print the Xref or look for
  51.    --  possible overloading effects.
  52.  
  53.    --     xxxxxxxxxxxxxxxx
  54.    --     x Entity_Table x
  55.    --     xxxxxxxxxxxxxxxx
  56.    --            I
  57.    --            I
  58.    --            V
  59.    --     xxxxxxxxxxxxxxxx       xxxxxxxxx       xxxxxxxxx
  60.    --     x   Entity     x-----> x  Ref  x-----> x  Ref  x-----> null;
  61.    --     xxxxxxxxxxxxxxxx       xxxxxxxxx       xxxxxxxxx
  62.    --            I
  63.    --            I
  64.    --            V
  65.    --     xxxxxxxxxxxxxxxx       xxxxxxxxx
  66.    --     x   Entity     x-----> x  Ref  x-----> null;
  67.    --     xxxxxxxxxxxxxxxx       xxxxxxxxx
  68.    --            I
  69.    --            I
  70.    --            V
  71.    --           null;
  72.  
  73.    --  The record behind an Entity_Table is accessible for all clients
  74.  
  75.    --  1) since there is no real danger in providing this access
  76.    --  2) since it would be very awkward to write all the appropriate
  77.    --     read and write functions.
  78.  
  79.    --  Of course, the data structures of entities and references are fully
  80.    --  encapsulated - a client can access them only by subprogram calls.
  81.  
  82.    --  An Entity_Table has the following attributs:
  83.  
  84.    --   Marked        Flag showing the result of a call of Mark_Xref.
  85.    --                 Set if cross references are found.
  86.  
  87.    --   RU            Required Unit flag.
  88.    --                 Set if full Xref output is required.
  89.  
  90.    --   Examined      Flag, set if all entities are installed.
  91.  
  92.    --   Linked        Flag set if the entity table has been linked with
  93.    --                 its predecessors and successor.
  94.  
  95.    --   File_Name     Pointer to the fitting file name.
  96.  
  97.    --   Unit_Name     Pointer to the fitting unit name.
  98.  
  99.    --   Time_Stamp    Time stamp of the file corresponding to the
  100.    --                 entity table.
  101.  
  102.    --   Status        Shows if the compilation unit is a simple spec,
  103.    --                 withed spec, a body which acts as its spec, a simple
  104.    --                 body or a subunit.
  105.  
  106.    --   Kind          Shows if the compilation unit is a procedure,
  107.    --                 function, generic, package, task, subunit or somethin
  108.    --                 else.
  109.  
  110.    --   Top_Node      Set to the Node_Id of the compilation unit node.
  111.  
  112.    --   Has_Inlined   Flag indicating if the Entity table contains
  113.    --                 declarations of inlined procedures or functions.
  114.  
  115.    --   Xref_Written  This flag is set as soon as xref informations are
  116.    --                 for the entity table
  117.  
  118.    --   Renamed_Etbl  Points to the Etbl where is declared the package
  119.    --                 which is renamed in the current Etbl
  120.  
  121.    --   First_With    Points to the first with-structure. First_With can
  122.    --                 be used to start hangling through all with-clauses.
  123.  
  124.    --   First_Include Points to the first Etbl whichj is included in the
  125.    --                 current one (for example a generic spec which is
  126.    --                 instantiated.
  127.  
  128.    --   First_Child   Points to the first Child spec of a spec.
  129.  
  130.    --   Predecessor   Points to the immediate predecessor (SU -> B -> S).
  131.  
  132.    --   Successor     Points to the immediate successor (S -> B -> SU).
  133.  
  134.    --   Length        Contains the number of installed entities.
  135.  
  136.    --   First_Entity  Points to the first entity-structure. First_Entity
  137.    --                 can be used to start hangling through all entities.
  138.  
  139.    --   Last_Entity   Points to the last entity-structure (internal use).
  140.  
  141.    --   Next_Etbl     Points to the immediate following Entity_Table.
  142.  
  143.  
  144.    type Status_Type is (A_Spec, Withed_Spec, Body_As_Spec, A_Body, Sub_Body);
  145.    type Kind_Type is (Proc, Func, Genr, Pack, Tsk, Subunit, Unknown);
  146.  
  147.    subtype Spec_Status is Status_Type range
  148.      A_Spec .. Withed_Spec;
  149.  
  150.    subtype Body_Status is Status_Type range
  151.      Body_As_Spec .. Sub_Body;
  152.  
  153.    type Entity_Table;
  154.    type Entity_Table_Acc is access Entity_Table;
  155.  
  156.    type With_Clause;
  157.    type With_Acc is access With_Clause;
  158.  
  159.    type Include;
  160.    type Include_Acc is access Include;
  161.  
  162.    type Child_Spec;
  163.    type Child_Spec_Acc is access Child_Spec;
  164.  
  165.    type Withed_Messages is (None, Done, Already_Withed, Withed_Unused);
  166.    --  Type for messages about with warnings
  167.    --   None : This with has not been examined yet
  168.  
  169.    --   Done : This with has already been examined
  170.  
  171.    --   Withed_Unused  : This With has already been examined for a previous
  172.    --                     Entity_table and the scan of the_successor has
  173.    --                     shown it was not used in this entity table
  174.  
  175.    --   Already Withed : Same thing as previously except that the with had
  176.    --                    references in the previou entity table
  177.  
  178.  
  179.    --  for Error messages tw new components have been added to this recors :
  180.    --   Prev_Msgs  : Used to store withs warnings for Entities
  181.    --                  which have not been examined yet
  182.    --                  for example, if you check the Withed units a a spec
  183.    --                  if references are found, then for all the successors
  184.    --                  which also with this unit, we store a message
  185.    --                  Already_Withed which willavoid reexamining
  186.    --                  the withed unit for the successors
  187.  
  188.    --   Extra_Etbl : Used to store the Entity Table where a withed unit
  189.    --                  is already withed
  190.    --                  In the previous example, Extra_Etbl would contain the
  191.    --                  Entity_table corresponding to the Spec
  192.  
  193.    type With_Clause is record
  194.       Withed_Etbl   : Entity_Table_Acc;
  195.       Next_With     : With_Acc;
  196.       Is_Implicit   : Boolean;
  197.       Prev_Msgs     : Withed_Messages := None;
  198.       Extra_Etbl    : Entity_Table_Acc;
  199.    end record;
  200.  
  201.    type Include is record
  202.       Included_Etbl : Entity_Table_Acc;
  203.       Next_Include  : Include_Acc;
  204.    end record;
  205.  
  206.    type Child_Spec is record
  207.       Child_Etbl    : Entity_Table_Acc;
  208.       Next_Child    : Child_Spec_Acc;
  209.    end record;
  210.  
  211.    --   type Entity_Acc  is private;
  212.    --   type Ref_Acc     is private;
  213.    --   was in the private part ??? put back when private types work???
  214.  
  215.    ----------------
  216.    -- References --
  217.    ----------------
  218.  
  219.    --   Marked        Flag showing the result of a call of Mark_Xref.
  220.    --                 Set if the reference fits into the search pattern.
  221.  
  222.    --   Is_Pragma     Flag, set if the reference is a pragma that doesn't
  223.    --                 use the entity but has to be removed if we declare the
  224.    --                 entity as dead code.
  225.  
  226.    --   Is_An_Elaborated_With_Clause   Flag set to specify that a with clause
  227.    --                 in a pragma ELABORATE in the Entity_Table Etbl
  228.  
  229.    --   Ref_Node      The Node_Id of the reference.
  230.  
  231.    --   Sloc          Points to the source location where the reference
  232.    --                 was found relatively to the file where the reference
  233.    --                 was found.
  234.  
  235.    --   Line_Number   The line number in which the reference was found.
  236.  
  237.    --   Col_Number   The column number in which the reference was found.
  238.  
  239.    --   Etbl          Points to the Entity_Table of the compilation unit
  240.    --                 in which the reference was found.
  241.  
  242.    --   Next_Ref      Points to the immediate following reference structure.
  243.  
  244.    type Ref;
  245.    type Ref_Acc is access Ref;
  246.  
  247.    type Ref is record
  248.       Marked        : Boolean    := False;
  249.       Is_Pragma     : Boolean    := False;
  250.       Ref_Node      : Node_Id;
  251.       Sloc          : Source_Ptr;
  252.       Line_Number   : Logical_Line_Number;
  253.       Col_Number    : Column_Number;
  254.       Etbl          : Entity_Table_Acc;
  255.       Is_An_Elaborated_With_Clause : Boolean := False;
  256.       Next_Ref      : Ref_Acc;
  257.    end record;
  258.  
  259.    --------------
  260.    -- Entities --
  261.    --------------
  262.  
  263.    --   Marks         Contains the number of found references (after a call
  264.    --                 of Mark_Xrefs.
  265.  
  266.    --   Entity_Node   The Entity_Id of the entity.
  267.  
  268.    --   Entity_Type   The Entity_Kind of the entity.
  269.  
  270.    --   Entity_Char   The name_id of the entity
  271.  
  272.    --   Entity_Sloc   Source location of the Entity
  273.  
  274.    --   Chars         Pointer to the identifier string of the entity.
  275.  
  276.    --   Line_Number   The line number in which the entity was found.
  277.  
  278.    --   Col_Number    The column number in which the entity was found.
  279.  
  280.    --   Real_Line     The line number of the complete declaration of
  281.    --                 private types, incomplete types or deferred constants.
  282.    --                 Set to No_Line_Number to indicate no value stored
  283.  
  284.    --   Real_Col      The column number of the complete declaration of
  285.    --                 private types, incomplete types or deferred constants
  286.    --                 Set to No_Column_Number to indicate no value stored.
  287.  
  288.    --   Scope_Path    Pointer to the whole scope path of the entity.
  289.  
  290.    --   Give_Warning  Flag, set if a warning message should be given in the
  291.    --                 case that we find no reference to this entity.
  292.  
  293.    --   Is_Direct     Flag set if the declarations is not encapsulated in
  294.    --                 in an other one. This is used in the -x4 mode when
  295.    --                 we generate in the xref file all the entities declared
  296.    --                 in bodies and subunits if the spec declares Inlined
  297.    --                 or generics. In this case we generate only basic
  298.    --                 declarations (For example we don't mind about
  299.    --                 variables declared in subprograms).
  300.  
  301.    --   Length        Contains the number of references to this entity.
  302.  
  303.    --   First_Ref     Points to the first reference to the entity.
  304.  
  305.    --   Last_Ref      Points to the last reference to the entity
  306.    --                 (internal use).
  307.  
  308.    --   Next_Entity   Points to the immediate following entity structure.
  309.  
  310.    type An_Entity;
  311.    type Entity_Acc is access An_Entity;
  312.  
  313.    type An_Entity is record
  314.       Marks         : Natural             := 0;
  315.       Entity_Node   : Entity_Id;
  316.       Entity_Type   : Entity_Kind;
  317.       Entity_Char   : Name_Id;
  318.       Entity_Sloc   : Source_Ptr;
  319.       Chars         : String_Ptr;
  320.       Line_Number   : Logical_Line_Number;
  321.       Col_Number    : Column_Number;
  322.       Real_Line     : Logical_Line_Number := No_Line_Number;
  323.       Real_Col      : Column_Number       := No_Column_Number;
  324.       Scope_Path    : String_Ptr;
  325.       Give_Warning  : Boolean             := True;
  326.       Is_Direct     : Boolean             := False;
  327.       Length        : Natural             := 0;
  328.       First_Ref     : Ref_Acc;
  329.       Last_Ref      : Ref_Acc;
  330.       Next_Entity   : Entity_Acc;
  331.    end record;
  332.  
  333.    --  End of old private part ???
  334.  
  335.    type Entity_Table is record
  336.       Marked        : Boolean    := False;
  337.       Unit_Number   : Unit_Number_Type;
  338.       RU            : Boolean    := False;
  339.       Examined      : Boolean    := False;
  340.       Linked        : Boolean    := False;
  341.       File_Name     : String_Ptr;
  342.       Unit_Name     : String_Ptr;
  343.       Time_Stamp    : Time_Stamp_Type;
  344.       Status        : Status_Type;
  345.       Kind          : Kind_Type;
  346.       Top_Node      : Node_Id;
  347.       Has_Inlined   : Boolean    := False;
  348.       Xref_Written  : Boolean    := False;
  349.       Renamed_Etbl  : Entity_Table_Acc;
  350.       First_With    : With_Acc;
  351.       First_Include : Include_Acc;
  352.       First_Child   : Child_Spec_Acc;
  353.       Predecessor   : Entity_Table_Acc;
  354.       Successor     : Entity_Table_Acc;
  355.       Length        : Natural    := 0;
  356.       First_Entity  : Entity_Acc;
  357.       Last_Entity   : Entity_Acc;
  358.       Next_Etbl     : Entity_Table_Acc;
  359.    end record;
  360.  
  361.    First_Etbl : Entity_Table_Acc;
  362.    Last_Etbl  : Entity_Table_Acc;
  363.  
  364.    --  Some Flags to control the output
  365.  
  366.    With_Warnings : Boolean;
  367.    --  If set, warning messages for wrong with clauses appear as part of the
  368.    --  standard error message output (set for XREF levels 1,2,3,4,5).
  369.  
  370.    Entity_Warnings : Boolean;
  371.    --  If set, warning messages for unused entities appear as part of the
  372.    --  standard error message output (set for XREF levels 2,3,4,5)
  373.  
  374.    Xref_Flag : Boolean;
  375.    --  If set, a cross reference file is written containing cross-reference
  376.    --  lists for all entities referenced (set for XREF levels 3,4,5).
  377.  
  378.    Entity_Info_In_Xref : Boolean;
  379.    --  If set, the cross reference file contains Entity_Kind information for
  380.    --  all entities appearing in the listing (set for XREF levels 4,5).
  381.  
  382.    Include_Inlined     : Boolean;
  383.    --  if set, the cross reference list with contain all entities declared
  384.    --  in bodies and subunits if the spec declares inlined entities or
  385.    --  generics.
  386.  
  387.    All_Info_In_Xref : Boolean;
  388.    --  If set, the cross-reference file includes references to entities
  389.    --  declared in bodies, and also references to declared entities in a
  390.    --  parent unit (set for XREF level 5).
  391.  
  392.    Global_Xref_File : Boolean;
  393.    --  If set, then a global xref file is generated.
  394.  
  395.    Spec_REQs_Flag : Boolean;
  396.    --  If set (-xs switch), the REQs for all withed specs get written
  397.    --  into files.
  398.  
  399.    Body_REQs_Flag : Boolean;
  400.    --  If set (-xb switch), the REQs for the body and its subunits get
  401.    --  written into files
  402.  
  403.    -----------------
  404.    -- Subprograms --
  405.    -----------------
  406.  
  407.    procedure Add_Entity
  408.      (To_Etbl     : in     Entity_Table_Acc;
  409.       Entity_Node : in     Entity_Id;
  410.       New_Entity  : in out Entity_Acc);
  411.    --  Adds an entity to the end of the entity list of To_Etbl.
  412.    --  Finally New_Entity points to the new Entity structure.
  413.  
  414.    procedure Add_Etbl
  415.      (First_Etbl  : in out Entity_Table_Acc;
  416.       Last_Etbl   : in out Entity_Table_Acc;
  417.       Unit_Number : in     Unit_Number_Type;
  418.       New_Etbl    : in out Entity_Table_Acc);
  419.    --  Maintains the coherence of loaded files and the E_Tables.If Unit_Number
  420.    --  is already in the list only some data gets updated. Otherwise a new
  421.    --  entity table gets added to the end of the entity table list. Finally,
  422.    --  in every case New_Etbl points to the Entity_Table which corresponds to
  423.    --  Unit_Number.
  424.  
  425.    procedure Add_Reference
  426.      (To_Entity :  Entity_Acc;
  427.       New_Etbl  :  Entity_Table_Acc;
  428.       New_Ref   :  Node_Id);
  429.    --  Adds a reference to the end of the reference list of the given entity.
  430.    --  New_Etbl has to point to the entity table in which New_Ref appears.
  431.  
  432.    procedure Add_With
  433.      (To_Etbl  : Entity_Table_Acc;
  434.       New_Etbl : Entity_Table_Acc;
  435.       Is_Implicit : Boolean := False);
  436.    --  If Withed_Etbl is not already in the list, then a new With_Clause gets
  437.    --  added to the end of the with list of To_Etbl
  438.  
  439.    procedure Clear_And_Mark_Xrefs
  440.      (Home_Etbl   : Entity_Table_Acc;
  441.       Target_Etbl : Entity_Table_Acc;
  442.       First_Pass  : Boolean;
  443.       In_Xref     : Boolean;
  444.       Count_Marks : Boolean := True);
  445.  
  446.    --  Looks in Home_Etbl for references with a source location in Target_Etbl.
  447.    --  If one or more such references are found then the fitting references
  448.    --  and the fitting entity in Home_Etbl as well as Target_Etbl get marked.
  449.    --  All other nodes of Home_Etbl get unmarked.
  450.  
  451.    procedure Delete_Table (Old_Etbl : Entity_Table_Acc);
  452.    --  Not implemented yet.
  453.    --  Originally to deallocate the space of an Entity_Table object.
  454.  
  455.    function Entity_Node (The_Entity : Entity_Acc) return Entity_Id;
  456.    --  Returns the Entity_Id of the entity object to which The_Entity points.
  457.    --  If The_Entity points to 'null' then Empty is returned.
  458.  
  459.    function Entity_Type (The_Entity : Entity_Acc) return Entity_Kind;
  460.    --  Returns the Entity_Kind of the entity object to which The_Entity
  461.    --  points. If The_Entity points to 'null' then E_Void is returned.
  462.  
  463.    function First (The_Etbl : Entity_Table_Acc) return Entity_Id;
  464.    --  Returns the first entity of the given Entity_Table.
  465.  
  466.    function First (The_Entity : Entity_Acc) return Ref_Acc;
  467.    --  Returns the first reference of the given entity.
  468.  
  469.    function Give_Warning (The_Entity : Entity_Acc) return Boolean;
  470.    --  Tests if a warning message should appear if the given
  471.    --  entity is unused.
  472.  
  473.    function In_E_List
  474.      (The_Etbl   : Entity_Table_Acc;
  475.       The_Entity : Entity_Id) return Entity_Acc;
  476.    --  Checks if the given entity is already in the entity list.
  477.    --  If the entity is found the pointer to it is returned.
  478.    --  If the entity is not in the list 'null' is returned.
  479.  
  480.    function In_Ref_List
  481.      (The_Entity : Entity_Acc;
  482.       The_Ref    : Node_Id) return Boolean;
  483.    --  Checks if the given reference is already in the reference list
  484.    --  corresponding to the given entity.
  485.    --  'True' is returned if the entity is found.
  486.    --  'False' is returned if The_Entity points to 'null' or The_Entity
  487.    --  is not in the list .
  488.  
  489.    function In_With_List
  490.      (Home_Etbl   : Entity_Table_Acc;
  491.       Target_Etbl : Entity_Table_Acc) return Boolean;
  492.    --  Checks if Home_Etbl is withed by Target_Etbl.
  493.    --  If Target_Etbl is not in the list then 'False' is returned.
  494.  
  495.    function Is_Null (The_Entity : Entity_Acc) return Boolean;
  496.    --  Tests if the given Entity_Acc points to 'null'.
  497.  
  498.    function Is_Null (The_Ref : Ref_Acc) return Boolean;
  499.    --  Tests if the given Ref_Acc points to 'null'.
  500.  
  501.    function Is_Pragma (The_Ref : Ref_Acc) return Boolean;
  502.    --  Tests if the given Ref_Acc is a pragma reference.
  503.  
  504.    procedure Mark_Entity (Old_Entity : Entity_Acc);
  505.    --  Marks an entity of the entity list as used.
  506.    --  This procedure is sometimes called to prevent the multi pass removal
  507.    --  process from removing an unused entity twice.
  508.  
  509.    function Number_Of_Marks (The_Entity : Entity_Acc) return Natural;
  510.    --  Returns the number of the marked references in the given entity.
  511.    --  If The_Entity points to 'null' then 0 is returned.
  512.  
  513.    function Number_Of_Refs (The_Entity : Entity_Acc) return Natural;
  514.    --  Returns the length of the reference list of the given entity.
  515.    --  If The_Entity points to 'null' then 0 is returned.
  516.  
  517.    procedure Mark_Withed_Entities (The_Etbl : Entity_Table_Acc);
  518.    --  Used for a withed spec to mark the entities which are used by its
  519.    --  clients. If the client uses at least one entity then the client entity
  520.    --  table also gets marked to signal a 'dead with clause'.
  521.  
  522.    function Next (The_Entity : Entity_Acc) return Entity_Acc;
  523.    --  Returns the entity which follows the given entity in Entity_Table.
  524.    --  'null' is returned if the given entity is the last entity in the
  525.    --  Entity_Table.
  526.  
  527.    function Next (The_Ref : Ref_Acc) return Ref_Acc;
  528.    --  Returns the reference which follows the given reference in the list.
  529.    --  'null' is returned if the given reference is the last entity in the
  530.    --  list.
  531.  
  532.    function The_Node (The_Ref : Ref_Acc) return Node_Id;
  533.    --  Returns the Node_Id of the given reference.
  534.  
  535.    procedure Unmark_Entity
  536.      (The_Table  : Entity_Table_Acc;
  537.       Old_Entity : Entity_Acc);
  538.    --  Unmarks Old_Entity of the entity list.
  539.    --  Nothing is done if Old_Entity or The_Table point to 'null'.
  540.  
  541.    procedure Unmark_Reference (The_Entity : Entity_Acc;
  542.                                Old_Ref    : Node_Id);
  543.    --  Unmarks a reference node of the reference list of The_Entity.
  544.    --  Nothing is done if The_Entity points to 'null' or Old_Ref is
  545.    --  not found in the list.
  546.  
  547.    procedure Update_Entity
  548.      (To_Etbl     : in     Entity_Table_Acc;
  549.       Entity_Node : in     Entity_Id;
  550.       New_Entity  : in out Entity_Acc);
  551.    --  If the entity is already in the list only the Entity_Id is updated.
  552.    --  Otherwise Add_Entity is called. Used to sychnonize old Entity_Ids
  553.    --  with new Unique_Names. Finally, in every case New_Entity points to
  554.    --  the Entity structure which corresponds to Entity_Node.
  555.  
  556.    procedure Update_Reference
  557.      (To_Entity :  Entity_Acc;
  558.       New_Etbl  :  Entity_Table_Acc;
  559.       New_Ref   :  Node_Id);
  560.    --  If the reference is already in the list only the Node_Id is updated.
  561.    --  Otherwise Add_Reference is called..
  562.    --  Used to sychnonize old Node_Ids with the new Ids - only for creating
  563.    --  the Spec_REQs.
  564.  
  565.    type Output_Level is
  566.      (Full_Xref, Smart_Xref, Full_Only_Standout);
  567.    --  Used only for Writ!
  568.    --
  569.    --  Full_Xref:        Empty reference lists cause WARNING messages.
  570.    --  Smart_Xref:       The output of empty reference lists is supressed.
  571.    --  ??? following documentation does not correspond to declaration
  572.    --  Xref:             Both standard output and file output.
  573.    --  Only_Standout:    Only standard output
  574.  
  575.    procedure Writ
  576.      (The_Etbl   : Entity_Table_Acc;
  577.       Level      : Output_Level;
  578.       First_File : Boolean);
  579.    --  Writes the information stored in the Entity_Table to the Xref Output
  580.    --  file. Note: The output of anonymous entities is always supressed.
  581.  
  582.    procedure Write_Files_Info (The_Etbl : Entity_Table_Acc);
  583.    --  Writes at the beginning of the .xr? file the name and the time
  584.    --  stamp of the Entity table.
  585.    --  Above comment knows too much about file names ???
  586.  
  587.    procedure Write_Version;
  588.    --  Writes at the beginning of the .xr? files the version of sgnat.
  589.    --  Anove comment knows too much about file names ???
  590.  
  591. private
  592.    pragma Inline (Add_Entity);
  593.    pragma Inline (Add_Etbl);
  594.    pragma Inline (Add_Reference);
  595.    pragma Inline (Add_With);
  596.    pragma Inline (Clear_And_Mark_Xrefs);
  597.    pragma Inline (Delete_Table);
  598.    pragma Inline (Entity_Node);
  599.    pragma Inline (Entity_Type);
  600.    pragma Inline (First);
  601.    pragma Inline (Give_Warning);
  602.    pragma Inline (In_E_List);
  603.    pragma Inline (In_Ref_List);
  604.    pragma Inline (In_With_List);
  605.    pragma Inline (Is_Null);
  606.    pragma Inline (Is_Pragma);
  607.    pragma Inline (Mark_Entity);
  608.    pragma Inline (Number_Of_Marks);
  609.    pragma Inline (Next);
  610.    pragma Inline (The_Node);
  611.    pragma Inline (Unmark_Entity);
  612.    pragma Inline (Unmark_Reference);
  613.    pragma Inline (Update_Entity);
  614.    pragma Inline (Update_Reference);
  615.  
  616. end Xref_Tab;
  617.