From 8a0add32cbffafe3141ff3dccd73bd3679bba560 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Thu, 9 Jun 2016 16:08:53 -0700 Subject: [PATCH] print feature --- c/containers/mlrval.c | 2 +- c/mapping/mlr_dsl_cst.c | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/c/containers/mlrval.c b/c/containers/mlrval.c index 37b25a038..583dd8d11 100644 --- a/c/containers/mlrval.c +++ b/c/containers/mlrval.c @@ -125,7 +125,7 @@ char* mv_format_val(mv_t* pval, char* pfree_flags) { break; case MT_STRING: // Ownership transfer to the caller - *pfree_flags = pval->free_flags;; + *pfree_flags = pval->free_flags; rv = pval->u.strv; *pval = mv_empty(); break; diff --git a/c/mapping/mlr_dsl_cst.c b/c/mapping/mlr_dsl_cst.c index e1cab66fa..f73f2bd7d 100644 --- a/c/mapping/mlr_dsl_cst.c +++ b/c/mapping/mlr_dsl_cst.c @@ -1104,20 +1104,31 @@ static mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_ast_node_t* pnode, int type_i static mlr_dsl_cst_statement_t* alloc_print(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* pchild = pnode->pchildren->phead->pvvalue; + pstatement->prhs_evaluator = rval_evaluator_alloc_from_ast(pchild, type_inferencing, context_flags); pstatement->pnode_handler = handle_print; - // xxx return pstatement; } +// ---------------------------------------------------------------- static mlr_dsl_cst_statement_t* alloc_eprint(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* pchild = pnode->pchildren->phead->pvvalue; + pstatement->prhs_evaluator = rval_evaluator_alloc_from_ast(pchild, type_inferencing, context_flags); pstatement->pnode_handler = handle_eprint; - // xxx return pstatement; } @@ -1642,7 +1653,14 @@ static void handle_print( variables_t* pvars, cst_outputs_t* pcst_outputs) { - printf("STUB\n"); + rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator; + mv_t val = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); + char free_flags; + char* sval = mv_format_val(&val, &free_flags); + printf("%s\n", sval); + if (free_flags) + free(sval); + mv_free(&val); } // ---------------------------------------------------------------- @@ -1651,7 +1669,14 @@ static void handle_eprint( variables_t* pvars, cst_outputs_t* pcst_outputs) { - fprintf(stderr, "STUB\n"); + rval_evaluator_t* prhs_evaluator = pnode->prhs_evaluator; + mv_t val = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); + char free_flags; + char* sval = mv_format_val(&val, &free_flags); + fprintf(stderr, "%s\n", sval); + if (free_flags) + free(sval); + mv_free(&val); } // ----------------------------------------------------------------