Subversion Repositories tendra.SVN

Rev

Rev 2 | 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
    AUTOMATICALLY GENERATED FROM ALGEBRA calculus (VERSION 1.2)
32
    BY calculus (VERSION 1.2)
33
*/
34
 
35
#ifndef CALCULUS_H_INCLUDED
36
#define CALCULUS_H_INCLUDED
37
 
38
#ifndef calculus_NAME
39
#define calculus_NAME			"calculus"
40
#define calculus_VERSION		"1.2"
41
#define calculus_SPECIFICATION		0
42
#define calculus_IMPLEMENTATION		1
43
#endif
44
 
45
 
46
/* Prototype macros */
47
 
48
#ifndef CONST_S
49
#define CONST_S
50
#endif
51
 
52
 
53
/* Primitive types */
54
 
7 7u83 55
typedef unsigned long number;
56
typedef char * string;
2 7u83 57
 
58
 
59
/* Basic types */
60
 
61
typedef union calculus_tag {
7 7u83 62
    unsigned ag_tag;
63
    union calculus_tag *ag_ptr;
64
    unsigned ag_enum;
65
    unsigned long ag_long_enum;
66
    int ag_prim_int;
67
    number ag_prim_number;
68
    string ag_prim_string;
69
} calculus;
2 7u83 70
 
7 7u83 71
typedef calculus *calculus_PTR;
2 7u83 72
 
73
#ifndef calculus_DESTR_DEFINED
74
#define calculus_DESTR_DEFINED
7 7u83 75
typedef void (*DESTROYER)(calculus *, unsigned);
2 7u83 76
#endif
77
 
7 7u83 78
#define PTR(A)	calculus_PTR
79
#define LIST(A)	calculus_PTR
80
#define STACK(A)	calculus_PTR
81
#define SIZE(A)	int
2 7u83 82
 
83
 
84
/* Assertion macros */
85
 
86
#ifdef ASSERTS
7 7u83 87
extern calculus *check_null_calculus(calculus *, char *, int);
88
extern calculus *check_tag_calculus(calculus *, unsigned, char *, int);
89
extern calculus *check_tag_etc_calculus(calculus *, unsigned, unsigned, char *, int);
90
#define CHECK_NULL(P)\
91
    (check_null_calculus((P), __FILE__, __LINE__))
92
#define CHECK_TAG(P, N)\
93
    (check_tag_calculus((P), (unsigned)(N), __FILE__, __LINE__))
94
#define CHECK_TAG_ETC(P, L, U)\
95
    (check_tag_etc_calculus((P), (unsigned)(L), (unsigned)(U), __FILE__, __LINE__))
2 7u83 96
#else
7 7u83 97
#define CHECK_NULL(P)			(P)
98
#define CHECK_TAG(P, N)			(P)
99
#define CHECK_TAG_ETC(P, L, U)		(P)
2 7u83 100
#endif
101
 
102
 
103
/* Enumeration definitions */
104
 
105
 
106
 
107
/* Union type definitions */
108
 
7 7u83 109
typedef calculus *TYPE;
110
typedef calculus *COMMAND;
2 7u83 111
 
112
 
113
/* Structure declarations */
114
 
7 7u83 115
typedef struct alg_tag ALGEBRA_DEFN;
116
typedef struct cid_tag CLASS_ID;
117
typedef struct prim_tag PRIMITIVE;
118
typedef struct ec_tag ECONST;
119
typedef struct en_tag ENUM;
120
typedef struct ident_tag IDENTITY;
121
typedef struct cmp_tag COMPONENT;
122
typedef struct str_tag STRUCTURE;
123
typedef struct fld_tag FIELD;
124
typedef struct arg_tag ARGUMENT;
125
typedef struct map_tag MAP;
126
typedef struct un_tag UNION;
2 7u83 127
 
128
 
129
/* Identity type definitions */
130
 
7 7u83 131
typedef string name_string;
132
typedef int zero_int;
133
typedef PTR(int) int_P;
134
typedef PTR(number) number_P;
135
typedef PTR(string) string_P;
136
typedef PTR(ARGUMENT) ARGUMENT_P;
137
typedef PTR(CLASS_ID) CLASS_ID_P;
138
typedef PTR(CLASS_ID_P) CLASS_ID_P_P;
139
typedef PTR(COMPONENT) COMPONENT_P;
140
typedef PTR(ECONST) ECONST_P;
141
typedef PTR(ENUM) ENUM_P;
142
typedef PTR(FIELD) FIELD_P;
143
typedef PTR(IDENTITY) IDENTITY_P;
144
typedef PTR(MAP) MAP_P;
145
typedef PTR(PRIMITIVE) PRIMITIVE_P;
146
typedef PTR(STRUCTURE) STRUCTURE_P;
147
typedef PTR(TYPE) TYPE_P;
148
typedef PTR(TYPE_P) TYPE_P_P;
149
typedef PTR(UNION) UNION_P;
2 7u83 150
 
151
 
152
/* Structure definitions */
153
 
154
#ifndef calculus_STRUCT_DEFINED
155
#define calculus_STRUCT_DEFINED
156
 
157
struct alg_tag {
7 7u83 158
    string name;
159
    int major_no;
160
    int minor_no;
161
    LIST(PRIMITIVE_P) primitives;
162
    LIST(IDENTITY_P) identities;
163
    LIST(ENUM_P) enumerations;
164
    LIST(STRUCTURE_P) structures;
165
    LIST(UNION_P) unions;
166
    LIST(TYPE_P) types;
167
};
2 7u83 168
 
169
struct cid_tag {
7 7u83 170
    string name;
171
    string name_aux;
172
    int flag;
173
    name_string file;
174
    int line;
175
};
2 7u83 176
 
177
struct prim_tag {
7 7u83 178
    CLASS_ID_P id;
179
    string defn;
180
};
2 7u83 181
 
182
struct ec_tag {
7 7u83 183
    string name;
184
    number value;
185
};
2 7u83 186
 
187
struct en_tag {
7 7u83 188
    CLASS_ID_P id;
189
    LIST(ECONST_P) consts;
190
    number order;
191
    int lists;
192
};
2 7u83 193
 
194
struct ident_tag {
7 7u83 195
    CLASS_ID_P id;
196
    TYPE_P defn;
197
};
2 7u83 198
 
199
struct cmp_tag {
7 7u83 200
    string name;
201
    TYPE_P type;
202
    string value;
203
};
2 7u83 204
 
205
struct str_tag {
7 7u83 206
    CLASS_ID_P id;
207
    STRUCTURE_P base;
208
    LIST(COMPONENT_P) defn;
209
    zero_int output;
210
};
2 7u83 211
 
212
struct fld_tag {
7 7u83 213
    string name;
214
    int tag;
215
    int flag;
216
    int set;
217
    FIELD_P base;
218
    LIST(COMPONENT_P) defn;
219
};
2 7u83 220
 
221
struct arg_tag {
7 7u83 222
    string name;
223
    TYPE_P type;
224
};
2 7u83 225
 
226
struct map_tag {
7 7u83 227
    string name;
228
    int flag;
229
    TYPE_P ret_type;
230
    LIST(ARGUMENT_P) args;
231
};
2 7u83 232
 
233
struct un_tag {
7 7u83 234
    CLASS_ID_P id;
235
    UNION_P base;
236
    LIST(COMPONENT_P) s_defn;
237
    LIST(FIELD_P) u_defn;
238
    LIST(MAP_P) map;
239
    int no_fields;
240
};
2 7u83 241
 
242
#endif /* calculus_STRUCT_DEFINED */
243
 
244
 
245
/* Function declarations */
246
 
7 7u83 247
extern calculus *gen_calculus(unsigned);
248
extern void destroy_calculus(calculus *, unsigned);
249
extern void dummy_destroy_calculus (calculus *, unsigned);
250
extern void destroy_calculus_list (calculus *, unsigned);
251
extern calculus *append_calculus_list(calculus *, calculus *);
252
extern calculus *end_calculus_list(calculus *);
253
extern unsigned length_calculus_list(calculus *);
254
extern calculus *reverse_calculus_list(calculus *);
2 7u83 255
#ifdef calculus_IO_ROUTINES
7 7u83 256
extern unsigned crt_calculus_alias;
257
extern void set_calculus_alias(calculus *, unsigned);
258
extern calculus *find_calculus_alias(unsigned);
259
extern void clear_calculus_alias(void);
2 7u83 260
#endif
261
 
262
 
263
/* Run-time type information */
264
 
265
#ifndef GEN_calculus
7 7u83 266
#define GEN_calculus(A, B)		gen_calculus((unsigned)(A))
2 7u83 267
#endif
7 7u83 268
#define TYPEID_ptr			((unsigned)0)
269
#define TYPEID_list			((unsigned)1)
270
#define TYPEID_stack			((unsigned)2)
271
#define TYPEID_type			((unsigned)3)
272
#define TYPEID_cmd			((unsigned)4)
2 7u83 273
 
274
 
275
/* Definitions for pointers */
276
 
7 7u83 277
#define STEP_ptr(A, B)			(CHECK_NULL(A) + B)
278
#define SIZE_ptr(A)			1
279
#define NULL_ptr(A)			((calculus *)0)
280
#define IS_NULL_ptr(A)			((A) == 0)
281
#define EQ_ptr(A, B)			((A) == (B))
282
#define MAKE_ptr(A)			GEN_calculus((A), TYPEID_ptr)
283
#define DESTROY_ptr(A, B)		destroy_calculus((A), (unsigned)(B))
284
#define UNIQ_ptr(A)			GEN_calculus(1, TYPEID_ptr)
285
#define DESTROY_UNIQ_ptr(A)		destroy_calculus((A), (unsigned)1)
2 7u83 286
#ifdef calculus_IO_ROUTINES
7 7u83 287
#define VOIDSTAR_ptr(A)			((void *)(A))
2 7u83 288
#endif
289
 
