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/tendra4/src/utilities/sid/rule.h – Rev 2

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
/*
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
/*** rule.h --- Rule ADT.
32
 *
33
 ** Author: Steve Folkes <smf@hermes.mod.uk>
34
 *
35
 *** Commentary:
36
 *
37
 * This file specifies the interface to the SID rule, alternative and item
38
 * handling routines.  The actual implementations are spread across a number
39
 * of files, but are all logically part of the same file.  See the files named
40
 * in the declarations for more information.
41
 *
42
 *** Change Log:
43
 * $Log: rule.h,v $
44
 * Revision 1.1.1.1  1998/01/17  15:57:46  release
45
 * First version to be checked into rolling release.
46
 *
47
 * Revision 1.3  1994/12/15  09:58:58  smf
48
 * Brought into line with OSSG C Coding Standards Document, as per
49
 * "CR94_178.sid+tld-update".
50
 *
51
 * Revision 1.2  1994/08/22  09:37:29  smf
52
 * Fixed bug DR114:ids-too-long.
53
 *
54
 * Revision 1.1.1.1  1994/07/25  16:04:42  smf
55
 * Initial import of SID 1.8 non shared files.
56
 *
57
**/
58
 
59
/****************************************************************************/
60
 
61
#ifndef H_RULE
62
#define H_RULE
63
 
64
#include "os-interface.h"
65
#include "bitvec.h"
66
#include "dalloc.h"
67
#include "entry.h"
68
#include "entry-list.h"
69
#include "non-local.h"
70
#include "ostream.h"
71
#include "rstack.h"
72
#include "table.h"
73
#include "types.h"
74
 
75
/*--------------------------------------------------------------------------*/
76
 
77
#ifdef FS_NO_ENUM
78
typedef int DFSStateT, *DFSStateP;
79
#define DFS_UNTRACED	(0)
80
#define DFS_TRACING	(1)
81
#define DFS_CYCLING	(2)
82
#define DFS_TRACED	(3)
83
#else
84
typedef enum {
85
    DFS_UNTRACED,
86
    DFS_TRACING,
87
    DFS_CYCLING,
88
    DFS_TRACED
89
} DFSStateT, *DFSStateP;
90
#endif /* defined (FS_NO_ENUM) */
91
 
92
#ifdef FS_NO_ENUM
93
typedef int CycleTypeT, *CycleTypeP;
94
#define CT_LEFT		(0)
95
#define CT_TAIL		(1)
96
#define CT_ALL		(2)
97
#define CT_MUTATE	(3)
98
#else
99
typedef enum {
100
    CT_LEFT,
101
    CT_TAIL,
102
    CT_ALL,
103
    CT_MUTATE
104
} CycleTypeT, *CycleTypeP;
105
#endif /* defined (FS_NO_ENUM) */
106
 
107
typedef struct ItemT {
108
    struct ItemT	       *next;
109
    TypeTupleT			param;
110
    TypeTupleT			result;
111
    EntryTypeT			type;
112
    EntryP			entry;
113
    BoolT			inlinable;
114
    BoolT			tail_call;
115
} ItemT, *ItemP;
116
 
117
typedef struct AltT {
118
    struct AltT		       *next;
119
    TypeTupleT			names;
120
    BitVecT			first_set;
121
    ItemP			item_head;
122
    ItemP		       *item_tail;
123
} AltT, *AltP;
124
 
