------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                               I T Y P E S                                --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2022, 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 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 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.      --
--                                                                          --
------------------------------------------------------------------------------

--  This package contains declarations for handling of implicit types

with Einfo;          use Einfo;
with Einfo.Entities; use Einfo.Entities;
with Sem_Util;       use Sem_Util;
with Types;          use Types;

package Itypes is

   --------------------
   -- Implicit Types --
   --------------------

   --  Implicit types (Itypes) are types and subtypes created by the semantic
   --  phase or the expander to reflect the underlying semantics. These could
   --  be generated by building trees for corresponding declarations and then
   --  analyzing these trees, but there are three reasons for not doing this
   --  in some cases:

   --    1. The declarations would require more tree nodes

   --    2. In some cases, the elaboration of these types is associated
   --       with internal nodes in the tree.

   --    3. For some types, notably class wide types, there is no Ada
   --       declaration that would correspond to the desired entity.

   --  So instead, implicit types are constructed by simply creating an
   --  appropriate entity with the help of routines in this package. These
   --  entities are fully decorated, as described in Einfo (just as though
   --  they had been created by the normal analysis procedure).

   --  The type declaration declaring an Itype must be analyzed with checks
   --  off because this declaration has not been inserted in the tree (if it
   --  has been then it is not an Itype), and hence checks that would be
   --  generated during the analysis cannot be inserted in the tree. At any
   --  rate, Itype analysis should always be done with checks off, otherwise
   --  duplicate checks will most likely be emitted.

   --  Unlike types declared explicitly, implicit types are defined on first
   --  use, which means that Gigi detects the use of such types, and defines
   --  them at the point of the first use automatically.

   --  Although Itypes are not explicitly declared, they are associated with
   --  a specific node in the tree (roughly the node that caused them to be
   --  created), via the Associated_Node_For_Itype field. This association is
   --  used particularly by New_Copy_Tree, which uses it to determine whether
   --  or not to copy a referenced Itype. If the associated node is part of
   --  the tree to be copied by New_Copy_Tree, then (since the idea of the
   --  call to New_Copy_Tree is to create a complete duplicate of a tree,
   --  as though it had appeared separately in the source), the Itype in
   --  question is duplicated as part of the New_Copy_Tree processing.

   --  As a consequence of this copying mechanism, the association between
   --  Itypes and associated nodes must be one-to-one: several Itypes must
   --  not share an associated node. For example, the semantic decoration
   --  of an array aggregate generates several Itypes: for each index subtype
   --  and for the array subtype. The associated node of each index subtype
   --  is the corresponding range expression.

   --  Notes on the use of the Parent field of an Itype

   --    In some cases, we do create a declaration node for an itype, and in
   --    such cases, the Parent field of the Itype points to this declaration
   --    in the normal manner. This case can be detected by checking for a
   --    non-empty Parent field referencing a declaration whose Defining_Entity
   --    is the Itype in question.

   --    In some other cases, where we don't generate such a declaration, as
   --    described above, the Itype is attached to the tree implicitly by being
   --    referenced elsewhere, e.g. as the Etype of some object. In this case
   --    the Parent field may be Empty.

   --    In other cases where we don't generate a declaration for the Itype,
   --    the Itype may be attached to an arbitrary node in the tree, using
   --    the Parent field. This Parent field may even reference a declaration
   --    for a related different entity (hence the description of the tests
   --    needed for the case where a declaration for the Itype is created).

   ------------------
   -- Create_Itype --
   ------------------

   function Create_Itype
     (Ekind        : Entity_Kind;
      Related_Nod  : Node_Id;
      Related_Id   : Entity_Id := Empty;
      Suffix       : Character := ' ';
      Suffix_Index : Int       := 0;
      Scope_Id     : Entity_Id := Current_Scope) return Entity_Id;
   --  Used to create a new Itype
   --
   --  Related_Nod is the node for which this Itype was created. It is
   --  set as the Associated_Node_For_Itype of the new Itype. The Sloc of
   --  the new Itype is that of this node.
   --
   --  Related_Id is present only if the implicit type name may be referenced
   --  as a public symbol, and thus needs a unique external name. The name
   --  is created by a call to:
   --
   --    New_External_Name (Chars (Related_Id), Suffix, Suffix_Index, 'T')
   --
   --  If the implicit type does not need an external name, then the
   --  Related_Id parameter is omitted (and hence Empty). In this case
   --  Suffix and Suffix_Index are ignored and the implicit type name is
   --  created by a call to Make_Temporary.
   --
   --  Note that in all cases, the name starts with "T". This is used
   --  to identify implicit types in the error message handling circuits.
   --
   --  The Scope_Id parameter specifies the scope of the created type, and
   --  is normally the Current_Scope as shown, but can be set otherwise.
   --
   --  The size/align fields are initialized to unknown (Uint_0).
   --
   --  If Ekind is in Access_Subprogram_Kind, Can_Use_Internal_Rep is set True,
   --  unless Always_Compatible_Rep_On_Target is True.

   ---------------------------------
   -- Create_Null_Excluding_Itype --
   ---------------------------------

   function Create_Null_Excluding_Itype
      (T           : Entity_Id;
       Related_Nod : Node_Id;
       Scope_Id    : Entity_Id := Current_Scope) return Entity_Id;
   --  Ada 2005 (AI-231): T is an access type and this subprogram creates and
   --  returns an internal access-subtype declaration of T that has the null
   --  exclusion attribute set to True.
   --
   --  Usage of null-excluding Itypes
   --  ------------------------------
   --
   --      type T1 is access ...
   --      type T2 is not null T1;
   --
   --      type Rec is record
   --         Comp : not null T1;
   --      end record;
   --
   --      type Arr is array (...) of not null T1;
   --
   --  Instead of associating the not-null attribute with the defining ids of
   --  these declarations, we generate an internal subtype declaration of T1
   --  that has the null exclusion attribute set to true.

end Itypes;
