Subversion Repositories tendra.SVN

Rev

Rev 5 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5 Rev 6
Line -... Line 1...
-
 
1
/*
-
 
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
 */
1
/*
31
/*
2
    		 Crown Copyright (c) 1997
32
    		 Crown Copyright (c) 1997
3
    
33
 
4
    This TenDRA(r) Computer Program is subject to Copyright
34
    This TenDRA(r) Computer Program is subject to Copyright
5
    owned by the United Kingdom Secretary of State for Defence
35
    owned by the United Kingdom Secretary of State for Defence
6
    acting through the Defence Evaluation and Research Agency
36
    acting through the Defence Evaluation and Research Agency
7
    (DERA).  It is made available to Recipients with a
37
    (DERA).  It is made available to Recipients with a
8
    royalty-free licence for its use, reproduction, transfer
38
    royalty-free licence for its use, reproduction, transfer
9
    to other parties and amendment for any purpose not excluding
39
    to other parties and amendment for any purpose not excluding
10
    product development provided that any such use et cetera
40
    product development provided that any such use et cetera
11
    shall be deemed to be acceptance of the following conditions:-
41
    shall be deemed to be acceptance of the following conditions:-
12
    
42
 
13
        (1) Its Recipients shall ensure that this Notice is
43
        (1) Its Recipients shall ensure that this Notice is
14
        reproduced upon any copies or amended versions of it;
44
        reproduced upon any copies or amended versions of it;
15
    
45
 
16
        (2) Any amended version of it shall be clearly marked to
46
        (2) Any amended version of it shall be clearly marked to
17
        show both the nature of and the organisation responsible
47
        show both the nature of and the organisation responsible
18
        for the relevant amendment or amendments;
48
        for the relevant amendment or amendments;
19
    
49
 
20
        (3) Its onward transfer from a recipient to another
50
        (3) Its onward transfer from a recipient to another
21
        party shall be deemed to be that party's acceptance of
51
        party shall be deemed to be that party's acceptance of
22
        these conditions;
52
        these conditions;
23
    
53
 
24
        (4) DERA gives no warranty or assurance as to its
54
        (4) DERA gives no warranty or assurance as to its
25
        quality or suitability for any purpose and DERA accepts
55
        quality or suitability for any purpose and DERA accepts
26
        no liability whatsoever in relation to any use to which
56
        no liability whatsoever in relation to any use to which
27
        it may be put.
57
        it may be put.
28
*/
58
*/
Line 142... Line 172...
142
} SaveNTransT, *SaveNTransP;
172
} SaveNTransT, *SaveNTransP;
143
 
173
 
144
/*--------------------------------------------------------------------------*/
174
/*--------------------------------------------------------------------------*/
145
 
175
 
146
/* Defined in "types.c": */
176
/* Defined in "types.c": */
147
extern void			types_init
177
extern void		types_init(TypeTupleP);
148
	PROTO_S ((TypeTupleP));
-
 
149
extern void			types_copy
-
 
150
	PROTO_S ((TypeTupleP, TypeTupleP));
178
extern void		types_copy(TypeTupleP, TypeTupleP);
151
extern void			types_copy_and_translate
179
extern void		types_copy_and_translate(TypeTupleP, TypeTupleP,
152
	PROTO_S ((TypeTupleP, TypeTupleP, TypeTransP, TableP));
180
						 TypeTransP, TableP);
153
extern void			types_append_copy
181
extern void		types_append_copy(TypeTupleP, TypeTupleP);
154
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
155
extern void			types_translate
-
 
156
	PROTO_S ((TypeTupleP, TypeBTransP));
182
extern void		types_translate(TypeTupleP, TypeBTransP);
157
extern void			types_renumber
-
 
158
	PROTO_S ((TypeTupleP, TypeNTransP));
183
extern void		types_renumber(TypeTupleP, TypeNTransP);
159
extern void			types_assign
-
 
160
	PROTO_S ((TypeTupleP, TypeTupleP));