125
typedef struct RuleT {
126
    EntryP			entry;
127
    TypeTupleT			param;
128
    TypeTupleT			result;
129
    NonLocalListT		non_locals;
130
    NStringT			maximum_scope;
131
    BoolT			defined;
132
    BoolT			has_empty_alt;
133
    BoolT			required;
134
    EntryListT			reverse_list;
135
    DFSStateT			dfs_state;
136
    struct RuleT	       *next_in_root_list;
137
    struct RuleT	       *next_in_dfs;
138
    struct RuleT	       *next_in_reverse_dfs;
139
    BoolT			no_cycles;
140
    unsigned			cycle_index;
141
    BoolT			computed_first_set;
142
    BoolT			computing_first_set;
143
    BitVecT			first_set;
144
    EntryListT			predicate_first;
145
    BoolT			see_through;
146
    unsigned			priority;
147
    BoolT			factored;
148
    struct RuleT	       *tail_group;
149
    BoolT			being_inlined;
150
    BoolT			checked_for_inlining;
151
    EntryListT			call_list;
152
    struct RuleT	       *next_in_table;
153
    BitVecT			follow_set;
154
    EntryListT			predicate_follow;
155
    BoolT			started_follows;
156
    AltP			see_through_alt;
157
    BoolT			needs_function;
158
    BoolT			all_basics;
159
    SaveRStackT			rstack_state;
160
    SaveRStackT			non_local_state;
161
    BoolT			being_output;
162
    unsigned			start_label;
163
    unsigned			call_count;
164
    unsigned			end_label;
165
    BoolT			used_end_label;
166
    unsigned			next_label;
167
    unsigned			handler_label;
168
    BoolT			used_handler_label;
169
    AltP			handler;
170
    AltP			alt_head;
171
    AltP		       *alt_tail;
172
} RuleT, *RuleP;
173
 
174
typedef struct RuleListT {
175
    RuleP			head;
176
    RuleP		       *tail;
177
} RuleListT, *RuleListP;
178
 
179
typedef struct FactorClosureT {
180
    BitVecT			bitvec1;
181
    BitVecT			bitvec2;
182
    TableP			table;
183
    EntryP			predicate_id;
184
} FactorClosureT, *FactorClosureP;
185
 
186
typedef struct SimpClosureT {
187
    BoolT			did_inline;
188
    TableP			table;
189
} SimpClosureT, *SimpClosureP;
190
 
191
typedef struct ClashListT {
192
    struct ClashListT	       *next;
193
    RuleP			rule;
194
    AltP			alt;
195
    ItemP			item;
196
} ClashListT, *ClashListP;
197
 
198
/*--------------------------------------------------------------------------*/
199
 
200
/* Defined in "rule.c": */
201
extern RuleP			rule_create
202
	PROTO_S ((EntryP));
203
extern void			rule_reinit
204
	PROTO_S ((RuleP));
205
extern EntryP			rule_entry
206
	PROTO_S ((RuleP));
207
extern TypeTupleP		rule_param
208
	PROTO_S ((RuleP));
209
extern TypeTupleP		rule_result
210
	PROTO_S ((RuleP));
211
extern NonLocalListP		rule_non_locals
212
	PROTO_S ((RuleP));
213
extern NStringP			rule_maximum_scope
214
	PROTO_S ((RuleP));
215
extern BoolT			rule_is_defined
216
	PROTO_S ((RuleP));
217
extern void			rule_defined
218
	PROTO_S ((RuleP));
219
extern void			rule_add_alt
220
	PROTO_S ((RuleP, AltP));
221
extern BoolT			rule_has_empty_alt
222
	PROTO_S ((RuleP));
223
extern void			rule_add_empty_alt
224
	PROTO_S ((RuleP));
225
extern BoolT			rule_has_one_alt
226
	PROTO_S ((RuleP));
227
extern void			rule_compute_result_intersect
228
	PROTO_S ((RuleP));
229
extern void			rule_compute_minimal_dataflow
230
	PROTO_S ((RuleP, TypeTupleP));
231
extern BoolT			rule_is_required
232
	PROTO_S ((RuleP));
233
extern void			rule_required
234
	PROTO_S ((RuleP));
235
extern void			rule_compute_reverse_list
236
	PROTO_S ((RuleP, CycleTypeT));
237
extern void			rule_reinit_reverse_list
238
	PROTO_S ((RuleP));
239
extern EntryListP		rule_reverse_list
240
	PROTO_S ((RuleP));
241
extern void			rule_set_dfs_state
242
	PROTO_S ((RuleP, DFSStateT));
243
extern RuleP			rule_next_in_root_list
244
	PROTO_S ((RuleP));
245
extern void			rule_build_root_list
246
	PROTO_S ((EntryP, GenericP));
247
extern RuleP			rule_get_next_in_dfs
248
	PROTO_S ((RuleP));