7 7u83 290
#define COPY_ptr(A, B)			(CHECK_NULL(A)->ag_ptr = (B))
291
#define DEREF_ptr(A)			(CHECK_NULL(A)->ag_ptr)
292
#define CONS_ptr(A, B, C)\
2 7u83 293
    {\
7 7u83 294
	calculus *x0_ = GEN_calculus(2, TYPEID_list);\
295
	x0_[1].ag_ptr = (A);\
296
	x0_->ag_ptr = (B);\
297
	(C) = x0_;\
2 7u83 298
    }
299
 
7 7u83 300
#define UN_CONS_ptr(A, B, C)\
2 7u83 301
    {\
7 7u83 302
	calculus *x1_ = CHECK_NULL(C);\
303
	(A) = x1_[1].ag_ptr;\
304
	(B) = x1_->ag_ptr;\
2 7u83 305
    }
306
 
7 7u83 307
#define DESTROY_CONS_ptr(D, A, B, C)\
2 7u83 308
    {\
7 7u83 309
	calculus *x2_ = CHECK_NULL(C);\
310
	(A) = x2_[1].ag_ptr;\
311
	(B) = x2_->ag_ptr;\
312
	(D)(x2_, (unsigned)2);\
2 7u83 313
    }
314
 
7 7u83 315
#define PUSH_ptr(A, B)\
2 7u83 316
    {\
7 7u83 317
	calculus **r3_ = &(B);\
318
	calculus *x3_ = GEN_calculus(2, TYPEID_stack);\
319
	x3_[1].ag_ptr = (A);\
320
	x3_->ag_ptr = *r3_;\
321
	*r3_ = x3_;\
2 7u83 322
    }
323
 
7 7u83 324
#define POP_ptr(A, B)\
2 7u83 325
    {\
7 7u83 326
	calculus **r4_ = &(B);\
327
	calculus *x4_ = CHECK_NULL(*r4_);\
328
	(A) = x4_[1].ag_ptr;\
329
	*r4_ = x4_->ag_ptr;\
330
	destroy_calculus(x4_, (unsigned)2);\
2 7u83 331
    }
332
 
333
 
334
/* Definitions for lists */
335
 
7 7u83 336
#define HEAD_list(A)			(CHECK_NULL(A) + 1)
337
#define PTR_TAIL_list(A)		(CHECK_NULL(A))
338
#define TAIL_list(A)			(CHECK_NULL(A)->ag_ptr)
339
#define LENGTH_list(A)			length_calculus_list((A))
340
#define END_list(A)			end_calculus_list((A))
341
#define REVERSE_list(A)			reverse_calculus_list((A))
342
#define APPEND_list(A, B)		append_calculus_list((A), (B))
2 7u83 343
 
7 7u83 344
#define SIZE_list(A)			1
345
#define NULL_list(A)			((calculus *) 0)
346
#define IS_NULL_list(A)			((A) == 0)
347
#define EQ_list(A, B)			((A) == (B))
348
#define UNIQ_list(A)			GEN_calculus(1, TYPEID_list)
349
#define DESTROY_UNIQ_list(A)		destroy_calculus((A), (unsigned)1)
2 7u83 350
#ifdef calculus_IO_ROUTINES
7 7u83 351
#define VOIDSTAR_list(A)		((void *)(A))
2 7u83 352
#endif
353
 
7 7u83 354
#define DESTROY_list(A, B)\
2 7u83 355
    {\
7 7u83 356
	destroy_calculus_list((A), (unsigned)(B));\
2 7u83 357
    }
358
 
7 7u83 359
#define COPY_list(A, B)			(CHECK_NULL(A)->ag_ptr = (B))
360
#define DEREF_list(A)			(CHECK_NULL(A)->ag_ptr)
361
#define CONS_list(A, B, C)\
2 7u83 362
    {\
7 7u83 363
	calculus *x5_ = GEN_calculus(2, TYPEID_list);\
364
	x5_[1].ag_ptr = (A);\
365
	x5_->ag_ptr = (B);\
366
	(C) = x5_;\
2 7u83 367
    }
368
 
7 7u83 369
#define UN_CONS_list(A, B, C)\
2 7u83 370
    {\
7 7u83 371
	calculus *x6_ = CHECK_NULL(C);\
372
	(A) = x6_[1].ag_ptr;\
373
	(B) = x6_->ag_ptr;\
2 7u83 374
    }
375
 
7 7u83 376
#define DESTROY_CONS_list(D, A, B, C)\
2 7u83 377
    {\
7 7u83 378
	calculus *x7_ = CHECK_NULL(C);\
379
	(A) = x7_[1].ag_ptr;\
380
	(B) = x7_->ag_ptr;\
381
	(D)(x7_, (unsigned)2);\
2 7u83 382
    }
383
 
7 7u83 384
#define PUSH_list(A, B)\
2 7u83 385
    {\
7 7u83 386
	calculus **r8_ = &(B);\
387
	calculus *x8_ = GEN_calculus(2, TYPEID_stack);\
388
	x8_[1].ag_ptr = (A);\
389
	x8_->ag_ptr = *r8_;\
390
	*r8_ = x8_;\
2 7u83 391
    }
392
 
7 7u83 393
#define POP_list(A, B)\
2 7u83 394
    {\
7 7u83 395
	calculus **r9_ = &(B);\
396
	calculus *x9_ = CHECK_NULL(*r9_);\
397
	(A) = x9_[1].ag_ptr;\
398
	*r9_ = x9_->ag_ptr;\
399
	destroy_calculus(x9_, (unsigned)2);\
2 7u83 400
    }
401
 
402
 
403
/* Definitions for stacks */
404
 
7 7u83 405
#define SIZE_stack(A)			1
406
#define NULL_stack(A)			((calculus *) 0)
407
#define IS_NULL_stack(A)		((A) == 0)
408
#define STACK_list(A)			(A)
409
#define LIST_stack(A)			(A)
2 7u83 410
 
7 7u83 411
#define COPY_stack(A, B)		(CHECK_NULL(A)->ag_ptr = (B))
412
#define DEREF_stack(A)			(CHECK_NULL(A)->ag_ptr)
413
#define CONS_stack(A, B, C)\
2 7u83 414
    {\
7 7u83 415
	calculus *x10_ = GEN_calculus(2, TYPEID_list);\
416
	x10_[1].ag_ptr = (A);\
417
	x10_->ag_ptr = (B);\
418
	(C) = x10_;\
2 7u83 419
    }
420
 
7 7u83 421
#define UN_CONS_stack(A, B, C)\
2 7u83 422
    {\
7 7u83 423
	calculus *x11_ = CHECK_NULL(C);\
424
	(A) = x11_[1].ag_ptr;\
425
	(B) = x11_->ag_ptr;\
2 7u83 426
    }
427
 
7 7u83 428
#define DESTROY_CONS_stack(D, A, B, C)\
2 7u83 429
    {\
7 7u83 430
	calculus *x12_ = CHECK_NULL(C);\
431
	(A) = x12_[1].ag_ptr;\
432
	(B) = x12_->ag_ptr;\
433
	(D)(x12_, (unsigned)2);\
2 7u83 434
    }
435
 
7 7u83 436
#define PUSH_stack(A, B)\
2 7u83 437
    {\
7 7u83 438
	calculus **r13_ = &(B);\
439
	calculus *x13_ = GEN_calculus(2, TYPEID_stack);\
440
	x13_[1].ag_ptr = (A);\
441
	x13_->ag_ptr = *r13_;\
442
	*r13_ = x13_;\
2 7u83 443
    }
444
 
7 7u83 445
#define POP_stack(A, B)\
2 7u83 446
    {\
7 7u83 447
	calculus **r14_ = &(B);\
448
	calculus *x14_ = CHECK_NULL(*r14_);\
449
	(A) = x14_[1].ag_ptr;\
450
	*r14_ = x14_->ag_ptr;\
451
	destroy_calculus(x14_, (unsigned)2);\
2 7u83 452
    }
453
 
454
 
455
/* Definitions for sizes */
456
 
7 7u83 457
#define SCALE(A, B)			((A)*(int)(B))
2 7u83 458
 
459
 
460
/* Definitions for primitive int */
461
 
462
#define SIZE_int			1
463
 
7 7u83 464
#define COPY_int(A, B)			(CHECK_NULL(A)->ag_prim_int = (B))
465
#define DEREF_int(A)			(CHECK_NULL(A)->ag_prim_int)
466
#define CONS_int(A, B, C)\
2 7u83 467
    {\
7 7u83 468
	calculus *x15_ = GEN_calculus(2, TYPEID_list);\
469
	COPY_int(x15_ + 1, (A));\
470
	x15_->ag_ptr = (B);\
471
	(C) = x15_;\
2 7u83 472
    }
473
 
7 7u83 474
#define UN_CONS_int(A, B, C)\
2 7u83 475
    {\
7 7u83 476
	calculus *x16_ = CHECK_NULL(C);\
477
	(A) = DEREF_int(x16_ + 1);\
478
	(B) = x16_->ag_ptr;\
2 7u83 479
    }
480
 
7 7u83 481
#define DESTROY_CONS_int(D, A, B, C)\
2 7u83 482
    {\
7 7u83 483
	calculus *x17_ = CHECK_NULL(C);\
484
	(A) = DEREF_int(x17_ + 1);\
485
	(B) = x17_->ag_ptr;\
486
	(D)(x17_, (unsigned)2);\
2 7u83 487
    }
