111
|
1 ------------------------------------------------------------------------------
|
|
2 -- --
|
|
3 -- GNAT COMPILER COMPONENTS --
|
|
4 -- --
|
|
5 -- E X P _ S T R M --
|
|
6 -- --
|
|
7 -- S p e c --
|
|
8 -- --
|
131
|
9 -- Copyright (C) 1992-2018, Free Software Foundation, Inc. --
|
111
|
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 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
|
|
157 end Exp_Strm;
|