249
extern void			rule_compute_dfs
250
	PROTO_S ((RuleP, CycleTypeT, RuleP *));
251
extern RuleP			rule_get_next_in_reverse_dfs
252
	PROTO_S ((RuleP));
253
extern RuleP		       *rule_next_in_reverse_dfs_ref
254
	PROTO_S ((RuleP));
255
extern void			rule_compute_reverse_dfs
256
	PROTO_S ((RuleP, RuleP, RuleP *));
257
extern BoolT			rule_has_no_cycles
258
	PROTO_S ((RuleP));
259
extern void			rule_no_cycles
260
	PROTO_S ((RuleP));
261
extern unsigned			rule_get_cycle_index
262
	PROTO_S ((RuleP));
263
extern void			rule_set_cycle_index
264
	PROTO_S ((RuleP, unsigned));
265
extern void			rule_reset_cycle_index
266
	PROTO_S ((RuleP));
267
extern BoolT			rule_has_computed_first_set
268
	PROTO_S ((RuleP));
269
extern void			rule_computed_first_set
270
	PROTO_S ((RuleP));
271
extern BoolT			rule_is_computing_first_set
272
	PROTO_S ((RuleP));
273
extern void			rule_computing_first_set
274
	PROTO_S ((RuleP));
275
extern BitVecP			rule_first_set
276
	PROTO_S ((RuleP));
277
extern EntryListP		rule_predicate_first
278
	PROTO_S ((RuleP));
279
extern BoolT			rule_is_see_through
280
	PROTO_S ((RuleP));
281
extern void			rule_see_through
282
	PROTO_S ((RuleP));
283
extern unsigned			rule_get_priority
284
	PROTO_S ((RuleP));
285
extern void			rule_set_priority
286
	PROTO_S ((RuleP, unsigned));
287
extern BoolT			rule_is_factored
288
	PROTO_S ((RuleP));
289
extern void			rule_factored
290
	PROTO_S ((RuleP));
291
extern RuleP			rule_get_tail_group
292
	PROTO_S ((RuleP));
293
extern void			rule_set_tail_group
294
	PROTO_S ((RuleP, RuleP));
295
extern BoolT			rule_is_being_inlined
296
	PROTO_S ((RuleP));
297
extern void			rule_being_inlined
298
	PROTO_S ((RuleP));
299
extern BoolT			rule_is_checked_for_inlining
300
	PROTO_S ((RuleP));
301
extern void			rule_checked_for_inlining
302
	PROTO_S ((RuleP));
303
extern EntryListP		rule_call_list
304
	PROTO_S ((RuleP));
305
extern RuleP			rule_get_next_in_table
306
	PROTO_S ((RuleP));
307
extern RuleP		       *rule_get_next_in_table_ref
308
	PROTO_S ((RuleP));
309
extern void			rule_set_next_in_table
310
	PROTO_S ((RuleP, RuleP));
311
extern BitVecP			rule_follow_set
312
	PROTO_S ((RuleP));
313
extern EntryListP		rule_predicate_follow
314
	PROTO_S ((RuleP));
315
extern BoolT			rule_has_started_follows
316
	PROTO_S ((RuleP));
317
extern void			rule_started_follows
318
	PROTO_S ((RuleP));
319
extern void			rule_set_see_through_alt
320
	PROTO_S ((RuleP, AltP));
321
extern AltP			rule_see_through_alt
322
	PROTO_S ((RuleP));
323
extern BoolT			rule_needs_function
324
	PROTO_S ((RuleP));
325
extern void			rule_will_need_function
326
	PROTO_S ((RuleP));
327
extern BoolT			rule_is_all_basics
328
	PROTO_S ((RuleP));
329
extern void			rule_all_basics
330
	PROTO_S ((RuleP));
331
extern SaveRStackP		rule_rstack_state
332
	PROTO_S ((RuleP));
333
extern SaveRStackP		rule_non_local_state
334
	PROTO_S ((RuleP));
335
extern BoolT			rule_is_being_output
336
	PROTO_S ((RuleP));
337
extern void			rule_being_output
338
	PROTO_S ((RuleP));