488
 
7 7u83 489
#define PUSH_int(A, B)\
2 7u83 490
    {\
7 7u83 491
	calculus **r18_ = &(B);\
492
	calculus *x18_ = GEN_calculus(2, TYPEID_stack);\
493
	COPY_int(x18_ + 1, (A));\
494
	x18_->ag_ptr = *r18_;\
495
	*r18_ = x18_;\
2 7u83 496
    }
497
 
7 7u83 498
#define POP_int(A, B)\
2 7u83 499
    {\
7 7u83 500
	calculus **r19_ = &(B);\
501
	calculus *x19_ = CHECK_NULL(*r19_);\
502
	(A) = DEREF_int(x19_ + 1);\
503
	*r19_ = x19_->ag_ptr;\
504
	destroy_calculus(x19_, (unsigned)2);\
2 7u83 505
    }
506
 
507
 
508
/* Definitions for primitive number */
509
 
510
#define SIZE_number			1
511
 
7 7u83 512
#define COPY_number(A, B)		(CHECK_NULL(A)->ag_prim_number = (B))
513
#define DEREF_number(A)			(CHECK_NULL(A)->ag_prim_number)
514
#define CONS_number(A, B, C)\
2 7u83 515
    {\
7 7u83 516
	calculus *x20_ = GEN_calculus(2, TYPEID_list);\
517
	COPY_number(x20_ + 1, (A));\
518
	x20_->ag_ptr = (B);\
519
	(C) = x20_;\
2 7u83 520
    }
521
 
7 7u83 522
#define UN_CONS_number(A, B, C)\
2 7u83 523
    {\
7 7u83 524
	calculus *x21_ = CHECK_NULL(C);\
525
	(A) = DEREF_number(x21_ + 1);\
526
	(B) = x21_->ag_ptr;\
2 7u83 527
    }
528
 
7 7u83 529
#define DESTROY_CONS_number(D, A, B, C)\
2 7u83 530
    {\
7 7u83 531
	calculus *x22_ = CHECK_NULL(C);\
532
	(A) = DEREF_number(x22_ + 1);\
533
	(B) = x22_->ag_ptr;\
534
	(D)(x22_, (unsigned)2);\
2 7u83 535
    }
536
 
7 7u83 537
#define PUSH_number(A, B)\
2 7u83 538
    {\
7 7u83 539
	calculus **r23_ = &(B);\
540
	calculus *x23_ = GEN_calculus(2, TYPEID_stack);\
541
	COPY_number(x23_ + 1, (A));\
542
	x23_->ag_ptr = *r23_;\
543
	*r23_ = x23_;\
2 7u83 544
    }
545
 
7 7u83 546
#define POP_number(A, B)\
2 7u83 547
    {\
7 7u83 548
	calculus **r24_ = &(B);\
549
	calculus *x24_ = CHECK_NULL(*r24_);\
550
	(A) = DEREF_number(x24_ + 1);\
551
	*r24_ = x24_->ag_ptr;\
552
	destroy_calculus(x24_, (unsigned)2);\
2 7u83 553
    }
554
 
555
 
556
/* Definitions for primitive string */
557
 
558
#define SIZE_string			1
559
 
7 7u83 560
#define COPY_string(A, B)		(CHECK_NULL(A)->ag_prim_string = (B))
561
#define DEREF_string(A)			(CHECK_NULL(A)->ag_prim_string)
562
#define CONS_string(A, B, C)\
2 7u83 563
    {\
7 7u83 564
	calculus *x25_ = GEN_calculus(2, TYPEID_list);\
565
	COPY_string(x25_ + 1, (A));\
566
	x25_->ag_ptr = (B);\
567
	(C) = x25_;\
2 7u83 568
    }
569
 
7 7u83 570
#define UN_CONS_string(A, B, C)\
2 7u83 571
    {\
7 7u83 572
	calculus *x26_ = CHECK_NULL(C);\
573
	(A) = DEREF_string(x26_ + 1);\
574
	(B) = x26_->ag_ptr;\
2 7u83 575
    }
576
 
7 7u83 577
#define DESTROY_CONS_string(D, A, B, C)\
2 7u83 578
    {\
7 7u83 579
	calculus *x27_ = CHECK_NULL(C);\
580
	(A) = DEREF_string(x27_ + 1);\
581
	(B) = x27_->ag_ptr;\
582
	(D)(x27_, (unsigned)2);\
2 7u83 583
    }
584
 
7 7u83 585
#define PUSH_string(A, B)\
2 7u83 586
    {\
7 7u83 587
	calculus **r28_ = &(B);\
588
	calculus *x28_ = GEN_calculus(2, TYPEID_stack);\
589
	COPY_string(x28_ + 1, (A));\
590
	x28_->ag_ptr = *r28_;\
591
	*r28_ = x28_;\
2 7u83 592
    }
593
 
7 7u83 594
#define POP_string(A, B)\
2 7u83 595
    {\
7 7u83 596
	calculus **r29_ = &(B);\
597
	calculus *x29_ = CHECK_NULL(*r29_);\
598
	(A) = DEREF_string(x29_ + 1);\
599
	*r29_ = x29_->ag_ptr;\
600
	destroy_calculus(x29_, (unsigned)2);\
2 7u83 601
    }
602
 
603
 
604
/* Definitions for structure ALGEBRA_DEFN */
605
 
7 7u83 606
#define alg_name(P)			((P) + 0)
607
#define alg_major_no(P)			((P) + 1)
608
#define alg_minor_no(P)			((P) + 2)
609
#define alg_primitives(P)		((P) + 3)
610
#define alg_identities(P)		((P) + 4)
611
#define alg_enumerations(P)		((P) + 5)
612
#define alg_structures(P)		((P) + 6)
613
#define alg_unions(P)			((P) + 7)
614
#define alg_types(P)			((P) + 8)
2 7u83 615
#define SIZE_alg			9
616
 
7 7u83 617
#define COPY_alg(A, B)\
2 7u83 618
    {\
7 7u83 619
	calculus *x30_ = CHECK_NULL(A);\
620
	ALGEBRA_DEFN y30_;\
621
	y30_ = (B);\
622
	COPY_string(x30_ + 0, y30_.name);\
623
	COPY_int(x30_ + 1, y30_.major_no);\
624
	COPY_int(x30_ + 2, y30_.minor_no);\
625
	COPY_list(x30_ + 3, y30_.primitives);\
626
	COPY_list(x30_ + 4, y30_.identities);\
627
	COPY_list(x30_ + 5, y30_.enumerations);\
628
	COPY_list(x30_ + 6, y30_.structures);\
629
	COPY_list(x30_ + 7, y30_.unions);\
630
	COPY_list(x30_ + 8, y30_.types);\
2 7u83 631
    }
632
 
7 7u83 633
#define DEREF_alg(A, B)\
2 7u83 634
    {\
7 7u83 635
	calculus *x31_ = CHECK_NULL(A);\
636
	ALGEBRA_DEFN *y31_ = &(B);\
637
	y31_->name = DEREF_string(x31_ + 0);\
638
	y31_->major_no = DEREF_int(x31_ + 1);\
639
	y31_->minor_no = DEREF_int(x31_ + 2);\
640
	y31_->primitives = DEREF_list(x31_ + 3);\
641
	y31_->identities = DEREF_list(x31_ + 4);\
642
	y31_->enumerations = DEREF_list(x31_ + 5);\
643
	y31_->structures = DEREF_list(x31_ + 6);\
644
	y31_->unions = DEREF_list(x31_ + 7);\
645
	y31_->types = DEREF_list(x31_ + 8);\
2 7u83 646
    }
647
 
7 7u83 648
#define MAKE_alg(name_, major_no_, minor_no_, primitives_, identities_, enumerations_, structures_, unions_, types_, alg_)\
2 7u83 649
    {\
7 7u83 650
	calculus *x32_ = CHECK_NULL(alg_);\
651
	COPY_string(x32_ + 0, (name_));\
652
	COPY_int(x32_ + 1, (major_no_));\
653
	COPY_int(x32_ + 2, (minor_no_));\
654
	COPY_list(x32_ + 3, (primitives_));\
655
	COPY_list(x32_ + 4, (identities_));\
656
	COPY_list(x32_ + 5, (enumerations_));\
657
	COPY_list(x32_ + 6, (structures_));\
658
	COPY_list(x32_ + 7, (unions_));\
659
	COPY_list(x32_ + 8, (types_));\
2 7u83 660
    }
661
 
7 7u83 662
#define CONS_alg(A, B, C)\
2 7u83 663
    {\
7 7u83 664
	calculus *x33_ = GEN_calculus(10, TYPEID_list);\
665
	COPY_alg(x33_ + 1, (A));\
666
	x33_->ag_ptr = (B);\
667
	(C) = x33_;\
2 7u83 668
    }
669
 
7 7u83 670
#define UN_CONS_alg(A, B, C)\
2 7u83 671
    {\
7 7u83 672
	calculus *x34_ = CHECK_NULL(C);\
673
	DEREF_alg(x34_ + 1, (A));\
674
	(B) = x34_->ag_ptr;\
2 7u83 675
    }
676
 
7 7u83 677
#define DESTROY_CONS_alg(D, A, B, C)\
2 7u83 678
    {\
7 7u83 679
	calculus *x35_ = CHECK_NULL(C);\
680
	DEREF_alg(x35_ + 1, (A));\
681
	(B) = x35_->ag_ptr;\
682
	(D)(x35_, (unsigned)10);\
2 7u83 683
    }
684
 