184
extern void		types_assign(TypeTupleP, TypeTupleP);
161
extern EntryP			types_find_name_type
185
extern EntryP		types_find_name_type(TypeTupleP, EntryP, BoolT *);
162
	PROTO_S ((TypeTupleP, EntryP, BoolT *));
-
 
163
extern BoolT			types_mutated
186
extern BoolT		types_mutated(TypeTupleP, EntryP);
164
	PROTO_S ((TypeTupleP, EntryP));
-
 
165
extern BoolT			types_compute_mutations
187
extern BoolT		types_compute_mutations(TypeTupleP, TypeTupleP,
166
	PROTO_S ((TypeTupleP, TypeTupleP, TypeTupleP));
188
						TypeTupleP);
167
extern BoolT			types_compute_assign_mutations
189
extern BoolT		types_compute_assign_mutations(TypeTupleP, TypeTupleP);
168
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
169
extern void			types_propogate_mutations
190
extern void		types_propogate_mutations(TypeTupleP, TypeTupleP);
170
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
171
extern BoolT			types_contains
191
extern BoolT		types_contains(TypeTupleP, EntryP);
172
	PROTO_S ((TypeTupleP, EntryP));
-
 
173
extern BoolT			types_contains_names
192
extern BoolT		types_contains_names(TypeTupleP);
174
	PROTO_S ((TypeTupleP));
-
 
175
extern BoolT			types_contains_references
193
extern BoolT		types_contains_references(TypeTupleP);
176
	PROTO_S ((TypeTupleP));
-
 
177
extern void			types_make_references
194
extern void		types_make_references(TypeTupleP, TypeTupleP);
178
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
179
extern BoolT			types_intersect
195
extern BoolT		types_intersect(TypeTupleP, TypeTupleP);
180
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
181
extern void			types_inplace_intersection
196
extern void		types_inplace_intersection(TypeTupleP, TypeTupleP);
182
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
183
extern void			types_compute_intersection
197
extern void		types_compute_intersection(TypeTupleP, TypeTupleP,
184
	PROTO_S ((TypeTupleP, TypeTupleP, TypeTupleP));
-
 
185
extern CmpT			types_compare
198
						   TypeTupleP);
186
	PROTO_S ((TypeTupleP, TypeTupleP));
199
extern CmpT		types_compare(TypeTupleP, TypeTupleP);
187
extern BoolT			types_equal
-
 
188
	PROTO_S ((TypeTupleP, TypeTupleP));
200
extern BoolT		types_equal(TypeTupleP, TypeTupleP);
189
extern BoolT			types_equal_zero_tuple
201
extern BoolT		types_equal_zero_tuple(TypeTupleP);
190
	PROTO_S ((TypeTupleP));
-
 
191
extern BoolT			types_equal_names
202
extern BoolT		types_equal_names(TypeTupleP, TypeTupleP);
192
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
193
extern BoolT			types_equal_numbers
203
extern BoolT		types_equal_numbers(TypeTupleP, TypeTupleP);
194
	PROTO_S ((TypeTupleP, TypeTupleP));
-
 
195
extern void			types_add_name_and_type
204
extern void		types_add_name_and_type(TypeTupleP, EntryP, EntryP,
196
	PROTO_S ((TypeTupleP, EntryP, EntryP, BoolT));
205
						BoolT);
197
extern void			types_add_name_and_type_var
206
extern void		types_add_name_and_type_var(TypeTupleP, EntryP, EntryP);
198
	PROTO_S ((TypeTupleP, EntryP, EntryP));
-
 
199
extern BoolT			types_add_type
-
 
200
	PROTO_S ((TypeTupleP, TableP, NStringP, BoolT));
207
extern BoolT		types_add_type(TypeTupleP, TableP, NStringP, BoolT);
201
extern void			types_add_name
-
 
202
	PROTO_S ((TypeTupleP, TableP, NStringP, BoolT));
208
extern void		types_add_name(TypeTupleP, TableP, NStringP, BoolT);
203
extern BoolT			types_add_typed_name
209
extern BoolT		types_add_typed_name(TypeTupleP, TableP, NStringP,
204
	PROTO_S ((TypeTupleP, TableP, NStringP, NStringP, BoolT));
210
					     NStringP, BoolT);
