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-2019, 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 28with Exp_Tss; use Exp_Tss; 29with Types; use Types; 30 31package 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 Use_Underlying : Boolean := True); 113 -- Build function for Input attribute for record type or for an elementary 114 -- type (the latter is used only in the case where a user-defined Read 115 -- routine is defined, since, in other cases, Input calls the appropriate 116 -- runtime library routine directly). The flag Use_Underlying controls 117 -- whether the base type or the underlying type of the base type of Typ is 118 -- used during construction. 119 120 procedure Build_Record_Or_Elementary_Output_Procedure 121 (Loc : Source_Ptr; 122 Typ : Entity_Id; 123 Decl : out Node_Id; 124 Pnam : out Entity_Id); 125 -- Build procedure for Output attribute for record type or for an 126 -- elementary type (the latter is used only in the case where a 127 -- user defined Write routine is defined, since in other cases, 128 -- Output calls the appropriate runtime library routine directly. 129 130 procedure Build_Record_Read_Procedure 131 (Loc : Source_Ptr; 132 Typ : Entity_Id; 133 Decl : out Node_Id; 134 Pnam : out Entity_Id); 135 -- Build procedure for Read attribute for record type 136 137 procedure Build_Record_Write_Procedure 138 (Loc : Source_Ptr; 139 Typ : Entity_Id; 140 Decl : out Node_Id; 141 Pnam : out Entity_Id); 142 -- Build procedure for Write attribute for record type 143 144 procedure Build_Stream_Procedure 145 (Loc : Source_Ptr; 146 Typ : Entity_Id; 147 Decl : out Node_Id; 148 Pnam : Entity_Id; 149 Stms : List_Id; 150 Outp : Boolean); 151 -- Called to build an array or record stream procedure. The first three 152 -- arguments are the same as Build_Record_Or_Elementary_Output_Procedure. 153 -- Stms is the list of statements for the body (the declaration list is 154 -- always null), and Pnam is the name of the constructed procedure. 155 -- Used by Exp_Dist to generate stream-oriented attributes for RACWs. 156 157end Exp_Strm; 158