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

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                               T B U I L D                                --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.55 $                             --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 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 contains various utility procedures to assist in
  26. --  building specific types of tree nodes.
  27.  
  28. with Types; use Types;
  29.  
  30. package Tbuild is
  31.  
  32.    function Make_DT_Component
  33.      (Loc  : Source_Ptr;
  34.       Typ  : Entity_Id;
  35.       I    : Positive)
  36.       return Node_Id;
  37.    --  Gives a reference to the Ith component of the Dispatch Table of
  38.    --  a given Tagged Type.
  39.    --
  40.    --  I = 1    --> Inheritance_Depth
  41.    --  I = 2    --> Tags (array of ancestors)
  42.    --  I = 3, 4 --> predefined primitive
  43.    --            function _Size (X : Typ) return Long_Long_Integer;
  44.    --            function _Equality (X : Typ; Y : Typ'Class) return Boolean;
  45.    --  I >= 5   --> User-Defined Primitive Operations
  46.    --
  47.  
  48.    function Make_DT_Access
  49.      (Loc : Source_Ptr; Rec : Node_Id; Typ : Entity_Id) return Node_Id;
  50.    --  Create an access to the Dispatch Table by using the Tag field
  51.    --  of a tagged record : Acc_Dt (Rec.tag).all
  52.  
  53.    function New_Constraint_Error (Loc : Source_Ptr) return Node_Id;
  54.    --  This function builds a tree corresponding to the Ada statement
  55.    --  "raise Constraint_Error" and returns the root of this tree,
  56.    --  the N_Raise_Statement node.
  57.  
  58.    function New_External_Name
  59.      (Related_Id   : Name_Id;
  60.       Suffix       : Character := ' ';
  61.       Suffix_Index : Nat       := 0;
  62.       Prefix       : Character := ' ')
  63.       return         Name_Id;
  64.    --  Builds a new entry in the names table of the form
  65.    --
  66.    --    [Prefix  &] Related_Id [& Suffix] [& Suffix_Index'Image]
  67.    --
  68.    --  where Prefix is prepended only if Prefix is non-blank (in which case
  69.    --  it must be an upper case letter other than O,Q,U,W (which are used for
  70.    --  identifier encoding, see Namet), and T is reserved for use by implicit
  71.    --  types. Suffix_Index'Image is appended only if the value is non-zero.
  72.    --  Suffix is also a single upper case letter other than O,Q,U,W and is a
  73.    --  required parameter (T is permitted). The constructed name is stored
  74.    --  using Find_Name so that it can be located using a subsequent Find_Name
  75.    --  operation (i.e. it is properly hashed into the names table). The upper
  76.    --  case letter given as the Suffix argument ensures that the name does
  77.    --  not clash with any Ada identifier name. These generated names are
  78.    --  permitted, but not required, to be made public by setting the flag
  79.    --  Is_Public in the associated entity. Note: the reason that Prefix is
  80.    --  Prefix is last is that it is almost always omitted. The notable case
  81.    --  of Prefix being non-null is when it is 'T' for an implicit type.
  82.  
  83.    function New_External_Name
  84.      (Suffix       : Character;
  85.       Suffix_Index : Nat)
  86.       return         Name_Id;
  87.    --  Builds a new entry in the names table of the form
  88.    --    Suffix & Suffix_Index'Image
  89.    --  where Suffix is a single upper case letter other than O,Q,U,W and is a
  90.    --  required parameter (T is permitted). The constructed name is stored
  91.    --  using Find_Name so that it can be located using a subsequent Find_Name
  92.    --  operation (i.e. it is properly hashed into the names table). The upper
  93.    --  case letter given as the Suffix argument ensures that the name does
  94.    --  not clash with any Ada identifier name. These generated names are
  95.    --  permitted, but not required, to be made public by setting the flag
  96.    --  Is_Public in the associated entity.
  97.  
  98.    function New_Internal_Name (Id_Char : Character) return Name_Id;
  99.    --  Id_Char is an upper case letter other than O,Q,U,W (which are reserved
  100.    --  for identifier encoding (see Namet package for details). The letter
  101.    --  T is permitted, but is reserved by convention for the case of internal
  102.    --  generated types. The result of the call is a new generated unique name
  103.    --  of the form XyyyU where X is Id_Char, yyy is a unique serial number,
  104.    --  and U is either a lower case s or b depending on whether the current
  105.    --  unit is a spec or body.
  106.    --
  107.    --  The name is entered into the names table using Name_Enter rather than
  108.    --  Name_Find, because there can never be a need to locate the entry using
  109.    --  the Name_Find procedure later on. Names created by New_Internal_Name
  110.    --  are guaranteed to be consistent from one compilation to another (i.e.
  111.    --  if the identical unit is compiled with a semantically consistent set
  112.    --  of sources, the numbers will be consistent. This means that it is fine
  113.    --  to use these as public symbols.
  114.  
  115.    function New_Occurrence_Of
  116.      (Def_Id : Entity_Id;
  117.       Loc    : Source_Ptr)
  118.       return   Node_Id;
  119.    --  New_Occurrence_Of creates an N_Identifier node which is an
  120.    --  occurrence of the defining identifier which is passed as its
  121.    --  argument. The Entity and Etype of the result are set from
  122.    --  the given defining identifier as follows: Entity is simply
  123.    --  a copy of Def_Id. Etype is a copy of Def_Id for types, and
  124.    --  a copy of the Etype of Def_Id for other entities.
  125.  
  126.    function New_Reference_To
  127.      (Def_Id : Entity_Id;
  128.       Loc    : Source_Ptr)
  129.       return   Node_Id;
  130.    --  This is like New_Occurrence_Of, but it does not set the Etype field.
  131.    --  It is used from the expander, where Etype fields are generally not set,
  132.    --  since they are set when the expanded tree is reanalyzed.
  133.  
  134. end Tbuild;
  135.