7 7u83 685
#define PUSH_alg(A, B)\
2 7u83 686
    {\
7 7u83 687
	calculus **r36_ = &(B);\
688
	calculus *x36_ = GEN_calculus(10, TYPEID_stack);\
689
	COPY_alg(x36_ + 1, (A));\
690
	x36_->ag_ptr = *r36_;\
691
	*r36_ = x36_;\
2 7u83 692
    }
693
 
7 7u83 694
#define POP_alg(A, B)\
2 7u83 695
    {\
7 7u83 696
	calculus **r37_ = &(B);\
697
	calculus *x37_ = CHECK_NULL(*r37_);\
698
	DEREF_alg(x37_ + 1, (A));\
699
	*r37_ = x37_->ag_ptr;\
700
	destroy_calculus(x37_, (unsigned)10);\
2 7u83 701
    }
702
 
703
 
704
/* Definitions for structure CLASS_ID */
705
 
7 7u83 706
#define cid_name(P)			((P) + 0)
707
#define cid_name_aux(P)			((P) + 1)
708
#define cid_flag(P)			((P) + 2)
709
#define cid_file(P)			((P) + 3)
710
#define cid_line(P)			((P) + 4)
2 7u83 711
#define SIZE_cid			5
712
 
7 7u83 713
#define COPY_cid(A, B)\
2 7u83 714
    {\
7 7u83 715
	calculus *x38_ = CHECK_NULL(A);\
716
	CLASS_ID y38_;\
717
	y38_ = (B);\
718
	COPY_string(x38_ + 0, y38_.name);\
719
	COPY_string(x38_ + 1, y38_.name_aux);\
720
	COPY_int(x38_ + 2, y38_.flag);\
721
	COPY_string(x38_ + 3, y38_.file);\
722
	COPY_int(x38_ + 4, y38_.line);\
2 7u83 723
    }
724
 
7 7u83 725
#define DEREF_cid(A, B)\
2 7u83 726
    {\
7 7u83 727
	calculus *x39_ = CHECK_NULL(A);\
728
	CLASS_ID *y39_ = &(B);\
729
	y39_->name = DEREF_string(x39_ + 0);\
730
	y39_->name_aux = DEREF_string(x39_ + 1);\
731
	y39_->flag = DEREF_int(x39_ + 2);\
732
	y39_->file = DEREF_string(x39_ + 3);\
733
	y39_->line = DEREF_int(x39_ + 4);\
2 7u83 734
    }
735
 
7 7u83 736
#define MAKE_cid(name_, name_aux_, flag_, file_, line_, cid_)\
2 7u83 737
    {\
7 7u83 738
	calculus *x40_ = CHECK_NULL(cid_);\
739
	COPY_string(x40_ + 0, (name_));\
740
	COPY_string(x40_ + 1, (name_aux_));\
741
	COPY_int(x40_ + 2, (flag_));\
742
	COPY_string(x40_ + 3, (file_));\
743
	COPY_int(x40_ + 4, (line_));\
2 7u83 744
    }
745
 
7 7u83 746
#define CONS_cid(A, B, C)\
2 7u83 747
    {\
7 7u83 748
	calculus *x41_ = GEN_calculus(6, TYPEID_list);\
749
	COPY_cid(x41_ + 1, (A));\
750
	x41_->ag_ptr = (B);\
751
	(C) = x41_;\
2 7u83 752
    }
753
 
7 7u83 754
#define UN_CONS_cid(A, B, C)\
2 7u83 755
    {\
7 7u83 756
	calculus *x42_ = CHECK_NULL(C);\
757
	DEREF_cid(x42_ + 1, (A));\
758
	(B) = x42_->ag_ptr;\
2 7u83 759
    }
760
 
7 7u83 761
#define DESTROY_CONS_cid(D, A, B, C)\
2 7u83 762
    {\
7 7u83 763
	calculus *x43_ = CHECK_NULL(C);\
764
	DEREF_cid(x43_ + 1, (A));\
765
	(B) = x43_->ag_ptr;\
766
	(D)(x43_, (unsigned)6);\
2 7u83 767
    }
768
 
7 7u83 769
#define PUSH_cid(A, B)\
2 7u83 770
    {\
7 7u83 771
	calculus **r44_ = &(B);\
772
	calculus *x44_ = GEN_calculus(6, TYPEID_stack);\
773
	COPY_cid(x44_ + 1, (A));\
774
	x44_->ag_ptr = *r44_;\
775
	*r44_ = x44_;\
2 7u83 776
    }
777
 
7 7u83 778
#define POP_cid(A, B)\
2 7u83 779
    {\
7 7u83 780
	calculus **r45_ = &(B);\
781
	calculus *x45_ = CHECK_NULL(*r45_);\
782
	DEREF_cid(x45_ + 1, (A));\
783
	*r45_ = x45_->ag_ptr;\
784
	destroy_calculus(x45_, (unsigned)6);\
2 7u83 785
    }
786
 
787
 
788
/* Definitions for structure PRIMITIVE */
789
 
7 7u83 790
#define prim_id(P)			((P) + 0)
791
#define prim_defn(P)			((P) + 1)
2 7u83 792
#define SIZE_prim			2
793
 
7 7u83 794
#define COPY_prim(A, B)\
2 7u83 795
    {\
7 7u83 796
	calculus *x46_ = CHECK_NULL(A);\
797
	PRIMITIVE y46_;\
798
	y46_ = (B);\
799
	COPY_ptr(x46_ + 0, y46_.id);\
800
	COPY_string(x46_ + 1, y46_.defn);\
2 7u83 801
    }
802
 
7 7u83 803
#define DEREF_prim(A, B)\
2 7u83 804
    {\
7 7u83 805
	calculus *x47_ = CHECK_NULL(A);\
806
	PRIMITIVE *y47_ = &(B);\
807
	y47_->id = DEREF_ptr(x47_ + 0);\
808
	y47_->defn = DEREF_string(x47_ + 1);\
2 7u83 809
    }
810
 
7 7u83 811
#define MAKE_prim(id_, defn_, prim_)\
2 7u83 812
    {\
7 7u83 813
	calculus *x48_ = CHECK_NULL(prim_);\
814
	COPY_ptr(x48_ + 0, (id_));\
815
	COPY_string(x48_ + 1, (defn_));\
2 7u83 816
    }
817
 
7 7u83 818
#define CONS_prim(A, B, C)\
2 7u83 819
    {\
7 7u83 820
	calculus *x49_ = GEN_calculus(3, TYPEID_list);\
821
	COPY_prim(x49_ + 1, (A));\
822
	x49_->ag_ptr = (B);\
823
	(C) = x49_;\
2 7u83 824
    }
825
 
7 7u83 826
#define UN_CONS_prim(A, B, C)\
2 7u83 827
    {\
7 7u83 828
	calculus *x50_ = CHECK_NULL(C);\
829
	DEREF_prim(x50_ + 1, (A));\
830
	(B) = x50_->ag_ptr;\
2 7u83 831
    }
832
 
7 7u83 833
#define DESTROY_CONS_prim(D, A, B, C)\
2 7u83 834
    {\
7 7u83 835
	calculus *x51_ = CHECK_NULL(C);\
836
	DEREF_prim(x51_ + 1, (A));\
837
	(B) = x51_->ag_ptr;\
838
	(D)(x51_, (unsigned)3);\
2 7u83 839
    }
840
 
7 7u83 841
#define PUSH_prim(A, B)\
2 7u83 842
    {\
7 7u83 843
	calculus **r52_ = &(B);\
844
	calculus *x52_ = GEN_calculus(3, TYPEID_stack);\
845
	COPY_prim(x52_ + 1, (A));\
846
	x52_->ag_ptr = *r52_;\
847
	*r52_ = x52_;\
2 7u83 848
    }
849
 
7 7u83 850
#define POP_prim(A, B)\
2 7u83 851
    {\
7 7u83 852
	calculus **r53_ = &(B);\
853
	calculus *x53_ = CHECK_NULL(*r53_);\
854
	DEREF_prim(x53_ + 1, (A));\
855
	*r53_ = x53_->ag_ptr;\
856
	destroy_calculus(x53_, (unsigned)3);\
2 7u83 857
    }
858
 
859
 
860
/* Definitions for structure ECONST */
861
 
7 7u83 862
#define ec_name(P)			((P) + 0)
863
#define ec_value(P)			((P) + 1)
2 7u83 864
#define SIZE_ec				2
865
 
7 7u83 866
#define COPY_ec(A, B)\
2 7u83 867
    {\
7 7u83 868
	calculus *x54_ = CHECK_NULL(A);\
869
	ECONST y54_;\
870
	y54_ = (B);\
871
	COPY_string(x54_ + 0, y54_.name);\
872
	COPY_number(x54_ + 1, y54_.value);\
2 7u83 873
    }
874
 
7 7u83 875
#define DEREF_ec(A, B)\
2 7u83 876
    {\
7 7u83 877
	calculus *x55_ = CHECK_NULL(A);\
878
	ECONST *y55_ = &(B);\
879
	y55_->name = DEREF_string(x55_ + 0);\
880
	y55_->value = DEREF_number(x55_ + 1);\
2 7u83 881
    }
882
 
7 7u83 883
#define MAKE_ec(name_, value_, ec_)\
2 7u83 884
    {\
7 7u83 885
	calculus *x56_ = CHECK_NULL(ec_);\
886
	COPY_string(x56_ + 0, (name_));\
887
	COPY_number(x56_ + 1, (value_));\
2 7u83 888
    }
889
 
