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 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 -- 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 154end Exp_Strm; 155