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 / uname.ads < prev    next >
Text File  |  1996-09-28  |  7KB  |  141 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                U N A M E                                 --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.19 $                             --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. with Types; use Types;
  27. package Uname is
  28.  
  29.    ---------------------------
  30.    -- Unit Name Conventions --
  31.    ---------------------------
  32.  
  33.    --  Units are associated with a unique ASCII name as follows. First we
  34.    --  have the fully expanded name of the unit, with lower case letters
  35.    --  (except for the use of upper case letters for encoding upper half
  36.    --  and wide characters, as described in Namet), and periods. Following
  37.    --  this is one of the following suffixes:
  38.  
  39.    --    %s  for package/subprogram/generic declarations (specs)
  40.    --    %b  for package/subprogram/generic bodies and subunits
  41.  
  42.    --  Unit names are stored in the names table, and referred to by the
  43.    --  corresponding Name_Id values. The subtype Unit_Name, which is a
  44.    --  synonym for Name_Id, is used to indicate that a Name_Id value that
  45.    --  holds a unit name (as defined above) is expected.
  46.  
  47.    --  Note: as far as possible the conventions for unit names are encapsulated
  48.    --  in this package. The one exception is that package Fname, which provides
  49.    --  conversion routines from unit names to file names must be aware of the
  50.    --  precise conventions that are used.
  51.  
  52.    -------------------
  53.    -- Display Names --
  54.    -------------------
  55.  
  56.    --  For display purposes, unit names are printed out with the suffix
  57.    --  " (body)" for a body and " (spec)" for a spec. These formats are
  58.    --  used for the Write_Unit_Name and Get_Unit_Name_String subprograms.
  59.  
  60.    -----------------
  61.    -- Subprograms --
  62.    -----------------
  63.  
  64.    function Get_Body_Name (N : Unit_Name_Type) return Unit_Name_Type;
  65.    --  Given the name of a spec, this function returns the name of the
  66.    --  corresponding body, i.e. characters %s replaced by %b
  67.  
  68.    function Get_Parent_Body_Name (N : Unit_Name_Type) return Unit_Name_Type;
  69.    --  Given the name of a subunit, returns the name of the parent body.
  70.  
  71.    function Get_Parent_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type;
  72.    --  Given the name of a child unit spec or body, returns the unit name
  73.    --  of the parent spec. Returns No_Name if the given name is not the name
  74.    --  of a child unit.
  75.  
  76.    function Get_Spec_Name (N : Unit_Name_Type) return Unit_Name_Type;
  77.    --  Given the name of a body, this function returns the name of the
  78.    --  corresponding spec, i.e. characters %b replaced by %s
  79.  
  80.    function Get_Unit_Name (N : Node_Id) return Unit_Name_Type;
  81.    --  This procedure returns the unit name that corresponds to the given node,
  82.    --  which is one of the following:
  83.    --
  84.    --    N_Subprogram_Declaration         (spec) cases
  85.    --    N_Package_Declaration
  86.    --    N_Generic_Declaration
  87.    --    N_With_Clause
  88.    --    N_Function_Instantiation
  89.    --    N_Package_Instantiation
  90.    --    N_Procedure_Instantiation
  91.    --    N_Pragma (Elaborate case)
  92.    --
  93.    --    N_Package_Body                   (body) cases
  94.    --    N_Subprogram_Body
  95.    --
  96.    --    N_Subprogram_Body_Stub           (subunit) cases
  97.    --    N_Package_Body_Stub
  98.    --    N_Task_Body_Stub
  99.    --    N_Protected_Body_Stub
  100.    --    N_Subunit
  101.  
  102.    procedure Get_Unit_Name_String (N : Unit_Name_Type);
  103.    --  Places the display name of the unit in Name_Buffer and sets Name_Len
  104.    --  to the length of the stored name, i.e. it uses the same interface as
  105.    --  the Get_Name_String routine in the Namet package. The name contains
  106.    --  an indication of spec or body, and is decoded.
  107.  
  108.    function Is_Body_Name (N : Unit_Name_Type) return Boolean;
  109.    --  Returns True iff the given name is the unit name of a body (i.e. if
  110.    --  it ends with the characters %b).
  111.  
  112.    function Is_Child_Name (N : Unit_Name_Type) return Boolean;
  113.    --  Returns True iff the given name is a child unit name (of either a
  114.    --  body or a spec).
  115.  
  116.    function Is_Spec_Name (N : Unit_Name_Type) return Boolean;
  117.    --  Returns True iff the given name is the unit name of a specification
  118.    --  (i.e. if it ends with the characters %s).
  119.  
  120.    function Name_To_Unit_Name (N : Name_Id) return Unit_Name_Type;
  121.    --  Given the Id of the Ada name of a unit, this function returns the
  122.    --  corresponding unit name of the spec (by appending %s to the name).
  123.  
  124.    function Uname_Ge (Left, Right : Unit_Name_Type) return Boolean;
  125.    function Uname_Gt (Left, Right : Unit_Name_Type) return Boolean;
  126.    function Uname_Le (Left, Right : Unit_Name_Type) return Boolean;
  127.    function Uname_Lt (Left, Right : Unit_Name_Type) return Boolean;
  128.    --  These functions perform lexicographic ordering of unit names. The
  129.    --  ordering is suitable for printing, and is not quite a straightforward
  130.    --  comparison of the names, since the convention is that specs appear
  131.    --  before bodies. Note that the standard = and /= operators work fine
  132.    --  because all unit names are hashed into the name table, so if two names
  133.    --  are the same, they always have the same Name_Id value.
  134.  
  135.    procedure Write_Unit_Name (N : Unit_Name_Type);
  136.    --  Given a unit name, this procedure writes the display name to the
  137.    --  standard output file. Name_Buffer and Name_Len are set as described
  138.    --  above for the Get_Unit_Name_String call on return.
  139.  
  140. end Uname;
  141.