aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/expr.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/f/expr.h')
-rw-r--r--gcc/f/expr.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/gcc/f/expr.h b/gcc/f/expr.h
new file mode 100644
index 00000000000..db7d9fa78e7
--- /dev/null
+++ b/gcc/f/expr.h
@@ -0,0 +1,194 @@
+/* expr.h -- Public #include File (module.h template V1.0)
+ Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
+
+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 _H_f_expr
+#define _H_f_expr
+
+/* 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