Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – tendra.SVN – Blame – /branches/algol60/src/utilities/sid/types.h – Rev 7

Subversion Repositories tendra.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
7 7u83 2
 * Copyright (c) 2002-2005 The TenDRA Project <http://www.tendra.org/>.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 * 1. Redistributions of source code must retain the above copyright notice,
9
 *    this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
11
 *    this list of conditions and the following disclaimer in the documentation
12
 *    and/or other materials provided with the distribution.
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
14
 *    may be used to endorse or promote products derived from this software
15
 *    without specific, prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 * $Id$
30
 */
31
/*
2 7u83 32
    		 Crown Copyright (c) 1997
7 7u83 33
 
2 7u83 34
    This TenDRA(r) Computer Program is subject to Copyright
35
    owned by the United Kingdom Secretary of State for Defence
36
    acting through the Defence Evaluation and Research Agency
37
    (DERA).  It is made available to Recipients with a
38
    royalty-free licence for its use, reproduction, transfer
39
    to other parties and amendment for any purpose not excluding
40
    product development provided that any such use et cetera
41
    shall be deemed to be acceptance of the following conditions:-
7 7u83 42
 
2 7u83 43
        (1) Its Recipients shall ensure that this Notice is
44
        reproduced upon any copies or amended versions of it;
7 7u83 45
 
2 7u83 46
        (2) Any amended version of it shall be clearly marked to
47
        show both the nature of and the organisation responsible
48
        for the relevant amendment or amendments;
7 7u83 49
 
2 7u83 50
        (3) Its onward transfer from a recipient to another
51
        party shall be deemed to be that party's acceptance of
52
        these conditions;
7 7u83 53
 
2 7u83 54
        (4) DERA gives no warranty or assurance as to its
55
        quality or suitability for any purpose and DERA accepts
56
        no liability whatsoever in relation to any use to which
57
        it may be put.
58
*/
59
 
60
 
61
/*** types.h --- Type ADTs.
62
 *
63
 ** Author: Steve Folkes <smf@hermes.mod.uk>
64
 *
65
 *** Commentary:
66
 *
67
 * See the file "types.c" for more information.
68
 *
69
 *** Change Log:
70
 * $Log: types.h,v $
71
 * Revision 1.1.1.1  1998/01/17  15:57:47  release
72
 * First version to be checked into rolling release.
73
 *
74
 * Revision 1.2  1994/12/15  09:59:17  smf
75
 * Brought into line with OSSG C Coding Standards Document, as per
76
 * "CR94_178.sid+tld-update".
77
 *
78
 * Revision 1.1.1.1  1994/07/25  16:04:45  smf
79
 * Initial import of SID 1.8 non shared files.
80
 *
81
**/
82
 
83
/****************************************************************************/
84
 
85
 
86
#ifndef H_TYPES
87
#define H_TYPES
88
 
89
#include "os-interface.h"
90
#include "dstring.h"
91
#include "entry-list.h"
92
#include "ostream.h"
93
#include "scope.h"
94
#include "table.h"
95
 
96
/* To avoid circularity: */
97
struct AltT;
98
struct ItemT;
99
struct SaveRStackT;
100
struct RuleT;
101
 
102
/*--------------------------------------------------------------------------*/
103
 
104
typedef struct TypeTupleEntryT {
105
    struct TypeTupleEntryT     *next;
106
    EntryP			type;
107
    EntryP			name;
108
    unsigned			number;
109
    BoolT			reference;
110
    BoolT			mutated;
111
    BoolT			assign;
112
} TypeTupleEntryT, *TypeTupleEntryP;
113
 
114
typedef struct TransT {
115
    struct TransT	       *next;
116
    EntryP			from;
117
    EntryP			to;
118
} TransT, *TransP;
119
 
120
typedef struct RTransT {
121
    struct RTransT	       *next;
122
    EntryP			from;
123
    EntryP			to;
124
    EntryP			type;
125
    BoolT			reference;
126
} RTransT, *RTransP;
127
 
128
typedef struct NTransT {
129
    struct NTransT	       *next;
130
    EntryP			from;
131
    unsigned			to;
132
} NTransT, *NTransP;
133
 
134
typedef struct TypeTupleT {
135
    TypeTupleEntryP		head;
136
    TypeTupleEntryP	       *tail;
137
} TypeTupleT, *TypeTupleP;
138
 
139
typedef struct TypeBTransT {
140
    TransP			head;
141
    TransP		       *tail;
142
} TypeBTransT, *TypeBTransP;
143
 
144
typedef struct SaveBTransT {
145
    TransP		       *last_ref;
146
} SaveBTransT, *SaveBTransP;
147
 
