Block-Structured AMR Software Framework
AMReX_IParser_Exe.H
Go to the documentation of this file.
1 #ifndef AMREX_IPARSER_EXE_H_
2 #define AMREX_IPARSER_EXE_H_
3 #include <AMReX_Config.H>
4 
5 #include <AMReX_IParser_Y.H>
6 #include <AMReX_Stack.H>
7 #include <AMReX_Vector.H>
8 
9 #include <limits>
10 
11 #ifndef AMREX_IPARSER_STACK_SIZE
12 #define AMREX_IPARSER_STACK_SIZE 16
13 #endif
14 
15 #define AMREX_IPARSER_LOCAL_IDX0 1000
16 #define AMREX_IPARSER_GET_DATA(i) ((i)>=1000) ? pstack[(i)-1000] : x[i]
17 
18 namespace amrex {
19 
20 // N: node
21 // P: pointer offset
22 // V: value (i.e., int literal)
23 
58 };
59 
60 struct alignas(8) IParserExeNull {
62 };
63 
64 struct alignas(8) IParserExeNumber {
66  long long v;
67 };
68 
69 struct alignas(8) IParserExeSymbol {
71  int i;
72 };
73 
74 struct alignas(8) IParserExeADD {
76 };
77 
78 struct alignas(8) IParserExeSUB {
80  long long sign;
81 };
82 
83 struct alignas(8) IParserExeMUL {
85 };
86 
87 struct alignas(8) IParserExeDIV_F {
89 };
90 
91 struct alignas(8) IParserExeDIV_B {
93 };
94 
95 struct alignas(8) IParserExeNEG {
97 };
98 
99 struct alignas(8) IParserExeF1 {
102 };
103 
104 struct alignas(8) IParserExeF2_F {
107 };
108 
109 struct alignas(8) IParserExeF2_B {
112 };
113 
114 struct alignas(8) IParserExeADD_VP {
116  int i;
117  long long v;
118 };
119 
120 struct alignas(8) IParserExeSUB_VP {
122  int i;
123  long long v;
124 };
125 
126 struct alignas(8) IParserExeMUL_VP {
128  int i;
129  long long v;
130 };
131 
132 struct alignas(8) IParserExeDIV_VP {
134  int i;
135  long long v;
136 };
137 
138 struct alignas(8) IParserExeDIV_PV {
140  int i;
141  long long v;
142 };
143 
144 struct alignas(8) IParserExeADD_PP {
146  int i1;
147  int i2;
148 };
149 
150 struct alignas(8) IParserExeSUB_PP {
152  int i1;
153  int i2;
154 };
155 
156 struct alignas(8) IParserExeMUL_PP {
158  int i1;
159  int i2;
160 };
161 
162 struct alignas(8) IParserExeDIV_PP {
164  int i1;
165  int i2;
166 };
167 
168 struct alignas(8) IParserExeNEG_P {
170  int i;
171 };
172 
173 struct alignas(8) IParserExeADD_VN {
175  long long v;
176 };
177 
178 struct alignas(8) IParserExeSUB_VN {
180  long long v;
181 };
182 
183 struct alignas(8) IParserExeMUL_VN {
185  long long v;
186 };
187 
188 struct alignas(8) IParserExeDIV_VN {
190  long long v;
191 };
192 
193 struct alignas(8) IParserExeDIV_NV {
195  long long v;
196 };
197 
198 struct alignas(8) IParserExeADD_PN {
200  int i;
201 };
202 
203 struct alignas(8) IParserExeSUB_PN {
205  int i;
206  long long sign;
207 };
208 
209 struct alignas(8) IParserExeMUL_PN {
211  int i;
212 };
213 
214 struct alignas(8) IParserExeDIV_PN {
216  int i;
217  bool reverse;
218 };
219 
220 struct alignas(8) IParserExeIF {
222  int offset;
223 };
224 
225 struct alignas(8) IParserExeJUMP {
227  int offset;
228 };
229 
231 long long iparser_exe_eval (const char* p, long long const* x)
232 {
233  if (p == nullptr) { return std::numeric_limits<long long>::max(); }
234 
236  while (*((iparser_exe_t*)p) != IPARSER_EXE_NULL) {
237  switch (*((iparser_exe_t*)p))
238  {
239  case IPARSER_EXE_NUMBER:
240  {
241  pstack.push(((IParserExeNumber*)p)->v);
242  p += sizeof(IParserExeNumber);
243  break;
244  }
245  case IPARSER_EXE_SYMBOL:
246  {
247  int i = ((IParserExeSymbol*)p)->i;
248  auto d = AMREX_IPARSER_GET_DATA(i);
249  pstack.push(d);
250  p += sizeof(IParserExeSymbol);
251  break;
252  }
253  case IPARSER_EXE_ADD:
254  {
255  auto b = pstack.top();
256  pstack.pop();
257  pstack.top() += b;
258  p += sizeof(IParserExeADD);
259  break;
260  }
261  case IPARSER_EXE_SUB:
262  {
263  auto b = pstack.top();
264  pstack.pop();
265  pstack.top() = (pstack.top() - b) * (((IParserExeSUB*)p)->sign);
266  p += sizeof(IParserExeSUB);
267  break;
268  }
269  case IPARSER_EXE_MUL:
270  {
271  auto b = pstack.top();
272  pstack.pop();
273  pstack.top() *= b;
274  p += sizeof(IParserExeMUL);
275  break;
276  }
277  case IPARSER_EXE_DIV_F:
278  {
279  auto v = pstack.top();
280  pstack.pop();
281  pstack.top() /= v;
282  p += sizeof(IParserExeDIV_F);
283  break;
284  }
285  case IPARSER_EXE_DIV_B:
286  {
287  auto v = pstack.top();
288  pstack.pop();
289  pstack.top() = v / pstack.top();
290  p += sizeof(IParserExeDIV_B);
291  break;
292  }
293  case IPARSER_EXE_NEG:
294  {
295  pstack.top() = -pstack.top();
296  p += sizeof(IParserExeNEG);
297  break;
298  }
299  case IPARSER_EXE_F1:
300  {
301  pstack.top() = iparser_call_f1(((IParserExeF1*)p)->ftype, pstack.top());
302  p += sizeof(IParserExeF1);
303  break;
304  }
305  case IPARSER_EXE_F2_F:
306  {
307  auto v = pstack.top();
308  pstack.pop();
309  pstack.top() = iparser_call_f2(((IParserExeF2_F*)p)->ftype, pstack.top(), v);
310  p += sizeof(IParserExeF2_F);
311  break;
312  }
313  case IPARSER_EXE_F2_B:
314  {
315  auto v = pstack.top();
316  pstack.pop();
317  pstack.top() = iparser_call_f2(((IParserExeF2_B*)p)->ftype, v, pstack.top());
318  p += sizeof(IParserExeF2_B);
319  break;
320  }
321  case IPARSER_EXE_ADD_VP:
322  {
323  int i = ((IParserExeADD_VP*)p)->i;
324  auto d = AMREX_IPARSER_GET_DATA(i);
325  pstack.push(((IParserExeADD_VP*)p)->v + d);
326  p += sizeof(IParserExeADD_VP);
327  break;
328  }
329  case IPARSER_EXE_SUB_VP:
330  {
331  int i = ((IParserExeSUB_VP*)p)->i;
332  auto d = AMREX_IPARSER_GET_DATA(i);
333  pstack.push(((IParserExeSUB_VP*)p)->v - d);
334  p += sizeof(IParserExeSUB_VP);
335  break;
336  }
337  case IPARSER_EXE_MUL_VP:
338  {
339  int i = ((IParserExeMUL_VP*)p)->i;
340  auto d = AMREX_IPARSER_GET_DATA(i);
341  pstack.push(((IParserExeMUL_VP*)p)->v * d);
342  p += sizeof(IParserExeMUL_VP);
343  break;
344  }
345  case IPARSER_EXE_DIV_VP:
346  {
347  int i = ((IParserExeDIV_VP*)p)->i;
348  auto d = AMREX_IPARSER_GET_DATA(i);
349  pstack.push(((IParserExeDIV_VP*)p)->v / d);
350  p += sizeof(IParserExeDIV_VP);
351  break;
352  }
353  case IPARSER_EXE_DIV_PV:
354  {
355  int i = ((IParserExeDIV_PV*)p)->i;
356  auto d = AMREX_IPARSER_GET_DATA(i);
357  pstack.push(d / ((IParserExeDIV_PV*)p)->v);
358  p += sizeof(IParserExeDIV_PV);
359  break;
360  }
361  case IPARSER_EXE_ADD_PP:
362  {
363  int i = ((IParserExeADD_PP*)p)->i1;
364  auto d1 = AMREX_IPARSER_GET_DATA(i);
365  i = ((IParserExeADD_PP*)p)->i2;
366  auto d2 = AMREX_IPARSER_GET_DATA(i);
367  pstack.push(d1+d2);
368  p += sizeof(IParserExeADD_PP);
369  break;
370  }
371  case IPARSER_EXE_SUB_PP:
372  {
373  int i = ((IParserExeSUB_PP*)p)->i1;
374  auto d1 = AMREX_IPARSER_GET_DATA(i);
375  i = ((IParserExeSUB_PP*)p)->i2;
376  auto d2 = AMREX_IPARSER_GET_DATA(i);
377  pstack.push(d1-d2);
378  p += sizeof(IParserExeSUB_PP);
379  break;
380  }
381  case IPARSER_EXE_MUL_PP:
382  {
383  int i = ((IParserExeMUL_PP*)p)->i1;
384  auto d1 = AMREX_IPARSER_GET_DATA(i);
385  i = ((IParserExeMUL_PP*)p)->i2;
386  auto d2 = AMREX_IPARSER_GET_DATA(i);
387  pstack.push(d1*d2);
388  p += sizeof(IParserExeMUL_PP);
389  break;
390  }
391  case IPARSER_EXE_DIV_PP:
392  {
393  int i = ((IParserExeDIV_PP*)p)->i1;
394  auto d1 = AMREX_IPARSER_GET_DATA(i);
395  i = ((IParserExeDIV_PP*)p)->i2;
396  auto d2 = AMREX_IPARSER_GET_DATA(i);
397  pstack.push(d1/d2);
398  p += sizeof(IParserExeDIV_PP);
399  break;
400  }
401  case IPARSER_EXE_NEG_P:
402  {
403  int i = ((IParserExeNEG_P*)p)->i;
404  auto d = AMREX_IPARSER_GET_DATA(i);
405  pstack.push(-d);
406  p += sizeof(IParserExeNEG_P);
407  break;
408  }
409  case IPARSER_EXE_ADD_VN:
410  {
411  pstack.top() += ((IParserExeADD_VN*)p)->v;
412  p += sizeof(IParserExeADD_VN);
413  break;
414  }
415  case IPARSER_EXE_SUB_VN:
416  {
417  pstack.top() = ((IParserExeSUB_VN*)p)->v - pstack.top();
418  p += sizeof(IParserExeSUB_VN);
419  break;
420  }
421  case IPARSER_EXE_MUL_VN:
422  {
423  pstack.top() *= ((IParserExeMUL_VN*)p)->v;
424  p += sizeof(IParserExeMUL_VN);
425  break;
426  }
427  case IPARSER_EXE_DIV_VN:
428  {
429  pstack.top() = ((IParserExeDIV_VN*)p)->v / pstack.top();
430  p += sizeof(IParserExeDIV_VN);
431  break;
432  }
433  case IPARSER_EXE_DIV_NV:
434  {
435  pstack.top() /= ((IParserExeDIV_NV*)p)->v;
436  p += sizeof(IParserExeDIV_NV);
437  break;
438  }
439  case IPARSER_EXE_ADD_PN:
440  {
441  int i = ((IParserExeADD_PN*)p)->i;
442  auto d = AMREX_IPARSER_GET_DATA(i);
443  pstack.top() += d;
444  p += sizeof(IParserExeADD_PN);
445  break;
446  }
447  case IPARSER_EXE_SUB_PN:
448  {
449  int i = ((IParserExeSUB_PN*)p)->i;
450  auto d = AMREX_IPARSER_GET_DATA(i);
451  pstack.top() = (d - pstack.top()) * (((IParserExeSUB_PN*)p)->sign);
452  p += sizeof(IParserExeSUB_PN);
453  break;
454  }
455  case IPARSER_EXE_MUL_PN:
456  {
457  int i = ((IParserExeMUL_PN*)p)->i;
458  auto d = AMREX_IPARSER_GET_DATA(i);
459  pstack.top() *= d;
460  p += sizeof(IParserExeMUL_PN);
461  break;
462  }
463  case IPARSER_EXE_DIV_PN:
464  {
465  int i = ((IParserExeDIV_PN*)p)->i;
466  auto d = AMREX_IPARSER_GET_DATA(i);
467  if (((IParserExeDIV_PN*)p)->reverse) {
468  pstack.top() /= d;
469  } else {
470  pstack.top() = d / pstack.top();
471  }
472  p += sizeof(IParserExeDIV_PN);
473  break;
474  }
475  case IPARSER_EXE_IF:
476  {
477  auto cond = pstack.top();
478  pstack.pop();
479  if (cond == 0) { // false branch
480  p += ((IParserExeIF*)p)->offset;
481  }
482  p += sizeof(IParserExeIF);
483  break;
484  }
485  case IPARSER_EXE_JUMP:
486  {
487  int offset = ((IParserExeJUMP*)p)->offset;
488  p += sizeof(IParserExeJUMP) + offset;
489  break;
490  }
491  default:
492  AMREX_ALWAYS_ASSERT_WITH_MESSAGE(false,"parser_exe_eval: unknown node type");
493  }
494  }
495  return pstack.top();
496 }
497 
498 void iparser_compile_exe_size (struct iparser_node* node, char*& p, std::size_t& exe_size,
499  int& max_stack_size, int& stack_size, Vector<char*>& local_variables);
500 
501 inline std::size_t
502 iparser_exe_size (struct amrex_iparser* parser, int& max_stack_size, int& stack_size)
503 {
504  char* p = nullptr;
505  std::size_t exe_size = 0;
506  max_stack_size = 0;
507  stack_size = 0;
508  Vector<char*> local_variables;
509  iparser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables);
510  stack_size -= static_cast<int>(local_variables.size())+1;
511  return exe_size+sizeof(IParserExeNull);
512 }
513 
514 inline void
515 iparser_compile (struct amrex_iparser* parser, char* p)
516 {
517  std::size_t exe_size = 0;
518  int max_stack_size = 0;
519  int stack_size = 0;
520  Vector<char*> local_variables;
521  iparser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables);
522  new(p) IParserExeNull;
523 }
524 
525 }
526 
527 #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_IPARSER_GET_DATA(i)
Definition: AMReX_IParser_Exe.H:16
Long size() const noexcept
Definition: AMReX_Vector.H:50
@ max
Definition: AMReX_ParallelReduce.H:17
Definition: AMReX_Amr.cpp:49
void iparser_compile(struct amrex_iparser *parser, char *p)
Definition: AMReX_IParser_Exe.H:515
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE long long iparser_exe_eval(const char *p, long long const *x)
Definition: AMReX_IParser_Exe.H:231
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE long long iparser_call_f1(enum iparser_f1_t, long long a)
Definition: AMReX_IParser_Y.H:185
iparser_f1_t
Definition: AMReX_IParser_Y.H:22
iparser_exe_t
Definition: AMReX_IParser_Exe.H:24
@ IPARSER_EXE_F2_F
Definition: AMReX_IParser_Exe.H:35
@ IPARSER_EXE_NEG_P
Definition: AMReX_IParser_Exe.H:46
@ IPARSER_EXE_SYMBOL
Definition: AMReX_IParser_Exe.H:27
@ IPARSER_EXE_ADD
Definition: AMReX_IParser_Exe.H:28
@ IPARSER_EXE_DIV_PP
Definition: AMReX_IParser_Exe.H:45
@ IPARSER_EXE_SUB_PP
Definition: AMReX_IParser_Exe.H:43
@ IPARSER_EXE_NEG
Definition: AMReX_IParser_Exe.H:33
@ IPARSER_EXE_MUL_VP
Definition: AMReX_IParser_Exe.H:39
@ IPARSER_EXE_MUL_PN
Definition: AMReX_IParser_Exe.H:54
@ IPARSER_EXE_ADD_PP
Definition: AMReX_IParser_Exe.H:42
@ IPARSER_EXE_ADD_VP
Definition: AMReX_IParser_Exe.H:37
@ IPARSER_EXE_DIV_VN
Definition: AMReX_IParser_Exe.H:51
@ IPARSER_EXE_SUB_VP
Definition: AMReX_IParser_Exe.H:38
@ IPARSER_EXE_DIV_B
Definition: AMReX_IParser_Exe.H:32
@ IPARSER_EXE_DIV_VP
Definition: AMReX_IParser_Exe.H:40
@ IPARSER_EXE_MUL_VN
Definition: AMReX_IParser_Exe.H:49
@ IPARSER_EXE_NULL
Definition: AMReX_IParser_Exe.H:25
@ IPARSER_EXE_MUL_PP
Definition: AMReX_IParser_Exe.H:44
@ IPARSER_EXE_DIV_PV
Definition: AMReX_IParser_Exe.H:41
@ IPARSER_EXE_MUL
Definition: AMReX_IParser_Exe.H:30
@ IPARSER_EXE_SUB_PN
Definition: AMReX_IParser_Exe.H:53
@ IPARSER_EXE_SUB
Definition: AMReX_IParser_Exe.H:29
@ IPARSER_EXE_SUB_VN
Definition: AMReX_IParser_Exe.H:48
@ IPARSER_EXE_IF
Definition: AMReX_IParser_Exe.H:56
@ IPARSER_EXE_JUMP
Definition: AMReX_IParser_Exe.H:57
@ IPARSER_EXE_F2_B
Definition: AMReX_IParser_Exe.H:36
@ IPARSER_EXE_DIV_PN
Definition: AMReX_IParser_Exe.H:55
@ IPARSER_EXE_F1
Definition: AMReX_IParser_Exe.H:34
@ IPARSER_EXE_ADD_PN
Definition: AMReX_IParser_Exe.H:52
@ IPARSER_EXE_DIV_F
Definition: AMReX_IParser_Exe.H:31
@ IPARSER_EXE_NUMBER
Definition: AMReX_IParser_Exe.H:26
@ IPARSER_EXE_ADD_VN
Definition: AMReX_IParser_Exe.H:47
@ IPARSER_EXE_DIV_NV
Definition: AMReX_IParser_Exe.H:50
void iparser_compile_exe_size(struct iparser_node *node, char *&p, std::size_t &exe_size, int &max_stack_size, int &stack_size, Vector< char * > &local_variables)
Definition: AMReX_IParser_Exe.cpp:19
iparser_f2_t
Definition: AMReX_IParser_Y.H:26
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE long long iparser_call_f2(enum iparser_f2_t type, long long a, long long b)
Definition: AMReX_IParser_Y.H:192
std::size_t iparser_exe_size(struct amrex_iparser *parser, int &max_stack_size, int &stack_size)
Definition: AMReX_IParser_Exe.H:502
Definition: AMReX_IParser_Exe.H:198
int i
Definition: AMReX_IParser_Exe.H:200
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:199
Definition: AMReX_IParser_Exe.H:144
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:145
int i2
Definition: AMReX_IParser_Exe.H:147
int i1
Definition: AMReX_IParser_Exe.H:146
Definition: AMReX_IParser_Exe.H:173
long long v
Definition: AMReX_IParser_Exe.H:175
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:174
Definition: AMReX_IParser_Exe.H:114
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:115
int i
Definition: AMReX_IParser_Exe.H:116
long long v
Definition: AMReX_IParser_Exe.H:117
Definition: AMReX_IParser_Exe.H:74
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:75
Definition: AMReX_IParser_Exe.H:91
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:92
Definition: AMReX_IParser_Exe.H:87
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:88
Definition: AMReX_IParser_Exe.H:193
long long v
Definition: AMReX_IParser_Exe.H:195
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:194
Definition: AMReX_IParser_Exe.H:214
int i
Definition: AMReX_IParser_Exe.H:216
bool reverse
Definition: AMReX_IParser_Exe.H:217
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:215
Definition: AMReX_IParser_Exe.H:162
int i1
Definition: AMReX_IParser_Exe.H:164
int i2
Definition: AMReX_IParser_Exe.H:165
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:163
Definition: AMReX_IParser_Exe.H:138
int i
Definition: AMReX_IParser_Exe.H:140
long long v
Definition: AMReX_IParser_Exe.H:141
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:139
Definition: AMReX_IParser_Exe.H:188
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:189
long long v
Definition: AMReX_IParser_Exe.H:190
Definition: AMReX_IParser_Exe.H:132
int i
Definition: AMReX_IParser_Exe.H:134
long long v
Definition: AMReX_IParser_Exe.H:135
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:133
Definition: AMReX_IParser_Exe.H:99
iparser_f1_t ftype
Definition: AMReX_IParser_Exe.H:101
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:100
Definition: AMReX_IParser_Exe.H:109
iparser_f2_t ftype
Definition: AMReX_IParser_Exe.H:111
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:110
Definition: AMReX_IParser_Exe.H:104
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:105
iparser_f2_t ftype
Definition: AMReX_IParser_Exe.H:106
Definition: AMReX_IParser_Exe.H:220
int offset
Definition: AMReX_IParser_Exe.H:222
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:221
Definition: AMReX_IParser_Exe.H:225
int offset
Definition: AMReX_IParser_Exe.H:227
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:226
Definition: AMReX_IParser_Exe.H:209
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:210
int i
Definition: AMReX_IParser_Exe.H:211
Definition: AMReX_IParser_Exe.H:156
int i1
Definition: AMReX_IParser_Exe.H:158
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:157
int i2
Definition: AMReX_IParser_Exe.H:159
Definition: AMReX_IParser_Exe.H:183
long long v
Definition: AMReX_IParser_Exe.H:185
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:184
Definition: AMReX_IParser_Exe.H:126
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:127
long long v
Definition: AMReX_IParser_Exe.H:129
int i
Definition: AMReX_IParser_Exe.H:128
Definition: AMReX_IParser_Exe.H:83
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:84
Definition: AMReX_IParser_Exe.H:168
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:169
int i
Definition: AMReX_IParser_Exe.H:170
Definition: AMReX_IParser_Exe.H:95
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:96
Definition: AMReX_IParser_Exe.H:60
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:61
Definition: AMReX_IParser_Exe.H:64
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:65
long long v
Definition: AMReX_IParser_Exe.H:66
Definition: AMReX_IParser_Exe.H:203
long long sign
Definition: AMReX_IParser_Exe.H:206
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:204
int i
Definition: AMReX_IParser_Exe.H:205
Definition: AMReX_IParser_Exe.H:150
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:151
int i2
Definition: AMReX_IParser_Exe.H:153
int i1
Definition: AMReX_IParser_Exe.H:152
Definition: AMReX_IParser_Exe.H:178
long long v
Definition: AMReX_IParser_Exe.H:180
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:179
Definition: AMReX_IParser_Exe.H:120
long long v
Definition: AMReX_IParser_Exe.H:123
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:121
int i
Definition: AMReX_IParser_Exe.H:122
Definition: AMReX_IParser_Exe.H:78
long long sign
Definition: AMReX_IParser_Exe.H:80
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:79
Definition: AMReX_IParser_Exe.H:69
int i
Definition: AMReX_IParser_Exe.H:71
enum iparser_exe_t type
Definition: AMReX_IParser_Exe.H:70
Definition: AMReX_Stack.H:8
constexpr void push(T v)
Definition: AMReX_Stack.H:10
constexpr void pop()
Definition: AMReX_Stack.H:11
constexpr T const & top() const
Definition: AMReX_Stack.H:14
Definition: AMReX_IParser_Y.H:153
struct iparser_node * ast
Definition: AMReX_IParser_Y.H:156