From e70bca68f30b8ddd4d0c5782146cc7e7566ddc4e Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sat, 29 Oct 2016 10:24:56 -0400 Subject: [PATCH] mapvar iterate --- c/containers/local_stack.c | 11 ++++++----- c/containers/mlhmmv.c | 5 +++-- c/containers/mlhmmv.h | 3 +++ c/mapping/mlr_dsl_cst_statements.c | 7 ++++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/c/containers/local_stack.c b/c/containers/local_stack.c index 3eed6c0b3..16a470105 100644 --- a/c/containers/local_stack.c +++ b/c/containers/local_stack.c @@ -130,12 +130,13 @@ void local_stack_frame_assign_map(local_stack_frame_t* pframe, mlhmmv_value_t* pmvalue = &pentry->value; mv_free(&pmvalue->u.mlrval); // xxx make a free method ... - //pmvalue->is_terminal = FALSE; - // xxx expose some logic in mlhmmv.h - // mlhmmv_put_terminal_from_level(pmap->proot_level, pmvkeys->phead, &terminal_value); - // xxx finish coding + // xxx encapsulate + pmvalue->is_terminal = FALSE; + pmvalue->u.pnext_level = mlhmmv_level_alloc(); + mlhmmv_put_terminal_from_level(pmvalue->u.pnext_level, pmvkeys->phead, &terminal_value); - pentry->value = mlhmmv_value_transfer_terminal(terminal_value); + LOCAL_STACK_TRACE(printf("VALUE IS:\n")); + LOCAL_STACK_TRACE(mlhmmv_level_print_stacked(pmvalue->u.pnext_level, 0, TRUE, TRUE, "", stdout)); } // ---------------------------------------------------------------- diff --git a/c/containers/mlhmmv.c b/c/containers/mlhmmv.c index 5e6c7d11c..6e2a5486a 100644 --- a/c/containers/mlhmmv.c +++ b/c/containers/mlhmmv.c @@ -19,7 +19,7 @@ #include "lib/mlrutil.h" #include "containers/mlhmmv.h" -static mlhmmv_level_t* mlhmmv_level_alloc(); +// xxx temp static mlhmmv_level_t* mlhmmv_level_alloc(); static void mlhmmv_level_init(mlhmmv_level_t *plevel, int length); static void mlhmmv_level_free(mlhmmv_level_t* plevel); @@ -86,7 +86,8 @@ mlhmmv_t* mlhmmv_alloc() { return pmap; } -static mlhmmv_level_t* mlhmmv_level_alloc() { +// xxx temp expose static +mlhmmv_level_t* mlhmmv_level_alloc() { mlhmmv_level_t* plevel = mlr_malloc_or_die(sizeof(mlhmmv_level_t)); mlhmmv_level_init(plevel, MLHMMV_INITIAL_ARRAY_LENGTH); return plevel; diff --git a/c/containers/mlhmmv.h b/c/containers/mlhmmv.h index 9564f532e..7232a5540 100644 --- a/c/containers/mlhmmv.h +++ b/c/containers/mlhmmv.h @@ -69,6 +69,9 @@ typedef struct _mlhmmv_level_t { mlhmmv_level_entry_t* ptail; } mlhmmv_level_t; +// xxx temp expose +mlhmmv_level_t* mlhmmv_level_alloc(); + // ---------------------------------------------------------------- typedef struct _mlhmmv_t { mlhmmv_level_t* proot_level; diff --git a/c/mapping/mlr_dsl_cst_statements.c b/c/mapping/mlr_dsl_cst_statements.c index 48a2dbf7e..8b3e741be 100644 --- a/c/mapping/mlr_dsl_cst_statements.c +++ b/c/mapping/mlr_dsl_cst_statements.c @@ -763,8 +763,9 @@ static mlr_dsl_cst_statement_t* alloc_local_map_variable_assignment(mlr_dsl_cst_ pstatement->local_lhs_frame_relative_index = pleft->vardef_frame_relative_index; sllv_t* plocal_map_lhs_keylist_evaluators = sllv_alloc(); - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { + for (sllve_t* pe = pleft->pchildren->phead; pe != NULL; pe = pe->pnext) { mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; + mlr_dsl_ast_node_print(pkeynode); if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { sllv_append(plocal_map_lhs_keylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); } else { @@ -2271,11 +2272,15 @@ static void handle_local_map_variable_assignment( if (mv_is_present(&rhs_value)) { int all_non_null_or_error = TRUE; + printf("LEN=%lld\n", pstatement->plocal_map_lhs_keylist_evaluators->length); sllmv_t* pmvkeys = evaluate_list(pstatement->plocal_map_lhs_keylist_evaluators, pvars, &all_non_null_or_error); if (all_non_null_or_error) { + printf("YES\n"); local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); local_stack_frame_assign_map(pframe, pstatement->local_lhs_frame_relative_index, pmvkeys, rhs_value); + } else { + printf("NO\n"); } sllmv_free(pmvkeys);