home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / bld.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  37KB  |  990 lines

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