Block-Structured AMR Software Framework
 
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#include <utility>
11
12#ifndef AMREX_PARSER_STACK_SIZE
13#define AMREX_PARSER_STACK_SIZE 16
14#endif
15
16#define AMREX_PARSER_LOCAL_IDX0 1000
17#define AMREX_PARSER_GET_DATA(i) ((i)<1000) ? x[i] : pstack[(i)-1000]
18
19namespace amrex {
20
21// N: node
22// P: pointer offset
23// V: value (i.e., double literal)
24
60
61struct alignas(8) ParserExeNull {
63};
64
65struct alignas(8) ParserExeNumber {
67 double v;
68};
69
70struct alignas(8) ParserExeSymbol {
72 int i;
73};
74
75struct alignas(8) ParserExeADD {
77};
78
79struct alignas(8) ParserExeSUB_F {
81};
82
83struct alignas(8) ParserExeSUB_B {
85};
86
87struct alignas(8) ParserExeMUL {
89};
90
91struct alignas(8) ParserExeDIV_F {
93};
94
95struct alignas(8) ParserExeDIV_B {
97};
98
103
108
113
114struct alignas(8) ParserExeADD_VP {
116 int i;
117 double v;
118};
119
120struct alignas(8) ParserExeSUB_VP {
122 int i;
123 double v;
124};
125
126struct alignas(8) ParserExeMUL_VP {
128 int i;
129 double v;
130};
131
132struct alignas(8) ParserExeDIV_VP {
134 int i;
135 double v;
136};
137
138struct alignas(8) ParserExeADD_PP {
140 int i1;
141 int i2;
142};
143
144struct alignas(8) ParserExeSUB_PP {
146 int i1;
147 int i2;
148};
149
150struct alignas(8) ParserExeMUL_PP {
152 int i1;
153 int i2;
154};
155
156struct alignas(8) ParserExeDIV_PP {
158 int i1;
159 int i2;
160};
161
162struct alignas(8) ParserExeADD_VN {
164 double v;
165};
166
167struct alignas(8) ParserExeSUB_VN {
169 double v;
170};
171
172struct alignas(8) ParserExeMUL_VN {
174 double v;
175};
176
177struct alignas(8) ParserExeDIV_VN {
179 double v;
180};
181
182struct alignas(8) ParserExeADD_PN {
184 int i;
185};
186
187struct alignas(8) ParserExeSUB_PN {
189 int i;
190 double sign;
191};
192
193struct alignas(8) ParserExeMUL_PN {
195 int i;
196};
197
198struct alignas(8) ParserExeDIV_PN {
200 int i;
202};
203
204struct alignas(8) ParserExeSquare {
206};
207
208struct alignas(8) ParserExePOWI {
210 int i;
211};
212
213struct alignas(8) ParserExeIF {
216};
217
218struct alignas(8) ParserExeJUMP {
221};
222
223struct alignas(8) ParserExeUserFn {
225 short argc;
226 void* fh;
227 void* fd;
228};
229
230namespace parser_detail
231{
232 template <typename T, int N>
235 {
236 short argc = ((ParserExeUserFn*)p)->argc;
237 if (argc == 1) {
238 AMREX_IF_ON_HOST (( pstack.top() = ParserUserFn1(((ParserExeUserFn*)p)->fh)(pstack.top()); ))
239#if !defined(AMREX_USE_SYCL)
240 AMREX_IF_ON_DEVICE(( pstack.top() = ParserUserFn1(((ParserExeUserFn*)p)->fd)(pstack.top()); ))
241#endif
242 } else if (argc == 2) {
243 T a1 = pstack.top(); // NOLINT
244 pstack.pop();
245 AMREX_IF_ON_HOST (( pstack.top() = ParserUserFn2(((ParserExeUserFn*)p)->fh)(pstack.top(),a1); ))
246#if defined(AMREX_USE_SYCL)
248#else
249 AMREX_IF_ON_DEVICE(( pstack.top() = ParserUserFn2(((ParserExeUserFn*)p)->fd)(pstack.top(),a1); ))
250#endif
251 } else if (argc == 3) {
252 T a2 = pstack.top(); // NOLINT
253 pstack.pop();
254 T a1 = pstack.top(); // NOLINT
255 pstack.pop();
256 AMREX_IF_ON_HOST (( pstack.top() = ParserUserFn3(((ParserExeUserFn*)p)->fh)(pstack.top(),a1,a2); ))
257#if defined(AMREX_USE_SYCL)
259#else
260 AMREX_IF_ON_DEVICE(( pstack.top() = ParserUserFn3(((ParserExeUserFn*)p)->fd)(pstack.top(),a1,a2); ))
261#endif
262 } else if (argc == 4) {
263 T a3 = pstack.top(); // NOLINT
264 pstack.pop();
265 T a2 = pstack.top(); // NOLINT
266 pstack.pop();
267 T a1 = pstack.top(); // NOLINT
268 pstack.pop();
269 AMREX_IF_ON_HOST (( pstack.top() = ParserUserFn4(((ParserExeUserFn*)p)->fh)(pstack.top(),a1,a2,a3); ))
270#if defined(AMREX_USE_SYCL)
271 amrex::ignore_unused(a1,a2,a3);
272#else
273 AMREX_IF_ON_DEVICE(( pstack.top() = ParserUserFn4(((ParserExeUserFn*)p)->fd)(pstack.top(),a1,a2,a3); ))
274#endif
275 }
276 }
277}
278
280double parser_exe_eval (const char* p, double const* x)
281{
282 if (p == nullptr) { return std::numeric_limits<double>::max(); }
283
285 while (*((parser_exe_t*)p) != PARSER_EXE_NULL) { // NOLINT
286 switch (*((parser_exe_t*)p))
287 {
289 {
290 pstack.push(((ParserExeNumber*)p)->v);
291 p += sizeof(ParserExeNumber);
292 break;
293 }
295 {
296 int i = ((ParserExeSymbol*)p)->i;
297 double d = AMREX_PARSER_GET_DATA(i);
298 pstack.push(d);
299 p += sizeof(ParserExeSymbol);
300 break;
301 }
302 case PARSER_EXE_ADD:
303 {
304 double b = pstack.top(); // NOLINT
305 pstack.pop();
306 pstack.top() += b; // NOLINT
307 p += sizeof(ParserExeADD);
308 break;
309 }
310 case PARSER_EXE_SUB_F:
311 {
312 double b = pstack.top(); // NOLINT
313 pstack.pop();
314 pstack.top() -= b; // NOLINT
315 p += sizeof(ParserExeSUB_F);
316 break;
317 }
318 case PARSER_EXE_SUB_B:
319 {
320 double b = pstack.top(); // NOLINT
321 pstack.pop();
322 pstack.top() = b - pstack.top(); // NOLINT
323 p += sizeof(ParserExeSUB_B);
324 break;
325 }
326 case PARSER_EXE_MUL:
327 {
328 double b = pstack.top(); // NOLINT
329 pstack.pop();
330 pstack.top() *= b; // NOLINT
331 p += sizeof(ParserExeMUL);
332 break;
333 }
334 case PARSER_EXE_DIV_F:
335 {
336 double v = pstack.top(); // NOLINT
337 pstack.pop();
338 pstack.top() /= v; // NOLINT
339 p += sizeof(ParserExeDIV_F);
340 break;
341 }
342 case PARSER_EXE_DIV_B:
343 {
344 double v = pstack.top(); // NOLINT
345 pstack.pop();
346 pstack.top() = v / pstack.top(); // NOLINT
347 p += sizeof(ParserExeDIV_B);
348 break;
349 }
350 case PARSER_EXE_F1:
351 {
352 pstack.top() = parser_call_f1(((ParserExeF1*)p)->ftype, pstack.top()); // NOLINT
353 p += sizeof(ParserExeF1);
354 break;
355 }
356 case PARSER_EXE_F2_F:
357 {
358 double v = pstack.top(); // NOLINT
359 pstack.pop();
360 pstack.top() = parser_call_f2(((ParserExeF2_F*)p)->ftype, pstack.top(), v); // NOLINT
361 p += sizeof(ParserExeF2_F);
362 break;
363 }
364 case PARSER_EXE_F2_B:
365 {
366 double v = pstack.top(); // NOLINT
367 pstack.pop();
368 pstack.top() = parser_call_f2(((ParserExeF2_B*)p)->ftype, v, pstack.top()); // NOLINT
369 p += sizeof(ParserExeF2_B);
370 break;
371 }
373 {
374 int i = ((ParserExeADD_VP*)p)->i;
375 double d = AMREX_PARSER_GET_DATA(i);
376 pstack.push(((ParserExeADD_VP*)p)->v + d);
377 p += sizeof(ParserExeADD_VP);
378 break;
379 }
381 {
382 int i = ((ParserExeSUB_VP*)p)->i;
383 double d = AMREX_PARSER_GET_DATA(i);
384 pstack.push(((ParserExeSUB_VP*)p)->v - d);
385 p += sizeof(ParserExeSUB_VP);
386 break;
387 }
389 {
390 int i = ((ParserExeMUL_VP*)p)->i;
391 double d = AMREX_PARSER_GET_DATA(i);
392 pstack.push(((ParserExeMUL_VP*)p)->v * d);
393 p += sizeof(ParserExeMUL_VP);
394 break;
395 }
397 {
398 int i = ((ParserExeDIV_VP*)p)->i;
399 double d = AMREX_PARSER_GET_DATA(i);
400 pstack.push(((ParserExeDIV_VP*)p)->v / d);
401 p += sizeof(ParserExeDIV_VP);
402 break;
403 }
405 {
406 int i = ((ParserExeADD_PP*)p)->i1;
407 double d1 = AMREX_PARSER_GET_DATA(i);
408 i = ((ParserExeADD_PP*)p)->i2;
409 double d2 = AMREX_PARSER_GET_DATA(i);
410 pstack.push(d1+d2);
411 p += sizeof(ParserExeADD_PP);
412 break;
413 }
415 {
416 int i = ((ParserExeSUB_PP*)p)->i1;
417 double d1 = AMREX_PARSER_GET_DATA(i);
418 i = ((ParserExeSUB_PP*)p)->i2;
419 double d2 = AMREX_PARSER_GET_DATA(i);
420 pstack.push(d1-d2);
421 p += sizeof(ParserExeSUB_PP);
422 break;
423 }
425 {
426 int i = ((ParserExeMUL_PP*)p)->i1;
427 double d1 = AMREX_PARSER_GET_DATA(i);
428 i = ((ParserExeMUL_PP*)p)->i2;
429 double d2 = AMREX_PARSER_GET_DATA(i);
430 pstack.push(d1*d2);
431 p += sizeof(ParserExeMUL_PP);
432 break;
433 }
435 {
436 int i = ((ParserExeDIV_PP*)p)->i1;
437 double d1 = AMREX_PARSER_GET_DATA(i);
438 i = ((ParserExeDIV_PP*)p)->i2;
439 double d2 = AMREX_PARSER_GET_DATA(i);
440 pstack.push(d1/d2);
441 p += sizeof(ParserExeDIV_PP);
442 break;
443 }
445 {
446 pstack.top() += ((ParserExeADD_VN*)p)->v; // NOLINT
447 p += sizeof(ParserExeADD_VN);
448 break;
449 }
451 {
452 pstack.top() = ((ParserExeSUB_VN*)p)->v - pstack.top(); // NOLINT
453 p += sizeof(ParserExeSUB_VN);
454 break;
455 }
457 {
458 pstack.top() *= ((ParserExeMUL_VN*)p)->v; // NOLINT
459 p += sizeof(ParserExeMUL_VN);
460 break;
461 }
463 {
464 pstack.top() = ((ParserExeDIV_VN*)p)->v / pstack.top(); // NOLINT
465 p += sizeof(ParserExeDIV_VN);
466 break;
467 }
469 {
470 int i = ((ParserExeADD_PN*)p)->i;
471 double d = AMREX_PARSER_GET_DATA(i);
472 pstack.top() += d; // NOLINT
473 p += sizeof(ParserExeADD_PN);
474 break;
475 }
477 {
478 int i = ((ParserExeSUB_PN*)p)->i;
479 double d = AMREX_PARSER_GET_DATA(i);
480 pstack.top() = (d - pstack.top()) * (((ParserExeSUB_PN*)p)->sign); // NOLINT
481 p += sizeof(ParserExeSUB_PN);
482 break;
483 }
485 {
486 int i = ((ParserExeMUL_PN*)p)->i;
487 double d = AMREX_PARSER_GET_DATA(i);
488 pstack.top() *= d; // NOLINT
489 p += sizeof(ParserExeMUL_PN);
490 break;
491 }
493 {
494 int i = ((ParserExeDIV_PN*)p)->i;
495 double d = AMREX_PARSER_GET_DATA(i);
496 if (((ParserExeDIV_PN*)p)->reverse) {
497 pstack.top() /= d; // NOLINT
498 } else {
499 pstack.top() = d / pstack.top(); // NOLINT
500 }
501 p += sizeof(ParserExeDIV_PN);
502 break;
503 }
505 {
506 double& d = pstack.top();
507 d *= d;
508 p += sizeof(ParserExeSquare);
509 break;
510 }
511 case PARSER_EXE_POWI:
512 {
513 double& d = pstack.top();
514 int n = ((ParserExePOWI*)p)->i;
515 if (n != 0) {
516 if (n < 0) {
517 d = 1.0/d;
518 n = -n;
519 }
520 double y = 1.0;
521 while (n > 1) {
522 if (n % 2 == 0) {
523 d *= d;
524 n = n/2;
525 } else {
526 y *= d;
527 d *= d;
528 n = (n-1)/2;
529 }
530 }
531 d *= y;
532 } else {
533 d = 1.0;
534 }
535 p += sizeof(ParserExePOWI);
536 break;
537 }
538 case PARSER_EXE_IF:
539 {
540 double cond = pstack.top(); // NOLINT
541 pstack.pop();
542 if (cond == 0.0) { // false branch
543 p += ((ParserExeIF*)p)->offset;
544 }
545 p += sizeof(ParserExeIF);
546 break;
547 }
548 case PARSER_EXE_JUMP:
549 {
550 int offset = ((ParserExeJUMP*)p)->offset;
551 p += sizeof(ParserExeJUMP) + offset;
552 break;
553 }
555 {
557 p += sizeof(ParserExeUserFn);
558 break;
559 }
560 default:
561 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(false,"parser_exe_eval: unknown node type");
562 }
563 }
564 return pstack.top(); // NOLINT
565}
566
567void parser_compile_exe_size (struct parser_node* node, char*& p, std::size_t& exe_size,
568 int& max_stack_size, int& stack_size,
569 Vector<char const*>& local_variables,
570 std::map<std::string,std::pair<void*,void*>> const& ufs);
571
572inline std::size_t
573parser_exe_size (struct amrex_parser* parser, int& max_stack_size, int& stack_size)
574{
575 parser_ast_sort(parser->ast);
576 char* p = nullptr;
577 std::size_t exe_size = 0;
578 max_stack_size = 0;
579 stack_size = 0;
580 Vector<char const*> local_variables;
581 std::map<std::string,std::pair<void*,void*>> ufs;
582 parser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables, ufs);
583 stack_size -= static_cast<int>(local_variables.size())+1;
584 return exe_size+sizeof(ParserExeNull);
585}
586
587inline Vector<char const*>
589 std::map<std::string,std::pair<void*,void*>> const& ufs, char* p)
590{
591 std::size_t exe_size = 0;
592 int max_stack_size = 0;
593 int stack_size = 0;
594 Vector<char const*> local_variables;
595 parser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables, ufs);
596 new(p) ParserExeNull;
597 return local_variables;
598}
599
600void parser_exe_print(char const* parser, Vector<std::string> const& vars,
601 Vector<char const*> const& locals);
602
603}
604
605#endif
#define AMREX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition AMReX_BLassert.H:49
#define AMREX_NO_INLINE
Definition AMReX_Extension.H:136
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_IF_ON_DEVICE(CODE)
Definition AMReX_GpuQualifiers.H:56
#define AMREX_IF_ON_HOST(CODE)
Definition AMReX_GpuQualifiers.H:58
#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:17
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:28
Long size() const noexcept
Definition AMReX_Vector.H:53
__host__ __device__ void call_user_fn(ParserExeUserFn *p, Stack< T, N > &pstack)
Definition AMReX_Parser_Exe.H:234
Definition AMReX_Amr.cpp:49
parser_f2_t
Definition AMReX_Parser_Y.H:88
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, std::map< std::string, std::pair< void *, void * > > const &ufs)
Definition AMReX_Parser_Exe.cpp:7
__host__ __device__ void ignore_unused(const Ts &...)
This shuts up the compiler about unused variables.
Definition AMReX.H:138
parser_exe_t
Definition AMReX_Parser_Exe.H:25
@ PARSER_EXE_SUB_VP
Definition AMReX_Parser_Exe.H:39
@ PARSER_EXE_POWI
Definition AMReX_Parser_Exe.H:55
@ PARSER_EXE_ADD_VN
Definition AMReX_Parser_Exe.H:46
@ PARSER_EXE_NUMBER
Definition AMReX_Parser_Exe.H:27
@ PARSER_EXE_SYMBOL
Definition AMReX_Parser_Exe.H:28
@ PARSER_EXE_DIV_B
Definition AMReX_Parser_Exe.H:34
@ PARSER_EXE_DIV_VN
Definition AMReX_Parser_Exe.H:49
@ PARSER_EXE_F2_B
Definition AMReX_Parser_Exe.H:37
@ PARSER_EXE_SUB_F
Definition AMReX_Parser_Exe.H:30
@ PARSER_EXE_SUB_VN
Definition AMReX_Parser_Exe.H:47
@ PARSER_EXE_SQUARE
Definition AMReX_Parser_Exe.H:54
@ PARSER_EXE_F2_F
Definition AMReX_Parser_Exe.H:36
@ PARSER_EXE_ADD
Definition AMReX_Parser_Exe.H:29
@ PARSER_EXE_DIV_PN
Definition AMReX_Parser_Exe.H:53
@ PARSER_EXE_ADD_VP
Definition AMReX_Parser_Exe.H:38
@ PARSER_EXE_USER_FN
Definition AMReX_Parser_Exe.H:58
@ PARSER_EXE_MUL_PP
Definition AMReX_Parser_Exe.H:44
@ PARSER_EXE_SUB_PN
Definition AMReX_Parser_Exe.H:51
@ PARSER_EXE_MUL_VN
Definition AMReX_Parser_Exe.H:48
@ PARSER_EXE_ADD_PN
Definition AMReX_Parser_Exe.H:50
@ PARSER_EXE_JUMP
Definition AMReX_Parser_Exe.H:57
@ PARSER_EXE_ADD_PP
Definition AMReX_Parser_Exe.H:42
@ PARSER_EXE_MUL_PN
Definition AMReX_Parser_Exe.H:52
@ PARSER_EXE_MUL
Definition AMReX_Parser_Exe.H:32
@ PARSER_EXE_MUL_VP
Definition AMReX_Parser_Exe.H:40
@ PARSER_EXE_SUB_B
Definition AMReX_Parser_Exe.H:31
@ PARSER_EXE_NULL
Definition AMReX_Parser_Exe.H:26
@ PARSER_EXE_F1
Definition AMReX_Parser_Exe.H:35
@ PARSER_EXE_DIV_F
Definition AMReX_Parser_Exe.H:33
@ PARSER_EXE_IF
Definition AMReX_Parser_Exe.H:56
@ PARSER_EXE_DIV_VP
Definition AMReX_Parser_Exe.H:41
@ PARSER_EXE_SUB_PP
Definition AMReX_Parser_Exe.H:43
@ PARSER_EXE_DIV_PP
Definition AMReX_Parser_Exe.H:45
__host__ __device__ double parser_call_f1(enum parser_f1_t type, double a)
Definition AMReX_Parser_Y.H:475
Vector< char const * > parser_compile(struct amrex_parser *parser, std::map< std::string, std::pair< void *, void * > > const &ufs, char *p)
Definition AMReX_Parser_Exe.H:588
void parser_ast_sort(struct parser_node *node)
Definition AMReX_Parser_Y.cpp:1728
parser_f1_t
Definition AMReX_Parser_Y.H:31
__host__ __device__ double parser_exe_eval(const char *p, double const *x)
Definition AMReX_Parser_Exe.H:280
double(*)(double, double, double) ParserUserFn3
Definition AMReX_Parser_Y.H:28
double(*)(double, double) ParserUserFn2
Definition AMReX_Parser_Y.H:27
double(*)(double, double, double, double) ParserUserFn4
Definition AMReX_Parser_Y.H:29
__host__ __device__ double parser_call_f2(enum parser_f2_t type, double a, double b)
Definition AMReX_Parser_Y.H:507
std::size_t parser_exe_size(struct amrex_parser *parser, int &max_stack_size, int &stack_size)
Definition AMReX_Parser_Exe.H:573
void parser_exe_print(char const *p, Vector< std::string > const &vars, Vector< char const * > const &locals)
Definition AMReX_Parser_Exe.cpp:742
double(*)(double) ParserUserFn1
Definition AMReX_Parser_Y.H:26
Definition AMReX_Parser_Exe.H:182
int i
Definition AMReX_Parser_Exe.H:184
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:183
Definition AMReX_Parser_Exe.H:138
int i1
Definition AMReX_Parser_Exe.H:140
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:139
int i2
Definition AMReX_Parser_Exe.H:141
Definition AMReX_Parser_Exe.H:162
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:163
double v
Definition AMReX_Parser_Exe.H:164
Definition AMReX_Parser_Exe.H:114
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:115
double v
Definition AMReX_Parser_Exe.H:117
int i
Definition AMReX_Parser_Exe.H:116
Definition AMReX_Parser_Exe.H:75
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:76
Definition AMReX_Parser_Exe.H:95
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:96
Definition AMReX_Parser_Exe.H:91
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:92
Definition AMReX_Parser_Exe.H:198
bool reverse
Definition AMReX_Parser_Exe.H:201
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:199
int i
Definition AMReX_Parser_Exe.H:200
Definition AMReX_Parser_Exe.H:156
int i2
Definition AMReX_Parser_Exe.H:159
int i1
Definition AMReX_Parser_Exe.H:158
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:157
Definition AMReX_Parser_Exe.H:177
double v
Definition AMReX_Parser_Exe.H:179
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:178
Definition AMReX_Parser_Exe.H:132
double v
Definition AMReX_Parser_Exe.H:135
int i
Definition AMReX_Parser_Exe.H:134
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:133
Definition AMReX_Parser_Exe.H:99
parser_f1_t ftype
Definition AMReX_Parser_Exe.H:101
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:100
Definition AMReX_Parser_Exe.H:109
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:110
parser_f2_t ftype
Definition AMReX_Parser_Exe.H:111
Definition AMReX_Parser_Exe.H:104
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:105
parser_f2_t ftype
Definition AMReX_Parser_Exe.H:106
Definition AMReX_Parser_Exe.H:213
int offset
Definition AMReX_Parser_Exe.H:215
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:214
Definition AMReX_Parser_Exe.H:218
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:219
int offset
Definition AMReX_Parser_Exe.H:220
Definition AMReX_Parser_Exe.H:193
int i
Definition AMReX_Parser_Exe.H:195
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:194
Definition AMReX_Parser_Exe.H:150
int i1
Definition AMReX_Parser_Exe.H:152
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:151
int i2
Definition AMReX_Parser_Exe.H:153
Definition AMReX_Parser_Exe.H:172
double v
Definition AMReX_Parser_Exe.H:174
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:173
Definition AMReX_Parser_Exe.H:126
double v
Definition AMReX_Parser_Exe.H:129
int i
Definition AMReX_Parser_Exe.H:128
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:127
Definition AMReX_Parser_Exe.H:87
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:88
Definition AMReX_Parser_Exe.H:61
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:62
Definition AMReX_Parser_Exe.H:65
double v
Definition AMReX_Parser_Exe.H:67
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:66
Definition AMReX_Parser_Exe.H:208
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:209
int i
Definition AMReX_Parser_Exe.H:210
Definition AMReX_Parser_Exe.H:83
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:84
Definition AMReX_Parser_Exe.H:79
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:80
Definition AMReX_Parser_Exe.H:187
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:188
double sign
Definition AMReX_Parser_Exe.H:190
int i
Definition AMReX_Parser_Exe.H:189
Definition AMReX_Parser_Exe.H:144
int i1
Definition AMReX_Parser_Exe.H:146
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:145
int i2
Definition AMReX_Parser_Exe.H:147
Definition AMReX_Parser_Exe.H:167
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:168
double v
Definition AMReX_Parser_Exe.H:169
Definition AMReX_Parser_Exe.H:120
double v
Definition AMReX_Parser_Exe.H:123
int i
Definition AMReX_Parser_Exe.H:122
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:121
Definition AMReX_Parser_Exe.H:204
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:205
Definition AMReX_Parser_Exe.H:70
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:71
int i
Definition AMReX_Parser_Exe.H:72
Definition AMReX_Parser_Exe.H:223
void * fd
Definition AMReX_Parser_Exe.H:227
short argc
Definition AMReX_Parser_Exe.H:225
void * fh
Definition AMReX_Parser_Exe.H:226
enum parser_exe_t type
Definition AMReX_Parser_Exe.H:224
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:307
struct parser_node * ast
Definition AMReX_Parser_Y.H:310