7 7u83 890
#define CONS_ec(A, B, C)\
2 7u83 891
    {\
7 7u83 892
	calculus *x57_ = GEN_calculus(3, TYPEID_list);\
893
	COPY_ec(x57_ + 1, (A));\
894
	x57_->ag_ptr = (B);\
895
	(C) = x57_;\
2 7u83 896
    }
897
 
7 7u83 898
#define UN_CONS_ec(A, B, C)\
2 7u83 899
    {\
7 7u83 900
	calculus *x58_ = CHECK_NULL(C);\
901
	DEREF_ec(x58_ + 1, (A));\
902
	(B) = x58_->ag_ptr;\
2 7u83 903
    }
904
 
7 7u83 905
#define DESTROY_CONS_ec(D, A, B, C)\
2 7u83 906
    {\
7 7u83 907
	calculus *x59_ = CHECK_NULL(C);\
908
	DEREF_ec(x59_ + 1, (A));\
909
	(B) = x59_->ag_ptr;\
910
	(D)(x59_, (unsigned)3);\
2 7u83 911
    }
912
 
7 7u83 913
#define PUSH_ec(A, B)\
2 7u83 914
    {\
7 7u83 915
	calculus **r60_ = &(B);\
916
	calculus *x60_ = GEN_calculus(3, TYPEID_stack);\
917
	COPY_ec(x60_ + 1, (A));\
918
	x60_->ag_ptr = *r60_;\
919
	*r60_ = x60_;\
2 7u83 920
    }
921
 
7 7u83 922
#define POP_ec(A, B)\
2 7u83 923
    {\
7 7u83 924
	calculus **r61_ = &(B);\
925
	calculus *x61_ = CHECK_NULL(*r61_);\
926
	DEREF_ec(x61_ + 1, (A));\
927
	*r61_ = x61_->ag_ptr;\
928
	destroy_calculus(x61_, (unsigned)3);\
2 7u83 929
    }
930
 
931
 
932
/* Definitions for structure ENUM */
933
 
7 7u83 934
#define en_id(P)			((P) + 0)
935
#define en_consts(P)			((P) + 1)
936
#define en_order(P)			((P) + 2)
937
#define en_lists(P)			((P) + 3)
2 7u83 938
#define SIZE_en				4
939
 
7 7u83 940
#define COPY_en(A, B)\
2 7u83 941
    {\
7 7u83 942
	calculus *x62_ = CHECK_NULL(A);\
943
	ENUM y62_;\
944
	y62_ = (B);\
945
	COPY_ptr(x62_ + 0, y62_.id);\
946
	COPY_list(x62_ + 1, y62_.consts);\
947
	COPY_number(x62_ + 2, y62_.order);\
948
	COPY_int(x62_ + 3, y62_.lists);\
2 7u83 949
    }
950
 
7 7u83 951
#define DEREF_en(A, B)\
2 7u83 952
    {\
7 7u83 953
	calculus *x63_ = CHECK_NULL(A);\
954
	ENUM *y63_ = &(B);\
955
	y63_->id = DEREF_ptr(x63_ + 0);\
956
	y63_->consts = DEREF_list(x63_ + 1);\
957
	y63_->order = DEREF_number(x63_ + 2);\
958
	y63_->lists = DEREF_int(x63_ + 3);\
2 7u83 959
    }
960
 
7 7u83 961
#define MAKE_en(id_, consts_, order_, lists_, en_)\
2 7u83 962
    {\
7 7u83 963
	calculus *x64_ = CHECK_NULL(en_);\
964
	COPY_ptr(x64_ + 0, (id_));\
965
	COPY_list(x64_ + 1, (consts_));\
966
	COPY_number(x64_ + 2, (order_));\
967
	COPY_int(x64_ + 3, (lists_));\
2 7u83 968
    }
969
 
7 7u83 970
#define CONS_en(A, B, C)\
2 7u83 971
    {\
7 7u83 972
	calculus *x65_ = GEN_calculus(5, TYPEID_list);\
973
	COPY_en(x65_ + 1, (A));\
974
	x65_->ag_ptr = (B);\
975
	(C) = x65_;\
2 7u83 976
    }
977
 
7 7u83 978
#define UN_CONS_en(A, B, C)\
2 7u83 979
    {\
7 7u83 980
	calculus *x66_ = CHECK_NULL(C);\
981
	DEREF_en(x66_ + 1, (A));\
982
	(B) = x66_->ag_ptr;\
2 7u83 983
    }
984
 
7 7u83 985
#define DESTROY_CONS_en(D, A, B, C)\
2 7u83 986
    {\
7 7u83 987
	calculus *x67_ = CHECK_NULL(C);\
988
	DEREF_en(x67_ + 1, (A));\
989
	(B) = x67_->ag_ptr;\
990
	(D)(x67_, (unsigned)5);\
2 7u83 991
    }
992
 
7 7u83 993
#define PUSH_en(A, B)\
2 7u83 994
    {\
7 7u83 995
	calculus **r68_ = &(B);\
996
	calculus *x68_ = GEN_calculus(5, TYPEID_stack);\
997
	COPY_en(x68_ + 1, (A));\
998
	x68_->ag_ptr = *r68_;\
999
	*r68_ = x68_;\
2 7u83 1000
    }
1001
 
7 7u83 1002
#define POP_en(A, B)\
2 7u83 1003
    {\
7 7u83 1004
	calculus **r69_ = &(B);\
1005
	calculus *x69_ = CHECK_NULL(*r69_);\
1006
	DEREF_en(x69_ + 1, (A));\
1007
	*r69_ = x69_->ag_ptr;\
1008
	destroy_calculus(x69_, (unsigned)5);\
2 7u83 1009
    }
1010
 
1011
 
1012
/* Definitions for structure IDENTITY */
1013
 
7 7u83 1014
#define ident_id(P)			((P) + 0)
1015
#define ident_defn(P)			((P) + 1)
2 7u83 1016
#define SIZE_ident			2
1017
 
7 7u83 1018
#define COPY_ident(A, B)\
2 7u83 1019
    {\
7 7u83 1020
	calculus *x70_ = CHECK_NULL(A);\
1021
	IDENTITY y70_;\
1022
	y70_ = (B);\
1023
	COPY_ptr(x70_ + 0, y70_.id);\
1024
	COPY_ptr(x70_ + 1, y70_.defn);\
2 7u83 1025
    }
1026
 
7 7u83 1027
#define DEREF_ident(A, B)\
2 7u83 1028
    {\
7 7u83 1029
	calculus *x71_ = CHECK_NULL(A);\
1030
	IDENTITY *y71_ = &(B);\
1031
	y71_->id = DEREF_ptr(x71_ + 0);\
1032
	y71_->defn = DEREF_ptr(x71_ + 1);\
2 7u83 1033
    }
1034
 
7 7u83 1035
#define MAKE_ident(id_, defn_, ident_)\
2 7u83 1036
    {\
7 7u83 1037
	calculus *x72_ = CHECK_NULL(ident_);\
1038
	COPY_ptr(x72_ + 0, (id_));\
1039
	COPY_ptr(x72_ + 1, (defn_));\
2 7u83 1040
    }
1041
 
7 7u83 1042
#define CONS_ident(A, B, C)\
2 7u83 1043
    {\
7 7u83 1044
	calculus *x73_ = GEN_calculus(3, TYPEID_list);\
1045
	COPY_ident(x73_ + 1, (A));\
1046
	x73_->ag_ptr = (B);\
1047
	(C) = x73_;\
2 7u83 1048
    }
1049
 
7 7u83 1050
#define UN_CONS_ident(A, B, C)\
2 7u83 1051
    {\
7 7u83 1052
	calculus *x74_ = CHECK_NULL(C);\
1053
	DEREF_ident(x74_ + 1, (A));\
1054
	(B) = x74_->ag_ptr;\
2 7u83 1055
    }
1056
 
7 7u83 1057
#define DESTROY_CONS_ident(D, A, B, C)\
2 7u83 1058
    {\
7 7u83 1059
	calculus *x75_ = CHECK_NULL(C);\
1060
	DEREF_ident(x75_ + 1, (A));\
1061
	(B) = x75_->ag_ptr;\
1062
	(D)(x75_, (unsigned)3);\
2 7u83 1063
    }
1064
 
7 7u83 1065
#define PUSH_ident(A, B)\
2 7u83 1066
    {\
7 7u83 1067
	calculus **r76_ = &(B);\
1068
	calculus *x76_ = GEN_calculus(3, TYPEID_stack);\
1069
	COPY_ident(x76_ + 1, (A));\
1070
	x76_->ag_ptr = *r76_;\
1071
	*r76_ = x76_;\
2 7u83 1072
    }
1073
 
7 7u83 1074
#define POP_ident(A, B)\
2 7u83 1075
    {\
7 7u83 1076
	calculus **r77_ = &(B);\
1077
	calculus *x77_ = CHECK_NULL(*r77_);\
1078
	DEREF_ident(x77_ + 1, (A));\
1079
	*r77_ = x77_->ag_ptr;\
1080
	destroy_calculus(x77_, (unsigned)3);\
2 7u83 1081
    }
1082
 
1083
 
1084
/* Definitions for structure COMPONENT */
1085
 
7 7u83 1086
#define cmp_name(P)			((P) + 0)
1087
#define cmp_type(P)			((P) + 1)
1088
#define cmp_value(P)			((P) + 2)
2 7u83 1089
#define SIZE_cmp			3
1090
 
7 7u83 1091
#define COPY_cmp(A, B)\
2 7u83 1092
    {\
7 7u83 1093
	calculus *x78_ = CHECK_NULL(A);\
1094
	COMPONENT y78_;\
1095
	y78_ = (B);\
1096
	COPY_string(x78_ + 0, y78_.name);\
1097
	COPY_ptr(x78_ + 1, y78_.type);\
1098
	COPY_string(x78_ + 2, y78_.value);\
2 7u83 1099
    }
