mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-25 08:53:55 +00:00
mapvar iterate
This commit is contained in:
parent
2d902cdb03
commit
e70bca68f3
4 changed files with 18 additions and 8 deletions
|
|
@ -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));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue