Block-Structured AMR Software Framework
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
AMReX_Parser_Exe.H
Go to the documentation of this file.
1#ifndef AMREX_PARSER_EXE_H_
2#define AMREX_PARSER_EXE_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_Parser_Y.H>
6#include <AMReX_Stack.H>
7#include <AMReX_Vector.H>
8
9#include <limits>
10
11#ifndef AMREX_PARSER_STACK_SIZE
12#define AMREX_PARSER_STACK_SIZE 16
13#endif
14
15#define AMREX_PARSER_LOCAL_IDX0 1000
16#define AMREX_PARSER_GET_DATA(i) ((i)<1000) ? x[i] : pstack[(i)-1000]
17
18namespace amrex {
19
20// N: node
21// P: pointer offset
22// V: value (i.e., double literal)
23
58
59struct alignas(8) ParserExeNull {
61};
62
63struct alignas(8) ParserExeNumber {
65 double v;
66};
67
68struct alignas(8) ParserExeSymbol {
70 int i;
71};
72
73struct alignas(8) ParserExeADD {
75};
76
77struct alignas(8) ParserExeSUB_F {
79};
80
81struct alignas(8) ParserExeSUB_B {
83};
84
85struct alignas(8) ParserExeMUL {
87};
88
89struct alignas(8) ParserExeDIV_F {
91};
92
93struct alignas(8) ParserExeDIV_B {
95};
96
101
106
111
112struct alignas(8) ParserExeADD_VP {
114 int i;
115 double v;
116};
117
118struct alignas(8) ParserExeSUB_VP {
120 int i;
121 double v;
122};
123
124struct alignas(8) ParserExeMUL_VP {
126 int i;
127 double v;
128};
129
130struct alignas(8) ParserExeDIV_VP {
132 int i;
133 double v;
134};
135
136struct alignas(8) ParserExeADD_PP {
138 int i1;
139 int i2;
140};
141
142struct alignas(8) ParserExeSUB_PP {
144 int i1;
145 int i2;
146};
147
148struct alignas(8) ParserExeMUL_PP {
150 int i1;
151 int i2;
152};
153
154struct alignas(8) ParserExeDIV_PP {
156 int i1;
157 int i2;
158};
159
160struct alignas(8) ParserExeADD_VN {
162 double v;
163};
164
165struct alignas(8) ParserExeSUB_VN {
167 double v;
168};
169
170struct alignas(8) ParserExeMUL_VN {
172 double v;
173};
174
175struct alignas(8) ParserExeDIV_VN {
177 double v;
178};
179
180struct alignas(8) ParserExeADD_PN {
182 int i;
183};
184
185struct alignas(8) ParserExeSUB_PN {
187 int i;
188 double sign;
189};
190
191struct alignas(8) ParserExeMUL_PN {
193 int i;
194};
195
196struct alignas(8) ParserExeDIV_PN {
198 int i;
200};
201
202struct alignas(8) ParserExeSquare {
204};
205
206struct alignas(8) ParserExePOWI {
208 int i;
209};
210
211struct alignas(8) ParserExeIF {
214};
215
216struct alignas(8) ParserExeJUMP {
219};
220
222double parser_exe_eval (const char* p, double const* x)
223{
224 if (p == nullptr) { return std::numeric_limits<double>::max(); }
225
227 while (*((parser_exe_t*)p) != PARSER_EXE_NULL) { // NOLINT
228 switch (*((parser_exe_t*)p))
229 {
231 {
232 pstack.push(((ParserExeNumber*)p)->v);
233 p += sizeof(ParserExeNumber);
234 break;
235 }
237 {
238 int i = ((ParserExeSymbol*)p)->i;
239 double d = AMREX_PARSER_GET_DATA(i);
240 pstack.push(d);
241 p += sizeof(ParserExeSymbol);
242 break;
243 }
244 case PARSER_EXE_ADD:
245 {
246 double b = pstack.top(); // NOLINT
247 pstack.pop();
248 pstack.top() += b; // NOLINT
249 p += sizeof(ParserExeADD);
250 break;
251 }
252 case PARSER_EXE_SUB_F:
253 {
254 double b = pstack.top(); // NOLINT
255 pstack.pop();
256 pstack.top() -= b; // NOLINT
257 p += sizeof(ParserExeSUB_F);
258 break;
259 }
260 case PARSER_EXE_SUB_B:
261 {
262 double b = pstack.top(); // NOLINT
263 pstack.pop();
264 pstack.top() = b - pstack.top(); // NOLINT
265 p += sizeof(ParserExeSUB_B);
266 break;
267 }
268 case PARSER_EXE_MUL:
269 {
270 double b = pstack.top(); // NOLINT
271 pstack.pop();
272 pstack.top() *= b; // NOLINT
273 p += sizeof(ParserExeMUL);
274 break;
275 }
276 case PARSER_EXE_DIV_F:
277 {
278 double v = pstack.top(); // NOLINT
279 pstack.pop();
280 pstack.top() /= v; // NOLINT
281 p += sizeof(ParserExeDIV_F);
282 break;
283 }
284 case PARSER_EXE_DIV_B:
285 {
286 double v = pstack.top(); // NOLINT
287 pstack.pop();
288 pstack.top() = v / pstack.top(); // NOLINT
289 p += sizeof(ParserExeDIV_B);
290 break;
291 }
292 case PARSER_EXE_F1:
293 {
294 pstack.top() = parser_call_f1(((ParserExeF1*)p)->ftype, pstack.top()); // NOLINT
295 p += sizeof(ParserExeF1);
296 break;
297 }
298 case PARSER_EXE_F2_F:
299 {
300 double v = pstack.top(); // NOLINT
301 pstack.pop();
302 pstack.top() = parser_call_f2(((ParserExeF2_F*)p)->ftype, pstack.top(), v); // NOLINT
303 p += sizeof(ParserExeF2_F);
304 break;
305 }
306 case PARSER_EXE_F2_B:
307 {
308 double v = pstack.top(); // NOLINT
309 pstack.pop();
310 pstack.top() = parser_call_f2(((ParserExeF2_B*)p)->ftype, v, pstack.top()); // NOLINT
311 p += sizeof(ParserExeF2_B);
312 break;
313 }
315 {
316 int i = ((ParserExeADD_VP*)p)->i;
317 double d = AMREX_PARSER_GET_DATA(i);
318 pstack.push(((ParserExeADD_VP*)p)->v + d);
319 p += sizeof(ParserExeADD_VP);
320 break;
321 }
323 {
324 int i = ((ParserExeSUB_VP*)p)->i;
325 double d = AMREX_PARSER_GET_DATA(i);
326 pstack.push(((ParserExeSUB_VP*)p)->v - d);
327 p += sizeof(ParserExeSUB_VP);
328 break;
329 }
331 {
332 int i = ((ParserExeMUL_VP*)p)->i;
333 double d = AMREX_PARSER_GET_DATA(i);
334 pstack.push(((ParserExeMUL_VP*)p)->v * d);
335 p += sizeof(ParserExeMUL_VP);
336 break;
337 }
339 {
340 int i = ((ParserExeDIV_VP*)p)->i;
341 double d = AMREX_PARSER_GET_DATA(i);
342 pstack.push(((ParserExeDIV_VP*)p)->v / d);
343 p += sizeof(ParserExeDIV_VP);
344 break;
345 }
347 {
348 int i = ((ParserExeADD_PP*)p)->i1;
349 double d1 = AMREX_PARSER_GET_DATA(i);
350 i = ((ParserExeADD_PP*)p)->i2;
351 double d2 = AMREX_PARSER_GET_DATA(i);
352 pstack.push(d1+d2);
353 p += sizeof(ParserExeADD_PP);
354 break;
355 }
357 {
358 int i = ((ParserExeSUB_PP*)p)->i1;
359 double d1 = AMREX_PARSER_GET_DATA(i);
360 i = ((ParserExeSUB_PP*)p)->i2;
361 double d2 = AMREX_PARSER_GET_DATA(i);
362 pstack.push(d1-d2);
363 p += sizeof(ParserExeSUB_PP);
364 break;
365 }
367 {
368 int i = ((ParserExeMUL_PP*)p)->i1;
369 double d1 = AMREX_PARSER_GET_DATA(i);
370 i = ((ParserExeMUL_PP*)p)->i2;
371 double d2 = AMREX_PARSER_GET_DATA(i);
372 pstack.push(d1*d2);
373 p += sizeof(ParserExeMUL_PP);
374 break;
375 }
377 {
378 int i = ((ParserExeDIV_PP*)p)->i1;
379 double d1 = AMREX_PARSER_GET_DATA(i);
380 i = ((ParserExeDIV_PP*)p)->i2;
381 double d2 = AMREX_PARSER_GET_DATA(i);
382 pstack.push(d1/d2);
383 p += sizeof(ParserExeDIV_PP);
384 break;
385 }
387 {
388 pstack.top() += ((ParserExeADD_VN*)p)->v; // NOLINT
389 p += sizeof(ParserExeADD_VN);
390 break;
391 }
393 {
394 pstack.top() = ((ParserExeSUB_VN*)p)->v - pstack.top(); // NOLINT
395 p += sizeof(ParserExeSUB_VN);
396 break;
397 }
399 {
400 pstack.top() *= ((ParserExeMUL_VN*)p)->v; // NOLINT
401 p += sizeof(ParserExeMUL_VN);
402 break;
403 }
405 {
406 pstack.top() = ((ParserExeDIV_VN*)p)->v / pstack.top(); // NOLINT
407 p += sizeof(ParserExeDIV_VN);
408 break;
409 }
411 {
412 int i = ((ParserExeADD_PN*)p)->i;
413 double d = AMREX_PARSER_GET_DATA(i);
414 pstack.top() += d; // NOLINT
415 p += sizeof(ParserExeADD_PN);
416 break;
417 }
419 {
420 int i = ((ParserExeSUB_PN*)p)->i;
421 double d = AMREX_PARSER_GET_DATA(i);
422 pstack.top() = (d - pstack.top()) * (((ParserExeSUB_PN*)p)->sign); // NOLINT
423 p += sizeof(ParserExeSUB_PN);
424 break;
425 }
427 {
428 int i = ((ParserExeMUL_PN*)p)->i;
429 double d = AMREX_PARSER_GET_DATA(i);
430 pstack.top() *= d; // NOLINT
431 p += sizeof(ParserExeMUL_PN);
432 break;
433 }
435 {
436 int i = ((ParserExeDIV_PN*)p)->i;
437 double d = AMREX_PARSER_GET_DATA(i);
438 if (((ParserExeDIV_PN*)p)->reverse) {
439 pstack.top() /= d; // NOLINT
440 } else {
441 pstack.top() = d / pstack.top(); // NOLINT
442 }
443 p += sizeof(ParserExeDIV_PN);
444 break;
445 }
447 {
448 double& d = pstack.top();
449 d *= d;
450 p += sizeof(ParserExeSquare);
451 break;
452 }
453 case PARSER_EXE_POWI:
454 {
455 double& d = pstack.top();
456 int n = ((ParserExePOWI*)p)->i;
457 if (n != 0) {
458 if (n < 0) {
459 d = 1.0/d;
460 n = -n;
461 }
462 double y = 1.0;
463 while (n > 1) {
464 if (n % 2 == 0) {
465 d *= d;
466 n = n/2;
467 } else {
468 y *= d;
469 d *= d;
470 n = (n-1)/2;
471 }
472 }
473 d *= y;
474 } else {
475 d = 1.0;
476 }
477 p += sizeof(ParserExePOWI);
478 break;
479 }
480 case PARSER_EXE_IF:
481 {
482 double cond = pstack.top(); // NOLINT
483 pstack.pop();
484 if (cond == 0.0) { // false branch
485 p += ((ParserExeIF*)p)->offset;
486 }
487 p += sizeof(ParserExeIF);
488 break;
489 }
490 case PARSER_EXE_JUMP:
491 {
492 int offset = ((ParserExeJUMP*)p)->offset;
493 p += sizeof(ParserExeJUMP) + offset;
494 break;
495 }
496 default:
497 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(false,"parser_exe_eval: unknown node type");
498 }
499 }
500 return pstack.top(); // NOLINT
501}
502
503void parser_compile_exe_size (struct parser_node* node, char*& p, std::size_t& exe_size,
504 int& max_stack_size, int& stack_size, Vector<char const*>& local_variables);
505
506inline std::size_t
507parser_exe_size (struct amrex_parser* parser, int& max_stack_size, int& stack_size)
508{
509 parser_ast_sort(parser->ast);
510 char* p = nullptr;
511 std::size_t exe_size = 0;
512 max_stack_size = 0;
513 stack_size = 0;
514 Vector<char const*> local_variables;
515 parser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables);
516 stack_size -= static_cast<int>(local_variables.size())+1;
517 return exe_size+sizeof(ParserExeNull);
518}
519
520inline Vector<char const*>
521parser_compile (struct amrex_parser* parser, char* p)
522{
523 std::size_t exe_size = 0;
524 int max_stack_size = 0;
525 int stack_size = 0;
526 Vector<char const*> local_variables;
527 parser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables);
528 new(p) ParserExeNull;
529 return local_variables;
530}
531
532void parser_exe_print(char const* parser, Vector<std::string> const& vars,
533 Vector<char const*> const& locals);
534
535}
536
537#endif
#define AMREX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition AMReX_BLassert.H:49
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Array4< int const > offset
Definition AMReX_HypreMLABecLap.cpp:1089
#define AMREX_PARSER_GET_DATA(i)
Definition AMReX_Parser_Exe.H:16
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:27
Long size() const noexcept
Definition AMReX_Vector.H:50
Definition AMReX_Amr.cpp:49
parser_f2_t
Definition AMReX_Parser_Y.H:81
parser_exe_t
Definition AMReX_Parser_Exe.H:24
@ PARSER_EXE_SUB_VP
Definition AMReX_Parser_Exe.H:38
@ PARSER_EXE_POWI
Definition AMReX_Parser_Exe.H:54
@ PARSER_EXE_ADD_VN
Definition AMReX_Parser_Exe.H:45
@ PARSER_EXE_NUMBER
Definition AMReX_Parser_Exe.H:26
@ PARSER_EXE_SYMBOL
Definition AMReX_Parser_Exe.H:27
@ PARSER_EXE_DIV_B
Definition AMReX_Parser_Exe.H:33
@ PARSER_EXE_DIV_VN
Definition AMReX_Parser_Exe.H:48
@ PARSER_EXE_F2_B
Definition AMReX_Parser_Exe.H:36
@ PARSER_EXE_SUB_F
Definition AMReX_Parser_Exe.H:29
@ PARSER_EXE_SUB_VN
Definition AMReX_Parser_Exe.H:46
@ PARSER_EXE_SQUARE
Definition AMReX_Parser_Exe.H:53
@ PARSER_EXE_F2_F
Definition AMReX_Parser_Exe.H:35
@ PARSER_EXE_ADD
Definition AMReX_Parser_Exe.H:28
@ PARSER_EXE_DIV_PN
Definition AMReX_Parser_Exe.H:52
@ PARSER_EXE_ADD_VP
Definition AMReX_Parser_Exe.H:37
@ PARSER_EXE_MUL_PP
Definition AMReX_Parser_Exe.H:43
@ PARSER_EXE_SUB_PN
Definition AMReX_Parser_Exe.H:50
@ PARSER_EXE_MUL_VN
Definition AMReX_Parser_Exe.H:47
@ PARSER_EXE_ADD_PN
Definition AMReX_Parser_Exe.H:49
@ PARSER_EXE_JUMP
Definition AMReX_Parser_Exe.H:56
@ PARSER_EXE_ADD_PP
Definition AMReX_Parser_Exe.H:41
@ PARSER_EXE_MUL_PN
Definition AMReX_Parser_Exe.H:51
@ PARSER_EXE_MUL
Definition AMReX_Parser_Exe.H:31
@ PARSER_EXE_MUL_VP
Definition AMReX_Parser_Exe.H:39
@ PARSER_EXE_SUB_B
Definition AMReX_Parser_Exe.H:30
@ PARSER_EXE_NULL
Definition AMReX_Parser_Exe.H:25
@ PARSER_EXE_F1
Definition AMReX_Parser_Exe.H:34
@ PARSER_EXE_DIV_F
Definition AMReX_Parser_Exe.H:32
@ PARSER_EXE_IF
Definition AMReX_Parser_Exe.H:55
@ PARSER_EXE_DIV_VP
Definition AMReX_Parser_Exe.H:40
@ PARSER_EXE_SUB_PP
Definition AMReX_Parser_Exe.H:42
@ PARSER_EXE_DIV_PP
Definition AMReX_Parser_Exe.H:44
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE double parser_call_f1(enum parser_f1_t type, double a)
Definition AMReX_Parser_Y.H:421
Vector< char const * > parser_compile(struct amrex_parser *parser, char *p)
Definition AMReX_Parser_Exe.H:521
void parser_ast_sort(struct parser_node *node)
Definition AMReX_Parser_Y.cpp:1456
parser_f1_t
Definition AMReX_Parser_Y.H:24
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE double parser_call_f2(enum parser_f2_t type, double a, double b)
Definition AMReX_Parser_Y.H:453
void parser_compile_exe_size(struct parser_node *node, char *&p, std::size_t &exe_size, int &max_stack_size, int &stack_size, Vector< char const * > &local_variables)
Definition AMReX_Parser_Exe.cpp:7
std::size_t parser_exe_size(struct amrex_parser *parser, int &max_stack_size, int &stack_size)
Definition AMReX_Parser_Exe.H:507
void parser_exe_print(char const *p, Vector< std::string > const &vars, Vector< char const * > const &locals)
Definition AMReX_Parser_Exe.cpp:641
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE double parser_exe_eval(const char *p, double const *x)
Definition AMReX_Parser_Exe.H:222
Definition AMReX_Parser_Exe.H:180
int i
Definition AMReX_Parser_Exe.H:182
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:181
Definition AMReX_Parser_Exe.H:136
int i1
Definition AMReX_Parser_Exe.H:138
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:137
int i2
Definition AMReX_Parser_Exe.H:139
Definition AMReX_Parser_Exe.H:160
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:161
double v
Definition AMReX_Parser_Exe.H:162
Definition AMReX_Parser_Exe.H:112
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:113
double v
Definition AMReX_Parser_Exe.H:115
int i
Definition AMReX_Parser_Exe.H:114
Definition AMReX_Parser_Exe.H:73
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:74
Definition AMReX_Parser_Exe.H:93
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:94
Definition AMReX_Parser_Exe.H:89
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:90
Definition AMReX_Parser_Exe.H:196
bool reverse
Definition AMReX_Parser_Exe.H:199
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:197
int i
Definition AMReX_Parser_Exe.H:198
Definition AMReX_Parser_Exe.H:154
int i2
Definition AMReX_Parser_Exe.H:157
int i1
Definition AMReX_Parser_Exe.H:156
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:155
Definition AMReX_Parser_Exe.H:175
double v
Definition AMReX_Parser_Exe.H:177
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:176
Definition AMReX_Parser_Exe.H:130
double v
Definition AMReX_Parser_Exe.H:133
int i
Definition AMReX_Parser_Exe.H:132
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:131
Definition AMReX_Parser_Exe.H:97
parser_f1_t ftype
Definition AMReX_Parser_Exe.H:99
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:98
Definition AMReX_Parser_Exe.H:107
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:108
parser_f2_t ftype
Definition AMReX_Parser_Exe.H:109
Definition AMReX_Parser_Exe.H:102
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:103
parser_f2_t ftype
Definition AMReX_Parser_Exe.H:104
Definition AMReX_Parser_Exe.H:211
int offset
Definition AMReX_Parser_Exe.H:213
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:212
Definition AMReX_Parser_Exe.H:216
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:217
int offset
Definition AMReX_Parser_Exe.H:218
Definition AMReX_Parser_Exe.H:191
int i
Definition AMReX_Parser_Exe.H:193
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:192
Definition AMReX_Parser_Exe.H:148
int i1
Definition AMReX_Parser_Exe.H:150
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:149
int i2
Definition AMReX_Parser_Exe.H:151
Definition AMReX_Parser_Exe.H:170
double v
Definition AMReX_Parser_Exe.H:172
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:171
Definition AMReX_Parser_Exe.H:124
double v
Definition AMReX_Parser_Exe.H:127
int i
Definition AMReX_Parser_Exe.H:126
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:125
Definition AMReX_Parser_Exe.H:85
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:86
Definition AMReX_Parser_Exe.H:59
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:60
Definition AMReX_Parser_Exe.H:63
double v
Definition AMReX_Parser_Exe.H:65
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:64
Definition AMReX_Parser_Exe.H:206
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:207
int i
Definition AMReX_Parser_Exe.H:208
Definition AMReX_Parser_Exe.H:81
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:82
Definition AMReX_Parser_Exe.H:77
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:78
Definition AMReX_Parser_Exe.H:185
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:186
double sign
Definition AMReX_Parser_Exe.H:188
int i
Definition AMReX_Parser_Exe.H:187
Definition AMReX_Parser_Exe.H:142
int i1
Definition AMReX_Parser_Exe.H:144
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:143
int i2
Definition AMReX_Parser_Exe.H:145
Definition AMReX_Parser_Exe.H:165
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:166
double v
Definition AMReX_Parser_Exe.H:167
Definition AMReX_Parser_Exe.H:118
double v
Definition AMReX_Parser_Exe.H:121
int i
Definition AMReX_Parser_Exe.H:120
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:119
Definition AMReX_Parser_Exe.H:202
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:203
Definition AMReX_Parser_Exe.H:68
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:69
int i
Definition AMReX_Parser_Exe.H:70
Definition AMReX_Stack.H:8
constexpr void push(T v)
Definition AMReX_Stack.H:10
constexpr T const & top() const
Definition AMReX_Stack.H:14
constexpr void pop()
Definition AMReX_Stack.H:11
Definition AMReX_Parser_Y.H:257
struct parser_node * ast
Definition AMReX_Parser_Y.H:260