1 |
281 |
jeremybenn |
------------------------------------------------------------------------------
|
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;
|