1/* bld.h -- Public #include File (module.h template V1.0)
2   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
3   Contributed by James Craig Burley.
4
5This file is part of GNU Fortran.
6
7GNU Fortran is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU Fortran is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Fortran; see the file COPYING.  If not, write to
19the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA.
21
22   Owning Modules:
23      bld.c
24
25   Modifications:
26*/
27
28/* Allow multiple inclusion to work. */
29
30#ifndef _H_f_bld
31#define _H_f_bld
32
33/* Simple definitions and enumerations. */
34
35typedef enum
36  {
37    FFEBLD_constNONE,
38    FFEBLD_constINTEGER1,
39    FFEBLD_constINTEGER2,
40    FFEBLD_constINTEGER3,
41    FFEBLD_constINTEGER4,
42    FFEBLD_constINTEGER5,
43    FFEBLD_constINTEGER6,
44    FFEBLD_constINTEGER7,
45    FFEBLD_constINTEGER8,
46    FFEBLD_constLOGICAL1,
47    FFEBLD_constLOGICAL2,
48    FFEBLD_constLOGICAL3,
49    FFEBLD_constLOGICAL4,
50    FFEBLD_constLOGICAL5,
51    FFEBLD_constLOGICAL6,
52    FFEBLD_constLOGICAL7,
53    FFEBLD_constLOGICAL8,
54    FFEBLD_constREAL1,
55    FFEBLD_constREAL2,
56    FFEBLD_constREAL3,
57    FFEBLD_constREAL4,
58    FFEBLD_constREAL5,
59    FFEBLD_constREAL6,
60    FFEBLD_constREAL7,
61    FFEBLD_constREAL8,
62    FFEBLD_constCOMPLEX1,
63    FFEBLD_constCOMPLEX2,
64    FFEBLD_constCOMPLEX3,
65    FFEBLD_constCOMPLEX4,
66    FFEBLD_constCOMPLEX5,
67    FFEBLD_constCOMPLEX6,
68    FFEBLD_constCOMPLEX7,
69    FFEBLD_constCOMPLEX8,
70    FFEBLD_constCHARACTER1,
71    FFEBLD_constCHARACTER2,
72    FFEBLD_constCHARACTER3,
73    FFEBLD_constCHARACTER4,
74    FFEBLD_constCHARACTER5,
75    FFEBLD_constCHARACTER6,
76    FFEBLD_constCHARACTER7,
77    FFEBLD_constCHARACTER8,
78    FFEBLD_constHOLLERITH,
79    FFEBLD_constTYPELESS_FIRST,
80    FFEBLD_constBINARY_MIL = FFEBLD_constTYPELESS_FIRST,
81    FFEBLD_constBINARY_VXT,
82    FFEBLD_constOCTAL_MIL,
83    FFEBLD_constOCTAL_VXT,
84    FFEBLD_constHEX_X_MIL,
85    FFEBLD_constHEX_X_VXT,
86    FFEBLD_constHEX_Z_MIL,
87    FFEBLD_constHEX_Z_VXT,
88    FFEBLD_constTYPELESS_LAST = FFEBLD_constHEX_Z_VXT,
89    FFEBLD_const
90  } ffebldConst;
91
92typedef enum
93  {
94#define FFEBLD_OP(KWD,NAME,ARITY) KWD,
95#include "bld-op.def"
96#undef FFEBLD_OP
97    FFEBLD_op
98  } ffebldOp;
99
100/* Typedefs. */
101
102typedef struct _ffebld_ *ffebld;
103typedef unsigned char ffebldArity;
104typedef union _ffebld_constant_array_ ffebldConstantArray;
105typedef struct _ffebld_constant_ *ffebldConstant;
106typedef union _ffebld_constant_union_ ffebldConstantUnion;
107typedef ffebld *ffebldListBottom;
108typedef unsigned int ffebldListLength;
109#define ffebldListLength_f ""
110typedef struct _ffebld_pool_stack_ *ffebldPoolstack_;
111
112/* Include files needed by this one. */
113
114#include "bit.h"
115#include "com.h"
116#include "info.h"
117#include "intrin.h"
118#include "lab.h"
119#include "lex.h"
120#include "malloc.h"
121#include "symbol.h"
122#include "target.h"
123
124#define FFEBLD_whereconstPROGUNIT_ 1
125#define FFEBLD_whereconstFILE_ 2
126
127#if FFECOM_targetCURRENT == FFECOM_targetFFE
128#define FFEBLD_whereconstCURRENT_ FFEBLD_whereconstPROGUNIT_
129#elif FFECOM_targetCURRENT == FFECOM_targetGCC
130#define FFEBLD_whereconstCURRENT_ FFEBLD_whereconstFILE_
131#else
132#error
133#endif
134
135/* Structure definitions. */
136
137#define FFEBLD_constINTEGERDEFAULT FFEBLD_constINTEGER1
138#define FFEBLD_constLOGICALDEFAULT FFEBLD_constLOGICAL1
139#define FFEBLD_constREALDEFAULT FFEBLD_constREAL1
140#define FFEBLD_constREALDOUBLE FFEBLD_constREAL2
141#define FFEBLD_constREALQUAD FFEBLD_constREAL3
142#define FFEBLD_constCOMPLEX FFEBLD_constCOMPLEX1
143#define FFEBLD_constCOMPLEXDOUBLE FFEBLD_constCOMPLEX2
144#define FFEBLD_constCOMPLEXQUAD FFEBLD_constCOMPLEX3
145#define FFEBLD_constCHARACTERDEFAULT FFEBLD_constCHARACTER1
146
147union _ffebld_constant_union_
148  {
149    ffetargetTypeless typeless;
150    ffetargetHollerith hollerith;
151#if FFETARGET_okINTEGER1
152    ffetargetInteger1 integer1;
153#endif
154#if FFETARGET_okINTEGER2
155    ffetargetInteger2 integer2;
156#endif
157#if FFETARGET_okINTEGER3
158    ffetargetInteger3 integer3;
159#endif
160#if FFETARGET_okINTEGER4
161    ffetargetInteger4 integer4;
162#endif
163#if FFETARGET_okINTEGER5
164    ffetargetInteger5 integer5;
165#endif
166#if FFETARGET_okINTEGER6
167    ffetargetInteger6 integer6;
168#endif
169#if FFETARGET_okINTEGER7
170    ffetargetInteger7 integer7;
171#endif
172#if FFETARGET_okINTEGER8
173    ffetargetInteger8 integer8;
174#endif
175#if FFETARGET_okLOGICAL1
176    ffetargetLogical1 logical1;
177#endif
178#if FFETARGET_okLOGICAL2
179    ffetargetLogical2 logical2;
180#endif
181#if FFETARGET_okLOGICAL3
182    ffetargetLogical3 logical3;
183#endif
184#if FFETARGET_okLOGICAL4
185    ffetargetLogical4 logical4;
186#endif
187#if FFETARGET_okLOGICAL5
188    ffetargetLogical5 logical5;
189#endif
190#if FFETARGET_okLOGICAL6
191    ffetargetLogical6 logical6;
192#endif
193#if FFETARGET_okLOGICAL7
194    ffetargetLogical7 logical7;
195#endif
196#if FFETARGET_okLOGICAL8
197    ffetargetLogical8 logical8;
198#endif
199#if FFETARGET_okREAL1
200    ffetargetReal1 real1;
201#endif
202#if FFETARGET_okREAL2
203    ffetargetReal2 real2;
204#endif
205#if FFETARGET_okREAL3
206    ffetargetReal3 real3;
207#endif
208#if FFETARGET_okREAL4
209    ffetargetReal4 real4;
210#endif
211#if FFETARGET_okREAL5
212    ffetargetReal5 real5;
213#endif
214#if FFETARGET_okREAL6
215    ffetargetReal6 real6;
216#endif
217#if FFETARGET_okREAL7
218    ffetargetReal7 real7;
219#endif
220#if FFETARGET_okREAL8
221    ffetargetReal8 real8;
222#endif
223#if FFETARGET_okCOMPLEX1
224    ffetargetComplex1 complex1;
225#endif
226#if FFETARGET_okCOMPLEX2
227    ffetargetComplex2 complex2;
228#endif
229#if FFETARGET_okCOMPLEX3
230    ffetargetComplex3 complex3;
231#endif
232#if FFETARGET_okCOMPLEX4
233    ffetargetComplex4 complex4;
234#endif
235#if FFETARGET_okCOMPLEX5
236    ffetargetComplex5 complex5;
237#endif
238#if FFETARGET_okCOMPLEX6
239    ffetargetComplex6 complex6;
240#endif
241#if FFETARGET_okCOMPLEX7
242    ffetargetComplex7 complex7;
243#endif
244#if FFETARGET_okCOMPLEX8
245    ffetargetComplex8 complex8;
246#endif
247#if FFETARGET_okCHARACTER1
248    ffetargetCharacter1 character1;
249#endif
250#if FFETARGET_okCHARACTER2
251    ffetargetCharacter2 character2;
252#endif
253#if FFETARGET_okCHARACTER3
254    ffetargetCharacter3 character3;
255#endif
256#if FFETARGET_okCHARACTER4
257    ffetargetCharacter4 character4;
258#endif
259#if FFETARGET_okCHARACTER5
260    ffetargetCharacter5 character5;
261#endif
262#if FFETARGET_okCHARACTER6
263    ffetargetCharacter6 character6;
264#endif
265#if FFETARGET_okCHARACTER7
266    ffetargetCharacter7 character7;
267#endif
268#if FFETARGET_okCHARACTER8
269    ffetargetCharacter8 character8;
270#endif
271  };
272
273union _ffebld_constant_array_
274  {
275#if FFETARGET_okINTEGER1
276    ffetargetInteger1 *integer1;
277#endif
278#if FFETARGET_okINTEGER2
279    ffetargetInteger2 *integer2;
280#endif
281#if FFETARGET_okINTEGER3
282    ffetargetInteger3 *integer3;
283#endif
284#if FFETARGET_okINTEGER4
285    ffetargetInteger4 *integer4;
286#endif
287#if FFETARGET_okINTEGER5
288    ffetargetInteger5 *integer5;
289#endif
290#if FFETARGET_okINTEGER6
291    ffetargetInteger6 *integer6;
292#endif
293#if FFETARGET_okINTEGER7
294    ffetargetInteger7 *integer7;
295#endif
296#if FFETARGET_okINTEGER8
297    ffetargetInteger8 *integer8;
298#endif
299#if FFETARGET_okLOGICAL1
300    ffetargetLogical1 *logical1;
301#endif
302#if FFETARGET_okLOGICAL2
303    ffetargetLogical2 *logical2;
304#endif
305#if FFETARGET_okLOGICAL3
306    ffetargetLogical3 *logical3;
307#endif
308#if FFETARGET_okLOGICAL4
309    ffetargetLogical4 *logical4;
310#endif
311#if FFETARGET_okLOGICAL5
312    ffetargetLogical5 *logical5;
313#endif
314#if FFETARGET_okLOGICAL6
315    ffetargetLogical6 *logical6;
316#endif
317#if FFETARGET_okLOGICAL7
318    ffetargetLogical7 *logical7;
319#endif
320#if FFETARGET_okLOGICAL8
321    ffetargetLogical8 *logical8;
322#endif
323#if FFETARGET_okREAL1
324    ffetargetReal1 *real1;
325#endif
326#if FFETARGET_okREAL2
327    ffetargetReal2 *real2;
328#endif
329#if FFETARGET_okREAL3
330    ffetargetReal3 *real3;
331#endif
332#if FFETARGET_okREAL4
333    ffetargetReal4 *real4;
334#endif
335#if FFETARGET_okREAL5
336    ffetargetReal5 *real5;
337#endif
338#if FFETARGET_okREAL6
339    ffetargetReal6 *real6;
340#endif
341#if FFETARGET_okREAL7
342    ffetargetReal7 *real7;
343#endif
344#if FFETARGET_okREAL8
345    ffetargetReal8 *real8;
346#endif
347#if FFETARGET_okCOMPLEX1
348    ffetargetComplex1 *complex1;
349#endif
350#if FFETARGET_okCOMPLEX2
351    ffetargetComplex2 *complex2;
352#endif
353#if FFETARGET_okCOMPLEX3
354    ffetargetComplex3 *complex3;
355#endif
356#if FFETARGET_okCOMPLEX4
357    ffetargetComplex4 *complex4;
358#endif
359#if FFETARGET_okCOMPLEX5
360    ffetargetComplex5 *complex5;
361#endif
362#if FFETARGET_okCOMPLEX6
363    ffetargetComplex6 *complex6;
364#endif
365#if FFETARGET_okCOMPLEX7
366    ffetargetComplex7 *complex7;
367#endif
368#if FFETARGET_okCOMPLEX8
369    ffetargetComplex8 *complex8;
370#endif
371#if FFETARGET_okCHARACTER1
372    ffetargetCharacterUnit1 *character1;
373#endif
374#if FFETARGET_okCHARACTER2
375    ffetargetCharacterUnit2 *character2;
376#endif
377#if FFETARGET_okCHARACTER3
378    ffetargetCharacterUnit3 *character3;
379#endif
380#if FFETARGET_okCHARACTER4
381    ffetargetCharacterUnit4 *character4;
382#endif
383#if FFETARGET_okCHARACTER5
384    ffetargetCharacterUnit5 *character5;
385#endif
386#if FFETARGET_okCHARACTER6
387    ffetargetCharacterUnit6 *character6;
388#endif
389#if FFETARGET_okCHARACTER7
390    ffetargetCharacterUnit7 *character7;
391#endif
392#if FFETARGET_okCHARACTER8
393    ffetargetCharacterUnit8 *character8;
394#endif
395  };
396
397struct _ffebld_
398  {
399    ffebldOp op;
400    ffeinfo info;		/* Not used or valid for
401				   op=={STAR,ITEM,BOUNDS,REPEAT,LABTER,
402				   LABTOK,IMPDO}. */
403    union
404      {
405	struct
406	  {
407	    ffebld left;
408	    ffebld right;
409#ifdef FFECOM_nonterHOOK
410	    ffecomNonter hook;	/* Whatever the compiler/backend wants! */
411#endif
412	  }
413	nonter;
414	struct
415	  {
416	    ffebld head;
417	    ffebld trail;
418#ifdef FFECOM_itemHOOK
419	    ffecomItem hook;	/* Whatever the compiler/backend wants! */
420#endif
421	  }
422	item;
423	struct
424	  {
425	    ffebldConstant expr;
426	    ffebld orig;	/* Original expression, or NULL if none. */
427	    ffetargetAlign pad;	/* Initial padding (for DATA, etc.). */
428	  }
429	conter;
430	struct
431	  {
432	    ffebldConstantArray array;
433	    ffetargetOffset size;
434	    ffetargetAlign pad;	/* Initial padding (for DATA, etc.). */
435	  }
436	arrter;
437	struct
438	  {
439	    ffebldConstantArray array;
440	    ffebit bits;
441	    ffetargetAlign pad;	/* Initial padding (for DATA, etc.). */
442	  }
443	accter;
444	struct
445	  {
446	    ffesymbol symbol;
447	    ffeintrinGen generic;	/* Id for generic intrinsic. */
448	    ffeintrinSpec specific;	/* Id for specific intrinsic. */
449	    ffeintrinImp implementation;	/* Id for implementation. */
450	    bool do_iter;	/* TRUE if this ref is a read-only ref by
451				   definition (ref within DO loop using this
452				   var as iterator). */
453	  }
454	symter;
455	ffelab labter;
456	ffelexToken labtok;
457      }
458    u;
459  };
460
461struct _ffebld_constant_
462  {
463    ffebldConstant next;
464    ffebldConstant first_complex;	/* First complex const with me as
465					   real. */
466    ffebldConstant negated;	/* We point to each other through here. */
467    ffebldConst consttype;
468#ifdef FFECOM_constantHOOK
469    ffecomConstant hook;	/* Whatever the compiler/backend wants! */
470#endif
471    bool numeric;		/* A numeric kind of constant. */
472    ffebldConstantUnion u;
473  };
474
475struct _ffebld_pool_stack_
476  {
477    ffebldPoolstack_ next;
478    mallocPool pool;
479  };
480
481/* Global objects accessed by users of this module. */
482
483extern ffebldArity ffebld_arity_op_[];
484extern struct _ffebld_pool_stack_ ffebld_pool_stack_;
485
486/* Declare functions with prototypes. */
487
488int ffebld_constant_cmp (ffebldConstant c1, ffebldConstant c2);
489#if FFECOM_targetCURRENT == FFECOM_targetFFE
490void ffebld_constant_dump (ffebldConstant c);
491#endif
492bool ffebld_constant_is_magical (ffebldConstant c);
493bool ffebld_constant_is_zero (ffebldConstant c);
494#if FFETARGET_okCHARACTER1
495ffebldConstant ffebld_constant_new_character1 (ffelexToken t);
496ffebldConstant ffebld_constant_new_character1_val (ffetargetCharacter1 val);
497#endif
498#if FFETARGET_okCHARACTER2
499ffebldConstant ffebld_constant_new_character2 (ffelexToken t);
500ffebldConstant ffebld_constant_new_character2_val (ffetargetCharacter2 val);
501#endif
502#if FFETARGET_okCHARACTER3
503ffebldConstant ffebld_constant_new_character3 (ffelexToken t);
504ffebldConstant ffebld_constant_new_character3_val (ffetargetCharacter3 val);
505#endif
506#if FFETARGET_okCHARACTER4
507ffebldConstant ffebld_constant_new_character4 (ffelexToken t);
508ffebldConstant ffebld_constant_new_character4_val (ffetargetCharacter4 val);
509#endif
510#if FFETARGET_okCHARACTER5
511ffebldConstant ffebld_constant_new_character5 (ffelexToken t);
512ffebldConstant ffebld_constant_new_character5_val (ffetargetCharacter5 val);
513#endif
514#if FFETARGET_okCHARACTER6
515ffebldConstant ffebld_constant_new_character6 (ffelexToken t);
516ffebldConstant ffebld_constant_new_character6_val (ffetargetCharacter6 val);
517#endif
518#if FFETARGET_okCHARACTER7
519ffebldConstant ffebld_constant_new_character7 (ffelexToken t);
520ffebldConstant ffebld_constant_new_character7_val (ffetargetCharacter7 val);
521#endif
522#if FFETARGET_okCHARACTER8
523ffebldConstant ffebld_constant_new_character8 (ffelexToken t);
524ffebldConstant ffebld_constant_new_character8_val (ffetargetCharacter8 val);
525#endif
526#if FFETARGET_okCOMPLEX1
527ffebldConstant ffebld_constant_new_complex1 (ffebldConstant real,
528					     ffebldConstant imaginary);
529ffebldConstant ffebld_constant_new_complex1_val (ffetargetComplex1 val);
530#endif
531#if FFETARGET_okCOMPLEX2
532ffebldConstant ffebld_constant_new_complex2 (ffebldConstant real,
533					     ffebldConstant imaginary);
534ffebldConstant ffebld_constant_new_complex2_val (ffetargetComplex2 val);
535#endif
536#if FFETARGET_okCOMPLEX3
537ffebldConstant ffebld_constant_new_complex3 (ffebldConstant real,
538					     ffebldConstant imaginary);
539ffebldConstant ffebld_constant_new_complex3_val (ffetargetComplex3 val);
540#endif
541#if FFETARGET_okCOMPLEX4
542ffebldConstant ffebld_constant_new_complex4 (ffebldConstant real,
543					     ffebldConstant imaginary);
544ffebldConstant ffebld_constant_new_complex4_val (ffetargetComplex4 val);
545#endif
546#if FFETARGET_okCOMPLEX5
547ffebldConstant ffebld_constant_new_complex5 (ffebldConstant real,
548					     ffebldConstant imaginary);
549ffebldConstant ffebld_constant_new_complex5_val (ffetargetComplex5 val);
550#endif
551#if FFETARGET_okCOMPLEX6
552ffebldConstant ffebld_constant_new_complex6 (ffebldConstant real,
553					     ffebldConstant imaginary);
554ffebldConstant ffebld_constant_new_complex6_val (ffetargetComplex6 val);
555#endif
556#if FFETARGET_okCOMPLEX7
557ffebldConstant ffebld_constant_new_complex7 (ffebldConstant real,
558					     ffebldConstant imaginary);
559ffebldConstant ffebld_constant_new_complex7_val (ffetargetComplex7 val);
560#endif
561#if FFETARGET_okCOMPLEX8
562ffebldConstant ffebld_constant_new_complex8 (ffebldConstant real,
563					     ffebldConstant imaginary);
564ffebldConstant ffebld_constant_new_complex8_val (ffetargetComplex8 val);
565#endif
566ffebldConstant ffebld_constant_new_hollerith (ffelexToken t);
567ffebldConstant ffebld_constant_new_hollerith_val (ffetargetHollerith val);
568#if FFETARGET_okINTEGER1
569ffebldConstant ffebld_constant_new_integer1 (ffelexToken t);
570ffebldConstant ffebld_constant_new_integer1_val (ffetargetInteger1 val);
571#endif
572#if FFETARGET_okINTEGER2
573ffebldConstant ffebld_constant_new_integer2 (ffelexToken t);
574ffebldConstant ffebld_constant_new_integer2_val (ffetargetInteger2 val);
575#endif
576#if FFETARGET_okINTEGER3
577ffebldConstant ffebld_constant_new_integer3 (ffelexToken t);
578ffebldConstant ffebld_constant_new_integer3_val (ffetargetInteger3 val);
579#endif
580#if FFETARGET_okINTEGER4
581ffebldConstant ffebld_constant_new_integer4 (ffelexToken t);
582ffebldConstant ffebld_constant_new_integer4_val (ffetargetInteger4 val);
583#endif
584#if FFETARGET_okINTEGER5
585ffebldConstant ffebld_constant_new_integer5 (ffelexToken t);
586ffebldConstant ffebld_constant_new_integer5_val (ffetargetInteger5 val);
587#endif
588#if FFETARGET_okINTEGER6
589ffebldConstant ffebld_constant_new_integer6 (ffelexToken t);
590ffebldConstant ffebld_constant_new_integer6_val (ffetargetInteger6 val);
591#endif
592#if FFETARGET_okINTEGER7
593ffebldConstant ffebld_constant_new_integer7 (ffelexToken t);
594ffebldConstant ffebld_constant_new_integer7_val (ffetargetInteger7 val);
595#endif
596#if FFETARGET_okINTEGER8
597ffebldConstant ffebld_constant_new_integer8 (ffelexToken t);
598ffebldConstant ffebld_constant_new_integer8_val (ffetargetInteger8 val);
599#endif
600ffebldConstant ffebld_constant_new_integerbinary (ffelexToken t);
601ffebldConstant ffebld_constant_new_integerhex (ffelexToken t);
602ffebldConstant ffebld_constant_new_integeroctal (ffelexToken t);
603#if FFETARGET_okLOGICAL1
604ffebldConstant ffebld_constant_new_logical1 (bool truth);
605ffebldConstant ffebld_constant_new_logical1_val (ffetargetLogical1 val);
606#endif
607#if FFETARGET_okLOGICAL2
608ffebldConstant ffebld_constant_new_logical2 (bool truth);
609ffebldConstant ffebld_constant_new_logical2_val (ffetargetLogical2 val);
610#endif
611#if FFETARGET_okLOGICAL3
612ffebldConstant ffebld_constant_new_logical3 (bool truth);
613ffebldConstant ffebld_constant_new_logical3_val (ffetargetLogical3 val);
614#endif
615#if FFETARGET_okLOGICAL4
616ffebldConstant ffebld_constant_new_logical4 (bool truth);
617ffebldConstant ffebld_constant_new_logical4_val (ffetargetLogical4 val);
618#endif
619#if FFETARGET_okLOGICAL5
620ffebldConstant ffebld_constant_new_logical5 (bool truth);
621ffebldConstant ffebld_constant_new_logical5_val (ffetargetLogical5 val);
622#endif
623#if FFETARGET_okLOGICAL6
624ffebldConstant ffebld_constant_new_logical6 (bool truth);
625ffebldConstant ffebld_constant_new_logical6_val (ffetargetLogical6 val);
626#endif
627#if FFETARGET_okLOGICAL7
628ffebldConstant ffebld_constant_new_logical7 (bool truth);
629ffebldConstant ffebld_constant_new_logical7_val (ffetargetLogical7 val);
630#endif
631#if FFETARGET_okLOGICAL8
632ffebldConstant ffebld_constant_new_logical8 (bool truth);
633ffebldConstant ffebld_constant_new_logical8_val (ffetargetLogical8 val);
634#endif
635#if FFETARGET_okREAL1
636ffebldConstant ffebld_constant_new_real1 (ffelexToken integer,
637	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
638		    ffelexToken exponent_sign, ffelexToken exponent_digits);
639ffebldConstant ffebld_constant_new_real1_val (ffetargetReal1 val);
640#endif
641#if FFETARGET_okREAL2
642ffebldConstant ffebld_constant_new_real2 (ffelexToken integer,
643	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
644		    ffelexToken exponent_sign, ffelexToken exponent_digits);
645ffebldConstant ffebld_constant_new_real2_val (ffetargetReal2 val);
646#endif
647#if FFETARGET_okREAL3
648ffebldConstant ffebld_constant_new_real3 (ffelexToken integer,
649	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
650		    ffelexToken exponent_sign, ffelexToken exponent_digits);
651ffebldConstant ffebld_constant_new_real3_val (ffetargetReal3 val);
652#endif
653#if FFETARGET_okREAL4
654ffebldConstant ffebld_constant_new_real4 (ffelexToken integer,
655	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
656		    ffelexToken exponent_sign, ffelexToken exponent_digits);
657ffebldConstant ffebld_constant_new_real4_val (ffetargetReal4 val);
658#endif
659#if FFETARGET_okREAL5
660ffebldConstant ffebld_constant_new_real5 (ffelexToken integer,
661	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
662		    ffelexToken exponent_sign, ffelexToken exponent_digits);
663ffebldConstant ffebld_constant_new_real5_val (ffetargetReal5 val);
664#endif
665#if FFETARGET_okREAL6
666ffebldConstant ffebld_constant_new_real6 (ffelexToken integer,
667	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
668		    ffelexToken exponent_sign, ffelexToken exponent_digits);
669ffebldConstant ffebld_constant_new_real6_val (ffetargetReal6 val);
670#endif
671#if FFETARGET_okREAL7
672ffebldConstant ffebld_constant_new_real7 (ffelexToken integer,
673	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
674		    ffelexToken exponent_sign, ffelexToken exponent_digits);
675ffebldConstant ffebld_constant_new_real7_val (ffetargetReal7 val);
676#endif
677#if FFETARGET_okREAL8
678ffebldConstant ffebld_constant_new_real8 (ffelexToken integer,
679	    ffelexToken decimal, ffelexToken fraction, ffelexToken exponent,
680		    ffelexToken exponent_sign, ffelexToken exponent_digits);
681ffebldConstant ffebld_constant_new_real8_val (ffetargetReal8 val);
682#endif
683ffebldConstant ffebld_constant_new_typeless_bm (ffelexToken t);
684ffebldConstant ffebld_constant_new_typeless_bv (ffelexToken t);
685ffebldConstant ffebld_constant_new_typeless_hxm (ffelexToken t);
686ffebldConstant ffebld_constant_new_typeless_hxv (ffelexToken t);
687ffebldConstant ffebld_constant_new_typeless_hzm (ffelexToken t);
688ffebldConstant ffebld_constant_new_typeless_hzv (ffelexToken t);
689ffebldConstant ffebld_constant_new_typeless_om (ffelexToken t);
690ffebldConstant ffebld_constant_new_typeless_ov (ffelexToken t);
691ffebldConstant ffebld_constant_new_typeless_val (ffebldConst type,
692						 ffetargetTypeless val);
693ffebldConstant ffebld_constant_negated (ffebldConstant c);
694#if FFECOM_targetCURRENT == FFECOM_targetFFE
695void ffebld_constantarray_dump (ffebldConstantArray array, ffeinfoBasictype bt,
696		     ffeinfoKindtype kt, ffetargetOffset size, ffebit bits);
697#endif
698ffebldConstantUnion ffebld_constantarray_get (ffebldConstantArray array,
699	   ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset offset);
700void ffebld_constantarray_kill (ffebldConstantArray array, ffeinfoBasictype bt,
701				ffeinfoKindtype kt, ffetargetOffset size);
702ffebldConstantArray ffebld_constantarray_new (ffeinfoBasictype bt,
703				  ffeinfoKindtype kt, ffetargetOffset size);
704void ffebld_constantarray_prepare (void **aptr, void **cptr, size_t *size,
705       ffebldConstantArray array, ffeinfoBasictype abt, ffeinfoKindtype akt,
706		      ffetargetOffset offset, ffebldConstantUnion *constant,
707				 ffeinfoBasictype cbt, ffeinfoKindtype ckt);
708void ffebld_constantarray_preparray (void **aptr, void **cptr, size_t *size,
709       ffebldConstantArray array, ffeinfoBasictype abt, ffeinfoKindtype akt,
710		   ffetargetOffset offset, ffebldConstantArray source_array,
711				 ffeinfoBasictype cbt, ffeinfoKindtype ckt);
712void ffebld_constantarray_put (ffebldConstantArray array, ffeinfoBasictype bt,
713  ffeinfoKindtype kt, ffetargetOffset offset, ffebldConstantUnion constant);
714#if FFECOM_targetCURRENT == FFECOM_targetFFE
715void ffebld_constantunion_dump (ffebldConstantUnion u, ffeinfoBasictype bt,
716				ffeinfoKindtype kt);
717void ffebld_dump (ffebld b);
718void ffebld_dump_prefix (FILE *out, ffeinfoBasictype bt, ffeinfoKindtype kt);
719#endif
720void ffebld_init_0 (void);
721void ffebld_init_1 (void);
722void ffebld_init_2 (void);
723ffebldListLength ffebld_list_length (ffebld l);
724ffebld ffebld_new_accter (ffebldConstantArray array, ffebit b);
725ffebld ffebld_new_arrter (ffebldConstantArray array, ffetargetOffset size);
726ffebld ffebld_new_conter_with_orig (ffebldConstant c, ffebld orig);
727ffebld ffebld_new_item (ffebld head, ffebld trail);
728ffebld ffebld_new_labter (ffelab l);
729ffebld ffebld_new_labtok (ffelexToken t);
730ffebld ffebld_new_none (ffebldOp o);
731ffebld ffebld_new_symter (ffesymbol s, ffeintrinGen gen, ffeintrinSpec spec,
732			  ffeintrinImp imp);
733ffebld ffebld_new_one (ffebldOp o, ffebld left);
734ffebld ffebld_new_two (ffebldOp o, ffebld left, ffebld right);
735const char *ffebld_op_string (ffebldOp o);
736void ffebld_pool_pop (void);
737void ffebld_pool_push (mallocPool pool);
738ffetargetCharacterSize ffebld_size_max (ffebld b);
739
740/* Define macros. */
741
742#define ffebld_accter(b) ((b)->u.accter.array)
743#define ffebld_accter_bits(b) ((b)->u.accter.bits)
744#define ffebld_accter_pad(b) ((b)->u.accter.pad)
745#define ffebld_accter_set_bits(b,bt) ((b)->u.accter.bits = (bt))
746#define ffebld_accter_set_pad(b,p) ((b)->u.accter.pad = (p))
747#define ffebld_accter_size(b) ffebit_size((b)->u.accter.bits)
748#define ffebld_append_item(b,i) (**(b) = ffebld_new_item((i),NULL),	      \
749				 *(b) = &((**(b))->u.item.trail))
750#define ffebld_arity(b) ffebld_arity_op(ffebld_op(b))
751#define ffebld_arity_op(o) (ffebld_arity_op_[o])
752#define ffebld_arrter(b) ((b)->u.arrter.array)
753#define ffebld_arrter_pad(b) ((b)->u.arrter.pad)
754#define ffebld_arrter_set_pad(b,p) ((b)->u.arrter.pad = (p))
755#define ffebld_arrter_set_size(b,s) ((b)->u.arrter.size = (s))
756#define ffebld_arrter_size(b) ((b)->u.arrter.size)
757#define ffebld_basictype(b) (ffeinfo_basictype (ffebld_info ((b))))
758#if FFEBLD_whereconstCURRENT_ == FFEBLD_whereconstPROGUNIT_
759#define ffebld_constant_pool() ffe_pool_program_unit()
760#elif FFEBLD_whereconstCURRENT_ == FFEBLD_whereconstFILE_
761#define ffebld_constant_pool() ffe_pool_file()
762#else
763#error
764#endif
765#define ffebld_constant_character1(c) ((c)->u.character1)
766#define ffebld_constant_character2(c) ((c)->u.character2)
767#define ffebld_constant_character3(c) ((c)->u.character3)
768#define ffebld_constant_character4(c) ((c)->u.character4)
769#define ffebld_constant_character5(c) ((c)->u.character5)
770#define ffebld_constant_character6(c) ((c)->u.character6)
771#define ffebld_constant_character7(c) ((c)->u.character7)
772#define ffebld_constant_character8(c) ((c)->u.character8)
773#define ffebld_constant_characterdefault ffebld_constant_character1
774#define ffebld_constant_complex1(c) ((c)->u.complex1)
775#define ffebld_constant_complex2(c) ((c)->u.complex2)
776#define ffebld_constant_complex3(c) ((c)->u.complex3)
777#define ffebld_constant_complex4(c) ((c)->u.complex4)
778#define ffebld_constant_complex5(c) ((c)->u.complex5)
779#define ffebld_constant_complex6(c) ((c)->u.complex6)
780#define ffebld_constant_complex7(c) ((c)->u.complex7)
781#define ffebld_constant_complex8(c) ((c)->u.complex8)
782#define ffebld_constant_complexdefault ffebld_constant_complex1
783#define ffebld_constant_complexdouble ffebld_constant_complex2
784#define ffebld_constant_complexquad ffebld_constant_complex3
785#define ffebld_constant_copy(c) (c)
786#define ffebld_constant_hollerith(c) ((c)->u.hollerith)
787#define ffebld_constant_hook(c) ((c)->hook)
788#define ffebld_constant_integer1(c) ((c)->u.integer1)
789#define ffebld_constant_integer2(c) ((c)->u.integer2)
790#define ffebld_constant_integer3(c) ((c)->u.integer3)
791#define ffebld_constant_integer4(c) ((c)->u.integer4)
792#define ffebld_constant_integer5(c) ((c)->u.integer5)
793#define ffebld_constant_integer6(c) ((c)->u.integer6)
794#define ffebld_constant_integer7(c) ((c)->u.integer7)
795#define ffebld_constant_integer8(c) ((c)->u.integer8)
796#define ffebld_constant_integerdefault ffebld_constant_integer1
797#define ffebld_constant_is_numeric(c) ((c)->numeric)
798#define ffebld_constant_logical1(c) ((c)->u.logical1)
799#define ffebld_constant_logical2(c) ((c)->u.logical2)
800#define ffebld_constant_logical3(c) ((c)->u.logical3)
801#define ffebld_constant_logical4(c) ((c)->u.logical4)
802#define ffebld_constant_logical5(c) ((c)->u.logical5)
803#define ffebld_constant_logical6(c) ((c)->u.logical6)
804#define ffebld_constant_logical7(c) ((c)->u.logical7)
805#define ffebld_constant_logical8(c) ((c)->u.logical8)
806#define ffebld_constant_logicaldefault ffebld_constant_logical1
807#define ffebld_constant_new_characterdefault ffebld_constant_new_character1
808#define ffebld_constant_new_characterdefault_val ffebld_constant_new_character1_val
809#define ffebld_constant_new_complexdefault ffebld_constant_new_complex1
810#define ffebld_constant_new_complexdefault_val ffebld_constant_new_complex1_val
811#define ffebld_constant_new_complexdouble ffebld_constant_new_complex2
812#define ffebld_constant_new_complexdouble_val ffebld_constant_new_complex2_val
813#define ffebld_constant_new_complexquad ffebld_constant_new_complex3
814#define ffebld_constant_new_complexquad_valffebld_constant_new_complex3_val
815#define ffebld_constant_new_integerdefault ffebld_constant_new_integer1
816#define ffebld_constant_new_integerdefault_val ffebld_constant_new_integer1_val
817#define ffebld_constant_new_logicaldefault ffebld_constant_new_logical1
818#define ffebld_constant_new_logicaldefault_val ffebld_constant_new_logical1_val
819#define ffebld_constant_new_realdefault ffebld_constant_new_real1
820#define ffebld_constant_new_realdefault_val ffebld_constant_new_real1_val
821#define ffebld_constant_new_realdouble ffebld_constant_new_real2
822#define ffebld_constant_new_realdouble_val ffebld_constant_new_real2_val
823#define ffebld_constant_new_realquad ffebld_constant_new_real3
824#define ffebld_constant_new_realquad_val ffebld_constant_new_real3_val
825#define ffebld_constant_ptr_to_union(c) (&(c)->u)
826#define ffebld_constant_real1(c) ((c)->u.real1)
827#define ffebld_constant_real2(c) ((c)->u.real2)
828#define ffebld_constant_real3(c) ((c)->u.real3)
829#define ffebld_constant_real4(c) ((c)->u.real4)
830#define ffebld_constant_real5(c) ((c)->u.real5)
831#define ffebld_constant_real6(c) ((c)->u.real6)
832#define ffebld_constant_real7(c) ((c)->u.real7)
833#define ffebld_constant_real8(c) ((c)->u.real8)
834#define ffebld_constant_realdefault ffebld_constant_real1
835#define ffebld_constant_realdouble ffebld_constant_real2
836#define ffebld_constant_realquad ffebld_constant_real3
837#define ffebld_constant_set_hook(c,h) ((c)->hook = (h))
838#define ffebld_constant_set_union(c,un) ((c)->u = (un))
839#define ffebld_constant_type(c) ((c)->consttype)
840#define ffebld_constant_typeless(c) ((c)->u.typeless)
841#define ffebld_constant_union(c) ((c)->u)
842#define ffebld_conter(b) ((b)->u.conter.expr)
843#define ffebld_conter_orig(b) ((b)->u.conter.orig)
844#define ffebld_conter_pad(b) ((b)->u.conter.pad)
845#define ffebld_conter_set_orig(b,o) ((b)->u.conter.orig = (o))
846#define ffebld_conter_set_pad(b,p) ((b)->u.conter.pad = (p))
847#define ffebld_copy(b) (b)	/* ~~~Someday really make a copy. */
848#define ffebld_cu_ptr_typeless(u) &(u).typeless
849#define ffebld_cu_ptr_hollerith(u) &(u).hollerith
850#define ffebld_cu_ptr_integer1(u) &(u).integer1
851#define ffebld_cu_ptr_integer2(u) &(u).integer2
852#define ffebld_cu_ptr_integer3(u) &(u).integer3
853#define ffebld_cu_ptr_integer4(u) &(u).integer4
854#define ffebld_cu_ptr_integer5(u) &(u).integer5
855#define ffebld_cu_ptr_integer6(u) &(u).integer6
856#define ffebld_cu_ptr_integer7(u) &(u).integer7
857#define ffebld_cu_ptr_integer8(u) &(u).integer8
858#define ffebld_cu_ptr_integerdefault ffebld_cu_ptr_integer1
859#define ffebld_cu_ptr_logical1(u) &(u).logical1
860#define ffebld_cu_ptr_logical2(u) &(u).logical2
861#define ffebld_cu_ptr_logical3(u) &(u).logical3
862#define ffebld_cu_ptr_logical4(u) &(u).logical4
863#define ffebld_cu_ptr_logical5(u) &(u).logical5
864#define ffebld_cu_ptr_logical6(u) &(u).logical6
865#define ffebld_cu_ptr_logical7(u) &(u).logical7
866#define ffebld_cu_ptr_logical8(u) &(u).logical8
867#define ffebld_cu_ptr_logicaldefault ffebld_cu_ptr_logical1
868#define ffebld_cu_ptr_real1(u) &(u).real1
869#define ffebld_cu_ptr_real2(u) &(u).real2
870#define ffebld_cu_ptr_real3(u) &(u).real3
871#define ffebld_cu_ptr_real4(u) &(u).real4
872#define ffebld_cu_ptr_real5(u) &(u).real5
873#define ffebld_cu_ptr_real6(u) &(u).real6
874#define ffebld_cu_ptr_real7(u) &(u).real7
875#define ffebld_cu_ptr_real8(u) &(u).real8
876#define ffebld_cu_ptr_realdefault ffebld_cu_ptr_real1
877#define ffebld_cu_ptr_realdouble ffebld_cu_ptr_real2
878#define ffebld_cu_ptr_realquad ffebld_cu_ptr_real3
879#define ffebld_cu_ptr_complex1(u) &(u).complex1
880#define ffebld_cu_ptr_complex2(u) &(u).complex2
881#define ffebld_cu_ptr_complex3(u) &(u).complex3
882#define ffebld_cu_ptr_complex4(u) &(u).complex4
883#define ffebld_cu_ptr_complex5(u) &(u).complex5
884#define ffebld_cu_ptr_complex6(u) &(u).complex6
885#define ffebld_cu_ptr_complex7(u) &(u).complex7
886#define ffebld_cu_ptr_complex8(u) &(u).complex8
887#define ffebld_cu_ptr_complexdefault ffebld_cu_ptr_complex1
888#define ffebld_cu_ptr_complexdouble ffebld_cu_ptr_complex2
889#define ffebld_cu_ptr_complexquad ffebld_cu_ptr_complex3
890#define ffebld_cu_ptr_character1(u) &(u).character1
891#define ffebld_cu_ptr_character2(u) &(u).character2
892#define ffebld_cu_ptr_character3(u) &(u).character3
893#define ffebld_cu_ptr_character4(u) &(u).character4
894#define ffebld_cu_ptr_character5(u) &(u).character5
895#define ffebld_cu_ptr_character6(u) &(u).character6
896#define ffebld_cu_ptr_character7(u) &(u).character7
897#define ffebld_cu_ptr_character8(u) &(u).character8
898#define ffebld_cu_val_typeless(u) (u).typeless
899#define ffebld_cu_val_hollerith(u) (u).hollerith
900#define ffebld_cu_val_integer1(u) (u).integer1
901#define ffebld_cu_val_integer2(u) (u).integer2
902#define ffebld_cu_val_integer3(u) (u).integer3
903#define ffebld_cu_val_integer4(u) (u).integer4
904#define ffebld_cu_val_integer5(u) (u).integer5
905#define ffebld_cu_val_integer6(u) (u).integer6
906#define ffebld_cu_val_integer7(u) (u).integer7
907#define ffebld_cu_val_integer8(u) (u).integer8
908#define ffebld_cu_val_integerdefault ffebld_cu_val_integer1
909#define ffebld_cu_val_logical1(u) (u).logical1
910#define ffebld_cu_val_logical2(u) (u).logical2
911#define ffebld_cu_val_logical3(u) (u).logical3
912#define ffebld_cu_val_logical4(u) (u).logical4
913#define ffebld_cu_val_logical5(u) (u).logical5
914#define ffebld_cu_val_logical6(u) (u).logical6
915#define ffebld_cu_val_logical7(u) (u).logical7
916#define ffebld_cu_val_logical8(u) (u).logical8
917#define ffebld_cu_val_logicaldefault ffebld_cu_val_logical
918#define ffebld_cu_val_real1(u) (u).real1
919#define ffebld_cu_val_real2(u) (u).real2
920#define ffebld_cu_val_real3(u) (u).real3
921#define ffebld_cu_val_real4(u) (u).real4
922#define ffebld_cu_val_real5(u) (u).real5
923#define ffebld_cu_val_real6(u) (u).real6
924#define ffebld_cu_val_real7(u) (u).real7
925#define ffebld_cu_val_real8(u) (u).real8
926#define ffebld_cu_val_realdefault ffebld_cu_val_real1
927#define ffebld_cu_val_realdouble ffebld_cu_val_real2
928#define ffebld_cu_val_realquad ffebld_cu_val_real3
929#define ffebld_cu_val_complex1(u) (u).complex1
930#define ffebld_cu_val_complex2(u) (u).complex2
931#define ffebld_cu_val_complex3(u) (u).complex3
932#define ffebld_cu_val_complex4(u) (u).complex4
933#define ffebld_cu_val_complex5(u) (u).complex5
934#define ffebld_cu_val_complex6(u) (u).complex6
935#define ffebld_cu_val_complex7(u) (u).complex7
936#define ffebld_cu_val_complex8(u) (u).complex8
937#define ffebld_cu_val_complexdefault ffebld_cu_val_complex1
938#define ffebld_cu_val_complexdouble ffebld_cu_val_complex2
939#define ffebld_cu_val_complexquad ffebld_cu_val_complex3
940#define ffebld_cu_val_character1(u) (u).character1
941#define ffebld_cu_val_character2(u) (u).character2
942#define ffebld_cu_val_character3(u) (u).character3
943#define ffebld_cu_val_character4(u) (u).character4
944#define ffebld_cu_val_character5(u) (u).character5
945#define ffebld_cu_val_character6(u) (u).character6
946#define ffebld_cu_val_character7(u) (u).character7
947#define ffebld_cu_val_character8(u) (u).character8
948#define ffebld_end_list(b) (*(b) = NULL)
949#define ffebld_head(b) ((b)->u.item.head)
950#define ffebld_info(b) ((b)->info)
951#define ffebld_init_3()
952#define ffebld_init_4()
953#define ffebld_init_list(l,b) (*(l) = NULL, *(b) = (l))
954#define ffebld_item_hook(b) ((b)->u.item.hook)
955#define ffebld_item_set_hook(b,h) ((b)->u.item.hook = (h))
956#define ffebld_kind(b) (ffeinfo_kind (ffebld_info ((b))))
957#define ffebld_kindtype(b) (ffeinfo_kindtype (ffebld_info ((b))))
958#define ffebld_labter(b) ((b)->u.labter)
959#define ffebld_labtok(b) ((b)->u.labtok)
960#define ffebld_left(b) ((b)->u.nonter.left)
961#define ffebld_name_string(n) ((n)->name)
962#define ffebld_new()							      \
963  ((ffebld) malloc_new_kp(ffebld_pool(), "FFEBLD",sizeof(struct _ffebld_)))
964#define ffebld_new_any() ffebld_new_none(FFEBLD_opANY)
965#define ffebld_new_conter(c) ffebld_new_conter_with_orig((c),NULL)
966#define ffebld_new_star() ffebld_new_none(FFEBLD_opSTAR)
967#define ffebld_new_uplus(l) ffebld_new_one(FFEBLD_opUPLUS,(l))
968#define ffebld_new_uminus(l) ffebld_new_one(FFEBLD_opUMINUS,(l))
969#define ffebld_new_add(l,r) ffebld_new_two(FFEBLD_opADD,(l),(r))
970#define ffebld_new_subtract(l,r) ffebld_new_two(FFEBLD_opSUBTRACT,(l),(r))
971#define ffebld_new_multiply(l,r) ffebld_new_two(FFEBLD_opMULTIPLY,(l),(r))
972#define ffebld_new_divide(l,r) ffebld_new_two(FFEBLD_opDIVIDE,(l),(r))
973#define ffebld_new_power(l,r) ffebld_new_two(FFEBLD_opPOWER,(l),(r))
974#define ffebld_new_bounds(l,r) ffebld_new_two(FFEBLD_opBOUNDS,(l),(r))
975#define ffebld_new_concatenate(l,r) ffebld_new_two(FFEBLD_opCONCATENATE,(l),(r))
976#define ffebld_new_not(l) ffebld_new_one(FFEBLD_opNOT,(l))
977#define ffebld_new_lt(l,r) ffebld_new_two(FFEBLD_opLT,(l),(r))
978#define ffebld_new_le(l,r) ffebld_new_two(FFEBLD_opLE,(l),(r))
979#define ffebld_new_eq(l,r) ffebld_new_two(FFEBLD_opEQ,(l),(r))
980#define ffebld_new_ne(l,r) ffebld_new_two(FFEBLD_opNE,(l),(r))
981#define ffebld_new_gt(l,r) ffebld_new_two(FFEBLD_opGT,(l),(r))
982#define ffebld_new_ge(l,r) ffebld_new_two(FFEBLD_opGE,(l),(r))
983#define ffebld_new_and(l,r) ffebld_new_two(FFEBLD_opAND,(l),(r))
984#define ffebld_new_or(l,r) ffebld_new_two(FFEBLD_opOR,(l),(r))
985#define ffebld_new_xor(l,r) ffebld_new_two(FFEBLD_opXOR,(l),(r))
986#define ffebld_new_eqv(l,r) ffebld_new_two(FFEBLD_opEQV,(l),(r))
987#define ffebld_new_neqv(l,r) ffebld_new_two(FFEBLD_opNEQV,(l),(r))
988#define ffebld_new_paren(l) ffebld_new_one(FFEBLD_opPAREN,(l))
989#define ffebld_new_repeat(l,r) ffebld_new_two(FFEBLD_opREPEAT,(l),(r))
990#define ffebld_new_percent_descr(l) ffebld_new_one(FFEBLD_opPERCENT_DESCR,(l))
991#define ffebld_new_percent_loc(l) ffebld_new_one(FFEBLD_opPERCENT_LOC,(l))
992#define ffebld_new_percent_ref(l) ffebld_new_one(FFEBLD_opPERCENT_REF,(l))
993#define ffebld_new_percent_val(l) ffebld_new_one(FFEBLD_opPERCENT_VAL,(l))
994#define ffebld_new_complex(l,r) ffebld_new_two(FFEBLD_opCOMPLEX,(l),(r))
995#define ffebld_new_convert(l) ffebld_new_one(FFEBLD_opCONVERT,(l))
996#define ffebld_new_funcref(l,r) ffebld_new_two(FFEBLD_opFUNCREF,(l),(r))
997#define ffebld_new_subrref(l,r) ffebld_new_two(FFEBLD_opSUBRREF,(l),(r))
998#define ffebld_new_arrayref(l,r) ffebld_new_two(FFEBLD_opARRAYREF,(l),(r))
999#define ffebld_new_substr(l,r) ffebld_new_two(FFEBLD_opSUBSTR,(l),(r))
1000#define ffebld_new_impdo(l,r) ffebld_new_two(FFEBLD_opIMPDO,(l),(r))
1001#define ffebld_nonter_hook(b) ((b)->u.nonter.hook)
1002#define ffebld_nonter_set_hook(b,h) ((b)->u.nonter.hook = (h))
1003#define ffebld_op(b) ((b)->op)
1004#define ffebld_pool() (ffebld_pool_stack_.pool)
1005#define ffebld_rank(b) (ffeinfo_rank (ffebld_info ((b))))
1006#define ffebld_right(b) ((b)->u.nonter.right)
1007#define ffebld_set_accter(b,a) ((b)->u.accter.array = (a))
1008#define ffebld_set_arrter(b,a) ((b)->u.arrter.array = (a))
1009#define ffebld_set_conter(b,c) ((b)->u.conter.expr = (c))
1010#define ffebld_set_info(b,i) ((b)->info = (i))
1011#define ffebld_set_labter(b,l) ((b)->u.labter = (l))
1012#define ffebld_set_op(b,o) ((b)->op = (o))
1013#define ffebld_set_head(b,h) ((b)->u.item.head = (h))
1014#define ffebld_set_left(b,l) ((b)->u.nonter.left = (l))
1015#define ffebld_set_right(b,r) ((b)->u.nonter.right = (r))
1016#define ffebld_set_trail(b,t) ((b)->u.item.trail = (t))
1017#define ffebld_size(b) (ffeinfo_size (ffebld_info ((b))))
1018#define ffebld_size_known(b) ffebld_size((b))
1019#define ffebld_symter(b) ((b)->u.symter.symbol)
1020#define ffebld_symter_generic(b) ((b)->u.symter.generic)
1021#define ffebld_symter_doiter(b) ((b)->u.symter.do_iter)
1022#define ffebld_symter_implementation(b) ((b)->u.symter.implementation)
1023#define ffebld_symter_specific(b) ((b)->u.symter.specific)
1024#define ffebld_symter_set_generic(b,g) ((b)->u.symter.generic = (g))
1025#define ffebld_symter_set_implementation(b,i) \
1026  ((b)->u.symter.implementation = (i))
1027#define ffebld_symter_set_is_doiter(b,f) ((b)->u.symter.do_iter = (f))
1028#define ffebld_symter_set_specific(b,s) ((b)->u.symter.specific = (s))
1029#define ffebld_terminate_0()
1030#define ffebld_terminate_1()
1031#define ffebld_terminate_2()
1032#define ffebld_terminate_3()
1033#define ffebld_terminate_4()
1034#define ffebld_trail(b) ((b)->u.item.trail)
1035#define ffebld_where(b) (ffeinfo_where (ffebld_info ((b))))
1036
1037/* End of #include file. */
1038
1039#endif
1040