1#ifndef AMREX_PARSER_EXE_H_
2#define AMREX_PARSER_EXE_H_
3#include <AMReX_Config.H>
12#ifndef AMREX_PARSER_STACK_SIZE
13#define AMREX_PARSER_STACK_SIZE 16
16#define AMREX_PARSER_LOCAL_IDX0 1000
17#define AMREX_PARSER_GET_DATA(i) ((i)<1000) ? x[i] : pstack[(i)-1000]
230namespace parser_detail
232 template <
typename T,
int N>
239#if !defined(AMREX_USE_SYCL)
242 }
else if (argc == 2) {
246#if defined(AMREX_USE_SYCL)
251 }
else if (argc == 3) {
257#if defined(AMREX_USE_SYCL)
262 }
else if (argc == 4) {
270#if defined(AMREX_USE_SYCL)
282 if (p ==
nullptr) {
return std::numeric_limits<double>::max(); }
304 double b = pstack.
top();
312 double b = pstack.
top();
320 double b = pstack.
top();
322 pstack.
top() =
b - pstack.
top();
328 double b = pstack.
top();
336 double v = pstack.
top();
344 double v = pstack.
top();
346 pstack.
top() = v / pstack.
top();
358 double v = pstack.
top();
366 double v = pstack.
top();
499 pstack.
top() = d / pstack.
top();
506 double& d = pstack.
top();
513 double& d = pstack.
top();
540 double cond = pstack.
top();
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);
577 std::size_t exe_size = 0;
581 std::map<std::string,std::pair<void*,void*>> ufs;
583 stack_size -=
static_cast<int>(local_variables.
size())+1;
587inline Vector<char const*>
589 std::map<std::string,std::pair<void*,void*>>
const& ufs,
char* p)
591 std::size_t exe_size = 0;
592 int max_stack_size = 0;
597 return local_variables;
601 Vector<char const*>
const& locals);
#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