148
typedef struct TypeTransT {
149
    TransP			head;
150
    TransP		       *tail;
151
    EntryListT			used_names;
152
} TypeTransT, *TypeTransP;
153
 
154
typedef struct SaveTransT {
155
    TransP		       *last_ref;
156
} SaveTransT, *SaveTransP;
157
 
158
typedef struct TypeRTransT {
159
    RTransP			head;
160
    RTransP		       *tail;
161
} TypeRTransT, *TypeRTransP;
162
 
163
typedef struct TypeNTransT {
164
    unsigned			count;
165
    NTransP			head;
166
    NTransP		       *tail;
167
} TypeNTransT, *TypeNTransP;
168
 
169
typedef struct SaveNTransT {
170
    unsigned			last_count;
171
    NTransP		       *last_ref;
172
} SaveNTransT, *SaveNTransP;
173
 
174
/*--------------------------------------------------------------------------*/
175
 
176
/* Defined in "types.c": */
7 7u83 177
extern void		types_init(TypeTupleP);
178
extern void		types_copy(TypeTupleP, TypeTupleP);
179
extern void		types_copy_and_translate(TypeTupleP, TypeTupleP,
180
						 TypeTransP, TableP);
181
extern void		types_append_copy(TypeTupleP, TypeTupleP);
182
extern void		types_translate(TypeTupleP, TypeBTransP);
183
extern void		types_renumber(TypeTupleP, TypeNTransP);
184
extern void		types_assign(TypeTupleP, TypeTupleP);
185
extern EntryP		types_find_name_type(TypeTupleP, EntryP, BoolT *);
186
extern BoolT		types_mutated(TypeTupleP, EntryP);
187
extern BoolT		types_compute_mutations(TypeTupleP, TypeTupleP,
188
						TypeTupleP);
189
extern BoolT		types_compute_assign_mutations(TypeTupleP, TypeTupleP);
190
extern void		types_propogate_mutations(TypeTupleP, TypeTupleP);
191
extern BoolT		types_contains(TypeTupleP, EntryP);
192
extern BoolT		types_contains_names(TypeTupleP);
193
extern BoolT		types_contains_references(TypeTupleP);
194
extern void		types_make_references(TypeTupleP, TypeTupleP);
195
extern BoolT		types_intersect(TypeTupleP, TypeTupleP);
196
extern void		types_inplace_intersection(TypeTupleP, TypeTupleP);
197
extern void		types_compute_intersection(TypeTupleP, TypeTupleP,
198
						   TypeTupleP);
199
extern CmpT		types_compare(TypeTupleP, TypeTupleP);
200
extern BoolT		types_equal(TypeTupleP, TypeTupleP);
201
extern BoolT		types_equal_zero_tuple(TypeTupleP);
202
extern BoolT		types_equal_names(TypeTupleP, TypeTupleP);
203
extern BoolT		types_equal_numbers(TypeTupleP, TypeTupleP);
204
extern void		types_add_name_and_type(TypeTupleP, EntryP, EntryP,
205
						BoolT);
206
extern void		types_add_name_and_type_var(TypeTupleP, EntryP, EntryP);
207
extern BoolT		types_add_type(TypeTupleP, TableP, NStringP, BoolT);
208
extern void		types_add_name(TypeTupleP, TableP, NStringP, BoolT);
209
extern BoolT		types_add_typed_name(TypeTupleP, TableP, NStringP,
210
					     NStringP, BoolT);
211
extern void		types_add_name_entry(TypeTupleP, EntryP);
212
extern void		types_add_type_entry(TypeTupleP, EntryP, BoolT);
213
extern void		types_add_new_names(TypeTupleP, TypeTupleP, EntryP);
214
extern BoolT		types_disjoint_names(TypeTupleP);
215
extern BoolT		types_resolve(TypeTupleP, TypeTupleP, TypeTupleP,
216
				      void(*)(KeyP, KeyP, unsigned), KeyP,
217
				      unsigned);
218
extern BoolT		types_check_undefined(TypeTupleP, TypeTupleP,
219
					      TypeTupleP,
220
					      void(*)(KeyP, KeyP, unsigned),
221
					      KeyP, unsigned);
222
extern BoolT		types_fillin_types(TypeTupleP, TypeTupleP);
223
extern BoolT		types_fillin_names(TypeTupleP, TypeTupleP);
224
extern BoolT		types_check_names(TypeTupleP, TypeTupleP);
225
extern void		types_check_used(TypeTupleP, void(*)(GenericP, EntryP),
226
					 GenericP);