1100
 
7 7u83 1101
#define DEREF_cmp(A, B)\
2 7u83 1102
    {\
7 7u83 1103
	calculus *x79_ = CHECK_NULL(A);\
1104
	COMPONENT *y79_ = &(B);\
1105
	y79_->name = DEREF_string(x79_ + 0);\
1106
	y79_->type = DEREF_ptr(x79_ + 1);\
1107
	y79_->value = DEREF_string(x79_ + 2);\
2 7u83 1108
    }
1109
 
7 7u83 1110
#define MAKE_cmp(name_, type_, value_, cmp_)\
2 7u83 1111
    {\
7 7u83 1112
	calculus *x80_ = CHECK_NULL(cmp_);\
1113
	COPY_string(x80_ + 0, (name_));\
1114
	COPY_ptr(x80_ + 1, (type_));\
1115
	COPY_string(x80_ + 2, (value_));\
2 7u83 1116
    }
1117
 
7 7u83 1118
#define CONS_cmp(A, B, C)\
2 7u83 1119
    {\
7 7u83 1120
	calculus *x81_ = GEN_calculus(4, TYPEID_list);\
1121
	COPY_cmp(x81_ + 1, (A));\
1122
	x81_->ag_ptr = (B);\
1123
	(C) = x81_;\
2 7u83 1124
    }
1125
 
7 7u83 1126
#define UN_CONS_cmp(A, B, C)\
2 7u83 1127
    {\
7 7u83 1128
	calculus *x82_ = CHECK_NULL(C);\
1129
	DEREF_cmp(x82_ + 1, (A));\
1130
	(B) = x82_->ag_ptr;\
2 7u83 1131
    }
1132
 
7 7u83 1133
#define DESTROY_CONS_cmp(D, A, B, C)\
2 7u83 1134
    {\
7 7u83 1135
	calculus *x83_ = CHECK_NULL(C);\
1136
	DEREF_cmp(x83_ + 1, (A));\
1137
	(B) = x83_->ag_ptr;\
1138
	(D)(x83_, (unsigned)4);\
2 7u83 1139
    }
1140
 
7 7u83 1141
#define PUSH_cmp(A, B)\
2 7u83 1142
    {\
7 7u83 1143
	calculus **r84_ = &(B);\
1144
	calculus *x84_ = GEN_calculus(4, TYPEID_stack);\
1145
	COPY_cmp(x84_ + 1, (A));\
1146
	x84_->ag_ptr = *r84_;\
1147
	*r84_ = x84_;\
2 7u83 1148
    }
1149
 
7 7u83 1150
#define POP_cmp(A, B)\
2 7u83 1151
    {\
7 7u83 1152
	calculus **r85_ = &(B);\
1153
	calculus *x85_ = CHECK_NULL(*r85_);\
1154
	DEREF_cmp(x85_ + 1, (A));\
1155
	*r85_ = x85_->ag_ptr;\
1156
	destroy_calculus(x85_, (unsigned)4);\
2 7u83 1157
    }
1158
 
1159
 
1160
/* Definitions for structure STRUCTURE */
1161
 
7 7u83 1162
#define str_id(P)			((P) + 0)
1163
#define str_base(P)			((P) + 1)
1164
#define str_defn(P)			((P) + 2)
1165
#define str_output(P)			((P) + 3)
2 7u83 1166
#define SIZE_str			4
1167
 
7 7u83 1168
#define COPY_str(A, B)\
2 7u83 1169
    {\
7 7u83 1170
	calculus *x86_ = CHECK_NULL(A);\
1171
	STRUCTURE y86_;\
1172
	y86_ = (B);\
1173
	COPY_ptr(x86_ + 0, y86_.id);\
1174
	COPY_ptr(x86_ + 1, y86_.base);\
1175
	COPY_list(x86_ + 2, y86_.defn);\
1176
	COPY_int(x86_ + 3, y86_.output);\
2 7u83 1177
    }
1178
 
7 7u83 1179
#define DEREF_str(A, B)\
2 7u83 1180
    {\
7 7u83 1181
	calculus *x87_ = CHECK_NULL(A);\
1182
	STRUCTURE *y87_ = &(B);\
1183
	y87_->id = DEREF_ptr(x87_ + 0);\
1184
	y87_->base = DEREF_ptr(x87_ + 1);\
1185
	y87_->defn = DEREF_list(x87_ + 2);\
1186
	y87_->output = DEREF_int(x87_ + 3);\
2 7u83 1187
    }
1188
 
7 7u83 1189
#define MAKE_str(id_, base_, defn_, output_, str_)\
2 7u83 1190
    {\
7 7u83 1191
	calculus *x88_ = CHECK_NULL(str_);\
1192
	COPY_ptr(x88_ + 0, (id_));\
1193
	COPY_ptr(x88_ + 1, (base_));\
1194
	COPY_list(x88_ + 2, (defn_));\
1195
	COPY_int(x88_ + 3, (output_));\
2 7u83 1196
    }
1197
 
7 7u83 1198
#define CONS_str(A, B, C)\
2 7u83 1199
    {\
7 7u83 1200
	calculus *x89_ = GEN_calculus(5, TYPEID_list);\
1201
	COPY_str(x89_ + 1, (A));\
1202
	x89_->ag_ptr = (B);\
1203
	(C) = x89_;\
2 7u83 1204
    }
1205
 
7 7u83 1206
#define UN_CONS_str(A, B, C)\
2 7u83 1207
    {\
7 7u83 1208
	calculus *x90_ = CHECK_NULL(C);\
1209
	DEREF_str(x90_ + 1, (A));\
1210
	(B) = x90_->ag_ptr;\
2 7u83 1211
    }
1212
 
7 7u83 1213
#define DESTROY_CONS_str(D, A, B, C)\
2 7u83 1214
    {\
7 7u83 1215
	calculus *x91_ = CHECK_NULL(C);\
1216
	DEREF_str(x91_ + 1, (A));\
1217
	(B) = x91_->ag_ptr;\
1218
	(D)(x91_, (unsigned)5);\
2 7u83 1219
    }
1220
 
7 7u83 1221
#define PUSH_str(A, B)\
2 7u83 1222
    {\
7 7u83 1223
	calculus **r92_ = &(B);\
1224
	calculus *x92_ = GEN_calculus(5, TYPEID_stack);\
1225
	COPY_str(x92_ + 1, (A));\
1226
	x92_->ag_ptr = *r92_;\
1227
	*r92_ = x92_;\
2 7u83 1228
    }
1229
 
7 7u83 1230
#define POP_str(A, B)\
2 7u83 1231
    {\
7 7u83 1232
	calculus **r93_ = &(B);\
1233
	calculus *x93_ = CHECK_NULL(*r93_);\
1234
	DEREF_str(x93_ + 1, (A));\
1235
	*r93_ = x93_->ag_ptr;\
1236
	destroy_calculus(x93_, (unsigned)5);\
2 7u83 1237
    }
1238
 
1239
 
1240
/* Definitions for structure FIELD */
1241
 
7 7u83 1242
#define fld_name(P)			((P) + 0)
1243
#define fld_tag(P)			((P) + 1)
1244
#define fld_flag(P)			((P) + 2)
1245
#define fld_set(P)			((P) + 3)
1246
#define fld_base(P)			((P) + 4)
1247
#define fld_defn(P)			((P) + 5)
2 7u83 1248
#define SIZE_fld			6
1249
 
7 7u83 1250
#define COPY_fld(A, B)\
2 7u83 1251
    {\
7 7u83 1252
	calculus *x94_ = CHECK_NULL(A);\
1253
	FIELD y94_;\
1254
	y94_ = (B);\
1255
	COPY_string(x94_ + 0, y94_.name);\
1256
	COPY_int(x94_ + 1, y94_.tag);\
1257
	COPY_int(x94_ + 2, y94_.flag);\
1258
	COPY_int(x94_ + 3, y94_.set);\
1259
	COPY_ptr(x94_ + 4, y94_.base);\
1260
	COPY_list(x94_ + 5, y94_.defn);\
2 7u83 1261
    }
1262
 
7 7u83 1263
#define DEREF_fld(A, B)\
2 7u83 1264
    {\
7 7u83 1265
	calculus *x95_ = CHECK_NULL(A);\
1266
	FIELD *y95_ = &(B);\
1267
	y95_->name = DEREF_string(x95_ + 0);\
1268
	y95_->tag = DEREF_int(x95_ + 1);\
1269
	y95_->flag = DEREF_int(x95_ + 2);\
1270
	y95_->set = DEREF_int(x95_ + 3);\
1271
	y95_->base = DEREF_ptr(x95_ + 4);\
1272
	y95_->defn = DEREF_list(x95_ + 5);\
2 7u83 1273
    }
1274
 
7 7u83 1275
#define MAKE_fld(name_, tag_, flag_, set_, base_, defn_, fld_)\
2 7u83 1276
    {\
7 7u83 1277
	calculus *x96_ = CHECK_NULL(fld_);\
1278
	COPY_string(x96_ + 0, (name_));\
1279
	COPY_int(x96_ + 1, (tag_));\
1280
	COPY_int(x96_ + 2, (flag_));\
1281
	COPY_int(x96_ + 3, (set_));\
1282
	COPY_ptr(x96_ + 4, (base_));\
1283
	COPY_list(x96_ + 5, (defn_));\
2 7u83 1284
    }
1285
 