339
extern void			rule_not_being_output
340
	PROTO_S ((RuleP));
341
extern unsigned			rule_get_start_label
342
	PROTO_S ((RuleP));
343
extern void			rule_set_start_label
344
	PROTO_S ((RuleP, unsigned));
345
extern unsigned			rule_get_call_count
346
	PROTO_S ((RuleP));
347
extern void			rule_inc_call_count
348
	PROTO_S ((RuleP));
349
extern unsigned			rule_get_end_label
350
	PROTO_S ((RuleP));
351
extern void			rule_set_end_label
352
	PROTO_S ((RuleP, unsigned));
353
extern BoolT			rule_used_end_label
354
	PROTO_S ((RuleP));
355
extern unsigned			rule_get_next_label
356
	PROTO_S ((RuleP));
357
extern void			rule_set_next_label
358
	PROTO_S ((RuleP, unsigned));
359
extern unsigned			rule_get_handler_label
360
	PROTO_S ((RuleP));
361
extern void			rule_set_handler_label
362
	PROTO_S ((RuleP, unsigned));
363
extern BoolT			rule_used_handler_label
364
	PROTO_S ((RuleP));
365
extern AltP			rule_get_handler
366
	PROTO_S ((RuleP));
367
extern void			rule_set_handler
368
	PROTO_S ((RuleP, AltP));
369
extern AltP			rule_alt_head
370
	PROTO_S ((RuleP));
371
extern void			rule_renumber
372
	PROTO_S ((RuleP, BoolT, EntryP));
373
extern void			rule_iter_for_table
374
	PROTO_S ((RuleP, BoolT, void (*) (EntryP, GenericP), GenericP));
375
extern void			rule_deallocate
376
	PROTO_S ((RuleP));
377
 
378
extern void			write_rule_lhs
379
	PROTO_S ((OStreamP, RuleP));
380
extern void			write_rule
381
	PROTO_S ((OStreamP, RuleP));
382
 
383
extern void			rule_list_init
384
	PROTO_S ((RuleListP));
385
extern void			rule_list_append
386
	PROTO_S ((RuleListP, RuleP, RuleP *));
387
extern void			rule_list_terminate
388
	PROTO_S ((RuleListP));
389
extern RuleP			rule_list_head
390
	PROTO_S ((RuleListP));
391
 
392
/* Defined in "rule-check.c": */
393
extern void			rule_check_first_set
394
	PROTO_S ((EntryP, GenericP));
395
extern void			rule_compute_follow_set
396
	PROTO_S ((EntryP, GenericP));
397
extern void			rule_compute_see_through_alt
398
	PROTO_S ((EntryP, GenericP));
399
extern void			rule_compute_alt_first_sets
400
	PROTO_S ((EntryP, GenericP));
401
 
402
extern void			write_clashes
403
	PROTO_S ((OStreamP, ClashListP));
404
 
405
/* Defined in "rule-error.c": */
406
extern void			rule_compute_error_list
407
	PROTO_S ((EntryP, GenericP));
408
 
409
/* Defined in "rule-factor.c": */
410
extern void			rule_factor
411
	PROTO_S ((EntryP, GenericP));
412
extern void			rule_set_factor_limit
413
	PROTO_S ((unsigned));
414
 
415
/* Defined in "rule-firsts.c": */
416
extern void			rule_compute_first_set_1
417
	PROTO_S ((RuleP));
418
extern void			rule_compute_first_set
419
	PROTO_S ((EntryP, GenericP));
420
 
421
/* Defined in "rule-lre.c": */
422
extern void			rule_remove_left_cycle
423
	PROTO_S ((RuleP, EntryP, TableP));
424
 
425
/* Defined in "rule-mutate.c": */
426
extern void			rule_compute_mutations
427
	PROTO_S ((EntryP, GenericP));
428
 
429
/* Defined in "rule-name.c": */
430
extern void			rule_recompute_alt_names
431
	PROTO_S ((EntryP, GenericP));
432
 
433
/* Defined in "rule-simp.c": */
434
extern void			rule_remove_duplicates
435
	PROTO_S ((TableP, EntryP));