227
extern void		types_unlink_used(TypeTupleP, TypeTupleP);
228
extern void		types_unlink_unused(TypeTupleP, struct AltT *);
229
extern void		types_compute_formal_renaming(TypeTupleP, TypeRTransP);
230
extern void		types_compute_formal_inlining(TypeTupleP, TypeTupleP,
231
						      TypeRTransP,
232
						      struct SaveRStackT *);
233
extern void		types_compute_local_renaming(TypeTupleP, TypeTupleP,
234
						     TypeRTransP,
235
						     struct SaveRStackT *,
236
						     TableP);
237
extern void		types_compute_param_from_trans(TypeTupleP, TypeNTransP,
238
						       TypeNTransP, TypeTupleP);
239
extern BoolT		types_check_shadowing(TypeTupleP, ScopeStackP,
240
					      struct RuleT *);
241
extern void		types_iter_for_table(TypeTupleP,
242
					     void(*)(EntryP, GenericP),
243
					     GenericP);
244
extern void		types_destroy(TypeTupleP);
2 7u83 245
 
7 7u83 246
extern void		write_type_types(OStreamP, TypeTupleP);
247
extern void		write_type_names(OStreamP, TypeTupleP, BoolT);
2 7u83 248
 
249
/*--------------------------------------------------------------------------*/
250
 
7 7u83 251
extern void		btrans_init(TypeBTransP);
252
extern void		btrans_add_translations(TypeBTransP, TypeTupleP,
253
						TypeTupleP);
254
extern void		btrans_add_translation(TypeBTransP, EntryP, EntryP);
255
extern void		btrans_generate_names(TypeBTransP, TypeTupleP, TableP);
256
extern void		btrans_regenerate_names(TypeBTransP, TypeTupleP);
257
extern struct ItemT    *btrans_generate_non_pred_names(TypeBTransP, TypeTupleP,
258
						       TypeTupleP, EntryP,
259
						       TableP);
260
extern struct ItemT    *btrans_regen_non_pred_names(TypeBTransP, TypeTupleP,
261
						    TypeTupleP, TableP);
262
extern EntryP		btrans_get_translation(TypeBTransP, EntryP);
263
extern void		btrans_destroy(TypeBTransP);
2 7u83 264
 
265
/*--------------------------------------------------------------------------*/
266
 
7 7u83 267
extern void	rtrans_init(TypeRTransP);
268
extern void	rtrans_add_translation(TypeRTransP, EntryP, EntryP, EntryP,
269
				       BoolT);
270
extern EntryP	rtrans_get_translation(TypeRTransP, EntryP, EntryP *, BoolT *);
271
extern void	rtrans_apply_for_non_locals(TypeRTransP,
272
					    void(*)(EntryP, EntryP, GenericP),
273
					    GenericP);
274
extern void	rtrans_destroy(TypeRTransP);
2 7u83 275
 
276
/*--------------------------------------------------------------------------*/
277
 
7 7u83 278
extern void	trans_init(TypeTransP, TypeTupleP, TypeTupleP, struct AltT *);
279
extern void	trans_add_translations(TypeTransP, TypeTupleP, TypeTupleP);
280
extern void	trans_add_translation(TypeTransP, EntryP, EntryP);
281
extern void	trans_save_state(TypeTransP, SaveTransP);
282
extern EntryP	trans_get_translation(TypeTransP, EntryP);
283
extern void	trans_restore_state(TypeTransP, SaveTransP);
284
extern void	trans_destroy(TypeTransP);
2 7u83 285
 
286
/*--------------------------------------------------------------------------*/
287
 
7 7u83 288
extern void	ntrans_init(TypeNTransP);
289
extern void	ntrans_save_state(TypeNTransP, SaveNTransP);
290
extern unsigned	ntrans_get_translation(TypeNTransP, EntryP);
291
extern EntryP	ntrans_get_indirect_translation(TypeNTransP, TypeNTransP,
292
						EntryP);
293
extern void	ntrans_restore_state(TypeNTransP, SaveNTransP);
294
extern void	ntrans_destroy(TypeNTransP);
2 7u83 295
 
296
/*--------------------------------------------------------------------------*/
297
 
298
#ifdef FS_FAST
7 7u83 299
#define types_equal_zero_tuple(t)	((t)->head == NIL(TypeTupleEntryP))
2 7u83 300
#endif /* defined (FS_FAST) */
301
 
302
#endif /* !defined (H_TYPES) */
303
 
304
/*
305
 * Local variables(smf):
306
 * eval: (include::add-path-entry "../os-interface" "../library")
307
 * eval: (include::add-path-entry "../generated")
308
 * end:
309
**/