xref: /openbsd/gnu/usr.bin/gcc/gcc/f/expr.h (revision c87b03e5)
1 /* expr.h -- Public #include File (module.h template V1.0)
2    Copyright (C) 1995, 1996 Free Software Foundation, Inc.
3    Contributed by James Craig Burley.
4 
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, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.
21 
22    Owning Modules:
23       expr.c
24 
25    Modifications:
26 */
27 
28 /* Allow multiple inclusion to work. */
29 
30 #ifndef GCC_F_EXPR_H
31 #define GCC_F_EXPR_H
32 
33 /* Simple definitions and enumerations. */
34 
35 typedef enum
36   {
37     FFEEXPR_contextLET,
38     FFEEXPR_contextASSIGN,
39     FFEEXPR_contextIOLIST,
40     FFEEXPR_contextPARAMETER,
41     FFEEXPR_contextSUBROUTINEREF,
42     FFEEXPR_contextDATA,
43     FFEEXPR_contextIF,
44     FFEEXPR_contextARITHIF,
45     FFEEXPR_contextDO,
46     FFEEXPR_contextDOWHILE,
47     FFEEXPR_contextFORMAT,
48     FFEEXPR_contextAGOTO,
49     FFEEXPR_contextCGOTO,
50     FFEEXPR_contextCHARACTERSIZE,
51     FFEEXPR_contextEQUIVALENCE,
52     FFEEXPR_contextSTOP,
53     FFEEXPR_contextRETURN,
54     FFEEXPR_contextSFUNCDEF,
55     FFEEXPR_contextINCLUDE,
56     FFEEXPR_contextWHERE,
57     FFEEXPR_contextSELECTCASE,
58     FFEEXPR_contextCASE,
59     FFEEXPR_contextDIMLIST,
60     FFEEXPR_contextDIMLISTCOMMON,	/* Dim list in COMMON stmt. */
61     FFEEXPR_contextFILEASSOC,	/* ASSOCIATEVARIABLE=. */
62     FFEEXPR_contextFILEINT,	/* IOSTAT=. */
63     FFEEXPR_contextFILEDFINT,	/* NEXTREC=. */
64     FFEEXPR_contextFILELOG,	/* NAMED=. */
65     FFEEXPR_contextFILENUM,	/* Numerical expression. */
66     FFEEXPR_contextFILECHAR,	/* Character expression. */
67     FFEEXPR_contextFILENUMCHAR,	/* READ KEYxyz=. */
68     FFEEXPR_contextFILEDFCHAR,	/* Default kind character expression. */
69     FFEEXPR_contextFILEKEY,	/* OPEN KEY=. */
70     FFEEXPR_contextFILEEXTFUNC,	/* USEROPEN=. */
71     FFEEXPR_contextFILEUNIT,	/* READ/WRITE UNIT=. */
72     FFEEXPR_contextFILEUNIT_DF,	/* DEFINE FILE unit (no "(" after it). */
73     FFEEXPR_contextFILEFORMATNML,	/* [FMT=] or [NML=]. */
74     FFEEXPR_contextFILEFORMAT,	/* FMT=. */
75     FFEEXPR_contextFILENAMELIST,/* NML=. */
76     FFEEXPR_contextFILENUMAMBIG,/* BACKSPACE, ENDFILE, REWIND, UNLOCK...
77 				   where at e.g. BACKSPACE(, if COMMA seen
78 				   before ), it is ok. */
79     FFEEXPR_contextFILEUNITAMBIG,	/* READ(, if COMMA seen before ), ok. */
80     FFEEXPR_contextFILEVXTCODE,	/* ENCODE/DECODE third arg (scalar/array). */
81     FFEEXPR_contextALLOCATE,	/* ALLOCATE objects (weird). */
82     FFEEXPR_contextDEALLOCATE,	/* DEALLOCATE objects (weird). */
83     FFEEXPR_contextHEAPSTAT,	/* ALLOCATE/DEALLOCATE STAT= variable. */
84     FFEEXPR_contextKINDTYPE,	/* KIND=. */
85     FFEEXPR_contextINITVAL,	/* R426 =initialization-expr. */
86     FFEEXPR_contextNULLIFY,	/* Pointer names only (F90) or pointers. */
87     FFEEXPR_contextIOLISTDF,	/* IOLIST w/internal file (V112 9-14 30,31). */
88     FFEEXPR_contextINDEX_,	/* Element dimension or substring value. */
89     FFEEXPR_contextEQVINDEX_,	/* EQUIVALENCE element dimension. */
90     FFEEXPR_contextDATAIMPDOINDEX_,	/* INDEX in DATAIMPDO context. */
91     FFEEXPR_contextIMPDOITEM_,
92     FFEEXPR_contextIMPDOITEMDF_,/* to ...ITEM_ as IOLISTDF is to IOLIST. */
93     FFEEXPR_contextIMPDOCTRL_,
94     FFEEXPR_contextDATAIMPDOITEM_,
95     FFEEXPR_contextDATAIMPDOCTRL_,
96     FFEEXPR_contextLOC_,
97     FFEEXPR_contextACTUALARG_,	/* Actual arg to function or subroutine;
98 				   turns into ACTUALARGEXPR_ if tokens not
99 				   NAME (CLOSE_PAREN/COMMA) or PERCENT.... */
100     FFEEXPR_contextACTUALARGEXPR_,	/* Like LET but disallow CHAR*(*)
101 					   concats. */
102     FFEEXPR_contextINDEXORACTUALARG_,	/* "CHARACTER FOO; PRINT *,FOO(?". */
103     FFEEXPR_contextINDEXORACTUALARGEXPR_,	/* ? not NAME
104 						   (CLOSE_PAREN/COMMA). */
105     FFEEXPR_contextSFUNCDEFINDEX_,	/* INDEX_ within stmt-func def. */
106     FFEEXPR_contextSFUNCDEFACTUALARG_,
107     FFEEXPR_contextSFUNCDEFACTUALARGEXPR_,
108     FFEEXPR_contextSFUNCDEFINDEXORACTUALARG_,
109     FFEEXPR_contextSFUNCDEFINDEXORACTUALARGEXPR_,
110     FFEEXPR_contextPAREN_,	/* Rhs paren except in LET context. */
111     FFEEXPR_contextPARENFILENUM_,	/* Either PAREN or FILENUM context. */
112     FFEEXPR_contextPARENFILEUNIT_,	/* Either PAREN or FILEUNIT context. */
113     FFEEXPR_context
114   } ffeexprContext;
115 
116 /* Typedefs. */
117 
118 
119 /* Include files needed by this one. */
120 
121 #include "bld.h"
122 #include "lex.h"
123 #include "malloc.h"
124 
125 /* Structure definitions. */
126 
127 typedef ffelexHandler (*ffeexprCallback) (ffelexToken ft, ffebld expr,
128 					  ffelexToken t);
129 
130 /* Global objects accessed by users of this module. */
131 
132 
133 /* Declare functions with prototypes. */
134 
135 ffebld ffeexpr_collapse_convert (ffebld expr, ffelexToken t);
136 ffebld ffeexpr_collapse_paren (ffebld expr, ffelexToken t);
137 ffebld ffeexpr_collapse_uplus (ffebld expr, ffelexToken t);
138 ffebld ffeexpr_collapse_uminus (ffebld expr, ffelexToken t);
139 ffebld ffeexpr_collapse_not (ffebld expr, ffelexToken t);
140 ffebld ffeexpr_collapse_add (ffebld expr, ffelexToken t);
141 ffebld ffeexpr_collapse_subtract (ffebld expr, ffelexToken t);
142 ffebld ffeexpr_collapse_multiply (ffebld expr, ffelexToken t);
143 ffebld ffeexpr_collapse_divide (ffebld expr, ffelexToken t);
144 ffebld ffeexpr_collapse_power (ffebld expr, ffelexToken t);
145 ffebld ffeexpr_collapse_concatenate (ffebld expr, ffelexToken t);
146 ffebld ffeexpr_collapse_lt (ffebld expr, ffelexToken t);
147 ffebld ffeexpr_collapse_le (ffebld expr, ffelexToken t);
148 ffebld ffeexpr_collapse_eq (ffebld expr, ffelexToken t);
149 ffebld ffeexpr_collapse_ne (ffebld expr, ffelexToken t);
150 ffebld ffeexpr_collapse_gt (ffebld expr, ffelexToken t);
151 ffebld ffeexpr_collapse_ge (ffebld expr, ffelexToken t);
152 ffebld ffeexpr_collapse_and (ffebld expr, ffelexToken t);
153 ffebld ffeexpr_collapse_or (ffebld expr, ffelexToken t);
154 ffebld ffeexpr_collapse_xor (ffebld expr, ffelexToken t);
155 ffebld ffeexpr_collapse_eqv (ffebld expr, ffelexToken t);
156 ffebld ffeexpr_collapse_neqv (ffebld expr, ffelexToken t);
157 ffebld ffeexpr_collapse_symter (ffebld expr, ffelexToken t);
158 ffebld ffeexpr_collapse_funcref (ffebld expr, ffelexToken t);
159 ffebld ffeexpr_collapse_arrayref (ffebld expr, ffelexToken t);
160 ffebld ffeexpr_collapse_substr (ffebld expr, ffelexToken t);
161 ffebld ffeexpr_convert (ffebld source, ffelexToken source_token,
162 	    ffelexToken dest_token, ffeinfoBasictype bt, ffeinfoKindtype kt,
163 			ffeinfoRank rk, ffetargetCharacterSize sz,
164 			ffeexprContext context);
165 ffebld ffeexpr_convert_expr (ffebld source, ffelexToken source_token,
166 			     ffebld dest, ffelexToken dest_token,
167 			     ffeexprContext context);
168 ffebld ffeexpr_convert_to_sym (ffebld source, ffelexToken source_token,
169 			       ffesymbol dest, ffelexToken dest_token);
170 void ffeexpr_init_2 (void);
171 ffelexHandler ffeexpr_rhs (mallocPool pool, ffeexprContext context,
172 			   ffeexprCallback callback);
173 ffelexHandler ffeexpr_lhs (mallocPool pool, ffeexprContext context,
174 			   ffeexprCallback callback);
175 void ffeexpr_terminate_2 (void);
176 void ffeexpr_type_combine (ffeinfoBasictype *nbt, ffeinfoKindtype *nkt,
177 			   ffeinfoBasictype lbt, ffeinfoKindtype lkt,
178 			   ffeinfoBasictype rbt, ffeinfoKindtype rkt,
179 			   ffelexToken t);
180 
181 /* Define macros. */
182 
183 #define ffeexpr_init_0()
184 #define ffeexpr_init_1()
185 #define ffeexpr_init_3()
186 #define ffeexpr_init_4()
187 #define ffeexpr_terminate_0()
188 #define ffeexpr_terminate_1()
189 #define ffeexpr_terminate_3()
190 #define ffeexpr_terminate_4()
191 
192 /* End of #include file. */
193 
194 #endif /* ! GCC_F_EXPR_H */
195