436
 
437
/* Defined in "rule-tail.c": */
438
extern void			rule_handle_tails
439
	PROTO_S ((RuleP));
440
extern void			rule_compute_all_basics
441
	PROTO_S ((EntryP, GenericP));
442
extern void			rule_compute_inlining
443
	PROTO_S ((EntryP, GenericP));
444
extern void			rule_compute_needed_functions
445
	PROTO_S ((EntryP, GenericP));
446
extern void			rule_handle_need_functions
447
	PROTO_S ((RuleP));
448
extern BoolT			rule_get_inline_tail_calls
449
	PROTO_S ((void));
450
extern void			rule_set_inline_tail_calls
451
	PROTO_S ((BoolT));
452
extern void			rule_set_inline_all_basics
453
	PROTO_S ((BoolT));
454
extern void			rule_set_inline_singles
455
	PROTO_S ((BoolT));
456
extern void			rule_set_inline_non_tail_calls
457
	PROTO_S ((BoolT));
458
extern void			rule_set_multiple_inlining
459
	PROTO_S ((BoolT));
460
 
461
/* Defined in "alt.c": */
462
extern AltP			alt_create
463
	PROTO_S ((void));
464
extern AltP			alt_create_merge
465
	PROTO_S ((ItemP, ItemP, TypeTransP, TableP));
466
extern AltP			alt_duplicate
467
	PROTO_S ((AltP));
468
extern BoolT			alt_less_than
469
	PROTO_S ((AltP, AltP));
470
extern BoolT			alt_equal
471
	PROTO_S ((AltP, AltP));
472
extern AltP			alt_next
473
	PROTO_S ((AltP));
474
extern AltP		       *alt_next_ref
475
	PROTO_S ((AltP));
476
extern void			alt_set_next
477
	PROTO_S ((AltP, AltP));
478
extern TypeTupleP		alt_names
479
	PROTO_S ((AltP));
480
extern BitVecP			alt_first_set
481
	PROTO_S ((AltP));
482
extern ItemP			alt_item_head
483
	PROTO_S ((AltP));
484
extern ItemP			alt_unlink_item_head
485
	PROTO_S ((AltP));
486
extern void			alt_add_item
487
	PROTO_S ((AltP, ItemP));
488
extern AltP			alt_deallocate
489
	PROTO_S ((AltP));
490
 
491
extern void			write_alt
492
	PROTO_S ((OStreamP, AltP));
493
extern void			write_alt_highlighting
494
	PROTO_S ((OStreamP, AltP, ItemP));
495
 
496
/* Defined in "item.c": */
497
extern ItemP			item_create
498
	PROTO_S ((EntryP));
499
extern ItemP			item_duplicate
500
	PROTO_S ((ItemP));
501
extern ItemP			item_duplicate_and_translate
502
	PROTO_S ((ItemP, TypeTransP, TableP));
503
extern void			item_translate_list
504
	PROTO_S ((ItemP, TypeBTransP));
505
extern void			item_to_predicate
506
	PROTO_S ((ItemP));
507
extern ItemP			item_next
508
	PROTO_S ((ItemP));
509
extern ItemP		       *item_next_ref
510
	PROTO_S ((ItemP));
511
extern void			item_set_next
512
	PROTO_S ((ItemP, ItemP));
513
extern EntryP			item_entry
514
	PROTO_S ((ItemP));
515
extern void			item_set_entry
516
	PROTO_S ((ItemP, EntryP));
517
extern EntryTypeT		item_type
518
	PROTO_S ((ItemP));
519
extern BoolT			item_is_rule
520
	PROTO_S ((ItemP));
521
extern BoolT			item_is_action
522
	PROTO_S ((ItemP));
523
extern BoolT			item_is_predicate
524
	PROTO_S ((ItemP));
525
extern BoolT			item_is_basic
526
	PROTO_S ((ItemP));
527
extern BoolT			item_is_rename
528
	PROTO_S ((ItemP));
529
extern TypeTupleP		item_param
530
	PROTO_S ((ItemP));
531
extern void			item_add_param
532
	PROTO_S ((ItemP, TypeTupleP));
