From 7f273dec041383fd44a33ecba8a08460f764a643 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 28 Feb 2016 18:18:13 -0500 Subject: [PATCH] unset iterate --- c/containers/mlhmmv.c | 6 +++--- c/containers/mlhmmv.h | 2 +- c/dsls/mlr_dsl_parse.y | 9 +++++++++ c/mapping/mlr_dsl_cst.c | 2 +- c/todo.txt | 3 ++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/c/containers/mlhmmv.c b/c/containers/mlhmmv.c index 28ec00cfe..4e105f81e 100644 --- a/c/containers/mlhmmv.c +++ b/c/containers/mlhmmv.c @@ -285,7 +285,7 @@ mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror) { return NULL; } mlhmmv_level_t* plevel = pmap->proot_level; - mlhmmv_level_value_t* plevel_value = mlhmmv_level_get(plevel, &prest_keys->value); + mlhmmv_level_value_t* plevel_value = mlhmmv_get_next_level(plevel, &prest_keys->value); while (prest_keys->pnext != NULL) { if (plevel_value == NULL) { return NULL; @@ -296,7 +296,7 @@ mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror) { } plevel = plevel_value->u.pnext_level; prest_keys = prest_keys->pnext; - plevel_value = mlhmmv_level_get(plevel, &prest_keys->value); + plevel_value = mlhmmv_get_next_level(plevel, &prest_keys->value); } if (plevel_value == NULL) { return NULL; @@ -308,7 +308,7 @@ mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror) { return &plevel_value->u.mlrval; } -mlhmmv_level_value_t* mlhmmv_level_get(mlhmmv_level_t* plevel, mv_t* plevel_key) { +mlhmmv_level_value_t* mlhmmv_get_next_level(mlhmmv_level_t* plevel, mv_t* plevel_key) { int ideal_index = 0; int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); mlhmmv_level_entry_t* pentry = &plevel->entries[index]; diff --git a/c/containers/mlhmmv.h b/c/containers/mlhmmv.h index 969714eed..4e7e0d915 100644 --- a/c/containers/mlhmmv.h +++ b/c/containers/mlhmmv.h @@ -77,7 +77,7 @@ void mlhmmv_put(mlhmmv_t* pmap, sllmv_t* pmvkeys, mv_t* pterminal_value); mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror); // Made public for the oosvar-emitter. -mlhmmv_level_value_t* mlhmmv_level_get(mlhmmv_level_t* pmap, mv_t* plevel_key); +mlhmmv_level_value_t* mlhmmv_get_next_level(mlhmmv_level_t* pmap, mv_t* plevel_key); void mlhmmv_print_json_stacked(mlhmmv_t* pmap, int quote_values_always); void mlhmmv_print_json_single_line(mlhmmv_t* pmap, int quote_values_always); diff --git a/c/dsls/mlr_dsl_parse.y b/c/dsls/mlr_dsl_parse.y index 058b00c8d..920cd8050 100644 --- a/c/dsls/mlr_dsl_parse.y +++ b/c/dsls/mlr_dsl_parse.y @@ -505,6 +505,15 @@ md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_name(B) MD_TOKEN_COMMA md_emit_args(C) B = mlr_dsl_ast_node_prepend_arg(C, B); A = mlr_dsl_ast_node_set_function_name(B, O->text); } + +md_emit(A) ::= MD_TOKEN_EMIT(O) md_keyed_oosvar_name(B). { + A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); +} +md_emit(A) ::= MD_TOKEN_EMIT(O) md_keyed_oosvar_name(B) MD_TOKEN_COMMA md_emit_args(C). { + B = mlr_dsl_ast_node_prepend_arg(C, B); + A = mlr_dsl_ast_node_set_function_name(B, O->text); +} + md_emit_args(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMIT, B); } diff --git a/c/mapping/mlr_dsl_cst.c b/c/mapping/mlr_dsl_cst.c index 3df5197a2..e4c06ba90 100644 --- a/c/mapping/mlr_dsl_cst.c +++ b/c/mapping/mlr_dsl_cst.c @@ -590,7 +590,7 @@ static void mlr_dsl_cst_node_evaluate_emit( // xxx alloc once & keep in item struct. or not. no huge impact (and, zero-copy). mv_t mv0 = mv_from_string_no_free(pitem->output_field_name); - mlhmmv_level_value_t* proot_value = mlhmmv_level_get(poosvars->proot_level, &mv0); + mlhmmv_level_value_t* proot_value = mlhmmv_get_next_level(poosvars->proot_level, &mv0); if (proot_value == NULL) { mv_free(&mv0); return; diff --git a/c/todo.txt b/c/todo.txt index de443c874..656a31b03 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -55,7 +55,8 @@ UNSET PARAMETERIZED EMIT !! need submaps: - mlr put -v 'emit @a["sums"]' + o mlr put -v 'emit @a["sums"]' + o various-level emit and emitf. only req't for emitf is all args must be single at that level. * evolve & extend the UTs * handle too-short, too-long, just-right cases