| /* expr.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: |
| expr.c |
| |
| Modifications: |
| */ |
| |
| /* Allow multiple inclusion to work. */ |
| |
| #ifndef GCC_F_EXPR_H |
| #define GCC_F_EXPR_H |
| |
| /* Simple definitions and enumerations. */ |
| |
| typedef enum |
| { |
| FFEEXPR_contextLET, |
| FFEEXPR_contextASSIGN, |
| FFEEXPR_contextIOLIST, |
| FFEEXPR_contextPARAMETER, |
| FFEEXPR_contextSUBROUTINEREF, |
| FFEEXPR_contextDATA, |
| FFEEXPR_contextIF, |
| FFEEXPR_contextARITHIF, |
| FFEEXPR_contextDO, |
| FFEEXPR_contextDOWHILE, |
| FFEEXPR_contextFORMAT, |
| FFEEXPR_contextAGOTO, |
| FFEEXPR_contextCGOTO, |
| FFEEXPR_contextCHARACTERSIZE, |
| FFEEXPR_contextEQUIVALENCE, |
| FFEEXPR_contextSTOP, |
| FFEEXPR_contextRETURN, |
| FFEEXPR_contextSFUNCDEF, |
| FFEEXPR_contextINCLUDE, |
| FFEEXPR_contextWHERE, |
| FFEEXPR_contextSELECTCASE, |
| FFEEXPR_contextCASE, |
| FFEEXPR_contextDIMLIST, |
| FFEEXPR_contextDIMLISTCOMMON, /* Dim list in COMMON stmt. */ |
| FFEEXPR_contextFILEASSOC, /* ASSOCIATEVARIABLE=. */ |
| FFEEXPR_contextFILEINT, /* IOSTAT=. */ |
| FFEEXPR_contextFILEDFINT, /* NEXTREC=. */ |
| FFEEXPR_contextFILELOG, /* NAMED=. */ |
| FFEEXPR_contextFILENUM, /* Numerical expression. */ |
| FFEEXPR_contextFILECHAR, /* Character expression. */ |
| FFEEXPR_contextFILENUMCHAR, /* READ KEYxyz=. */ |
| FFEEXPR_contextFILEDFCHAR, /* Default kind character expression. */ |
| FFEEXPR_contextFILEKEY, /* OPEN KEY=. */ |
| FFEEXPR_contextFILEEXTFUNC, /* USEROPEN=. */ |
| FFEEXPR_contextFILEUNIT, /* READ/WRITE UNIT=. */ |
| FFEEXPR_contextFILEUNIT_DF, /* DEFINE FILE unit (no "(" after it). */ |
| FFEEXPR_contextFILEFORMATNML, /* [FMT=] or [NML=]. */ |
| FFEEXPR_contextFILEFORMAT, /* FMT=. */ |
| FFEEXPR_contextFILENAMELIST,/* NML=. */ |
| FFEEXPR_contextFILENUMAMBIG,/* BACKSPACE, ENDFILE, REWIND, UNLOCK... |
| where at e.g. BACKSPACE(, if COMMA seen |
| before ), it is ok. */ |
| FFEEXPR_contextFILEUNITAMBIG, /* READ(, if COMMA seen before ), ok. */ |
| FFEEXPR_contextFILEVXTCODE, /* ENCODE/DECODE third arg (scalar/array). */ |
| FFEEXPR_contextALLOCATE, /* ALLOCATE objects (weird). */ |
| FFEEXPR_contextDEALLOCATE, /* DEALLOCATE objects (weird). */ |
| FFEEXPR_contextHEAPSTAT, /* ALLOCATE/DEALLOCATE STAT= variable. */ |
| FFEEXPR_contextKINDTYPE, /* KIND=. */ |
| FFEEXPR_contextINITVAL, /* R426 =initialization-expr. */ |
| FFEEXPR_contextNULLIFY, /* Pointer names only (F90) or pointers. */ |
| FFEEXPR_contextIOLISTDF, /* IOLIST w/internal file (V112 9-14 30,31). */ |
| FFEEXPR_contextINDEX_, /* Element dimension or substring value. */ |
| FFEEXPR_contextEQVINDEX_, /* EQUIVALENCE element dimension. */ |
| FFEEXPR_contextDATAIMPDOINDEX_, /* INDEX in DATAIMPDO context. */ |
| FFEEXPR_contextIMPDOITEM_, |
| FFEEXPR_contextIMPDOITEMDF_,/* to ...ITEM_ as IOLISTDF is to IOLIST. */ |
| FFEEXPR_contextIMPDOCTRL_, |
| FFEEXPR_contextDATAIMPDOITEM_, |
| FFEEXPR_contextDATAIMPDOCTRL_, |
| FFEEXPR_contextLOC_, |
| FFEEXPR_contextACTUALARG_, /* Actual arg to function or subroutine; |
| turns into ACTUALARGEXPR_ if tokens not |
| NAME (CLOSE_PAREN/COMMA) or PERCENT.... */ |
| FFEEXPR_contextACTUALARGEXPR_, /* Like LET but disallow CHAR*(*) |
| concats. */ |
| FFEEXPR_contextINDEXORACTUALARG_, /* "CHARACTER FOO; PRINT *,FOO(?". */ |
| FFEEXPR_contextINDEXORACTUALARGEXPR_, /* ? not NAME |
| (CLOSE_PAREN/COMMA). */ |
| FFEEXPR_contextSFUNCDEFINDEX_, /* INDEX_ within stmt-func def. */ |
| FFEEXPR_contextSFUNCDEFACTUALARG_, |
| FFEEXPR_contextSFUNCDEFACTUALARGEXPR_, |
| FFEEXPR_contextSFUNCDEFINDEXORACTUALARG_, |
| FFEEXPR_contextSFUNCDEFINDEXORACTUALARGEXPR_, |
| FFEEXPR_contextPAREN_, /* Rhs paren except in LET context. */ |
| FFEEXPR_contextPARENFILENUM_, /* Either PAREN or FILENUM context. */ |
| FFEEXPR_contextPARENFILEUNIT_, /* Either PAREN or FILEUNIT context. */ |
| FFEEXPR_context |
| } ffeexprContext; |
| |
| /* Typedefs. */ |
| |
| |
| /* Include files needed by this one. */ |
| |
| #include "bld.h" |
| #include "lex.h" |
| #include "malloc.h" |
| |
| /* Structure definitions. */ |
| |
| typedef ffelexHandler (*ffeexprCallback) (ffelexToken ft, ffebld expr, |
| ffelexToken t); |
| |
| /* Global objects accessed by users of this module. */ |
| |
| |
| /* Declare functions with prototypes. */ |
| |
| ffebld ffeexpr_collapse_convert (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_paren (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_uplus (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_uminus (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_not (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_add (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_subtract (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_multiply (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_divide (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_power (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_concatenate (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_lt (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_le (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_eq (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_ne (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_gt (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_ge (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_and (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_or (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_xor (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_eqv (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_neqv (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_symter (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_funcref (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_arrayref (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_collapse_substr (ffebld expr, ffelexToken t); |
| ffebld ffeexpr_convert (ffebld source, ffelexToken source_token, |
| ffelexToken dest_token, ffeinfoBasictype bt, ffeinfoKindtype kt, |
| ffeinfoRank rk, ffetargetCharacterSize sz, |
| ffeexprContext context); |
| ffebld ffeexpr_convert_expr (ffebld source, ffelexToken source_token, |
| ffebld dest, ffelexToken dest_token, |
| ffeexprContext context); |
| ffebld ffeexpr_convert_to_sym (ffebld source, ffelexToken source_token, |
| ffesymbol dest, ffelexToken dest_token); |
| void ffeexpr_init_2 (void); |
| ffelexHandler ffeexpr_rhs (mallocPool pool, ffeexprContext context, |
| ffeexprCallback callback); |
| ffelexHandler ffeexpr_lhs (mallocPool pool, ffeexprContext context, |
| ffeexprCallback callback); |
| void ffeexpr_terminate_2 (void); |
| void ffeexpr_type_combine (ffeinfoBasictype *nbt, ffeinfoKindtype *nkt, |
| ffeinfoBasictype lbt, ffeinfoKindtype lkt, |
| ffeinfoBasictype rbt, ffeinfoKindtype rkt, |
| ffelexToken t); |
| |
| /* Define macros. */ |
| |
| #define ffeexpr_init_0() |
| #define ffeexpr_init_1() |
| #define ffeexpr_init_3() |
| #define ffeexpr_init_4() |
| #define ffeexpr_terminate_0() |
| #define ffeexpr_terminate_1() |
| #define ffeexpr_terminate_3() |
| #define ffeexpr_terminate_4() |
| |
| /* End of #include file. */ |
| |
| #endif /* ! GCC_F_EXPR_H */ |