533
extern TypeTupleP		item_result
534
	PROTO_S ((ItemP));
535
extern void			item_add_result
536
	PROTO_S ((ItemP, TypeTupleP));
537
extern BoolT			item_is_inlinable
538
	PROTO_S ((ItemP));
539
extern void			item_inlinable
540
	PROTO_S ((ItemP));
541
extern BoolT			item_is_tail_call
542
	PROTO_S ((ItemP));
543
extern void			item_tail_call
544
	PROTO_S ((ItemP));
545
extern BoolT			item_names_used_in_list
546
	PROTO_S ((ItemP, TypeTupleP));
547
extern void			item_compute_minimal_dataflow
548
	PROTO_S ((ItemP, TypeTupleP));
549
extern ItemP			item_deallocate
550
	PROTO_S ((ItemP));
551
 
552
extern void			write_item
553
	PROTO_S ((OStreamP, ItemP));
554
 
555
/*--------------------------------------------------------------------------*/
556
 
557
#ifdef FS_FAST
558
#define rule_entry(r) ((r)->entry)
559
#define rule_param(r) (&((r)->param))
560
#define rule_result(r) (&((r)->result))
561
#define rule_non_locals(r) (&((r)->non_locals))
562
#define rule_maximum_scope(r) (&((r)->maximum_scope))
563
#define rule_is_defined(r) ((r)->defined)
564
#define rule_defined(r) ((r)->defined = TRUE)
565
#define rule_has_empty_alt(r) ((r)->has_empty_alt)
566
#define rule_add_empty_alt(r) ((r)->has_empty_alt = TRUE)
567
#define rule_is_required(r) ((r)->required)
568
#define rule_required(r) ((r)->required = TRUE)
569
#define rule_reverse_list(r) (&((r)->reverse_list))
570
#define rule_set_dfs_state(r, s) ((r)->dfs_state = (s))
571
#define rule_next_in_root_list(r) ((r)->next_in_root_list)
572
#define rule_get_next_in_dfs(r) ((r)->next_in_dfs)
573
#define rule_get_next_in_reverse_dfs(r) ((r)->next_in_reverse_dfs)
574
#define rule_next_in_reverse_dfs_ref(r) (&((r)->next_in_reverse_dfs))
575
#define rule_has_no_cycles(r) ((r)->no_cycles)
576
#define rule_no_cycles(r) ((r)->no_cycles = TRUE)
577
#define rule_get_cycle_index(r) ((r)->cycle_index)
578
#define rule_set_cycle_index(r, i) ((r)->cycle_index = (i))
579
#define rule_reset_cycle_index(r) ((r)->cycle_index = 0)
580
#define rule_has_computed_first_set(r) ((r)->computed_first_set)
581
#define rule_computed_first_set(r) ((r)->computed_first_set = TRUE)
582
#define rule_is_computing_first_set(r) ((r)->computing_first_set)
583
#define rule_computing_first_set(r) ((r)->computing_first_set = TRUE)
584
#define rule_first_set(r) (&((r)->first_set))
585
#define rule_predicate_first(r) (&((r)->predicate_first))
586
#define rule_is_see_through(r) ((r)->see_through)
587
#define rule_see_through(r) ((r)->see_through = TRUE)
588
#define rule_get_priority(r) ((r)->priority)
589
#define rule_set_priority(r, p) ((r)->priority = (p))
590
#define rule_is_factored(r) ((r)->factored)
591
#define rule_factored(r) ((r)->factored = TRUE)
592
#define rule_get_tail_group(r) ((r)->tail_group)
593
#define rule_set_tail_group(r1, r2) ((r1)->tail_group = (r2))
594
#define rule_is_being_inlined(r) ((r)->being_inlined)
595
#define rule_being_inlined(r) ((r)->being_inlined = TRUE)
596
#define rule_is_checked_for_inlining(r) ((r)->checked_for_inlining)
597
#define rule_checked_for_inlining(r) ((r)->checked_for_inlining = TRUE)
598
#define rule_call_list(r) (&((r)->call_list))
599
#define rule_get_next_in_table(r) ((r)->next_in_table)
600
#define rule_get_next_in_table_ref(r) (&((r)->next_in_table))
601
#define rule_set_next_in_table(r1, r2) ((r1)->next_in_table = (r2))
602
#define rule_follow_set(r) (&((r)->follow_set))
603
#define rule_predicate_follow(r) (&((r)->predicate_follow))
604
#define rule_has_started_follows(r) ((r)->started_follows)
605
#define rule_started_follows(r) ((r)->started_follows = TRUE)
606
#define rule_set_all_action_alt(r, a) ((r)->all_action_alt = (a))
607
#define rule_all_action_alt(r) ((r)->all_action_alt)
608
#define rule_needs_function(r) ((r)->needs_function)
609
#define rule_will_need_function(r) ((r)->needs_function = TRUE)
610
#define rule_is_all_basics(r) ((r)->all_basics)
611
#define rule_all_basics(r) ((r)->all_basics = TRUE)
612
#define rule_rstack_state(r) (&((r)->rstack_state))
613
#define rule_non_local_state(r) (&((r)->non_local_state))
614
#define rule_is_being_output(r) ((r)->being_output)
615
#define rule_being_output(r) ((r)->being_output = TRUE)
616
#define rule_not_being_output(r) ((r)->being_output = FALSE)
617
#define rule_get_start_label(r) ((r)->start_label)
618
#define rule_set_start_label(r, l) ((r)->start_label = (l))
619
#define rule_get_call_count(r) ((r)->call_count)
620
#define rule_inc_call_count(r) ((r)->call_count ++)
621
#define rule_used_end_label(r) ((r)->used_end_label)
622
#define rule_get_next_label(r) ((r)->next_label)
623
#define rule_set_next_label(r, l) ((r)->next_label = (l))
624
#define rule_used_handler_label(r) ((r)->used_handler_label)
625
#define rule_get_handler(r) ((r)->handler)
626
#define rule_set_handler(r, a) ((r)->handler = (a))
627
#define rule_alt_head(r) ((r)->alt_head)
628
 
