bind-stack integration into call-chain

This commit is contained in:
John Kerl 2016-05-16 10:58:43 -04:00
parent 2b7a65d0d0
commit 8aeadc0244
3 changed files with 116 additions and 62 deletions

View file

@ -5,6 +5,7 @@
#include "containers/sllv.h"
#include "containers/lhmsv.h"
#include "containers/mlhmmv.h"
#include "containers/bind_stack.h"
#include "mapping/mappers.h"
#include "mapping/rval_evaluators.h"
#include "dsls/mlr_dsl_wrapper.h"
@ -21,6 +22,7 @@ typedef struct _mapper_put_state_t {
int at_begin;
mlhmmv_t* poosvars;
char* oosvar_flatten_separator;
bind_stack_t* pbind_stack;
int outer_filter;
} mapper_put_state_t;
@ -161,6 +163,7 @@ static mapper_t* mapper_put_alloc(ap_state_t* pargp, char* mlr_dsl_expression,
pstate->outer_filter = outer_filter;
pstate->poosvars = mlhmmv_alloc();
pstate->oosvar_flatten_separator = oosvar_flatten_separator;
pstate->pbind_stack = bind_stack_alloc();
mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t));
pmapper->pvstate = (void*)pstate;
@ -176,6 +179,7 @@ static void mapper_put_free(mapper_t* pmapper) {
free(pstate->mlr_dsl_expression);
free(pstate->comment_stripped_mlr_dsl_expression);
mlhmmv_free(pstate->poosvars);
bind_stack_free(pstate->pbind_stack);
mlr_dsl_cst_free(pstate->pcst);
mlr_dsl_ast_free(pstate->past);
@ -244,14 +248,14 @@ static sllv_t* mapper_put_process(lrec_t* pinrec, context_t* pctx, void* pvstate
if (pstate->at_begin) {
mlr_dsl_cst_handle(pstate->pcst->pbegin_statements,
pstate->poosvars, NULL, NULL, &pregex_captures, pctx, &emit_rec, poutrecs,
pstate->oosvar_flatten_separator);
pstate->oosvar_flatten_separator, pstate->pbind_stack);
pstate->at_begin = FALSE;
}
if (pinrec == NULL) { // End of input stream
mlr_dsl_cst_handle(pstate->pcst->pend_statements,
pstate->poosvars, NULL, NULL, &pregex_captures, pctx, &emit_rec, poutrecs,
pstate->oosvar_flatten_separator);
pstate->oosvar_flatten_separator, pstate->pbind_stack);
string_array_free(pregex_captures);
sllv_append(poutrecs, NULL);
@ -263,7 +267,7 @@ static sllv_t* mapper_put_process(lrec_t* pinrec, context_t* pctx, void* pvstate
emit_rec = TRUE;
mlr_dsl_cst_handle(pstate->pcst->pmain_statements,
pstate->poosvars, pinrec, ptyped_overlay, &pregex_captures, pctx, &emit_rec, poutrecs,
pstate->oosvar_flatten_separator);
pstate->oosvar_flatten_separator, pstate->pbind_stack);
if (emit_rec && pstate->outer_filter) {
// Write the output fields from the typed overlay back to the lrec.

View file

@ -43,7 +43,8 @@ static void mlr_dsl_cst_node_handle_srec_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_oosvar_assignment(
mlr_dsl_cst_statement_t* pnode,
@ -54,7 +55,8 @@ static void mlr_dsl_cst_node_handle_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_oosvar_to_oosvar_assignment(
mlr_dsl_cst_statement_t* pnode,
@ -65,7 +67,8 @@ static void mlr_dsl_cst_node_handle_oosvar_to_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_oosvar_from_full_srec_assignment(
mlr_dsl_cst_statement_t* pnode,
@ -76,7 +79,8 @@ static void mlr_dsl_cst_node_handle_oosvar_from_full_srec_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_full_srec_from_oosvar_assignment(
mlr_dsl_cst_statement_t* pnode,
@ -87,7 +91,8 @@ static void mlr_dsl_cst_node_handle_full_srec_from_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_oosvar_assignment(
mlr_dsl_cst_statement_t* pnode,
@ -98,7 +103,8 @@ static void mlr_dsl_cst_node_handle_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_unset(
mlr_dsl_cst_statement_t* pnode,
@ -109,7 +115,8 @@ static void mlr_dsl_cst_node_handle_unset(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_unset_all(
mlr_dsl_cst_statement_t* pnode,
@ -120,7 +127,8 @@ static void mlr_dsl_cst_node_handle_unset_all(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_emitf(
mlr_dsl_cst_statement_t* pnode,
@ -131,7 +139,8 @@ static void mlr_dsl_cst_node_handle_emitf(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_emitp(
mlr_dsl_cst_statement_t* pnode,
@ -142,7 +151,8 @@ static void mlr_dsl_cst_node_handle_emitp(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_emitp_all(
mlr_dsl_cst_statement_t* pnode,
@ -153,7 +163,8 @@ static void mlr_dsl_cst_node_handle_emitp_all(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_emit(
mlr_dsl_cst_statement_t* pnode,
@ -164,7 +175,8 @@ static void mlr_dsl_cst_node_handle_emit(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_emit_all(
mlr_dsl_cst_statement_t* pnode,
@ -175,7 +187,8 @@ static void mlr_dsl_cst_node_handle_emit_all(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_dump(
mlr_dsl_cst_statement_t* pnode,
@ -186,7 +199,8 @@ static void mlr_dsl_cst_node_handle_dump(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_filter(
mlr_dsl_cst_statement_t* pnode,
@ -197,7 +211,8 @@ static void mlr_dsl_cst_node_handle_filter(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_conditional_block(
mlr_dsl_cst_statement_t* pnode,
@ -208,7 +223,8 @@ static void mlr_dsl_cst_node_handle_conditional_block(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_while(
mlr_dsl_cst_statement_t* pnode,
@ -219,7 +235,8 @@ static void mlr_dsl_cst_node_handle_while(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_do_while(
mlr_dsl_cst_statement_t* pnode,
@ -230,7 +247,8 @@ static void mlr_dsl_cst_node_handle_do_while(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_do_while(
mlr_dsl_cst_statement_t* pnode,
@ -241,7 +259,8 @@ static void mlr_dsl_cst_node_handle_do_while(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_for_srec(
mlr_dsl_cst_statement_t* pnode,
@ -252,7 +271,8 @@ static void mlr_dsl_cst_node_handle_for_srec(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_if_head(
mlr_dsl_cst_statement_t* pnode,
@ -263,7 +283,8 @@ static void mlr_dsl_cst_node_handle_if_head(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static void mlr_dsl_cst_node_handle_bare_boolean(
mlr_dsl_cst_statement_t* pnode,
@ -274,7 +295,8 @@ static void mlr_dsl_cst_node_handle_bare_boolean(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
static sllv_t* allocate_keylist_evaluators_from_oosvar_node(mlr_dsl_ast_node_t* pnode, int type_inferencing);
@ -537,6 +559,7 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc_blank() {
pstatement->pvarargs = NULL;
pstatement->pblock_statements = NULL;
pstatement->pif_chain_statements = NULL;
pstatement->pbind_stack = NULL;
return pstatement;
}
@ -1091,12 +1114,13 @@ void mlr_dsl_cst_handle(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
for (sllve_t* pe = pcst_statements->phead; pe != NULL; pe = pe->pnext) {
mlr_dsl_cst_statement_t* pstatement = pe->pvvalue;
pstatement->phandler(pstatement, poosvars, pinrec, ptyped_overlay, ppregex_captures,
pctx, pshould_emit_rec, poutrecs, oosvar_flatten_separator);
pctx, pshould_emit_rec, poutrecs, oosvar_flatten_separator, pbind_stack);
}
}
@ -1110,7 +1134,8 @@ static void mlr_dsl_cst_node_handle_srec_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
char* srec_lhs_field_name = pnode->srec_lhs_field_name;
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;
@ -1156,7 +1181,8 @@ static void mlr_dsl_cst_node_handle_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;
mv_t rhs_value = prhs_evaluator->pprocess_func(pinrec, ptyped_overlay,
@ -1186,7 +1212,8 @@ static void mlr_dsl_cst_node_handle_oosvar_to_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
int lhs_all_non_null_or_error = TRUE;
sllmv_t* plhskeys = evaluate_list(pnode->poosvar_lhs_keylist_evaluators,
@ -1214,7 +1241,8 @@ static void mlr_dsl_cst_node_handle_oosvar_from_full_srec_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
int all_non_null_or_error = TRUE;
sllmv_t* plhskeys = evaluate_list(pnode->poosvar_lhs_keylist_evaluators,
@ -1252,7 +1280,8 @@ static void mlr_dsl_cst_node_handle_full_srec_from_oosvar_assignment(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
lrec_clear(pinrec);
for (lhmsve_t* pe = ptyped_overlay->phead; pe != NULL; pe = pe->pnext) {
@ -1311,7 +1340,8 @@ static void mlr_dsl_cst_node_handle_unset(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
for (sllve_t* pf = pnode->pvarargs->phead; pf != NULL; pf = pf->pnext) {
mlr_dsl_cst_statement_vararg_t* pvararg = pf->pvvalue;
@ -1340,7 +1370,8 @@ static void mlr_dsl_cst_node_handle_unset_all(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
sllmv_t* pempty = sllmv_alloc();
mlhmmv_remove(poosvars, pempty);
@ -1357,7 +1388,8 @@ static void mlr_dsl_cst_node_handle_emitf(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
lrec_t* prec_to_emit = lrec_unbacked_alloc();
for (sllve_t* pf = pnode->pvarargs->phead; pf != NULL; pf = pf->pnext) {
@ -1393,7 +1425,8 @@ static void mlr_dsl_cst_node_handle_emitp(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
int keys_all_non_null_or_error = TRUE;
sllmv_t* pmvkeys = evaluate_list(pnode->poosvar_lhs_keylist_evaluators,
@ -1420,7 +1453,8 @@ static void mlr_dsl_cst_node_handle_emitp_all(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
int all_non_null_or_error = TRUE;
sllmv_t* pmvnames = evaluate_list(pnode->pemit_oosvar_namelist_evaluators,
@ -1441,7 +1475,8 @@ static void mlr_dsl_cst_node_handle_emit(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
int keys_all_non_null_or_error = TRUE;
sllmv_t* pmvkeys = evaluate_list(pnode->poosvar_lhs_keylist_evaluators,
@ -1468,7 +1503,8 @@ static void mlr_dsl_cst_node_handle_emit_all(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
int all_non_null_or_error = TRUE;
sllmv_t* pmvnames = evaluate_list(pnode->pemit_oosvar_namelist_evaluators,
@ -1489,7 +1525,8 @@ static void mlr_dsl_cst_node_handle_dump(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
mlhmmv_print_json_stacked(poosvars, FALSE);
}
@ -1504,7 +1541,8 @@ static void mlr_dsl_cst_node_handle_filter(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;
@ -1528,7 +1566,8 @@ static void mlr_dsl_cst_node_handle_conditional_block(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;
@ -1539,7 +1578,7 @@ static void mlr_dsl_cst_node_handle_conditional_block(
if (val.u.boolv) {
mlr_dsl_cst_handle(pnode->pblock_statements,
poosvars, pinrec, ptyped_overlay, ppregex_captures, pctx, pshould_emit_rec, poutrecs,
oosvar_flatten_separator);
oosvar_flatten_separator, pbind_stack);
}
}
}
@ -1554,7 +1593,8 @@ static void mlr_dsl_cst_node_handle_while(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;
@ -1566,7 +1606,7 @@ static void mlr_dsl_cst_node_handle_while(
if (val.u.boolv) {
mlr_dsl_cst_handle(pnode->pblock_statements,
poosvars, pinrec, ptyped_overlay, ppregex_captures, pctx, pshould_emit_rec, poutrecs,
oosvar_flatten_separator);
oosvar_flatten_separator, pbind_stack);
} else {
break;
}
@ -1586,14 +1626,15 @@ static void mlr_dsl_cst_node_handle_do_while(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;
while (TRUE) {
mlr_dsl_cst_handle(pnode->pblock_statements,
poosvars, pinrec, ptyped_overlay, ppregex_captures, pctx, pshould_emit_rec, poutrecs,
oosvar_flatten_separator);
oosvar_flatten_separator, pbind_stack);
mv_t val = prhs_evaluator->pprocess_func(pinrec, ptyped_overlay, poosvars,
ppregex_captures, pctx, prhs_evaluator->pvstate);
@ -1618,7 +1659,8 @@ static void mlr_dsl_cst_node_handle_for_srec(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) {
// xxx copy not ptr-ref in case unset in loop body
@ -1629,7 +1671,7 @@ static void mlr_dsl_cst_node_handle_for_srec(
mlr_dsl_cst_handle(pnode->pblock_statements,
poosvars, pinrec, ptyped_overlay, ppregex_captures, pctx, pshould_emit_rec, poutrecs,
oosvar_flatten_separator);
oosvar_flatten_separator, pbind_stack);
}
// xxx break/continue-handling (needs to be in rval evluators w/ stack of brk/ctu flags @ context
}
@ -1644,7 +1686,8 @@ static void mlr_dsl_cst_node_handle_if_head(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
for (sllve_t* pe = pnode->pif_chain_statements->phead; pe != NULL; pe = pe->pnext) {
mlr_dsl_cst_statement_t* pitemnode = pe->pvvalue;
@ -1657,7 +1700,7 @@ static void mlr_dsl_cst_node_handle_if_head(
if (val.u.boolv) {
mlr_dsl_cst_handle(pitemnode->pblock_statements,
poosvars, pinrec, ptyped_overlay, ppregex_captures, pctx, pshould_emit_rec, poutrecs,
oosvar_flatten_separator);
oosvar_flatten_separator, pbind_stack);
break;
}
@ -1675,7 +1718,8 @@ static void mlr_dsl_cst_node_handle_bare_boolean(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator)
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack)
{
rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator;

View file

@ -3,6 +3,7 @@
#include "containers/mlr_dsl_ast.h"
#include "rval_evaluators.h"
#include "containers/bind_stack.h"
// ================================================================
// Concrete syntax tree (CST) derived from an abstract syntax tree (AST).
@ -54,7 +55,8 @@ typedef void mlr_dsl_cst_node_handler_func_t(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
// Most statements have one item, except emit and unset.
typedef struct _mlr_dsl_cst_statement_vararg_t {
@ -68,36 +70,39 @@ typedef struct _mlr_dsl_cst_statement_t {
// Function-pointer for the handler of the given statement type, e.g. srec-assignment, while-loop, etc.
mlr_dsl_cst_node_handler_func_t* phandler;
// For assignment to oosvar, emit, and emitp
// Assignment to oosvar, emit, and emitp
sllv_t* poosvar_lhs_keylist_evaluators;
// For assignment to srec
// Assignment to srec
char* srec_lhs_field_name;
// For assignments to srec or oosvar, as well as the boolean expression in filter, cond, and bare-boolean
// Assignments to srec or oosvar, as well as the boolean expression in filter, cond, and bare-boolean
rval_evaluator_t* prhs_evaluator;
// For assigning full srec from oosvar
// Assigning full srec from oosvar:
sllv_t* poosvar_rhs_keylist_evaluators;
// For emit/emitp
// emit/emitp:
sllv_t* pemit_oosvar_namelist_evaluators;
// Vararg stuff for emit and unset
sllv_t* pvarargs;
// For pattern-action blocks, while, for, etc.
// Pattern-action blocks, while, for, etc.
sllv_t* pblock_statements;
// For if-elif-elif-else:
// if-elif-elif-else:
sllv_t* pif_chain_statements;
// For for-srec:
// for-srec:
char* for_srec_k_name;
char* for_srec_v_name;
// xxx for-oosvar key-list of names
// for-srec and for-oosvar:
bind_stack_t* pbind_stack;
} mlr_dsl_cst_statement_t;
// ---------------------------------------------------------------- xxx
@ -145,6 +150,7 @@ void mlr_dsl_cst_handle(
context_t* pctx,
int* pshould_emit_rec,
sllv_t* poutrecs,
char* oosvar_flatten_separator);
char* oosvar_flatten_separator,
bind_stack_t* pbind_stack);
#endif // MLR_DSL_CST_H