Subversion Repositories tendra.SVN

Rev

Rev 2 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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