205
extern void			types_add_name_entry
211
extern void		types_add_name_entry(TypeTupleP, EntryP);
206
	PROTO_S ((TypeTupleP, EntryP));
-
 
207
extern void			types_add_type_entry
212
extern void		types_add_type_entry(TypeTupleP, EntryP, BoolT);
208
	PROTO_S ((TypeTupleP, EntryP, BoolT));
-
 
209
extern void			types_add_new_names
-
 
210
	PROTO_S ((TypeTupleP, TypeTupleP, EntryP));
213
extern void		types_add_new_names(TypeTupleP, TypeTupleP, EntryP);
211
extern BoolT			types_disjoint_names
214
extern BoolT		types_disjoint_names(TypeTupleP);
212
	PROTO_S ((TypeTupleP));
-
 
213
extern BoolT			types_resolve
-
 
214
	PROTO_S ((TypeTupleP, TypeTupleP, TypeTupleP,
215
extern BoolT		types_resolve(TypeTupleP, TypeTupleP, TypeTupleP,
215
		  void (*) (KeyP, KeyP, unsigned), KeyP, unsigned));
216
				      void(*)(KeyP, KeyP, unsigned), KeyP,
216
extern BoolT			types_check_undefined
217
				      unsigned);
217
	PROTO_S ((TypeTupleP, TypeTupleP, TypeTupleP,
218
extern BoolT		types_check_undefined(TypeTupleP, TypeTupleP,
218
		  void (*) (KeyP, KeyP, unsigned), KeyP, unsigned));
-
 
219
extern BoolT			types_fillin_types
219
					      TypeTupleP,
220
	PROTO_S ((TypeTupleP, TypeTupleP));
220
					      void(*)(KeyP, KeyP, unsigned),
221
extern BoolT			types_fillin_names
221
					      KeyP, unsigned);
222
	PROTO_S ((TypeTupleP, TypeTupleP));
222
extern BoolT		types_fillin_types(TypeTupleP, TypeTupleP);
223
extern BoolT			types_check_names
223
extern BoolT		types_fillin_names(TypeTupleP, TypeTupleP);
224
	PROTO_S ((TypeTupleP, TypeTupleP));
224
extern BoolT		types_check_names(TypeTupleP, TypeTupleP);
225
extern void			types_check_used
-
 
226
	PROTO_S ((TypeTupleP, void (*) (GenericP, EntryP), GenericP));
225
extern void		types_check_used(TypeTupleP, void(*)(GenericP, EntryP),
227
extern void			types_unlink_used
226
					 GenericP);
228
	PROTO_S ((TypeTupleP, TypeTupleP));
227
extern void		types_unlink_used(TypeTupleP, TypeTupleP);
229
extern void			types_unlink_unused
228
extern void		types_unlink_unused(TypeTupleP, struct AltT *);
230
	PROTO_S ((TypeTupleP, struct AltT *));
229
extern void		types_compute_formal_renaming(TypeTupleP, TypeRTransP);
231
extern void			types_compute_formal_renaming
230
extern void		types_compute_formal_inlining(TypeTupleP, TypeTupleP,
232
	PROTO_S ((TypeTupleP, TypeRTransP));
231
						      TypeRTransP,
233
extern void			types_compute_formal_inlining
232
						      struct SaveRStackT *);
234
	PROTO_S ((TypeTupleP, TypeTupleP, TypeRTransP, struct SaveRStackT *));
233
extern void		types_compute_local_renaming(TypeTupleP, TypeTupleP,
235
extern void			types_compute_local_renaming
234
						     TypeRTransP,
236
	PROTO_S ((TypeTupleP, TypeTupleP, TypeRTransP, struct SaveRStackT *,
235
						     struct SaveRStackT *,
237
		  TableP));
236
						     TableP);
238
extern void			types_compute_param_from_trans
237
extern void		types_compute_param_from_trans(TypeTupleP, TypeNTransP,
239
	PROTO_S ((TypeTupleP, TypeNTransP, TypeNTransP, TypeTupleP));
238
						       TypeNTransP, TypeTupleP);
