$* iterate

This commit is contained in:
John Kerl 2016-03-03 09:05:41 -05:00
parent e3c814c32f
commit d67ecc4b26
2 changed files with 35 additions and 51 deletions

View file

@ -10,11 +10,9 @@ static mlr_dsl_cst_statement_item_t* mlr_dsl_cst_statement_item_alloc(
char* output_field_name,
sllv_t* poosvar_lhs_keylist_evaluators,
int all_flag,
int lhs_is_full_srec,
rval_evaluator_t* prhs_evaluator,
sllv_t* pcond_statements,
sllv_t* poosvar_rhs_keylist_evaluators,
int rhs_is_full_srec);
sllv_t* poosvar_rhs_keylist_evaluators);
static void cst_statement_item_free(mlr_dsl_cst_statement_item_t* pitem);
@ -225,11 +223,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pleft->text,
NULL,
FALSE,
FALSE,
rval_evaluator_alloc_from_ast(pright, type_inferencing),
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_srec_assignment;
} else if (past->type == MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT) {
@ -291,20 +287,36 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
NULL,
poosvar_lhs_keylist_evaluators,
FALSE,
FALSE,
rval_evaluator_alloc_from_ast(pright, type_inferencing),
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_oosvar_assignment;
} else if (past->type == MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT) {
// xxx
sllv_t* poosvar_lhs_keylist_evaluators = sllv_alloc();
sllv_append(pstatement->pitems, mlr_dsl_cst_statement_item_alloc(
NULL,
poosvar_lhs_keylist_evaluators,
FALSE,
NULL,
NULL,
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_oosvar_from_full_srec_assignment;
} else if (past->type == MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT) {
// xxx
sllv_t* poosvar_rhs_keylist_evaluators = sllv_alloc();
sllv_append(pstatement->pitems, mlr_dsl_cst_statement_item_alloc(
NULL,
NULL,
FALSE,
NULL,
NULL,
poosvar_rhs_keylist_evaluators)); // xxx
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_full_srec_from_oosvar_assignment;
} else if (past->type == MD_AST_NODE_TYPE_UNSET) {
@ -318,11 +330,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pnode->text,
NULL,
FALSE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
} else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_NAME) {
sllv_t* poosvar_lhs_keylist_evaluators = sllv_alloc();
@ -332,11 +342,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pnode->text,
poosvar_lhs_keylist_evaluators,
FALSE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
// xxx brief cmts here paralleling emit
} else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_LEVEL_KEY) {
@ -360,22 +368,18 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pwalker->text,
poosvar_lhs_keylist_evaluators,
FALSE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
} else if (pnode->type == MD_AST_NODE_TYPE_ALL) {
sllv_append(pstatement->pitems, mlr_dsl_cst_statement_item_alloc(
NULL,
NULL,
TRUE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
// The grammar allows only 'unset all', not 'unset @x, all, $y'.
// So if 'all' appears at all, it's the only name.
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_unset_all;
@ -395,11 +399,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pnode->text,
NULL,
FALSE,
FALSE,
rval_evaluator_alloc_from_ast(pnode, type_inferencing),
NULL,
NULL,
FALSE));
NULL));
}
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_emitf;
@ -414,11 +416,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
NULL,
NULL,
TRUE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_emit_all;
@ -440,11 +440,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pnamenode->text,
poosvar_lhs_keylist_evaluators,
FALSE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_emit;
}
@ -465,11 +463,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
NULL,
NULL,
FALSE,
FALSE,
rval_evaluator_alloc_from_ast(pfirst, type_inferencing),
pcond_statements,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_conditional_block;
@ -479,11 +475,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
NULL,
NULL,
FALSE,
FALSE,
rval_evaluator_alloc_from_ast(pnode, type_inferencing),
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_filter;
@ -492,11 +486,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
NULL,
NULL,
FALSE,
FALSE,
NULL,
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_dump;
@ -505,11 +497,9 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
NULL,
NULL,
FALSE,
FALSE,
rval_evaluator_alloc_from_ast(past, type_inferencing),
NULL,
NULL,
FALSE));
NULL));
pstatement->pevaluator = mlr_dsl_cst_node_evaluate_bare_boolean;
}
@ -529,21 +519,17 @@ static mlr_dsl_cst_statement_item_t* mlr_dsl_cst_statement_item_alloc(
char* output_field_name,
sllv_t* poosvar_lhs_keylist_evaluators,
int all_flag,
int lhs_is_full_srec,
rval_evaluator_t* prhs_evaluator,
sllv_t* pcond_statements,
sllv_t* poosvar_rhs_keylist_evaluators,
int rhs_is_full_srec)
sllv_t* poosvar_rhs_keylist_evaluators)
{
mlr_dsl_cst_statement_item_t* pitem = mlr_malloc_or_die(sizeof(mlr_dsl_cst_statement_item_t));
pitem->output_field_name = output_field_name == NULL ? NULL : mlr_strdup_or_die(output_field_name);
pitem->poosvar_lhs_keylist_evaluators = poosvar_lhs_keylist_evaluators;
pitem->all_flag = all_flag;
pitem->lhs_is_full_srec = lhs_is_full_srec;
pitem->prhs_evaluator = prhs_evaluator;
pitem->pcond_statements = pcond_statements;
pitem->poosvar_rhs_keylist_evaluators = poosvar_rhs_keylist_evaluators;
pitem->rhs_is_full_srec = rhs_is_full_srec;
return pitem;
}

View file

@ -57,13 +57,11 @@ typedef struct _mlr_dsl_cst_statement_item_t {
char* output_field_name;
sllv_t* poosvar_lhs_keylist_evaluators;
int all_flag; // for emit all and unset all
int lhs_is_full_srec;
// RHS:
rval_evaluator_t* prhs_evaluator; // E.g. for srec assignments
sllv_t* pcond_statements; // For pattern-action blocks
sllv_t* poosvar_rhs_keylist_evaluators; // For assigning full srec from oosvar
int rhs_is_full_srec; // For assigning oosvar from full srec
} mlr_dsl_cst_statement_item_t;
typedef struct _mlr_dsl_cst_statement_t {