diff --git a/c/dsl/mlr_dsl_cst_output_statements.c b/c/dsl/mlr_dsl_cst_output_statements.c index 7bce33693..fa46c1862 100644 --- a/c/dsl/mlr_dsl_cst_output_statements.c +++ b/c/dsl/mlr_dsl_cst_output_statements.c @@ -1464,7 +1464,7 @@ static void handle_dump( mlhmmv_level_print_stacked(boxed_xval.xval.pnext_level, 0, FALSE, FALSE, "", pstate->stdfp); // xxx mk simpler call w/ dfl args } - if (!boxed_xval.xval.is_terminal && boxed_xval.is_ephemeral) { + if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } @@ -1500,7 +1500,7 @@ static void handle_dump_to_file( free(filename); mv_free(&filename_mv); - if (!boxed_xval.xval.is_terminal && boxed_xval.is_ephemeral) { + if (boxed_xval.is_ephemeral) { mlhmmv_xvalue_free(&boxed_xval.xval); } } diff --git a/c/dsl/rxval_expr_evaluators.c b/c/dsl/rxval_expr_evaluators.c index a3e58d0b4..b96ca2d1b 100644 --- a/c/dsl/rxval_expr_evaluators.c +++ b/c/dsl/rxval_expr_evaluators.c @@ -190,11 +190,11 @@ static void rxval_evaluator_from_map_literal_aux( if (pkvpair->is_terminal) { boxed_xval_t boxed_xval = pkvpair->pxval_evaluator->pprocess_func( pkvpair->pxval_evaluator->pvstate, pvars); - if (!boxed_xval.xval.is_terminal && !boxed_xval.is_ephemeral) { + if (boxed_xval.is_ephemeral) { + mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, &boxed_xval.xval); + } else { mlhmmv_xvalue_t copy_xval = mlhmmv_xvalue_copy(&boxed_xval.xval); mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, ©_xval); - } else { - mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, &boxed_xval.xval); } } else { mlhmmv_level_t* pnext_level = mlhmmv_level_put_empty_map(plevel, &mvkey); diff --git a/c/todo.txt b/c/todo.txt index 6c058bc04..bb672faf7 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -1,13 +1,6 @@ ================================================================ BUGFIXES -* segv: -k mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["b".k]=v}' -k mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ","); for (k,v in o) {$["b".k]=v}' -k mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ","); for (k,v in o) {emit mapsum($*, {"b":v})}' - mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}' - mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit {k:v}}' - * non-strings should be non-split (length-1 omap). or, coerced to string. ================================================================ @@ -74,6 +67,16 @@ cook 2: verbs vs. dsl/func list * seqgen vs. mlr -n put 'begin {for (int i = 0; i < 10; i += 1) {emit {"a":i,"b":i**2} }}' then sort -nr a +* xxx: + mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["b".k]=v}' + mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ","); for (k,v in o) {$["b".k]=v}' + mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ","); for (k,v in o) {emit mapsum($*, {"b":v})}' + mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}' + mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit {k:v}}' + mlr --from segv.tsv --itsvlite --oxtab put -q ' for (k,v in $*) {emit {k:v}}' + mlr --from segv.tsv --itsvlite --oxtab put -q 'o={}; for (k,v in $*) {o[k]=v}; emit o' + mlr --from segv.tsv --itsvlite --oxtab put -q ' for (k,v in {1:2}) {emit {k:v}}' + cook 3: fun stuff: * mand * sieve