7 7u83 1286
#define CONS_fld(A, B, C)\
2 7u83 1287
    {\
7 7u83 1288
	calculus *x97_ = GEN_calculus(7, TYPEID_list);\
1289
	COPY_fld(x97_ + 1, (A));\
1290
	x97_->ag_ptr = (B);\
1291
	(C) = x97_;\
2 7u83 1292
    }
1293
 
7 7u83 1294
#define UN_CONS_fld(A, B, C)\
2 7u83 1295
    {\
7 7u83 1296
	calculus *x98_ = CHECK_NULL(C);\
1297
	DEREF_fld(x98_ + 1, (A));\
1298
	(B) = x98_->ag_ptr;\
2 7u83 1299
    }
1300
 
7 7u83 1301
#define DESTROY_CONS_fld(D, A, B, C)\
2 7u83 1302
    {\
7 7u83 1303
	calculus *x99_ = CHECK_NULL(C);\
1304
	DEREF_fld(x99_ + 1, (A));\
1305
	(B) = x99_->ag_ptr;\
1306
	(D)(x99_, (unsigned)7);\
2 7u83 1307
    }
1308
 
7 7u83 1309
#define PUSH_fld(A, B)\
2 7u83 1310
    {\
7 7u83 1311
	calculus **r100_ = &(B);\
1312
	calculus *x100_ = GEN_calculus(7, TYPEID_stack);\
1313
	COPY_fld(x100_ + 1, (A));\
1314
	x100_->ag_ptr = *r100_;\
1315
	*r100_ = x100_;\
2 7u83 1316
    }
1317
 
7 7u83 1318
#define POP_fld(A, B)\
2 7u83 1319
    {\
7 7u83 1320
	calculus **r101_ = &(B);\
1321
	calculus *x101_ = CHECK_NULL(*r101_);\
1322
	DEREF_fld(x101_ + 1, (A));\
1323
	*r101_ = x101_->ag_ptr;\
1324
	destroy_calculus(x101_, (unsigned)7);\
2 7u83 1325
    }
1326
 
1327
 
1328
/* Definitions for structure ARGUMENT */
1329
 
7 7u83 1330
#define arg_name(P)			((P) + 0)
1331
#define arg_type(P)			((P) + 1)
2 7u83 1332
#define SIZE_arg			2
1333
 
7 7u83 1334
#define COPY_arg(A, B)\
2 7u83 1335
    {\
7 7u83 1336
	calculus *x102_ = CHECK_NULL(A);\
1337
	ARGUMENT y102_;\
1338
	y102_ = (B);\
1339
	COPY_string(x102_ + 0, y102_.name);\
1340
	COPY_ptr(x102_ + 1, y102_.type);\
2 7u83 1341
    }
1342
 
7 7u83 1343
#define DEREF_arg(A, B)\
2 7u83 1344
    {\
7 7u83 1345
	calculus *x103_ = CHECK_NULL(A);\
1346
	ARGUMENT *y103_ = &(B);\
1347
	y103_->name = DEREF_string(x103_ + 0);\
1348
	y103_->type = DEREF_ptr(x103_ + 1);\
2 7u83 1349
    }
1350
 
7 7u83 1351
#define MAKE_arg(name_, type_, arg_)\
2 7u83 1352
    {\
7 7u83 1353
	calculus *x104_ = CHECK_NULL(arg_);\
1354
	COPY_string(x104_ + 0, (name_));\
1355
	COPY_ptr(x104_ + 1, (type_));\
2 7u83 1356
    }
1357
 
7 7u83 1358
#define CONS_arg(A, B, C)\
2 7u83 1359
    {\
7 7u83 1360
	calculus *x105_ = GEN_calculus(3, TYPEID_list);\
1361
	COPY_arg(x105_ + 1, (A));\
1362
	x105_->ag_ptr = (B);\
1363
	(C) = x105_;\
2 7u83 1364
    }
1365
 
7 7u83 1366
#define UN_CONS_arg(A, B, C)\
2 7u83 1367
    {\
7 7u83 1368
	calculus *x106_ = CHECK_NULL(C);\
1369
	DEREF_arg(x106_ + 1, (A));\
1370
	(B) = x106_->ag_ptr;\
2 7u83 1371
    }
1372
 
7 7u83 1373
#define DESTROY_CONS_arg(D, A, B, C)\
2 7u83 1374
    {\
7 7u83 1375
	calculus *x107_ = CHECK_NULL(C);\
1376
	DEREF_arg(x107_ + 1, (A));\
1377
	(B) = x107_->ag_ptr;\
1378
	(D)(x107_, (unsigned)3);\
2 7u83 1379
    }
1380
 
7 7u83 1381
#define PUSH_arg(A, B)\
2 7u83 1382
    {\
7 7u83 1383
	calculus **r108_ = &(B);\
1384
	calculus *x108_ = GEN_calculus(3, TYPEID_stack);\
1385
	COPY_arg(x108_ + 1, (A));\
1386
	x108_->ag_ptr = *r108_;\
1387
	*r108_ = x108_;\
2 7u83 1388
    }
1389
 
7 7u83 1390
#define POP_arg(A, B)\
2 7u83 1391
    {\
7 7u83 1392
	calculus **r109_ = &(B);\
1393
	calculus *x109_ = CHECK_NULL(*r109_);\
1394
	DEREF_arg(x109_ + 1, (A));\
1395
	*r109_ = x109_->ag_ptr;\
1396
	destroy_calculus(x109_, (unsigned)3);\
2 7u83 1397
    }
1398
 
1399
 
1400
/* Definitions for structure MAP */
1401
 
7 7u83 1402
#define map_name(P)			((P) + 0)
1403
#define map_flag(P)			((P) + 1)
1404
#define map_ret_type(P)			((P) + 2)
1405
#define map_args(P)			((P) + 3)
2 7u83 1406
#define SIZE_map			4
1407
 
7 7u83 1408
#define COPY_map(A, B)\
2 7u83 1409
    {\
7 7u83 1410
	calculus *x110_ = CHECK_NULL(A);\
1411
	MAP y110_;\
1412
	y110_ = (B);\
1413
	COPY_string(x110_ + 0, y110_.name);\
1414
	COPY_int(x110_ + 1, y110_.flag);\
1415
	COPY_ptr(x110_ + 2, y110_.ret_type);\
1416
	COPY_list(x110_ + 3, y110_.args);\
2 7u83 1417
    }
1418
 
7 7u83 1419
#define DEREF_map(A, B)\
2 7u83 1420
    {\
7 7u83 1421
	calculus *x111_ = CHECK_NULL(A);\
1422
	MAP *y111_ = &(B);\
1423
	y111_->name = DEREF_string(x111_ + 0);\
1424
	y111_->flag = DEREF_int(x111_ + 1);\
1425
	y111_->ret_type = DEREF_ptr(x111_ + 2);\
1426
	y111_->args = DEREF_list(x111_ + 3);\
2 7u83 1427
    }
1428
 
7 7u83 1429
#define MAKE_map(name_, flag_, ret_type_, args_, map_)\
2 7u83 1430
    {\
7 7u83 1431
	calculus *x112_ = CHECK_NULL(map_);\
1432
	COPY_string(x112_ + 0, (name_));\
1433
	COPY_int(x112_ + 1, (flag_));\
1434
	COPY_ptr(x112_ + 2, (ret_type_));\
1435
	COPY_list(x112_ + 3, (args_));\
2 7u83 1436
    }
1437
 
7 7u83 1438
#define CONS_map(A, B, C)\
2 7u83 1439
    {\
7 7u83 1440
	calculus *x113_ = GEN_calculus(5, TYPEID_list);\
1441
	COPY_map(x113_ + 1, (A));\
1442
	x113_->ag_ptr = (B);\
1443
	(C) = x113_;\
2 7u83 1444
    }
1445
 
7 7u83 1446
#define UN_CONS_map(A, B, C)\
2 7u83 1447
    {\
7 7u83 1448
	calculus *x114_ = CHECK_NULL(C);\
1449
	DEREF_map(x114_ + 1, (A));\
1450
	(B) = x114_->ag_ptr;\
2 7u83 1451
    }
1452
 
7 7u83 1453
#define DESTROY_CONS_map(D, A, B, C)\
2 7u83 1454
    {\
7 7u83 1455
	calculus *x115_ = CHECK_NULL(C);\
1456
	DEREF_map(x115_ + 1, (A));\
1457
	(B) = x115_->ag_ptr;\
1458
	(D)(x115_, (unsigned)5);\
2 7u83 1459
    }
1460
 
7 7u83 1461
#define PUSH_map(A, B)\
2 7u83 1462
    {\
7 7u83 1463
	calculus **r116_ = &(B);\
1464
	calculus *x116_ = GEN_calculus(5, TYPEID_stack);\
1465
	COPY_map(x116_ + 1, (A));\
1466
	x116_->ag_ptr = *r116_;\
1467
	*r116_ = x116_;\
2 7u83 1468
    }
1469
 
7 7u83 1470
#define POP_map(A, B)\
2 7u83 1471
    {\
7 7u83 1472
	calculus **r117_ = &(B);\
1473
	calculus *x117_ = CHECK_NULL(*r117_);\
1474
	DEREF_map(x117_ + 1, (A));\
1475
	*r117_ = x117_->ag_ptr;\
1476
	destroy_calculus(x117_, (unsigned)5);\
2 7u83 1477
    }
1478
 
1479
 
1480
/* Definitions for structure UNION */
1481
 
7 7u83 1482
#define un_id(P)			((P) + 0)
1483
#define un_base(P)			((P) + 1)
1484
#define un_s_defn(P)			((P) + 2)
1485
#define un_u_defn(P)			((P) + 3)
1486
#define un_map(P)			((P) + 4)
1487
#define un_no_fields(P)			((P) + 5)
2 7u83 1488
#define SIZE_un				6
1489
 
