]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/f/expr.h
PR c++/17413
[thirdparty/gcc.git] / gcc / f / expr.h
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 */