240
extern BoolT			types_check_shadowing
239
extern BoolT		types_check_shadowing(TypeTupleP, ScopeStackP,
241
	PROTO_S ((TypeTupleP, ScopeStackP, struct RuleT *));
240
					      struct RuleT *);
242
extern void			types_iter_for_table
241
extern void		types_iter_for_table(TypeTupleP,
243
	PROTO_S ((TypeTupleP, void (*) (EntryP, GenericP), GenericP));
242
					     void(*)(EntryP, GenericP),
244
extern void			types_destroy
243
					     GenericP);
245
	PROTO_S ((TypeTupleP));
244
extern void		types_destroy(TypeTupleP);
246
 
245
 
247
extern void			write_type_types
246
extern void		write_type_types(OStreamP, TypeTupleP);
248
	PROTO_S ((OStreamP, TypeTupleP));
-
 
249
extern void			write_type_names
-
 
250
	PROTO_S ((OStreamP, TypeTupleP, BoolT));
247
extern void		write_type_names(OStreamP, TypeTupleP, BoolT);
251
 
248
 
252
/*--------------------------------------------------------------------------*/
249
/*--------------------------------------------------------------------------*/
253
 
250
 
254
extern void			btrans_init
251
extern void		btrans_init(TypeBTransP);
255
	PROTO_S ((TypeBTransP));
-
 
256
extern void			btrans_add_translations
252
extern void		btrans_add_translations(TypeBTransP, TypeTupleP,
257
	PROTO_S ((TypeBTransP, TypeTupleP, TypeTupleP));
253
						TypeTupleP);
258
extern void			btrans_add_translation
254
extern void		btrans_add_translation(TypeBTransP, EntryP, EntryP);
259
	PROTO_S ((TypeBTransP, EntryP, EntryP));
-
 
260
extern void			btrans_generate_names
-
 
261
	PROTO_S ((TypeBTransP, TypeTupleP, TableP));
255
extern void		btrans_generate_names(TypeBTransP, TypeTupleP, TableP);
262
extern void			btrans_regenerate_names
256
extern void		btrans_regenerate_names(TypeBTransP, TypeTupleP);
263
	PROTO_S ((TypeBTransP, TypeTupleP));
-
 
264
extern struct ItemT	       *btrans_generate_non_pred_names
257
extern struct ItemT    *btrans_generate_non_pred_names(TypeBTransP, TypeTupleP,
265
	PROTO_S ((TypeBTransP, TypeTupleP, TypeTupleP, EntryP, TableP));
258
						       TypeTupleP, EntryP,
-
 
259
						       TableP);
266
extern struct ItemT	       *btrans_regen_non_pred_names
260
extern struct ItemT    *btrans_regen_non_pred_names(TypeBTransP, TypeTupleP,
267
	PROTO_S ((TypeBTransP, TypeTupleP, TypeTupleP, TableP));
261
						    TypeTupleP, TableP);
268
extern EntryP			btrans_get_translation
262
extern EntryP		btrans_get_translation(TypeBTransP, EntryP);
269
	PROTO_S ((TypeBTransP, EntryP));
-
 
270
extern void			btrans_destroy
263
extern void		btrans_destroy(TypeBTransP);
271
	PROTO_S ((TypeBTransP));
-
 
272
 
264
 
273
/*--------------------------------------------------------------------------*/
265
/*--------------------------------------------------------------------------*/
274
 
266
 
275
extern void			rtrans_init
267
extern void	rtrans_init(TypeRTransP);
276
	PROTO_S ((TypeRTransP));
-
 
277
extern void			rtrans_add_translation
-
 
278
	PROTO_S ((TypeRTransP, EntryP, EntryP, EntryP, BoolT));
268
extern void	rtrans_add_translation(TypeRTransP, EntryP, EntryP, EntryP,
279
extern EntryP			rtrans_get_translation
269
				       BoolT);
280
	PROTO_S ((TypeRTransP, EntryP, EntryP *, BoolT *));