7 7u83 1490
#define COPY_un(A, B)\
2 7u83 1491
    {\
7 7u83 1492
	calculus *x118_ = CHECK_NULL(A);\
1493
	UNION y118_;\
1494
	y118_ = (B);\
1495
	COPY_ptr(x118_ + 0, y118_.id);\
1496
	COPY_ptr(x118_ + 1, y118_.base);\
1497
	COPY_list(x118_ + 2, y118_.s_defn);\
1498
	COPY_list(x118_ + 3, y118_.u_defn);\
1499
	COPY_list(x118_ + 4, y118_.map);\
1500
	COPY_int(x118_ + 5, y118_.no_fields);\
2 7u83 1501
    }
1502
 
7 7u83 1503
#define DEREF_un(A, B)\
2 7u83 1504
    {\
7 7u83 1505
	calculus *x119_ = CHECK_NULL(A);\
1506
	UNION *y119_ = &(B);\
1507
	y119_->id = DEREF_ptr(x119_ + 0);\
1508
	y119_->base = DEREF_ptr(x119_ + 1);\
1509
	y119_->s_defn = DEREF_list(x119_ + 2);\
1510
	y119_->u_defn = DEREF_list(x119_ + 3);\
1511
	y119_->map = DEREF_list(x119_ + 4);\
1512
	y119_->no_fields = DEREF_int(x119_ + 5);\
2 7u83 1513
    }
1514
 
7 7u83 1515
#define MAKE_un(id_, base_, s_defn_, u_defn_, map_, no_fields_, un_)\
2 7u83 1516
    {\
7 7u83 1517
	calculus *x120_ = CHECK_NULL(un_);\
1518
	COPY_ptr(x120_ + 0, (id_));\
1519
	COPY_ptr(x120_ + 1, (base_));\
1520
	COPY_list(x120_ + 2, (s_defn_));\
1521
	COPY_list(x120_ + 3, (u_defn_));\
1522
	COPY_list(x120_ + 4, (map_));\
1523
	COPY_int(x120_ + 5, (no_fields_));\
2 7u83 1524
    }
1525
 
7 7u83 1526
#define CONS_un(A, B, C)\
2 7u83 1527
    {\
7 7u83 1528
	calculus *x121_ = GEN_calculus(7, TYPEID_list);\
1529
	COPY_un(x121_ + 1, (A));\
1530
	x121_->ag_ptr = (B);\
1531
	(C) = x121_;\
2 7u83 1532
    }
1533
 
7 7u83 1534
#define UN_CONS_un(A, B, C)\
2 7u83 1535
    {\
7 7u83 1536
	calculus *x122_ = CHECK_NULL(C);\
1537
	DEREF_un(x122_ + 1, (A));\
1538
	(B) = x122_->ag_ptr;\
2 7u83 1539
    }
1540
 
7 7u83 1541
#define DESTROY_CONS_un(D, A, B, C)\
2 7u83 1542
    {\
7 7u83 1543
	calculus *x123_ = CHECK_NULL(C);\
1544
	DEREF_un(x123_ + 1, (A));\
1545
	(B) = x123_->ag_ptr;\
1546
	(D)(x123_, (unsigned)7);\
2 7u83 1547
    }
1548
 
7 7u83 1549
#define PUSH_un(A, B)\
2 7u83 1550
    {\
7 7u83 1551
	calculus **r124_ = &(B);\
1552
	calculus *x124_ = GEN_calculus(7, TYPEID_stack);\
1553
	COPY_un(x124_ + 1, (A));\
1554
	x124_->ag_ptr = *r124_;\
1555
	*r124_ = x124_;\
2 7u83 1556
    }
1557
 
7 7u83 1558
#define POP_un(A, B)\
2 7u83 1559
    {\
7 7u83 1560
	calculus **r125_ = &(B);\
1561
	calculus *x125_ = CHECK_NULL(*r125_);\
1562
	DEREF_un(x125_ + 1, (A));\
1563
	*r125_ = x125_->ag_ptr;\
1564
	destroy_calculus(x125_, (unsigned)7);\
2 7u83 1565
    }
1566
 
1567
 
1568
/* Definitions for union TYPE */
1569
 
7 7u83 1570
#define ORDER_type			((unsigned) 12)
2 7u83 1571
#define SIZE_type			1
7 7u83 1572
#define NULL_type			((TYPE) 0)
1573
#define IS_NULL_type(A)			((A) == 0)
1574
#define EQ_type(A, B)			((A) == (B))
2 7u83 1575
 
7 7u83 1576
#define COPY_type(A, B)			(CHECK_NULL(A)->ag_ptr = (B))
1577
#define DEREF_type(A)			(CHECK_NULL(A)->ag_ptr)
2 7u83 1578
 
7 7u83 1579
#define CONS_type(A, B, C)\
2 7u83 1580
    {\
7 7u83 1581
	calculus *x126_ = GEN_calculus(2, TYPEID_list);\
1582
	COPY_type(x126_ + 1, (A));\
1583
	x126_->ag_ptr = (B);\
1584
	(C) = x126_;\
2 7u83 1585
    }
1586
 
7 7u83 1587
#define UN_CONS_type(A, B, C)\
2 7u83 1588
    {\
7 7u83 1589
	calculus *x127_ = CHECK_NULL(C);\
1590
	(A) = DEREF_type(x127_ + 1);\
1591
	(B) = x127_->ag_ptr;\
2 7u83 1592
    }
1593
 
7 7u83 1594
#define DESTROY_CONS_type(D, A, B, C)\
2 7u83 1595
    {\
7 7u83 1596
	calculus *x128_ = CHECK_NULL(C);\
1597
	(A) = DEREF_type(x128_ + 1);\
1598
	(B) = x128_->ag_ptr;\
1599
	(D)(x128_, (unsigned)2);\
2 7u83 1600
    }
1601
 
7 7u83 1602
#define PUSH_type(A, B)\
2 7u83 1603
    {\
7 7u83 1604
	calculus **r129_ = &(B);\
1605
	calculus *x129_ = GEN_calculus(2, TYPEID_stack);\
1606
	COPY_type(x129_ + 1, (A));\
1607
	x129_->ag_ptr = *r129_;\
1608
	*r129_ = x129_;\
2 7u83 1609
    }
1610
 
7 7u83 1611
#define POP_type(A, B)\
2 7u83 1612
    {\
7 7u83 1613
	calculus **r130_ = &(B);\
1614
	calculus *x130_ = CHECK_NULL(*r130_);\
1615
	(A) = DEREF_type(x130_ + 1);\
1616
	*r130_ = x130_->ag_ptr;\
1617
	destroy_calculus(x130_, (unsigned)2);\
2 7u83 1618
    }
1619
 
1620
 
1621
/* Definitions for union COMMAND */
1622
 
7 7u83 1623
#define ORDER_cmd			((unsigned) 4)
2 7u83 1624
#define SIZE_cmd			1
7 7u83 1625
#define NULL_cmd			((COMMAND) 0)
1626
#define IS_NULL_cmd(A)			((A) == 0)
1627
#define EQ_cmd(A, B)			((A) == (B))
2 7u83 1628
 
7 7u83 1629
#define COPY_cmd(A, B)			(CHECK_NULL(A)->ag_ptr = (B))
1630
#define DEREF_cmd(A)			(CHECK_NULL(A)->ag_ptr)
2 7u83 1631
 
7 7u83 1632
#define CONS_cmd(A, B, C)\
2 7u83 1633
    {\
7 7u83 1634
	calculus *x131_ = GEN_calculus(2, TYPEID_list);\
1635
	COPY_cmd(x131_ + 1, (A));\
1636
	x131_->ag_ptr = (B);\
1637
	(C) = x131_;\
2 7u83 1638
    }
1639
 
7 7u83 1640
#define UN_CONS_cmd(A, B, C)\
2 7u83 1641
    {\
7 7u83 1642
	calculus *x132_ = CHECK_NULL(C);\
1643
	(A) = DEREF_cmd(x132_ + 1);\
1644
	(B) = x132_->ag_ptr;\
2 7u83 1645
    }
1646
 
7 7u83 1647
#define DESTROY_CONS_cmd(D, A, B, C)\
2 7u83 1648
    {\
7 7u83 1649
	calculus *x133_ = CHECK_NULL(C);\
1650
	(A) = DEREF_cmd(x133_ + 1);\
1651
	(B) = x133_->ag_ptr;\
1652
	(D)(x133_, (unsigned)2);\
2 7u83 1653
    }
1654
 
7 7u83 1655
#define PUSH_cmd(A, B)\
2 7u83 1656
    {\
7 7u83 1657
	calculus **r134_ = &(B);\
1658
	calculus *x134_ = GEN_calculus(2, TYPEID_stack);\
1659
	COPY_cmd(x134_ + 1, (A));\
1660
	x134_->ag_ptr = *r134_;\
1661
	*r134_ = x134_;\
2 7u83 1662
    }
1663
 
7 7u83 1664
#define POP_cmd(A, B)\
2 7u83 1665
    {\
7 7u83 1666
	calculus **r135_ = &(B);\
1667
	calculus *x135_ = CHECK_NULL(*r135_);\
1668
	(A) = DEREF_cmd(x135_ + 1);\
1669
	*r135_ = x135_->ag_ptr;\
1670
	destroy_calculus(x135_, (unsigned)2);\
2 7u83 1671
    }
1672
 
1673
 
1674
/* Maximum allocation size */
1675
 
1676
#define calculus_GEN_MAX		11
1677
 
1678
#endif