|
|
|
|
@ -38,11 +38,11 @@ typedef struct _lrec_evaluator_b_b_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_b_b_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_b_b_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_b_b_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_b_b_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_BOOL)
|
|
|
|
|
@ -78,19 +78,19 @@ typedef struct _lrec_evaluator_b_bb_state_t {
|
|
|
|
|
|
|
|
|
|
// This is different from most of the lrec-evaluator functions in that it does short-circuiting:
|
|
|
|
|
// since is logical AND, the LHS is not evaluated if the RHS is false.
|
|
|
|
|
mv_t lrec_evaluator_b_bb_and_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_b_bb_and_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_b_bb_state_t* pstate = pvstate;
|
|
|
|
|
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_BOOL)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
if (val1.u.boolv == FALSE)
|
|
|
|
|
return val1;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_BOOL)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -100,19 +100,19 @@ mv_t lrec_evaluator_b_bb_and_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_
|
|
|
|
|
|
|
|
|
|
// This is different from most of the lrec-evaluator functions in that it does short-circuiting:
|
|
|
|
|
// since is logical OR, the LHS is not evaluated if the RHS is true.
|
|
|
|
|
mv_t lrec_evaluator_b_bb_or_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_b_bb_or_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_b_bb_state_t* pstate = pvstate;
|
|
|
|
|
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_BOOL)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
if (val1.u.boolv == TRUE)
|
|
|
|
|
return val1;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_BOOL)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -120,17 +120,17 @@ mv_t lrec_evaluator_b_bb_or_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t
|
|
|
|
|
return val2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_b_bb_xor_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_b_bb_xor_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_b_bb_state_t* pstate = pvstate;
|
|
|
|
|
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_BOOL)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_BOOL)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -190,7 +190,7 @@ typedef struct _lrec_evaluator_x_z_state_t {
|
|
|
|
|
mv_zary_func_t* pfunc;
|
|
|
|
|
} lrec_evaluator_x_z_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_z_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_z_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_z_state_t* pstate = pvstate;
|
|
|
|
|
@ -219,11 +219,11 @@ typedef struct _lrec_evaluator_f_f_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_f_f_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_f_f_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_f_f_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_f_f_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
|
|
|
|
|
mv_set_float_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
@ -258,12 +258,12 @@ typedef struct _lrec_evaluator_x_n_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_x_n_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_n_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_n_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_n_state_t* pstate = pvstate;
|
|
|
|
|
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_set_number_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
|
|
|
|
|
@ -295,11 +295,11 @@ typedef struct _lrec_evaluator_i_i_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_i_i_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_i_i_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_i_i_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_i_i_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
|
|
|
|
|
mv_set_int_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
@ -333,15 +333,15 @@ typedef struct _lrec_evaluator_f_ff_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_f_ff_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_f_ff_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_f_ff_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_f_ff_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_set_float_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_set_float_nullable(&val2);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
|
|
|
|
|
@ -378,12 +378,12 @@ typedef struct _lrec_evaluator_n_nn_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_n_nn_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_n_nn_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_n_nn_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_n_nn_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
|
|
|
|
|
mv_set_number_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
@ -428,15 +428,15 @@ typedef struct _lrec_evaluator_n_nn_nullable_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_n_nn_nullable_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_n_nn_nullable_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_n_nn_nullable_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_n_nn_nullable_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_set_number_nullable(&val1);
|
|
|
|
|
ERROR_OUT(val1);
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_set_number_nullable(&val2);
|
|
|
|
|
ERROR_OUT(val2);
|
|
|
|
|
|
|
|
|
|
@ -474,19 +474,19 @@ typedef struct _lrec_evaluator_f_fff_state_t {
|
|
|
|
|
lrec_evaluator_t* parg3;
|
|
|
|
|
} lrec_evaluator_f_fff_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_f_fff_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_f_fff_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_f_fff_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_set_float_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_set_float_nullable(&val2);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
mv_set_float_nullable(&val3);
|
|
|
|
|
NULL_OR_ERROR_OUT(val3);
|
|
|
|
|
|
|
|
|
|
@ -525,18 +525,18 @@ typedef struct _lrec_evaluator_i_ii_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_i_ii_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_i_ii_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_i_ii_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_i_ii_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
mv_set_int_nullable(&val1);
|
|
|
|
|
NULL_OUT(val1);
|
|
|
|
|
if (val1.type != MT_INT)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
mv_set_int_nullable(&val2);
|
|
|
|
|
NULL_OUT(val2);
|
|
|
|
|
@ -577,25 +577,25 @@ typedef struct _lrec_evaluator_i_iii_state_t {
|
|
|
|
|
lrec_evaluator_t* parg3;
|
|
|
|
|
} lrec_evaluator_i_iii_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_i_iii_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_i_iii_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_i_iii_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
mv_set_int_nullable(&val1);
|
|
|
|
|
NULL_OUT(val1);
|
|
|
|
|
if (val1.type != MT_INT)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
mv_set_int_nullable(&val2);
|
|
|
|
|
NULL_OUT(val2);
|
|
|
|
|
if (val2.type != MT_INT)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val3);
|
|
|
|
|
mv_set_int_nullable(&val3);
|
|
|
|
|
NULL_OUT(val3);
|
|
|
|
|
@ -637,17 +637,17 @@ typedef struct _lrec_evaluator_ternop_state_t {
|
|
|
|
|
lrec_evaluator_t* parg3;
|
|
|
|
|
} lrec_evaluator_ternop_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_ternop_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_ternop_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_ternop_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
mv_set_boolean_strict(&val1);
|
|
|
|
|
|
|
|
|
|
return val1.u.boolv
|
|
|
|
|
? pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate)
|
|
|
|
|
: pstate->parg3->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
? pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate)
|
|
|
|
|
: pstate->parg3->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
}
|
|
|
|
|
static void lrec_evaluator_ternop_free(lrec_evaluator_t* pevaluator) {
|
|
|
|
|
lrec_evaluator_ternop_state_t* pstate = pevaluator->pvstate;
|
|
|
|
|
@ -679,11 +679,11 @@ typedef struct _lrec_evaluator_s_s_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_s_s_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_s_s_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_s_s_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_s_s_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -716,11 +716,11 @@ typedef struct _lrec_evaluator_s_f_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_s_f_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_s_f_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_s_f_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_s_f_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
|
|
|
|
|
mv_set_float_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
@ -753,11 +753,11 @@ typedef struct _lrec_evaluator_s_i_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_s_i_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_s_i_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_s_i_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_s_i_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
|
|
|
|
|
mv_set_int_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
@ -790,11 +790,11 @@ typedef struct _lrec_evaluator_f_s_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_f_s_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_f_s_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_f_s_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_f_s_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -827,11 +827,11 @@ typedef struct _lrec_evaluator_i_s_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_i_s_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_i_s_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_i_s_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_i_s_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -864,11 +864,11 @@ typedef struct _lrec_evaluator_x_x_state_t {
|
|
|
|
|
lrec_evaluator_t* parg1;
|
|
|
|
|
} lrec_evaluator_x_x_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_x_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_x_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_x_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
|
|
|
|
|
return pstate->pfunc(&val1);
|
|
|
|
|
@ -900,12 +900,12 @@ typedef struct _lrec_evaluator_b_xx_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_b_xx_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_b_xx_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_b_xx_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_b_xx_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
return pstate->pfunc(&val1, &val2);
|
|
|
|
|
}
|
|
|
|
|
static void lrec_evaluator_b_xx_free(lrec_evaluator_t* pevaluator) {
|
|
|
|
|
@ -939,15 +939,15 @@ typedef struct _lrec_evaluator_x_ns_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_x_ns_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_ns_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_ns_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_ns_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_set_number_nullable(&val1);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_STRING) {
|
|
|
|
|
mv_free(&val1);
|
|
|
|
|
@ -987,16 +987,16 @@ typedef struct _lrec_evaluator_x_ss_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_x_ss_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_ss_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_ss_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_ss_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -1034,16 +1034,16 @@ typedef struct _lrec_evaluator_x_ssc_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_x_ssc_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_ssc_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_ssc_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_ssc_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -1082,11 +1082,11 @@ typedef struct _lrec_evaluator_x_sr_state_t {
|
|
|
|
|
string_builder_t* psb;
|
|
|
|
|
} lrec_evaluator_x_sr_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_sr_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_sr_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_sr_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -1128,13 +1128,13 @@ typedef struct _lrec_evaluator_s_xs_state_t {
|
|
|
|
|
lrec_evaluator_t* parg2;
|
|
|
|
|
} lrec_evaluator_s_xs_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_s_xs_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_s_xs_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_s_xs_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
@ -1173,23 +1173,23 @@ typedef struct _lrec_evaluator_s_sss_state_t {
|
|
|
|
|
lrec_evaluator_t* parg3;
|
|
|
|
|
} lrec_evaluator_s_sss_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_s_sss_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_s_sss_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_s_sss_state_t* pstate = pvstate;
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
mv_t val2 = pstate->parg2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg2->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val2);
|
|
|
|
|
if (val2.type != MT_STRING) {
|
|
|
|
|
mv_free(&val1);
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val3);
|
|
|
|
|
if (val3.type != MT_STRING) {
|
|
|
|
|
mv_free(&val1);
|
|
|
|
|
@ -1234,17 +1234,17 @@ typedef struct _lrec_evaluator_x_srs_state_t {
|
|
|
|
|
string_builder_t* psb;
|
|
|
|
|
} lrec_evaluator_x_srs_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_x_srs_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_x_srs_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_x_srs_state_t* pstate = pvstate;
|
|
|
|
|
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
mv_t val1 = pstate->parg1->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg1->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val1);
|
|
|
|
|
if (val1.type != MT_STRING)
|
|
|
|
|
return MV_ERROR;
|
|
|
|
|
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
mv_t val3 = pstate->parg3->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pstate->parg3->pvstate);
|
|
|
|
|
NULL_OR_ERROR_OUT(val3);
|
|
|
|
|
if (val3.type != MT_STRING) {
|
|
|
|
|
mv_free(&val1);
|
|
|
|
|
@ -1290,7 +1290,7 @@ typedef struct _lrec_evaluator_field_name_state_t {
|
|
|
|
|
char* field_name;
|
|
|
|
|
} lrec_evaluator_field_name_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_field_name_func_string_only(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_field_name_func_string_only(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_field_name_state_t* pstate = pvstate;
|
|
|
|
|
@ -1312,7 +1312,7 @@ mv_t lrec_evaluator_field_name_func_string_only(lrec_t* prec, lhmsv_t* ptyped_ov
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_field_name_func_string_float(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_field_name_func_string_float(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_field_name_state_t* pstate = pvstate;
|
|
|
|
|
@ -1339,7 +1339,7 @@ mv_t lrec_evaluator_field_name_func_string_float(lrec_t* prec, lhmsv_t* ptyped_o
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_field_name_func_string_float_int(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_field_name_func_string_float_int(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate) {
|
|
|
|
|
lrec_evaluator_field_name_state_t* pstate = pvstate;
|
|
|
|
|
// See comments in lrec_evaluator.h and mapper_put.c regarding the typed-overlay map.
|
|
|
|
|
@ -1403,16 +1403,16 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_field_name(char* field_name, int typ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ================================================================
|
|
|
|
|
typedef struct _lrec_evaluator_moosvar_name_state_t {
|
|
|
|
|
typedef struct _lrec_evaluator_oosvar_name_state_t {
|
|
|
|
|
sllmv_t* pmvkeys;
|
|
|
|
|
} lrec_evaluator_moosvar_name_state_t;
|
|
|
|
|
} lrec_evaluator_oosvar_name_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_moosvar_name_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_oosvar_name_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_moosvar_name_state_t* pstate = pvstate;
|
|
|
|
|
lrec_evaluator_oosvar_name_state_t* pstate = pvstate;
|
|
|
|
|
int error = 0;
|
|
|
|
|
mv_t* pval = mlhmmv_get(pmoosvars, pstate->pmvkeys, &error);
|
|
|
|
|
mv_t* pval = mlhmmv_get(poosvars, pstate->pmvkeys, &error);
|
|
|
|
|
if (pval != NULL) {
|
|
|
|
|
// The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy a value here to feed
|
|
|
|
|
// into that. Otherwise the typed-overlay map in mapper_put would have its contents freed out from underneath it
|
|
|
|
|
@ -1423,24 +1423,24 @@ mv_t lrec_evaluator_moosvar_name_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlh
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void lrec_evaluator_moosvar_name_free(lrec_evaluator_t* pevaluator) {
|
|
|
|
|
lrec_evaluator_moosvar_name_state_t* pstate = pevaluator->pvstate;
|
|
|
|
|
static void lrec_evaluator_oosvar_name_free(lrec_evaluator_t* pevaluator) {
|
|
|
|
|
lrec_evaluator_oosvar_name_state_t* pstate = pevaluator->pvstate;
|
|
|
|
|
free(pstate);
|
|
|
|
|
free(pevaluator);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// xxx comment!!
|
|
|
|
|
lrec_evaluator_t* lrec_evaluator_alloc_from_moosvar_name(char* moosvar_name) {
|
|
|
|
|
lrec_evaluator_moosvar_name_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_evaluator_moosvar_name_state_t));
|
|
|
|
|
mv_t mv_name = mv_from_string(moosvar_name, NO_FREE);
|
|
|
|
|
lrec_evaluator_t* lrec_evaluator_alloc_from_oosvar_name(char* oosvar_name) {
|
|
|
|
|
lrec_evaluator_oosvar_name_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_evaluator_oosvar_name_state_t));
|
|
|
|
|
mv_t mv_name = mv_from_string(oosvar_name, NO_FREE);
|
|
|
|
|
pstate->pmvkeys = sllmv_single(&mv_name);
|
|
|
|
|
mv_free(&mv_name);
|
|
|
|
|
|
|
|
|
|
lrec_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(lrec_evaluator_t));
|
|
|
|
|
pevaluator->pvstate = pstate;
|
|
|
|
|
pevaluator->pprocess_func = NULL;
|
|
|
|
|
pevaluator->pprocess_func = lrec_evaluator_moosvar_name_func;
|
|
|
|
|
pevaluator->pfree_func = lrec_evaluator_moosvar_name_free;
|
|
|
|
|
pevaluator->pprocess_func = lrec_evaluator_oosvar_name_func;
|
|
|
|
|
pevaluator->pfree_func = lrec_evaluator_oosvar_name_free;
|
|
|
|
|
|
|
|
|
|
return pevaluator;
|
|
|
|
|
}
|
|
|
|
|
@ -1451,12 +1451,12 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_moosvar_name(char* moosvar_name) {
|
|
|
|
|
// Example AST:
|
|
|
|
|
// % mlr put -v 'begin{@@x[1]["2"][$3][@4]=5}' /dev/null
|
|
|
|
|
// AST BEGIN STATEMENTS (1):
|
|
|
|
|
// = (moosvar_assignment):
|
|
|
|
|
// [] (moosvar_level_key):
|
|
|
|
|
// [] (moosvar_level_key):
|
|
|
|
|
// [] (moosvar_level_key):
|
|
|
|
|
// [] (moosvar_level_key):
|
|
|
|
|
// x (moosvar_name).
|
|
|
|
|
// = (oosvar_assignment):
|
|
|
|
|
// [] (oosvar_level_key):
|
|
|
|
|
// [] (oosvar_level_key):
|
|
|
|
|
// [] (oosvar_level_key):
|
|
|
|
|
// [] (oosvar_level_key):
|
|
|
|
|
// x (oosvar_name).
|
|
|
|
|
// 1 (strnum_literal).
|
|
|
|
|
// 2 (strnum_literal).
|
|
|
|
|
// 3 (field_name).
|
|
|
|
|
@ -1464,23 +1464,23 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_moosvar_name(char* moosvar_name) {
|
|
|
|
|
// 5 (strnum_literal).
|
|
|
|
|
//
|
|
|
|
|
// Here past is the =; pright is the 5; pleft is the string of bracket references
|
|
|
|
|
// ending at the moosvar name.
|
|
|
|
|
// ending at the oosvar name.
|
|
|
|
|
|
|
|
|
|
typedef struct _lrec_evaluator_moosvar_level_keys_state_t {
|
|
|
|
|
sllv_t* pmoosvar_rhs_keylist_evaluators;
|
|
|
|
|
} lrec_evaluator_moosvar_level_keys_state_t;
|
|
|
|
|
typedef struct _lrec_evaluator_oosvar_level_keys_state_t {
|
|
|
|
|
sllv_t* poosvar_rhs_keylist_evaluators;
|
|
|
|
|
} lrec_evaluator_oosvar_level_keys_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_moosvar_level_keys_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_oosvar_level_keys_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_moosvar_level_keys_state_t* pstate = pvstate;
|
|
|
|
|
lrec_evaluator_oosvar_level_keys_state_t* pstate = pvstate;
|
|
|
|
|
|
|
|
|
|
sllmv_t* pmvkeys = sllmv_alloc();
|
|
|
|
|
int ok = TRUE;
|
|
|
|
|
for (sllve_t* pe = pstate->pmoosvar_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) {
|
|
|
|
|
for (sllve_t* pe = pstate->poosvar_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) {
|
|
|
|
|
lrec_evaluator_t* pmvkey_evaluator = pe->pvvalue;
|
|
|
|
|
mv_t mvkey = pmvkey_evaluator->pprocess_func(prec, ptyped_overlay,
|
|
|
|
|
pmoosvars, pregex_captures, pctx, pmvkey_evaluator->pvstate);
|
|
|
|
|
poosvars, pregex_captures, pctx, pmvkey_evaluator->pvstate);
|
|
|
|
|
if (mv_is_null(&mvkey)) {
|
|
|
|
|
ok = FALSE;
|
|
|
|
|
break;
|
|
|
|
|
@ -1494,7 +1494,7 @@ mv_t lrec_evaluator_moosvar_level_keys_func(lrec_t* prec, lhmsv_t* ptyped_overla
|
|
|
|
|
mv_t rv = MV_NULL;
|
|
|
|
|
if (ok) {
|
|
|
|
|
int error = 0;
|
|
|
|
|
mv_t* pval = mlhmmv_get(pmoosvars, pmvkeys, &error);
|
|
|
|
|
mv_t* pval = mlhmmv_get(poosvars, pmvkeys, &error);
|
|
|
|
|
if (pval != NULL)
|
|
|
|
|
rv = *pval;
|
|
|
|
|
}
|
|
|
|
|
@ -1503,9 +1503,9 @@ mv_t lrec_evaluator_moosvar_level_keys_func(lrec_t* prec, lhmsv_t* ptyped_overla
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void lrec_evaluator_moosvar_level_keys_free(lrec_evaluator_t* pevaluator) {
|
|
|
|
|
lrec_evaluator_moosvar_level_keys_state_t* pstate = pevaluator->pvstate;
|
|
|
|
|
for (sllve_t* pe = pstate->pmoosvar_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) {
|
|
|
|
|
static void lrec_evaluator_oosvar_level_keys_free(lrec_evaluator_t* pevaluator) {
|
|
|
|
|
lrec_evaluator_oosvar_level_keys_state_t* pstate = pevaluator->pvstate;
|
|
|
|
|
for (sllve_t* pe = pstate->poosvar_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) {
|
|
|
|
|
lrec_evaluator_t* pevaluator = pe->pvvalue;
|
|
|
|
|
pevaluator->pfree_func(pevaluator);
|
|
|
|
|
}
|
|
|
|
|
@ -1514,19 +1514,19 @@ static void lrec_evaluator_moosvar_level_keys_free(lrec_evaluator_t* pevaluator)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// xxx temp!
|
|
|
|
|
lrec_evaluator_t* lrec_evaluator_alloc_from_moosvar_level_keys(mlr_dsl_ast_node_t* past) {
|
|
|
|
|
lrec_evaluator_moosvar_level_keys_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_evaluator_moosvar_level_keys_state_t));
|
|
|
|
|
lrec_evaluator_t* lrec_evaluator_alloc_from_oosvar_level_keys(mlr_dsl_ast_node_t* past) {
|
|
|
|
|
lrec_evaluator_oosvar_level_keys_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_evaluator_oosvar_level_keys_state_t));
|
|
|
|
|
|
|
|
|
|
sllv_t* pmoosvar_rhs_keylist_evaluators = sllv_alloc();
|
|
|
|
|
sllv_t* poosvar_rhs_keylist_evaluators = sllv_alloc();
|
|
|
|
|
mlr_dsl_ast_node_t* pnode = past;
|
|
|
|
|
while (TRUE) {
|
|
|
|
|
// xxx rename pfoo
|
|
|
|
|
if (pnode->type == MD_AST_NODE_TYPE_MOOSVAR_LEVEL_KEY) {
|
|
|
|
|
if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_LEVEL_KEY) {
|
|
|
|
|
mlr_dsl_ast_node_t* pfoo = pnode->pchildren->phead->pnext->pvvalue;
|
|
|
|
|
sllv_add(pmoosvar_rhs_keylist_evaluators,
|
|
|
|
|
sllv_add(poosvar_rhs_keylist_evaluators,
|
|
|
|
|
lrec_evaluator_alloc_from_ast(pfoo, TYPE_INFER_STRING_FLOAT_INT));
|
|
|
|
|
} else {
|
|
|
|
|
sllv_add(pmoosvar_rhs_keylist_evaluators,
|
|
|
|
|
sllv_add(poosvar_rhs_keylist_evaluators,
|
|
|
|
|
// xxx big comment here. this is confusing.
|
|
|
|
|
lrec_evaluator_alloc_from_strnum_literal(mlr_strdup_or_die(pnode->text), TYPE_INFER_STRING_ONLY));
|
|
|
|
|
}
|
|
|
|
|
@ -1535,16 +1535,16 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_moosvar_level_keys(mlr_dsl_ast_node_
|
|
|
|
|
pnode = pnode->pchildren->phead->pvvalue;
|
|
|
|
|
}
|
|
|
|
|
// Bracket operators come in from the right. So the highest AST node is the rightmost
|
|
|
|
|
// map, and the lowest is the moosvar name.
|
|
|
|
|
sllv_reverse(pmoosvar_rhs_keylist_evaluators);
|
|
|
|
|
// map, and the lowest is the oosvar name.
|
|
|
|
|
sllv_reverse(poosvar_rhs_keylist_evaluators);
|
|
|
|
|
// xxx just make an sllv_add_at_head function
|
|
|
|
|
pstate->pmoosvar_rhs_keylist_evaluators = pmoosvar_rhs_keylist_evaluators;
|
|
|
|
|
pstate->poosvar_rhs_keylist_evaluators = poosvar_rhs_keylist_evaluators;
|
|
|
|
|
|
|
|
|
|
lrec_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(lrec_evaluator_t));
|
|
|
|
|
pevaluator->pvstate = pstate;
|
|
|
|
|
pevaluator->pprocess_func = NULL;
|
|
|
|
|
pevaluator->pprocess_func = lrec_evaluator_moosvar_level_keys_func;
|
|
|
|
|
pevaluator->pfree_func = lrec_evaluator_moosvar_level_keys_free;
|
|
|
|
|
pevaluator->pprocess_func = lrec_evaluator_oosvar_level_keys_func;
|
|
|
|
|
pevaluator->pfree_func = lrec_evaluator_oosvar_level_keys_free;
|
|
|
|
|
|
|
|
|
|
return pevaluator;
|
|
|
|
|
}
|
|
|
|
|
@ -1554,14 +1554,14 @@ typedef struct _lrec_evaluator_strnum_literal_state_t {
|
|
|
|
|
mv_t literal;
|
|
|
|
|
} lrec_evaluator_strnum_literal_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_non_string_literal_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_non_string_literal_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_strnum_literal_state_t* pstate = pvstate;
|
|
|
|
|
return pstate->literal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_string_literal_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_string_literal_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_strnum_literal_state_t* pstate = pvstate;
|
|
|
|
|
@ -1640,7 +1640,7 @@ typedef struct _lrec_evaluator_boolean_literal_state_t {
|
|
|
|
|
mv_t literal;
|
|
|
|
|
} lrec_evaluator_boolean_literal_state_t;
|
|
|
|
|
|
|
|
|
|
mv_t lrec_evaluator_boolean_literal_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_boolean_literal_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
lrec_evaluator_boolean_literal_state_t* pstate = pvstate;
|
|
|
|
|
@ -1675,7 +1675,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_boolean_literal(char* string) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ================================================================
|
|
|
|
|
mv_t lrec_evaluator_NF_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_NF_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_int(prec->field_count);
|
|
|
|
|
@ -1692,7 +1692,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_NF() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
mv_t lrec_evaluator_NR_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_NR_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_int(pctx->nr);
|
|
|
|
|
@ -1709,7 +1709,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_NR() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
mv_t lrec_evaluator_FNR_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_FNR_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_int(pctx->fnr);
|
|
|
|
|
@ -1726,7 +1726,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_FNR() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
mv_t lrec_evaluator_FILENAME_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_FILENAME_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_string_no_free(pctx->filename);
|
|
|
|
|
@ -1744,7 +1744,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_FILENAME() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
mv_t lrec_evaluator_FILENUM_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_FILENUM_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_int(pctx->filenum);
|
|
|
|
|
@ -1761,7 +1761,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_FILENUM() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
mv_t lrec_evaluator_PI_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_PI_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_float(M_PI);
|
|
|
|
|
@ -1778,7 +1778,7 @@ lrec_evaluator_t* lrec_evaluator_alloc_from_PI() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
mv_t lrec_evaluator_E_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* pmoosvars,
|
|
|
|
|
mv_t lrec_evaluator_E_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhmmv_t* poosvars,
|
|
|
|
|
string_array_t* pregex_captures, context_t* pctx, void* pvstate)
|
|
|
|
|
{
|
|
|
|
|
return mv_from_float(M_E);
|
|
|
|
|
@ -2220,8 +2220,8 @@ static lrec_evaluator_t* lrec_evaluator_alloc_from_ast_aux(mlr_dsl_ast_node_t* p
|
|
|
|
|
if (pnode->pchildren == NULL) { // leaf node
|
|
|
|
|
if (pnode->type == MD_AST_NODE_TYPE_FIELD_NAME) {
|
|
|
|
|
return lrec_evaluator_alloc_from_field_name(pnode->text, type_inferencing);
|
|
|
|
|
} else if (pnode->type == MD_AST_NODE_TYPE_MOOSVAR_NAME) {
|
|
|
|
|
return lrec_evaluator_alloc_from_moosvar_name(pnode->text);
|
|
|
|
|
} else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_NAME) {
|
|
|
|
|
return lrec_evaluator_alloc_from_oosvar_name(pnode->text);
|
|
|
|
|
} else if (pnode->type == MD_AST_NODE_TYPE_STRNUM_LITERAL) {
|
|
|
|
|
return lrec_evaluator_alloc_from_strnum_literal(pnode->text, type_inferencing);
|
|
|
|
|
} else if (pnode->type == MD_AST_NODE_TYPE_BOOLEAN_LITERAL) {
|
|
|
|
|
@ -2236,8 +2236,8 @@ static lrec_evaluator_t* lrec_evaluator_alloc_from_ast_aux(mlr_dsl_ast_node_t* p
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if (pnode->type == MD_AST_NODE_TYPE_MOOSVAR_LEVEL_KEY) {
|
|
|
|
|
return lrec_evaluator_alloc_from_moosvar_level_keys(pnode);
|
|
|
|
|
} else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_LEVEL_KEY) {
|
|
|
|
|
return lrec_evaluator_alloc_from_oosvar_level_keys(pnode);
|
|
|
|
|
|
|
|
|
|
} else { // operator/function
|
|
|
|
|
if ((pnode->type != MD_AST_NODE_TYPE_FUNCTION_NAME)
|
|
|
|
|
@ -2348,26 +2348,26 @@ static char * test1() {
|
|
|
|
|
|
|
|
|
|
lrec_t* prec = lrec_unbacked_alloc();
|
|
|
|
|
lhmsv_t* ptyped_overlay = lhmsv_alloc();
|
|
|
|
|
mlhmmv_t* pmoosvars = mlhmmv_alloc();
|
|
|
|
|
mlhmmv_t* poosvars = mlhmmv_alloc();
|
|
|
|
|
string_array_t* pregex_captures = NULL;
|
|
|
|
|
|
|
|
|
|
mv_t val = pnr->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pnr->pvstate);
|
|
|
|
|
mv_t val = pnr->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pnr->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_INT);
|
|
|
|
|
mu_assert_lf(val.u.intv == 888);
|
|
|
|
|
|
|
|
|
|
val = pfnr->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pfnr->pvstate);
|
|
|
|
|
val = pfnr->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pfnr->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_INT);
|
|
|
|
|
mu_assert_lf(val.u.intv == 999);
|
|
|
|
|
|
|
|
|
|
val = pfilename->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pfilename->pvstate);
|
|
|
|
|
val = pfilename->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pfilename->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_STRING);
|
|
|
|
|
mu_assert_lf(val.u.strv != NULL);
|
|
|
|
|
mu_assert_lf(streq(val.u.strv, "filename-goes-here"));
|
|
|
|
|
|
|
|
|
|
val = pfilenum->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pfilenum->pvstate);
|
|
|
|
|
val = pfilenum->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pfilenum->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_INT);
|
|
|
|
|
mu_assert_lf(val.u.intv == 123);
|
|
|
|
|
@ -2390,36 +2390,36 @@ static char * test2() {
|
|
|
|
|
|
|
|
|
|
lrec_t* prec = lrec_unbacked_alloc();
|
|
|
|
|
lhmsv_t* ptyped_overlay = lhmsv_alloc();
|
|
|
|
|
mlhmmv_t* pmoosvars = mlhmmv_alloc();
|
|
|
|
|
mlhmmv_t* poosvars = mlhmmv_alloc();
|
|
|
|
|
string_array_t* pregex_captures = NULL;
|
|
|
|
|
lrec_put(prec, "s", "abc", NO_FREE);
|
|
|
|
|
printf("lrec s = %s\n", lrec_get(prec, "s"));
|
|
|
|
|
|
|
|
|
|
mv_t val = ps->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, ps->pvstate);
|
|
|
|
|
mv_t val = ps->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, ps->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_STRING);
|
|
|
|
|
mu_assert_lf(val.u.strv != NULL);
|
|
|
|
|
mu_assert_lf(streq(val.u.strv, "abc"));
|
|
|
|
|
|
|
|
|
|
val = pdef->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pdef->pvstate);
|
|
|
|
|
val = pdef->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pdef->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_STRING);
|
|
|
|
|
mu_assert_lf(val.u.strv != NULL);
|
|
|
|
|
mu_assert_lf(streq(val.u.strv, "def"));
|
|
|
|
|
|
|
|
|
|
val = pdot->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pdot->pvstate);
|
|
|
|
|
val = pdot->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pdot->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_STRING);
|
|
|
|
|
mu_assert_lf(val.u.strv != NULL);
|
|
|
|
|
mu_assert_lf(streq(val.u.strv, "abcdef"));
|
|
|
|
|
|
|
|
|
|
val = ptolower->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, ptolower->pvstate);
|
|
|
|
|
val = ptolower->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, ptolower->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_STRING);
|
|
|
|
|
mu_assert_lf(val.u.strv != NULL);
|
|
|
|
|
mu_assert_lf(streq(val.u.strv, "abcdef"));
|
|
|
|
|
|
|
|
|
|
val = ptoupper->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, ptoupper->pvstate);
|
|
|
|
|
val = ptoupper->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, ptoupper->pvstate);
|
|
|
|
|
printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val));
|
|
|
|
|
mu_assert_lf(val.type == MT_STRING);
|
|
|
|
|
mu_assert_lf(val.u.strv != NULL);
|
|
|
|
|
@ -2453,16 +2453,16 @@ static char * test3() {
|
|
|
|
|
|
|
|
|
|
lrec_t* prec = lrec_unbacked_alloc();
|
|
|
|
|
lhmsv_t* ptyped_overlay = lhmsv_alloc();
|
|
|
|
|
mlhmmv_t* pmoosvars = mlhmmv_alloc();
|
|
|
|
|
mlhmmv_t* poosvars = mlhmmv_alloc();
|
|
|
|
|
string_array_t* pregex_captures = NULL;
|
|
|
|
|
lrec_put(prec, "x", "4.5", NO_FREE);
|
|
|
|
|
|
|
|
|
|
mv_t valp2 = p2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, p2->pvstate);
|
|
|
|
|
mv_t valp4 = p4->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, p4->pvstate);
|
|
|
|
|
mv_t valpx = px->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, px->pvstate);
|
|
|
|
|
mv_t valpx2 = px2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, px2->pvstate);
|
|
|
|
|
mv_t valplogx = plogx->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, plogx->pvstate);
|
|
|
|
|
mv_t valp2logx = p2logx->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, p2logx->pvstate);
|
|
|
|
|
mv_t valp2 = p2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, p2->pvstate);
|
|
|
|
|
mv_t valp4 = p4->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, p4->pvstate);
|
|
|
|
|
mv_t valpx = px->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, px->pvstate);
|
|
|
|
|
mv_t valpx2 = px2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, px2->pvstate);
|
|
|
|
|
mv_t valplogx = plogx->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, plogx->pvstate);
|
|
|
|
|
mv_t valp2logx = p2logx->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, p2logx->pvstate);
|
|
|
|
|
|
|
|
|
|
printf("lrec x = %s\n", lrec_get(prec, "x"));
|
|
|
|
|
printf("newval 2 = %s\n", mv_describe_val(valp2));
|
|
|
|
|
@ -2489,17 +2489,17 @@ static char * test3() {
|
|
|
|
|
|
|
|
|
|
mlr_dsl_ast_node_print(p2logxnode);
|
|
|
|
|
printf("newval AST = %s\n",
|
|
|
|
|
mv_describe_val(pastr->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, pastr->pvstate)));
|
|
|
|
|
mv_describe_val(pastr->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, pastr->pvstate)));
|
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
|
|
lrec_rename(prec, "x", "y", FALSE);
|
|
|
|
|
|
|
|
|
|
valp2 = p2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, p2->pvstate);
|
|
|
|
|
valp4 = p4->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, p4->pvstate);
|
|
|
|
|
valpx = px->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, px->pvstate);
|
|
|
|
|
valpx2 = px2->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, px2->pvstate);
|
|
|
|
|
valplogx = plogx->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, plogx->pvstate);
|
|
|
|
|
valp2logx = p2logx->pprocess_func(prec, ptyped_overlay, pmoosvars, pregex_captures, pctx, p2logx->pvstate);
|
|
|
|
|
valp2 = p2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, p2->pvstate);
|
|
|
|
|
valp4 = p4->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, p4->pvstate);
|
|
|
|
|
valpx = px->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, px->pvstate);
|
|
|
|
|
valpx2 = px2->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, px2->pvstate);
|
|
|
|
|
valplogx = plogx->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, plogx->pvstate);
|
|
|
|
|
valp2logx = p2logx->pprocess_func(prec, ptyped_overlay, poosvars, pregex_captures, pctx, p2logx->pvstate);
|
|
|
|
|
|
|
|
|
|
printf("lrec x = %s\n", lrec_get(prec, "x"));
|
|
|
|
|
printf("newval 2 = %s\n", mv_describe_val(valp2));
|
|
|
|
|
|