629
#define rule_list_terminate(r) ((*((r)->tail)) = NIL (RuleP))
630
#define rule_list_head(r) ((r)->head)
631
 
632
#define alt_next(a) ((a)->next)
633
#define alt_next_ref(a) (&((a)->next))
634
#define alt_set_next(a1, a2) ((a1)->next = (a2))
635
#define alt_names(a) (&((a)->names))
636
#define alt_first_set(a) (&((a)->first_set))
637
#define alt_item_head(a) ((a)->item_head)
638
 
639
#define item_next(i) ((i)->next)
640
#define item_next_ref(i) (&((i)->next))
641
#define item_set_next(i1, i2) ((i1)->next = (i2))
642
#define item_entry(i) ((i)->entry)
643
#define item_set_entry(i, e) ((i)->entry = (e))
644
#define item_type(i) ((i)->type)
645
#define item_is_rule(i) ((i)->type == ET_RULE)
646
#define item_is_action(i) ((i)->type == ET_ACTION)
647
#define item_is_predicate(i) ((i)->type == ET_PREDICATE)
648
#define item_is_basic(i) ((i)->type == ET_BASIC)
649
#define item_is_rename(i) ((i)->type == ET_RENAME)
650
#define item_param(i) (&((i)->param))
651
#define item_add_param(i, t) (types_assign (&((i)->param), (t)))
652
#define item_result(i) (&((i)->result))
653
#define item_add_result(i, t) (types_assign (&((i)->result), (t)))
654
#define item_is_inlinable(i) ((i)->inlinable)
655
#define item_inlinable(i) ((i)->inlinable = TRUE)
656
#define item_is_tail_call(i) ((i)->tail_call)
657
#define item_tail_call(i) ((i)->tail_call = TRUE)
658
#endif /* defined (FS_FAST) */
659
 
660
#endif /* !defined (H_RULE) */
661
 
662
/*
663
 * Local variables(smf):
664
 * eval: (include::add-path-entry "../os-interface" "../library")
665
 * eval: (include::add-path-entry "../generated")
666
 * end:
667
**/