/* bld.h -- Public #include File (module.h template V1.0) Copyright (C) 1995, 1996 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. GNU Fortran is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Fortran is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Fortran; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Owning Modules: bld.c Modifications: */ /* Allow multiple inclusion to work. */ #ifndef _H_f_bld #define _H_f_bld /* Simple definitions and enumerations. */ typedef enum { FFEBLD_constNONE, FFEBLD_constINTEGER1, FFEBLD_constINTEGER2, FFEBLD_constINTEGER3, FFEBLD_constINTEGER4, FFEBLD_constINTEGER5, FFEBLD_constINTEGER6, FFEBLD_constINTEGER7, FFEBLD_constINTEGER8, FFEBLD_constLOGICAL1, FFEBLD_constLOGICAL2, FFEBLD_constLOGICAL3, FFEBLD_constLOGICAL4, FFEBLD_constLOGICAL5, FFEBLD_constLOGICAL6, FFEBLD_constLOGICAL7, FFEBLD_constLOGICAL8, FFEBLD_constREAL1, FFEBLD_constREAL2, FFEBLD_constREAL3, FFEBLD_constREAL4, FFEBLD_constREAL5, FFEBLD_constREAL6, FFEBLD_constREAL7, FFEBLD_constREAL8, FFEBLD_constCOMPLEX1, FFEBLD_constCOMPLEX2, FFEBLD_constCOMPLEX3, FFEBLD_constCOMPLEX4, FFEBLD_constCOMPLEX5, FFEBLD_constCOMPLEX6, FFEBLD_constCOMPLEX7, FFEBLD_constCOMPLEX8, FFEBLD_constCHARACTER1, FFEBLD_constCHARACTER2, FFEBLD_constCHARACTER3, FFEBLD_constCHARACTER4, FFEBLD_constCHARACTER5, FFEBLD_constCHARACTER6, FFEBLD_constCHARACTER7, FFEBLD_constCHARACTER8, FFEBLD_constHOLLERITH, FFEBLD_constTYPELESS_FIRST, FFEBLD_constBINARY_MIL = FFEBLD_constTYPELESS_FIRST, FFEBLD_constBINARY_VXT, FFEBLD_constOCTAL_MIL, FFEBLD_constOCTAL_VXT, FFEBLD_constHEX_X_MIL, FFEBLD_constHEX_X_VXT, FFEBLD_constHEX_Z_MIL, FFEBLD_constHEX_Z_VXT, FFEBLD_constTYPELESS_LAST = FFEBLD_constHEX_Z_VXT, FFEBLD_const } ffebldConst; typedef enum { #define FFEBLD_OP(KWD,NAME,ARITY) KWD, #include "bld-op.def" #undef FFEBLD_OP FFEBLD_op } ffebldOp; /* Typedefs. */ typedef struct _ffebld_ *ffebld; typedef unsigned char ffebldArity; typedef union _ffebld_constant_array_ ffebldConstantArray; typedef struct _ffebld_constant_ *ffebldConstant; typedef union _ffebld_constant_union_ ffebldConstantUnion; typedef ffebld *ffebldListBottom; typedef unsigned int ffebldListLength; #define ffebldListLength_f "" typedef struct _ffebld_pool_stack_ *ffebldPoolstack_; /* Include files needed by this one. */ #include "bit.h" #include "com.h" #include "info.h" #include "intrin.h" #include "lab.h" #include "lex.h" #include "malloc.h" #include "symbol.h" #include "target.h" #define FFEBLD_whereconstPROGUNIT_ 1 #define FFEBLD_whereconstFILE_ 2 #if FFECOM_targetCURRENT == FFECOM_targetFFE #define FFEBLD_whereconstCURRENT_ FFEBLD_whereconstPROGUNIT_ #elif FFECOM_targetCURRENT == FFECOM_targetGCC #define FFEBLD_whereconstCURRENT_ FFEBLD_whereconstFILE_ #else #error #endif /* Structure definitions. */ #define FFEBLD_constINTEGERDEFAULT FFEBLD_constINTEGER1 #define FFEBLD_constLOGICALDEFAULT FFEBLD_constLOGICAL1 #define FFEBLD_constREALDEFAULT FFEBLD_constREAL1 #define FFEBLD_constREALDOUBLE FFEBLD_constREAL2 #define FFEBLD_constREALQUAD FFEBLD_constREAL3 #define FFEBLD_constCOMPLEX FFEBLD_constCOMPLEX1 #define FFEBLD_constCOMPLEXDOUBLE FFEBLD_constCOMPLEX2 #define FFEBLD_constCOMPLEXQUAD FFEBLD_constCOMPLEX3 #define FFEBLD_constCHARACTERDEFAULT FFEBLD_constCHARACTER1 union _ffebld_constant_union_ { ffetargetTypeless typeless; ffetargetHollerith hollerith; #if FFETARGET_okINTEGER1 ffetargetInteger1 integer1; #endif #if FFETARGET_okINTEGER2 ffetargetInteger2 integer2; #endif #if FFETARGET_okINTEGER3 ffetargetInteger3 integer3; #endif #if FFETARGET_okINTEGER4 ffetargetInteger4 integer4; #endif #if FFETARGET_okINTEGER5 ffetargetInteger5 integer5; #endif #if FFETARGET_okINTEGER6 ffetargetInteger6 integer6; #endif #if FFETARGET_okINTEGER7 ffetargetInteger7 integer7; #endif #if FFETARGET_okINTEGER8 ffetargetInteger8 integer8; #endif #if FFETARGET_okLOGICAL1 ffetargetLogical1 logical1; #endif #if FFETARGET_okLOGICAL2 ffetargetLogical2 logical2; #endif #if FFETARGET_okLOGICAL3 ffetargetLogical3 logical3; #endif #if FFETARGET_okLOGICAL4 ffetargetLogical4 logical4; #endif #if FFETARGET_okLOGICAL5 ffetargetLogical5 logical5; #endif #if FFETARGET_okLOGICAL6 ffetargetLogical6 logical6; #endif #if FFETARGET_okLOGICAL7 ffetargetLogical7 logical7; #endif #if FFETARGET_okLOGICAL8 ffetargetLogical8 logical8; #endif #if FFETARGET_okREAL1 ffetargetReal1 real1; #endif #if FFETARGET_okREAL2 ffetargetReal2 real2; #endif #if FFETARGET_okREAL3 ffetargetReal3 real3; #endif #if FFETARGET_okREAL4 ffetargetReal4 real4; #endif #if FFETARGET_okREAL5 ffetargetReal5 real5; #endif #if FFETARGET_okREAL6 ffetargetReal6 real6; #endif #if FFETARGET_okREAL7 ffetargetReal7 real7; #endif #if FFETARGET_okREAL8 ffetargetReal8 real8; #endif #if FFETARGET_okCOMPLEX1 ffetargetComplex1 complex1; #endif #if FFETARGET_okCOMPLEX2 ffetargetComplex2 complex2; #endif #if FFETARGET_okCOMPLEX3 ffetargetComplex3 complex3; #endif #if FFETARGET_okCOMPLEX4 ffetargetComplex4 complex4; #endif #if FFETARGET_okCOMPLEX5 ffetargetComplex5 complex5; #endif #if FFETARGET_okCOMPLEX6 ffetargetComplex6 complex6; #endif #if FFETARGET_okCOMPLEX7 ffetargetComplex7 complex7; #endif #if FFETARGET_okCOMPLEX8 ffetargetComplex8 complex8; #endif #if FFETARGET_okCHARACTER1 ffetargetCharacter1 character1; #endif #if FFETARGET_okCHARACTER2 ffetargetCharacter2 character2; #endif #if FFETARGET_okCHARACTER3 ffetargetCharacter3 character3; #endif #if FFETARGET_okCHARACTER4 ffetargetCharacter4 character4; #endif #if FFETARGET_okCHARACTER5 ffetargetCharacter5 character5; #endif #if FFETARGET_okCHARACTER6 ffetargetCharacter6 character6; #endif #if FFETARGET_okCHARACTER7 ffetargetCharacter7 character7; #endif #if FFETARGET_okCHARACTER8 ffetargetCharacter8 character8; #endif }; union _ffebld_constant_array_ { #if FFETARGET_okINTEGER1 ffetargetInteger1 *integer1; #endif #if FFETARGET_okINTEGER2 ffetargetInteger2 *integer2; #endif #if FFETARGET_okINTEGER3 ffetargetInteger3 *integer3; #endif #if FFETARGET_okINTEGER4 ffetargetInteger4 *integer4; #endif #if FFETARGET_okINTEGER5 ffetargetInteger5 *integer5; #endif #if FFETARGET_okINTEGER6 ffetargetInteger6 *integer6; #endif #if FFETARGET_okINTEGER7 ffetargetInteger7 *integer7; #endif #if FFETARGET_okINTEGER8 ffetargetInteger8 *integer8; #endif #if FFETARGET_okLOGICAL1 ffetargetLogical1 *logical1; #endif #if FFETARGET_okLOGICAL2 ffetargetLogical2 *logical2; #endif #if FFETARGET_okLOGICAL3 ffetargetLogical3 *logical3; #endif #if FFETARGET_okLOGICAL4 ffetargetLogical4 *logical4; #endif #if FFETARGET_okLOGICAL5 ffetargetLogical5 *logical5; #endif #if FFETARGET_okLOGICAL6 ffetargetLogical6 *logical6; #endif #if FFETARGET_okLOGICAL7 ffetargetLogical7 *logical7; #endif #if FFETARGET_okLOGICAL8 ffetargetLogical8 *logical8; #endif #if FFETARGET_okREAL1 ffetargetReal1 *real1; #endif #if FFETARGET_okREAL2 ffetargetReal2 *real2; #endif #if FFETARGET_okREAL3 ffetargetReal3 *real3; #endif #if FFETARGET_okREAL4 ffetargetReal4 *real4; #endif #if FFETARGET_okREAL5 ffetargetReal5 *real5; #endif #if FFETARGET_okREAL6 ffetargetReal6 *real6; #endif #if FFETARGET_okREAL7 ffetargetReal7 *real7; #endif #if FFETARGET_okREAL8 ffetargetReal8 *real8; #endif #if FFETARGET_okCOMPLEX1 ffetargetComplex1 *complex1; #endif #if FFETARGET_okCOMPLEX2 ffetargetComplex2 *complex2; #endif #if FFETARGET_okCOMPLEX3 ffetargetComplex3 *complex3; #endif #if FFETARGET_okCOMPLEX4 ffetargetComplex4 *complex4; #endif #if FFETARGET_okCOMPLEX5 ffetargetComplex5 *complex5; #endif #if FFETARGET_okCOMPLEX6 ffetargetComplex6 *complex6; #endif #if FFETARGET_okCOMPLEX7 ffetargetComplex7 *complex7; #endif #if FFETARGET_okCOMPLEX8 ffetargetComplex8 *complex8; #endif #if FFETARGET_okCHARACTER1 ffetargetCharacterUnit1 *character1; #endif #if FFETARGET_okCHARACTER2 ffetargetCharacterUnit2 *character2; #endif #if FFETARGET_okCHARACTER3 ffetargetCharacterUnit3 *character3; #endif #if FFETARGET_okCHARACTER4 ffetargetCharacterUnit4 *character4; #endif #if FFETARGET_okCHARACTER5 ffetargetCharacterUnit5 *character5; #endif #if FFETARGET_okCHARACTER6 ffetargetCharacterUnit6 *character6; #endif #if FFETARGET_okCHARACTER7 ffetargetCharacterUnit7 *character7; #endif #if FFETARGET_okCHARACTER8 ffetargetCharacterUnit8 *character8; #endif }; struct _ffebld_ { ffebldOp op; ffeinfo info; /* Not used or valid for op=={STAR,ITEM,BOUNDS,REPEAT,LABTER, LABTOK,IMPDO}. */ union { struct { ffebld left; ffebld right; #ifdef FFECOM_nonterHOOK ffecomNonter hook; /* Whatever the compiler/backend wants! */ #endif } nonter; struct { ffebld head; ffebld trail; #ifdef FFECOM_itemHOOK ffecomItem hook; /* Whatever the compiler/backend wants! */ #endif } item; struct { ffebldConstant expr; ffebld orig; /* Original expression, or NULL if none. */ ffetargetAlign pad; /* Initial padding (for DATA, etc.). */ } conter; struct { ffebldConstantArray array; ffetargetOffset size; ffetargetAlign pad; /* Initial padding (for DATA, etc.). */ } arrter; struct { ffebldConstantArray array; ffebit bits; ffetargetAlign pad; /* Initial padding (for DATA, etc.). */ } accter; struct { ffesymbol symbol; ffeintrinGen generic; /* Id for generic intrinsic. */ ffeintrinSpec specific; /* Id for specific intrinsic. */ ffeintrinImp implementation; /* Id for implementation. */ bool do_iter; /* TRUE if this ref is a read-only ref by definition (ref within DO loop using this var as iterator). */ } symter; ffelab labter; ffelexToken labtok; } u; }; struct _ffebld_constant_ { ffebldConstant next; ffebldConstant first_complex; /* First complex const with me as real. */ ffebldConstant negated; /* We point to each other through here. */ ffebldConst consttype; #ifdef FFECOM_constantHOOK ffecomConstant hook; /* Whatever the compiler/backend wants! */ #endif bool numeric; /* A numeric kind of constant. */ ffebldConstantUnion u; }; struct _ffebld_pool_stack_ { ffebldPoolstack_ next; mallocPool pool; }; /* Global objects accessed by users of this module. */ extern ffebldArity ffebld_arity_op_[]; extern struct _ffebld_pool_stack_ ffebld_pool_stack_; /* Declare functions with prototypes. */ int ffebld_constant_cmp (ffebldConstant c1, ffebldConstant c2); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffebld_constant_dump (ffebldConstant c); #endif bool ffebld_constant_is_magical (ffebldConstant c); bool ffebld_constant_is_zero (ffebldConstant c); #if FFETARGET_okCHARACTER1 ffebldConstant ffebld_constant_new_character1 (ffelexToken t); ffebldConstant ffebld_constant_new_character1_val (ffetargetCharacter1 val); #endif #if FFETARGET_okCHARACTER2 ffebldConstant ffebld_constant_new_character2 (ffelexToken t); ffebldConstant ffebld_constant_new_character2_val (ffetargetCharacter2 val); #endif #if FFETARGET_okCHARACTER3 ffebldConstant ffebld_constant_new_character3 (ffelexToken t); ffebldConstant ffebld_constant_new_character3_val (ffetargetCharacter3 val); #endif #if FFETARGET_okCHARACTER4 ffebldConstant ffebld_constant_new_character4 (ffelexToken t); ffebldConstant ffebld_constant_new_character4_val (ffetargetCharacter4 val); #endif #if FFETARGET_okCHARACTER5 ffebldConstant ffebld_constant_new_character5 (ffelexToken t); ffebldConstant ffebld_constant_new_character5_val (ffetargetCharacter5 val); #endif #if FFETARGET_okCHARACTER6 ffebldConstant ffebld_constant_new_character6 (ffelexToken t); ffebldConstant ffebld_constant_new_character6_val (ffetargetCharacter6 val); #endif #if FFETARGET_okCHARACTER7 ffebldConstant ffebld_constant_new_character7 (ffelexToken t); ffebldConstant ffebld_constant_new_character7_val (ffetargetCharacter7 val); #endif #if FFETARGET_okCHARACTER8 ffebldConstant ffebld_constant_new_character8 (ffelexToken t); ffebldConstant ffebld_constant_new_character8_val (ffetargetCharacter8 val); #endif #if FFETARGET_okCOMPLEX1 ffebldConstant ffebld_constant_new_complex1 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex1_val (ffetargetComplex1 val); #endif #if FFETARGET_okCOMPLEX2 ffebldConstant ffebld_constant_new_complex2 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex2_val (ffetargetComplex2 val); #endif #if FFETARGET_okCOMPLEX3 ffebldConstant ffebld_constant_new_complex3 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex3_val (ffetargetComplex3 val); #endif #if FFETARGET_okCOMPLEX4 ffebldConstant ffebld_constant_new_complex4 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex4_val (ffetargetComplex4 val); #endif #if FFETARGET_okCOMPLEX5 ffebldConstant ffebld_constant_new_complex5 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex5_val (ffetargetComplex5 val); #endif #if FFETARGET_okCOMPLEX6 ffebldConstant ffebld_constant_new_complex6 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex6_val (ffetargetComplex6 val); #endif #if FFETARGET_okCOMPLEX7 ffebldConstant ffebld_constant_new_complex7 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex7_val (ffetargetComplex7 val); #endif #if FFETARGET_okCOMPLEX8 ffebldConstant ffebld_constant_new_complex8 (ffebldConstant real, ffebldConstant imaginary); ffebldConstant ffebld_constant_new_complex8_val (ffetargetComplex8 val); #endif ffebldConstant ffebld_constant_new_hollerith (ffelexToken t); ffebldConstant ffebld_constant_new_hollerith_val (ffetargetHollerith val); #if FFETARGET_okINTEGER1 ffebldConstant ffebld_constant_new_integer1 (ffelexToken t); ffebldConstant ffebld_constant_new_integer1_val (ffetargetInteger1 val); #endif #if FFETARGET_okINTEGER2 ffebldConstant ffebld_constant_new_integer2 (ffelexToken t); ffebldConstant ffebld_constant_new_integer2_val (ffetargetInteger2 val); #endif #if FFETARGET_okINTEGER3 ffebldConstant ffebld_constant_new_integer3 (ffelexToken t); ffebldConstant ffebld_constant_new_integer3_val (ffetargetInteger3 val); #endif #if FFETARGET_okINTEGER4 ffebldConstant ffebld_constant_new_integer4 (ffelexToken t); ffebldConstant ffebld_constant_new_integer4_val (ffetargetInteger4 val); #endif #if FFETARGET_okINTEGER5 ffebldConstant ffebld_constant_new_integer5 (ffelexToken t); ffebldConstant ffebld_constant_new_integer5_val (ffetargetInteger5 val); #endif #if FFETARGET_okINTEGER6 ffebldConstant ffebld_constant_new_integer6 (ffelexToken t); ffebldConstant ffebld_constant_new_integer6_val (ffetargetInteger6 val); #endif #if FFETARGET_okINTEGER7 ffebldConstant ffebld_constant_new_integer7 (ffelexToken t); ffebldConstant ffebld_constant_new_integer7_val (ffetargetInteger7 val); #endif #if FFETARGET_okINTEGER8 ffebldConstant ffebld_constant_new_integer8 (ffelexToken t); ffebldConstant ffebld_constant_new_integer8_val (ffetargetInteger8 val); #endif ffebldConstant ffebld_constant_new_integerbinary (ffelexToken t); ffebldConstant ffebld_constant_new_integerhex (ffelexToken t); ffebldConstant ffebld_constant_new_integeroctal (ffelexToken t); #if FFETARGET_okLOGICAL1 ffebldConstant ffebld_constant_new_logical1 (bool truth); ffebldConstant ffebld_constant_new_logical1_val (ffetargetLogical1 val); #endif #if FFETARGET_okLOGICAL2 ffebldConstant ffebld_constant_new_logical2 (bool truth); ffebldConstant ffebld_constant_new_logical2_val (ffetargetLogical2 val); #endif #if FFETARGET_okLOGICAL3 ffebldConstant ffebld_constant_new_logical3 (bool truth); ffebldConstant ffebld_constant_new_logical3_val (ffetargetLogical3 val); #endif #if FFETARGET_okLOGICAL4 ffebldConstant ffebld_constant_new_logical4 (bool truth); ffebldConstant ffebld_constant_new_logical4_val (ffetargetLogical4 val); #endif #if FFETARGET_okLOGICAL5 ffebldConstant ffebld_constant_new_logical5 (bool truth); ffebldConstant ffebld_constant_new_logical5_val (ffetargetLogical5 val); #endif #if FFETARGET_okLOGICAL6 ffebldConstant ffebld_constant_new_logical6 (bool truth); ffebldConstant ffebld_constant_new_logical6_val (ffetargetLogical6 val); #endif #if FFETARGET_okLOGICAL7 ffebldConstant ffebld_constant_new_logical7 (bool truth); ffebldConstant ffebld_constant_new_logical7_val (ffetargetLogical7 val); #endif #if FFETARGET_okLOGICAL8 ffebldConstant ffebld_constant_new_logical8 (bool truth); ffebldConstant ffebld_constant_new_logical8_val (ffetargetLogical8 val); #endif #if FFETARGET_okREAL1 ffebldConstant ffebld_constant_new_real1 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real1_val (ffetargetReal1 val); #endif #if FFETARGET_okREAL2 ffebldConstant ffebld_constant_new_real2 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real2_val (ffetargetReal2 val); #endif #if FFETARGET_okREAL3 ffebldConstant ffebld_constant_new_real3 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real3_val (ffetargetReal3 val); #endif #if FFETARGET_okREAL4 ffebldConstant ffebld_constant_new_real4 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real4_val (ffetargetReal4 val); #endif #if FFETARGET_okREAL5 ffebldConstant ffebld_constant_new_real5 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real5_val (ffetargetReal5 val); #endif #if FFETARGET_okREAL6 ffebldConstant ffebld_constant_new_real6 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real6_val (ffetargetReal6 val); #endif #if FFETARGET_okREAL7 ffebldConstant ffebld_constant_new_real7 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real7_val (ffetargetReal7 val); #endif #if FFETARGET_okREAL8 ffebldConstant ffebld_constant_new_real8 (ffelexToken integer, ffelexToken decimal, ffelexToken fraction, ffelexToken exponent, ffelexToken exponent_sign, ffelexToken exponent_digits); ffebldConstant ffebld_constant_new_real8_val (ffetargetReal8 val); #endif ffebldConstant ffebld_constant_new_typeless_bm (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_bv (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_hxm (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_hxv (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_hzm (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_hzv (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_om (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_ov (ffelexToken t); ffebldConstant ffebld_constant_new_typeless_val (ffebldConst type, ffetargetTypeless val); ffebldConstant ffebld_constant_negated (ffebldConstant c); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffebld_constantarray_dump (ffebldConstantArray array, ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset size, ffebit bits); #endif ffebldConstantUnion ffebld_constantarray_get (ffebldConstantArray array, ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset offset); void ffebld_constantarray_kill (ffebldConstantArray array, ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset size); ffebldConstantArray ffebld_constantarray_new (ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset size); void ffebld_constantarray_prepare (void **aptr, void **cptr, size_t *size, ffebldConstantArray array, ffeinfoBasictype abt, ffeinfoKindtype akt, ffetargetOffset offset, ffebldConstantUnion *constant, ffeinfoBasictype cbt, ffeinfoKindtype ckt); void ffebld_constantarray_preparray (void **aptr, void **cptr, size_t *size, ffebldConstantArray array, ffeinfoBasictype abt, ffeinfoKindtype akt, ffetargetOffset offset, ffebldConstantArray source_array, ffeinfoBasictype cbt, ffeinfoKindtype ckt); void ffebld_constantarray_put (ffebldConstantArray array, ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset offset, ffebldConstantUnion constant); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffebld_constantunion_dump (ffebldConstantUnion u, ffeinfoBasictype bt, ffeinfoKindtype kt); void ffebld_dump (ffebld b); void ffebld_dump_prefix (FILE *out, ffeinfoBasictype bt, ffeinfoKindtype kt); #endif void ffebld_init_0 (void); void ffebld_init_1 (void); void ffebld_init_2 (void); ffebldListLength ffebld_list_length (ffebld l); ffebld ffebld_new_accter (ffebldConstantArray array, ffebit b); ffebld ffebld_new_arrter (ffebldConstantArray array, ffetargetOffset size); ffebld ffebld_new_conter_with_orig (ffebldConstant c, ffebld orig); ffebld ffebld_new_item (ffebld head, ffebld trail); ffebld ffebld_new_labter (ffelab l); ffebld ffebld_new_labtok (ffelexToken t); ffebld ffebld_new_none (ffebldOp o); ffebld ffebld_new_symter (ffesymbol s, ffeintrinGen gen, ffeintrinSpec spec, ffeintrinImp imp); ffebld ffebld_new_one (ffebldOp o, ffebld left); ffebld ffebld_new_two (ffebldOp o, ffebld left, ffebld right); const char *ffebld_op_string (ffebldOp o); void ffebld_pool_pop (void); void ffebld_pool_push (mallocPool pool); ffetargetCharacterSize ffebld_size_max (ffebld b); /* Define macros. */ #define ffebld_accter(b) ((b)->u.accter.array) #define ffebld_accter_bits(b) ((b)->u.accter.bits) #define ffebld_accter_pad(b) ((b)->u.accter.pad) #define ffebld_accter_set_bits(b,bt) ((b)->u.accter.bits = (bt)) #define ffebld_accter_set_pad(b,p) ((b)->u.accter.pad = (p)) #define ffebld_accter_size(b) ffebit_size((b)->u.accter.bits) #define ffebld_append_item(b,i) (**(b) = ffebld_new_item((i),NULL), \ *(b) = &((**(b))->u.item.trail)) #define ffebld_arity(b) ffebld_arity_op(ffebld_op(b)) #define ffebld_arity_op(o) (ffebld_arity_op_[o]) #define ffebld_arrter(b) ((b)->u.arrter.array) #define ffebld_arrter_pad(b) ((b)->u.arrter.pad) #define ffebld_arrter_set_pad(b,p) ((b)->u.arrter.pad = (p)) #define ffebld_arrter_set_size(b,s) ((b)->u.arrter.size = (s)) #define ffebld_arrter_size(b) ((b)->u.arrter.size) #define ffebld_basictype(b) (ffeinfo_basictype (ffebld_info ((b)))) #if FFEBLD_whereconstCURRENT_ == FFEBLD_whereconstPROGUNIT_ #define ffebld_constant_pool() ffe_pool_program_unit() #elif FFEBLD_whereconstCURRENT_ == FFEBLD_whereconstFILE_ #define ffebld_constant_pool() ffe_pool_file() #else #error #endif #define ffebld_constant_character1(c) ((c)->u.character1) #define ffebld_constant_character2(c) ((c)->u.character2) #define ffebld_constant_character3(c) ((c)->u.character3) #define ffebld_constant_character4(c) ((c)->u.character4) #define ffebld_constant_character5(c) ((c)->u.character5) #define ffebld_constant_character6(c) ((c)->u.character6) #define ffebld_constant_character7(c) ((c)->u.character7) #define ffebld_constant_character8(c) ((c)->u.character8) #define ffebld_constant_characterdefault ffebld_constant_character1 #define ffebld_constant_complex1(c) ((c)->u.complex1) #define ffebld_constant_complex2(c) ((c)->u.complex2) #define ffebld_constant_complex3(c) ((c)->u.complex3) #define ffebld_constant_complex4(c) ((c)->u.complex4) #define ffebld_constant_complex5(c) ((c)->u.complex5) #define ffebld_constant_complex6(c) ((c)->u.complex6) #define ffebld_constant_complex7(c) ((c)->u.complex7) #define ffebld_constant_complex8(c) ((c)->u.complex8) #define ffebld_constant_complexdefault ffebld_constant_complex1 #define ffebld_constant_complexdouble ffebld_constant_complex2 #define ffebld_constant_complexquad ffebld_constant_complex3 #define ffebld_constant_copy(c) (c) #define ffebld_constant_hollerith(c) ((c)->u.hollerith) #define ffebld_constant_hook(c) ((c)->hook) #define ffebld_constant_integer1(c) ((c)->u.integer1) #define ffebld_constant_integer2(c) ((c)->u.integer2) #define ffebld_constant_integer3(c) ((c)->u.integer3) #define ffebld_constant_integer4(c) ((c)->u.integer4) #define ffebld_constant_integer5(c) ((c)->u.integer5) #define ffebld_constant_integer6(c) ((c)->u.integer6) #define ffebld_constant_integer7(c) ((c)->u.integer7) #define ffebld_constant_integer8(c) ((c)->u.integer8) #define ffebld_constant_integerdefault ffebld_constant_integer1 #define ffebld_constant_is_numeric(c) ((c)->numeric) #define ffebld_constant_logical1(c) ((c)->u.logical1) #define ffebld_constant_logical2(c) ((c)->u.logical2) #define ffebld_constant_logical3(c) ((c)->u.logical3) #define ffebld_constant_logical4(c) ((c)->u.logical4) #define ffebld_constant_logical5(c) ((c)->u.logical5) #define ffebld_constant_logical6(c) ((c)->u.logical6) #define ffebld_constant_logical7(c) ((c)->u.logical7) #define ffebld_constant_logical8(c) ((c)->u.logical8) #define ffebld_constant_logicaldefault ffebld_constant_logical1 #define ffebld_constant_new_characterdefault ffebld_constant_new_character1 #define ffebld_constant_new_characterdefault_val ffebld_constant_new_character1_val #define ffebld_constant_new_complexdefault ffebld_constant_new_complex1 #define ffebld_constant_new_complexdefault_val ffebld_constant_new_complex1_val #define ffebld_constant_new_complexdouble ffebld_constant_new_complex2 #define ffebld_constant_new_complexdouble_val ffebld_constant_new_complex2_val #define ffebld_constant_new_complexquad ffebld_constant_new_complex3 #define ffebld_constant_new_complexquad_valffebld_constant_new_complex3_val #define ffebld_constant_new_integerdefault ffebld_constant_new_integer1 #define ffebld_constant_new_integerdefault_val ffebld_constant_new_integer1_val #define ffebld_constant_new_logicaldefault ffebld_constant_new_logical1 #define ffebld_constant_new_logicaldefault_val ffebld_constant_new_logical1_val #define ffebld_constant_new_realdefault ffebld_constant_new_real1 #define ffebld_constant_new_realdefault_val ffebld_constant_new_real1_val #define ffebld_constant_new_realdouble ffebld_constant_new_real2 #define ffebld_constant_new_realdouble_val ffebld_constant_new_real2_val #define ffebld_constant_new_realquad ffebld_constant_new_real3 #define ffebld_constant_new_realquad_val ffebld_constant_new_real3_val #define ffebld_constant_ptr_to_union(c) (&(c)->u) #define ffebld_constant_real1(c) ((c)->u.real1) #define ffebld_constant_real2(c) ((c)->u.real2) #define ffebld_constant_real3(c) ((c)->u.real3) #define ffebld_constant_real4(c) ((c)->u.real4) #define ffebld_constant_real5(c) ((c)->u.real5) #define ffebld_constant_real6(c) ((c)->u.real6) #define ffebld_constant_real7(c) ((c)->u.real7) #define ffebld_constant_real8(c) ((c)->u.real8) #define ffebld_constant_realdefault ffebld_constant_real1 #define ffebld_constant_realdouble ffebld_constant_real2 #define ffebld_constant_realquad ffebld_constant_real3 #define ffebld_constant_set_hook(c,h) ((c)->hook = (h)) #define ffebld_constant_set_union(c,un) ((c)->u = (un)) #define ffebld_constant_type(c) ((c)->consttype) #define ffebld_constant_typeless(c) ((c)->u.typeless) #define ffebld_constant_union(c) ((c)->u) #define ffebld_conter(b) ((b)->u.conter.expr) #define ffebld_conter_orig(b) ((b)->u.conter.orig) #define ffebld_conter_pad(b) ((b)->u.conter.pad) #define ffebld_conter_set_orig(b,o) ((b)->u.conter.orig = (o)) #define ffebld_conter_set_pad(b,p) ((b)->u.conter.pad = (p)) #define ffebld_copy(b) (b) /* ~~~Someday really make a copy. */ #define ffebld_cu_ptr_typeless(u) &(u).typeless #define ffebld_cu_ptr_hollerith(u) &(u).hollerith #define ffebld_cu_ptr_integer1(u) &(u).integer1 #define ffebld_cu_ptr_integer2(u) &(u).integer2 #define ffebld_cu_ptr_integer3(u) &(u).integer3 #define ffebld_cu_ptr_integer4(u) &(u).integer4 #define ffebld_cu_ptr_integer5(u) &(u).integer5 #define ffebld_cu_ptr_integer6(u) &(u).integer6 #define ffebld_cu_ptr_integer7(u) &(u).integer7 #define ffebld_cu_ptr_integer8(u) &(u).integer8 #define ffebld_cu_ptr_integerdefault ffebld_cu_ptr_integer1 #define ffebld_cu_ptr_logical1(u) &(u).logical1 #define ffebld_cu_ptr_logical2(u) &(u).logical2 #define ffebld_cu_ptr_logical3(u) &(u).logical3 #define ffebld_cu_ptr_logical4(u) &(u).logical4 #define ffebld_cu_ptr_logical5(u) &(u).logical5 #define ffebld_cu_ptr_logical6(u) &(u).logical6 #define ffebld_cu_ptr_logical7(u) &(u).logical7 #define ffebld_cu_ptr_logical8(u) &(u).logical8 #define ffebld_cu_ptr_logicaldefault ffebld_cu_ptr_logical1 #define ffebld_cu_ptr_real1(u) &(u).real1 #define ffebld_cu_ptr_real2(u) &(u).real2 #define ffebld_cu_ptr_real3(u) &(u).real3 #define ffebld_cu_ptr_real4(u) &(u).real4 #define ffebld_cu_ptr_real5(u) &(u).real5 #define ffebld_cu_ptr_real6(u) &(u).real6 #define ffebld_cu_ptr_real7(u) &(u).real7 #define ffebld_cu_ptr_real8(u) &(u).real8 #define ffebld_cu_ptr_realdefault ffebld_cu_ptr_real1 #define ffebld_cu_ptr_realdouble ffebld_cu_ptr_real2 #define ffebld_cu_ptr_realquad ffebld_cu_ptr_real3 #define ffebld_cu_ptr_complex1(u) &(u).complex1 #define ffebld_cu_ptr_complex2(u) &(u).complex2 #define ffebld_cu_ptr_complex3(u) &(u).complex3 #define ffebld_cu_ptr_complex4(u) &(u).complex4 #define ffebld_cu_ptr_complex5(u) &(u).complex5 #define ffebld_cu_ptr_complex6(u) &(u).complex6 #define ffebld_cu_ptr_complex7(u) &(u).complex7 #define ffebld_cu_ptr_complex8(u) &(u).complex8 #define ffebld_cu_ptr_complexdefault ffebld_cu_ptr_complex1 #define ffebld_cu_ptr_complexdouble ffebld_cu_ptr_complex2 #define ffebld_cu_ptr_complexquad ffebld_cu_ptr_complex3 #define ffebld_cu_ptr_character1(u) &(u).character1 #define ffebld_cu_ptr_character2(u) &(u).character2 #define ffebld_cu_ptr_character3(u) &(u).character3 #define ffebld_cu_ptr_character4(u) &(u).character4 #define ffebld_cu_ptr_character5(u) &(u).character5 #define ffebld_cu_ptr_character6(u) &(u).character6 #define ffebld_cu_ptr_character7(u) &(u).character7 #define ffebld_cu_ptr_character8(u) &(u).character8 #define ffebld_cu_val_typeless(u) (u).typeless #define ffebld_cu_val_hollerith(u) (u).hollerith #define ffebld_cu_val_integer1(u) (u).integer1 #define ffebld_cu_val_integer2(u) (u).integer2 #define ffebld_cu_val_integer3(u) (u).integer3 #define ffebld_cu_val_integer4(u) (u).integer4 #define ffebld_cu_val_integer5(u) (u).integer5 #define ffebld_cu_val_integer6(u) (u).integer6 #define ffebld_cu_val_integer7(u) (u).integer7 #define ffebld_cu_val_integer8(u) (u).integer8 #define ffebld_cu_val_integerdefault ffebld_cu_val_integer1 #define ffebld_cu_val_logical1(u) (u).logical1 #define ffebld_cu_val_logical2(u) (u).logical2 #define ffebld_cu_val_logical3(u) (u).logical3 #define ffebld_cu_val_logical4(u) (u).logical4 #define ffebld_cu_val_logical5(u) (u).logical5 #define ffebld_cu_val_logical6(u) (u).logical6 #define ffebld_cu_val_logical7(u) (u).logical7 #define ffebld_cu_val_logical8(u) (u).logical8 #define ffebld_cu_val_logicaldefault ffebld_cu_val_logical #define ffebld_cu_val_real1(u) (u).real1 #define ffebld_cu_val_real2(u) (u).real2 #define ffebld_cu_val_real3(u) (u).real3 #define ffebld_cu_val_real4(u) (u).real4 #define ffebld_cu_val_real5(u) (u).real5 #define ffebld_cu_val_real6(u) (u).real6 #define ffebld_cu_val_real7(u) (u).real7 #define ffebld_cu_val_real8(u) (u).real8 #define ffebld_cu_val_realdefault ffebld_cu_val_real1 #define ffebld_cu_val_realdouble ffebld_cu_val_real2 #define ffebld_cu_val_realquad ffebld_cu_val_real3 #define ffebld_cu_val_complex1(u) (u).complex1 #define ffebld_cu_val_complex2(u) (u).complex2 #define ffebld_cu_val_complex3(u) (u).complex3 #define ffebld_cu_val_complex4(u) (u).complex4 #define ffebld_cu_val_complex5(u) (u).complex5 #define ffebld_cu_val_complex6(u) (u).complex6 #define ffebld_cu_val_complex7(u) (u).complex7 #define ffebld_cu_val_complex8(u) (u).complex8 #define ffebld_cu_val_complexdefault ffebld_cu_val_complex1 #define ffebld_cu_val_complexdouble ffebld_cu_val_complex2 #define ffebld_cu_val_complexquad ffebld_cu_val_complex3 #define ffebld_cu_val_character1(u) (u).character1 #define ffebld_cu_val_character2(u) (u).character2 #define ffebld_cu_val_character3(u) (u).character3 #define ffebld_cu_val_character4(u) (u).character4 #define ffebld_cu_val_character5(u) (u).character5 #define ffebld_cu_val_character6(u) (u).character6 #define ffebld_cu_val_character7(u) (u).character7 #define ffebld_cu_val_character8(u) (u).character8 #define ffebld_end_list(b) (*(b) = NULL) #define ffebld_head(b) ((b)->u.item.head) #define ffebld_info(b) ((b)->info) #define ffebld_init_3() #define ffebld_init_4() #define ffebld_init_list(l,b) (*(l) = NULL, *(b) = (l)) #define ffebld_item_hook(b) ((b)->u.item.hook) #define ffebld_item_set_hook(b,h) ((b)->u.item.hook = (h)) #define ffebld_kind(b) (ffeinfo_kind (ffebld_info ((b)))) #define ffebld_kindtype(b) (ffeinfo_kindtype (ffebld_info ((b)))) #define ffebld_labter(b) ((b)->u.labter) #define ffebld_labtok(b) ((b)->u.labtok) #define ffebld_left(b) ((b)->u.nonter.left) #define ffebld_name_string(n) ((n)->name) #define ffebld_new() \ ((ffebld) malloc_new_kp(ffebld_pool(), "FFEBLD",sizeof(struct _ffebld_))) #define ffebld_new_any() ffebld_new_none(FFEBLD_opANY) #define ffebld_new_conter(c) ffebld_new_conter_with_orig((c),NULL) #define ffebld_new_star() ffebld_new_none(FFEBLD_opSTAR) #define ffebld_new_uplus(l) ffebld_new_one(FFEBLD_opUPLUS,(l)) #define ffebld_new_uminus(l) ffebld_new_one(FFEBLD_opUMINUS,(l)) #define ffebld_new_add(l,r) ffebld_new_two(FFEBLD_opADD,(l),(r)) #define ffebld_new_subtract(l,r) ffebld_new_two(FFEBLD_opSUBTRACT,(l),(r)) #define ffebld_new_multiply(l,r) ffebld_new_two(FFEBLD_opMULTIPLY,(l),(r)) #define ffebld_new_divide(l,r) ffebld_new_two(FFEBLD_opDIVIDE,(l),(r)) #define ffebld_new_power(l,r) ffebld_new_two(FFEBLD_opPOWER,(l),(r)) #define ffebld_new_bounds(l,r) ffebld_new_two(FFEBLD_opBOUNDS,(l),(r)) #define ffebld_new_concatenate(l,r) ffebld_new_two(FFEBLD_opCONCATENATE,(l),(r)) #define ffebld_new_not(l) ffebld_new_one(FFEBLD_opNOT,(l)) #define ffebld_new_lt(l,r) ffebld_new_two(FFEBLD_opLT,(l),(r)) #define ffebld_new_le(l,r) ffebld_new_two(FFEBLD_opLE,(l),(r)) #define ffebld_new_eq(l,r) ffebld_new_two(FFEBLD_opEQ,(l),(r)) #define ffebld_new_ne(l,r) ffebld_new_two(FFEBLD_opNE,(l),(r)) #define ffebld_new_gt(l,r) ffebld_new_two(FFEBLD_opGT,(l),(r)) #define ffebld_new_ge(l,r) ffebld_new_two(FFEBLD_opGE,(l),(r)) #define ffebld_new_and(l,r) ffebld_new_two(FFEBLD_opAND,(l),(r)) #define ffebld_new_or(l,r) ffebld_new_two(FFEBLD_opOR,(l),(r)) #define ffebld_new_xor(l,r) ffebld_new_two(FFEBLD_opXOR,(l),(r)) #define ffebld_new_eqv(l,r) ffebld_new_two(FFEBLD_opEQV,(l),(r)) #define ffebld_new_neqv(l,r) ffebld_new_two(FFEBLD_opNEQV,(l),(r)) #define ffebld_new_paren(l) ffebld_new_one(FFEBLD_opPAREN,(l)) #define ffebld_new_repeat(l,r) ffebld_new_two(FFEBLD_opREPEAT,(l),(r)) #define ffebld_new_percent_descr(l) ffebld_new_one(FFEBLD_opPERCENT_DESCR,(l)) #define ffebld_new_percent_loc(l) ffebld_new_one(FFEBLD_opPERCENT_LOC,(l)) #define ffebld_new_percent_ref(l) ffebld_new_one(FFEBLD_opPERCENT_REF,(l)) #define ffebld_new_percent_val(l) ffebld_new_one(FFEBLD_opPERCENT_VAL,(l)) #define ffebld_new_complex(l,r) ffebld_new_two(FFEBLD_opCOMPLEX,(l),(r)) #define ffebld_new_convert(l) ffebld_new_one(FFEBLD_opCONVERT,(l)) #define ffebld_new_funcref(l,r) ffebld_new_two(FFEBLD_opFUNCREF,(l),(r)) #define ffebld_new_subrref(l,r) ffebld_new_two(FFEBLD_opSUBRREF,(l),(r)) #define ffebld_new_arrayref(l,r) ffebld_new_two(FFEBLD_opARRAYREF,(l),(r)) #define ffebld_new_substr(l,r) ffebld_new_two(FFEBLD_opSUBSTR,(l),(r)) #define ffebld_new_impdo(l,r) ffebld_new_two(FFEBLD_opIMPDO,(l),(r)) #define ffebld_nonter_hook(b) ((b)->u.nonter.hook) #define ffebld_nonter_set_hook(b,h) ((b)->u.nonter.hook = (h)) #define ffebld_op(b) ((b)->op) #define ffebld_pool() (ffebld_pool_stack_.pool) #define ffebld_rank(b) (ffeinfo_rank (ffebld_info ((b)))) #define ffebld_right(b) ((b)->u.nonter.right) #define ffebld_set_accter(b,a) ((b)->u.accter.array = (a)) #define ffebld_set_arrter(b,a) ((b)->u.arrter.array = (a)) #define ffebld_set_conter(b,c) ((b)->u.conter.expr = (c)) #define ffebld_set_info(b,i) ((b)->info = (i)) #define ffebld_set_labter(b,l) ((b)->u.labter = (l)) #define ffebld_set_op(b,o) ((b)->op = (o)) #define ffebld_set_head(b,h) ((b)->u.item.head = (h)) #define ffebld_set_left(b,l) ((b)->u.nonter.left = (l)) #define ffebld_set_right(b,r) ((b)->u.nonter.right = (r)) #define ffebld_set_trail(b,t) ((b)->u.item.trail = (t)) #define ffebld_size(b) (ffeinfo_size (ffebld_info ((b)))) #define ffebld_size_known(b) ffebld_size((b)) #define ffebld_symter(b) ((b)->u.symter.symbol) #define ffebld_symter_generic(b) ((b)->u.symter.generic) #define ffebld_symter_doiter(b) ((b)->u.symter.do_iter) #define ffebld_symter_implementation(b) ((b)->u.symter.implementation) #define ffebld_symter_specific(b) ((b)->u.symter.specific) #define ffebld_symter_set_generic(b,g) ((b)->u.symter.generic = (g)) #define ffebld_symter_set_implementation(b,i) \ ((b)->u.symter.implementation = (i)) #define ffebld_symter_set_is_doiter(b,f) ((b)->u.symter.do_iter = (f)) #define ffebld_symter_set_specific(b,s) ((b)->u.symter.specific = (s)) #define ffebld_terminate_0() #define ffebld_terminate_1() #define ffebld_terminate_2() #define ffebld_terminate_3() #define ffebld_terminate_4() #define ffebld_trail(b) ((b)->u.item.trail) #define ffebld_where(b) (ffeinfo_where (ffebld_info ((b)))) /* End of #include file. */ #endif