From 889df769a77687dd91d74ca751e7d1620754bd13 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sat, 23 Jul 2016 12:44:50 -0400 Subject: [PATCH] write/append code-dedupe iterate --- c/mapping/mlr_dsl_cst.c | 61 ++++++++--------------------------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/c/mapping/mlr_dsl_cst.c b/c/mapping/mlr_dsl_cst.c index 1d252c922..cbdc0867e 100644 --- a/c/mapping/mlr_dsl_cst.c +++ b/c/mapping/mlr_dsl_cst.c @@ -51,8 +51,8 @@ static mlr_dsl_cst_statement_t* alloc_continue(mlr_dsl_a static mlr_dsl_cst_statement_t* alloc_filter(mlr_dsl_ast_node_t* p, int ti, int cf); static mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_ast_node_t* p, int ti, int cf); static mlr_dsl_cst_statement_t* alloc_edump(mlr_dsl_ast_node_t* p, int ti, int cf); -static mlr_dsl_cst_statement_t* alloc_dump_write(mlr_dsl_ast_node_t* p, int ti, int cf); -static mlr_dsl_cst_statement_t* alloc_dump_append(mlr_dsl_ast_node_t* p, int ti, int cf); +static mlr_dsl_cst_statement_t* alloc_dump_to_file(mlr_dsl_ast_node_t* p, int ti, int cf, + file_output_mode_t file_output_mode); static mlr_dsl_cst_statement_t* alloc_eprint(mlr_dsl_ast_node_t* p, int ti, int cf); static mlr_dsl_cst_statement_t* alloc_print_write(mlr_dsl_ast_node_t* p, int ti, int cf); static mlr_dsl_cst_statement_t* alloc_print_append(mlr_dsl_ast_node_t* p, int ti, int cf); @@ -111,8 +111,7 @@ static void handle_emitp_all_to_file(mlr_dsl_cst_statement_t* s, static void handle_emit_all(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); static void handle_emit_all_to_file(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); static void handle_dump(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); -static void handle_dump_write(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); -static void handle_dump_append(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); +static void handle_dump_to_file(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); static void handle_edump(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); static void handle_print(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); static void handle_print_write(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o); @@ -502,10 +501,10 @@ static mlr_dsl_cst_statement_t* alloc_cst_statement(mlr_dsl_ast_node_t* pnode, i return alloc_edump(pnode, type_inferencing, context_flags); break; case MD_AST_NODE_TYPE_DUMP_WRITE: - return alloc_dump_write(pnode, type_inferencing, context_flags); + return alloc_dump_to_file(pnode, type_inferencing, context_flags, MODE_WRITE); break; case MD_AST_NODE_TYPE_DUMP_APPEND: - return alloc_dump_append(pnode, type_inferencing, context_flags); + return alloc_dump_to_file(pnode, type_inferencing, context_flags, MODE_APPEND); break; case MD_AST_NODE_TYPE_EPRINT: @@ -1541,8 +1540,8 @@ static mlr_dsl_cst_statement_t* alloc_edump(mlr_dsl_ast_node_t* pnode, int type_ return pstatement; } -static mlr_dsl_cst_statement_t* alloc_dump_write(mlr_dsl_ast_node_t* pnode, int type_inferencing, - int context_flags) +static mlr_dsl_cst_statement_t* alloc_dump_to_file(mlr_dsl_ast_node_t* pnode, int type_inferencing, + int context_flags, file_output_mode_t file_output_mode) { if ((pnode->pchildren == NULL) || (pnode->pchildren->length != 1)) { fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", @@ -1553,27 +1552,9 @@ static mlr_dsl_cst_statement_t* alloc_dump_write(mlr_dsl_ast_node_t* pnode, int mlr_dsl_ast_node_t* pfilename_node = pnode->pchildren->phead->pvvalue; pstatement->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, type_inferencing, context_flags); - pstatement->file_output_mode = MODE_WRITE; + pstatement->file_output_mode = file_output_mode; pstatement->pmulti_out = multi_out_alloc(); - pstatement->pnode_handler = handle_dump_write; - return pstatement; -} - -static mlr_dsl_cst_statement_t* alloc_dump_append(mlr_dsl_ast_node_t* pnode, int type_inferencing, - int context_flags) -{ - if ((pnode->pchildren == NULL) || (pnode->pchildren->length != 1)) { - fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); - } - mlr_dsl_cst_statement_t* pstatement = alloc_blank(); - mlr_dsl_ast_node_t* pfilename_node = pnode->pchildren->phead->pvvalue; - pstatement->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, - type_inferencing, context_flags); - pstatement->file_output_mode = MODE_APPEND; - pstatement->pmulti_out = multi_out_alloc(); - pstatement->pnode_handler = handle_dump_append; + pstatement->pnode_handler = handle_dump_to_file; return pstatement; } @@ -2630,7 +2611,7 @@ static void handle_edump( mlhmmv_print_json_stacked(pvars->poosvars, FALSE, stderr); } -static void handle_dump_write( +static void handle_dump_to_file( mlr_dsl_cst_statement_t* pnode, variables_t* pvars, cst_outputs_t* pcst_outputs) @@ -2640,27 +2621,7 @@ static void handle_dump_write( char ffree_flags; char* fval = mv_format_val(&filename, &ffree_flags); - FILE* outfp = multi_out_get(pnode->pmulti_out, fval, MODE_WRITE); - mlhmmv_print_json_stacked(pvars->poosvars, FALSE, outfp); - if (TRUE) // xxx temp - fflush(outfp); - - if (ffree_flags) - free(fval); - mv_free(&filename); -} - -static void handle_dump_append( - mlr_dsl_cst_statement_t* pnode, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - rval_evaluator_t* poutput_filename_evaluator = pnode->poutput_filename_evaluator; - mv_t filename = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - char ffree_flags; - char* fval = mv_format_val(&filename, &ffree_flags); - - FILE* outfp = multi_out_get(pnode->pmulti_out, fval, MODE_APPEND); + FILE* outfp = multi_out_get(pnode->pmulti_out, fval, pnode->file_output_mode); mlhmmv_print_json_stacked(pvars->poosvars, FALSE, outfp); if (TRUE) // xxx temp fflush(outfp);