270
extern EntryP	rtrans_get_translation(TypeRTransP, EntryP, EntryP *, BoolT *);
281
extern void			rtrans_apply_for_non_locals
271
extern void	rtrans_apply_for_non_locals(TypeRTransP,
282
	PROTO_S ((TypeRTransP, void (*) (EntryP, EntryP, GenericP), GenericP));
272
					    void(*)(EntryP, EntryP, GenericP),
283
extern void			rtrans_destroy
273
					    GenericP);
284
	PROTO_S ((TypeRTransP));
274
extern void	rtrans_destroy(TypeRTransP);
285
 
275
 
286
/*--------------------------------------------------------------------------*/
276
/*--------------------------------------------------------------------------*/
287
 
277
 
288
extern void			trans_init
-
 
289
	PROTO_S ((TypeTransP, TypeTupleP, TypeTupleP, struct AltT *));
278
extern void	trans_init(TypeTransP, TypeTupleP, TypeTupleP, struct AltT *);
290
extern void			trans_add_translations
-
 
291
	PROTO_S ((TypeTransP, TypeTupleP, TypeTupleP));
279
extern void	trans_add_translations(TypeTransP, TypeTupleP, TypeTupleP);
292
extern void			trans_add_translation
-
 
293
	PROTO_S ((TypeTransP, EntryP, EntryP));
280
extern void	trans_add_translation(TypeTransP, EntryP, EntryP);
294
extern void			trans_save_state
-
 
295
	PROTO_S ((TypeTransP, SaveTransP));
281
extern void	trans_save_state(TypeTransP, SaveTransP);
296
extern EntryP			trans_get_translation
282
extern EntryP	trans_get_translation(TypeTransP, EntryP);
297
	PROTO_S ((TypeTransP, EntryP));
-
 
298
extern void			trans_restore_state
283
extern void	trans_restore_state(TypeTransP, SaveTransP);
299
	PROTO_S ((TypeTransP, SaveTransP));
-
 
300
extern void			trans_destroy
284
extern void	trans_destroy(TypeTransP);
301
	PROTO_S ((TypeTransP));
-
 
302
 
285
 
303
/*--------------------------------------------------------------------------*/
286
/*--------------------------------------------------------------------------*/
304
 
287
 
305
extern void			ntrans_init
288
extern void	ntrans_init(TypeNTransP);
306
	PROTO_S ((TypeNTransP));
-
 
307
extern void			ntrans_save_state
-
 
308
	PROTO_S ((TypeNTransP, SaveNTransP));
289
extern void	ntrans_save_state(TypeNTransP, SaveNTransP);
309
extern unsigned			ntrans_get_translation
290
extern unsigned	ntrans_get_translation(TypeNTransP, EntryP);
310
	PROTO_S ((TypeNTransP, EntryP));
-
 
311
extern EntryP			ntrans_get_indirect_translation
291
extern EntryP	ntrans_get_indirect_translation(TypeNTransP, TypeNTransP,
312
	PROTO_S ((TypeNTransP, TypeNTransP, EntryP));
-
 
313
extern void			ntrans_restore_state
292
						EntryP);
314
	PROTO_S ((TypeNTransP, SaveNTransP));
293
extern void	ntrans_restore_state(TypeNTransP, SaveNTransP);
315
extern void			ntrans_destroy
294
extern void	ntrans_destroy(TypeNTransP);
316
	PROTO_S ((TypeNTransP));
-
 
317
 
295
 
318
/*--------------------------------------------------------------------------*/
296
/*--------------------------------------------------------------------------*/
319
 
297
 
320
#ifdef FS_FAST
298
#ifdef FS_FAST
321
#define types_equal_zero_tuple(t) ((t)->head == NIL (TypeTupleEntryP))
299
#define types_equal_zero_tuple(t)	((t)->head == NIL(TypeTupleEntryP))
322
#endif /* defined (FS_FAST) */
300
#endif /* defined (FS_FAST) */
323
 
301
 
324
#endif /* !defined (H_TYPES) */
302
#endif /* !defined (H_TYPES) */
325

303

326
/*
304
/*