File : exp_strm.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT COMPILER COMPONENTS                         --
   4 --                                                                          --
   5 --                             E X P _ S T R M                              --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2007, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  17 -- for  more details.  You should have  received  a copy of the GNU General --
  18 -- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
  19 -- http://www.gnu.org/licenses for a complete copy of the license.          --
  20 --                                                                          --
  21 -- GNAT was originally developed  by the GNAT team at  New York University. --
  22 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  23 --                                                                          --
  24 ------------------------------------------------------------------------------
  25 
  26 --  Routines to build stream subprograms for composite types
  27 
  28 with Exp_Tss; use Exp_Tss;
  29 with Types;   use Types;
  30 
  31 package Exp_Strm is
  32 
  33    function Build_Elementary_Input_Call (N : Node_Id) return Node_Id;
  34    --  Build call to Read attribute function for elementary type. Also used
  35    --  for Input attributes for elementary types with an appropriate extra
  36    --  assignment statement. N is the attribute reference node.
  37 
  38    function Build_Elementary_Write_Call (N : Node_Id) return Node_Id;
  39    --  Build call to Write attribute function for elementary type. Also used
  40    --  for Output attributes for elementary types (since the effect of the
  41    --  two attributes is identical for elementary types). N is the attribute
  42    --  reference node.
  43 
  44    function Build_Stream_Attr_Profile
  45      (Loc : Source_Ptr;
  46       Typ : Entity_Id;
  47       Nam : TSS_Name_Type) return List_Id;
  48    --  Builds the parameter profile for the stream attribute identified by
  49    --  the given name. This is used for the tagged case to build the spec
  50    --  for the primitive operation.
  51 
  52    --  The following routines build procedures and functions for stream
  53    --  attributes applied to composite types. For each of these routines,
  54    --  Loc is used to provide the location for the constructed subprogram
  55    --  declaration. Typ is the base type to which the subprogram applies
  56    --  (i.e. the base type of the stream attribute prefix). The returned
  57    --  results are the declaration and name (entity) of the subprogram.
  58 
  59    procedure Build_Array_Input_Function
  60      (Loc  : Source_Ptr;
  61       Typ  : Entity_Id;
  62       Decl : out Node_Id;
  63       Fnam : out Entity_Id);
  64    --  Build function for Input attribute for array type
  65 
  66    procedure Build_Array_Output_Procedure
  67      (Loc  : Source_Ptr;
  68       Typ  : Entity_Id;
  69       Decl : out Node_Id;
  70       Pnam : out Entity_Id);
  71    --  Build procedure for Output attribute for array type
  72 
  73    procedure Build_Array_Read_Procedure
  74      (Nod  : Node_Id;
  75       Typ  : Entity_Id;
  76       Decl : out Node_Id;
  77       Pnam : out Entity_Id);
  78    --  Build procedure for Read attribute for array type. Nod provides the
  79    --  Sloc value for generated code.
  80 
  81    procedure Build_Array_Write_Procedure
  82      (Nod  : Node_Id;
  83       Typ  : Entity_Id;
  84       Decl : out Node_Id;
  85       Pnam : out Entity_Id);
  86    --  Build procedure for Write attribute for array type. Nod provides the
  87    --  Sloc value for generated code.
  88 
  89    procedure Build_Mutable_Record_Read_Procedure
  90      (Loc  : Source_Ptr;
  91       Typ  : Entity_Id;
  92       Decl : out Node_Id;
  93       Pnam : out Entity_Id);
  94    --  Build procedure to Read a record with default discriminants.
  95    --  Discriminants must be read explicitly (RM 13.13.2(9)) in the
  96    --  same manner as is done for 'Input.
  97 
  98    procedure Build_Mutable_Record_Write_Procedure
  99      (Loc  : Source_Ptr;
 100       Typ  : Entity_Id;
 101       Decl : out Node_Id;
 102       Pnam : out Entity_Id);
 103    --  Build procedure to write a record with default discriminants.
 104    --  Discriminants must be written explicitly (RM 13.13.2(9)) in
 105    --  the same manner as is done for 'Output.
 106 
 107    procedure Build_Record_Or_Elementary_Input_Function
 108      (Loc  : Source_Ptr;
 109       Typ  : Entity_Id;
 110       Decl : out Node_Id;
 111       Fnam : out Entity_Id);
 112    --  Build function for Input attribute for record type or for an
 113    --  elementary type (the latter is used only in the case where a
 114    --  user defined Read routine is defined, since in other cases,
 115    --  Input calls the appropriate runtime library routine directly.
 116 
 117    procedure Build_Record_Or_Elementary_Output_Procedure
 118      (Loc  : Source_Ptr;
 119       Typ  : Entity_Id;
 120       Decl : out Node_Id;
 121       Pnam : out Entity_Id);
 122    --  Build procedure for Output attribute for record type or for an
 123    --  elementary type (the latter is used only in the case where a
 124    --  user defined Write routine is defined, since in other cases,
 125    --  Output calls the appropriate runtime library routine directly.
 126 
 127    procedure Build_Record_Read_Procedure
 128      (Loc  : Source_Ptr;
 129       Typ  : Entity_Id;
 130       Decl : out Node_Id;
 131       Pnam : out Entity_Id);
 132    --  Build procedure for Read attribute for record type
 133 
 134    procedure Build_Record_Write_Procedure
 135      (Loc  : Source_Ptr;
 136       Typ  : Entity_Id;
 137       Decl : out Node_Id;
 138       Pnam : out Entity_Id);
 139    --  Build procedure for Write attribute for record type
 140 
 141    procedure Build_Stream_Procedure
 142      (Loc  : Source_Ptr;
 143       Typ  : Entity_Id;
 144       Decl : out Node_Id;
 145       Pnam : Entity_Id;
 146       Stms : List_Id;
 147       Outp : Boolean);
 148    --  Called to build an array or record stream procedure. The first three
 149    --  arguments are the same as Build_Record_Or_Elementary_Output_Procedure.
 150    --  Stms is the list of statements for the body (the declaration list is
 151    --  always null), and Pnam is the name of the constructed procedure.
 152    --  Used by Exp_Dist to generate stream-oriented attributes for RACWs.
 153 
 154 end Exp_Strm;