mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-24 00:18:39 +00:00
mapvar iterate
This commit is contained in:
parent
bc1fe690d8
commit
fdd33c8bdb
8 changed files with 40 additions and 52 deletions
|
|
@ -825,17 +825,17 @@ md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN
|
|||
|
||||
md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_nonindexed_local_variable(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT, B, C);
|
||||
MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C);
|
||||
}
|
||||
md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_indexed_local_variable(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT, B, C);
|
||||
MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C);
|
||||
}
|
||||
md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_oosvar_keylist(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C);
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C);
|
||||
}
|
||||
md_full_srec_from_map_literal_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_MAP_LITERAL_ASSIGNMENT, B, C);
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C);
|
||||
}
|
||||
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ASSIGN(O) md_rhs(C). {
|
||||
|
|
|
|||
|
|
@ -305,16 +305,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
|
|||
case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: return "INDIRECT_SREC_ASSIGNMENT"; break;
|
||||
case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "OOSVAR_ASSIGNMENT"; break;
|
||||
case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "OOSVAR_FROM_FULL_SREC_ASSIGNMENT"; break;
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT: return "FULL_SREC_FROM_OOSVAR_ASSIGNMENT"; break;
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT:
|
||||
return "FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT";
|
||||
break;
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT:
|
||||
return "FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT";
|
||||
break;
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_MAP_LITERAL_ASSIGNMENT:
|
||||
return "FULL_SREC_FROM_MAP_LITERAL_ASSIGNMENT";
|
||||
break;
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: return "FULL_SREC_ASSIGNMENT"; break;
|
||||
case MD_AST_NODE_TYPE_ENV_ASSIGNMENT: return "ENV_ASSIGNMENT"; break;
|
||||
case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "CONTEXT_VARIABLE"; break;
|
||||
case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "STRIPPED_AWAY"; break;
|
||||
|
|
|
|||
|
|
@ -53,10 +53,7 @@ typedef enum _mlr_dsl_ast_node_type_t {
|
|||
MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_MAP_LITERAL_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_ENV_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_CONTEXT_VARIABLE,
|
||||
MD_AST_NODE_TYPE_ENV,
|
||||
|
|
|
|||
|
|
@ -345,8 +345,8 @@ mlr_dsl_cst_statement_t* alloc_local_variable_definition(
|
|||
mlr_dsl_cst_statement_allocator_t alloc_nonindexed_local_variable_assignment;
|
||||
mlr_dsl_cst_statement_allocator_t alloc_indexed_local_variable_assignment;
|
||||
mlr_dsl_cst_statement_allocator_t alloc_oosvar_assignment;
|
||||
mlr_dsl_cst_statement_allocator_t alloc_oosvar_from_full_srec_assignment;
|
||||
mlr_dsl_cst_statement_allocator_t alloc_full_srec_from_oosvar_assignment;
|
||||
mlr_dsl_cst_statement_allocator_t alloc_oosvar_from_full_srec_assignment; // xxx fold into previous
|
||||
mlr_dsl_cst_statement_allocator_t alloc_full_srec_assignment;
|
||||
mlr_dsl_cst_statement_allocator_t alloc_env_assignment;
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
|||
|
|
@ -721,19 +721,19 @@ static void handle_oosvar_from_full_srec_assignment(
|
|||
// All assignments produce a mlrval on the RHS and store it on the left -- except if both LHS and RHS
|
||||
// are oosvars in which case there are recursive copies, or in case of $* on the LHS or RHS.
|
||||
|
||||
typedef struct _full_srec_from_oosvar_assignment_state_t {
|
||||
typedef struct _full_srec_assignment_state_t {
|
||||
sllv_t* prhs_keylist_evaluators;
|
||||
} full_srec_from_oosvar_assignment_state_t;
|
||||
} full_srec_assignment_state_t;
|
||||
|
||||
static mlr_dsl_cst_statement_handler_t handle_full_srec_from_oosvar_assignment;
|
||||
static mlr_dsl_cst_statement_freer_t free_full_srec_from_oosvar_assignment;
|
||||
static mlr_dsl_cst_statement_handler_t handle_full_srec_assignment;
|
||||
static mlr_dsl_cst_statement_freer_t free_full_srec_assignment;
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
mlr_dsl_cst_statement_t* alloc_full_srec_from_oosvar_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode,
|
||||
mlr_dsl_cst_statement_t* alloc_full_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode,
|
||||
int type_inferencing, int context_flags)
|
||||
{
|
||||
full_srec_from_oosvar_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(
|
||||
full_srec_from_oosvar_assignment_state_t));
|
||||
full_srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(
|
||||
full_srec_assignment_state_t));
|
||||
|
||||
mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue;
|
||||
mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue;
|
||||
|
|
@ -746,14 +746,14 @@ mlr_dsl_cst_statement_t* alloc_full_srec_from_oosvar_assignment(mlr_dsl_cst_t* p
|
|||
|
||||
return mlr_dsl_cst_statement_valloc(
|
||||
pnode,
|
||||
handle_full_srec_from_oosvar_assignment,
|
||||
free_full_srec_from_oosvar_assignment,
|
||||
handle_full_srec_assignment,
|
||||
free_full_srec_assignment,
|
||||
pstate);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static void free_full_srec_from_oosvar_assignment(mlr_dsl_cst_statement_t* pstatement) {
|
||||
full_srec_from_oosvar_assignment_state_t* pstate = pstatement->pvstate;
|
||||
static void free_full_srec_assignment(mlr_dsl_cst_statement_t* pstatement) {
|
||||
full_srec_assignment_state_t* pstate = pstatement->pvstate;
|
||||
|
||||
for (sllve_t* pe = pstate->prhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) {
|
||||
rval_evaluator_t* pev = pe->pvvalue;
|
||||
|
|
@ -764,12 +764,12 @@ static void free_full_srec_from_oosvar_assignment(mlr_dsl_cst_statement_t* pstat
|
|||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static void handle_full_srec_from_oosvar_assignment(
|
||||
static void handle_full_srec_assignment(
|
||||
mlr_dsl_cst_statement_t* pstatement,
|
||||
variables_t* pvars,
|
||||
cst_outputs_t* pcst_outputs)
|
||||
{
|
||||
full_srec_from_oosvar_assignment_state_t* pstate = pstatement->pvstate;
|
||||
full_srec_assignment_state_t* pstate = pstatement->pvstate;
|
||||
|
||||
lrec_clear(pvars->pinrec);
|
||||
lhmsmv_clear(pvars->ptyped_overlay);
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_statement(mlr_dsl_cst_t* pcst, mlr_ds
|
|||
return alloc_oosvar_from_full_srec_assignment(pcst, pnode, type_inferencing, context_flags);
|
||||
break;
|
||||
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT:
|
||||
if (context_flags & IN_BEGIN_OR_END) {
|
||||
fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n",
|
||||
MLR_GLOBALS.bargv0);
|
||||
|
|
@ -269,7 +269,7 @@ mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_statement(mlr_dsl_cst_t* pcst, mlr_ds
|
|||
MLR_GLOBALS.bargv0);
|
||||
exit(1);
|
||||
}
|
||||
return alloc_full_srec_from_oosvar_assignment(pcst, pnode, type_inferencing, context_flags);
|
||||
return alloc_full_srec_assignment(pcst, pnode, type_inferencing, context_flags);
|
||||
break;
|
||||
|
||||
case MD_AST_NODE_TYPE_ENV_ASSIGNMENT:
|
||||
|
|
@ -410,7 +410,7 @@ mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t*
|
|||
case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT:
|
||||
case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT:
|
||||
case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT:
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT:
|
||||
case MD_AST_NODE_TYPE_UNSET:
|
||||
case MD_AST_NODE_TYPE_TEE:
|
||||
case MD_AST_NODE_TYPE_EMITF:
|
||||
|
|
|
|||
|
|
@ -16642,7 +16642,7 @@ AST ROOT:
|
|||
text="block", type=STATEMENT_BLOCK:
|
||||
text="end", type=END:
|
||||
text="end_block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -16652,7 +16652,7 @@ BLOCKED AST:
|
|||
END-BLOCK:
|
||||
text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1
|
||||
text="end_block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39562,7 +39562,7 @@ RAW AST:
|
|||
|
||||
AST ROOT:
|
||||
text="block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39571,7 +39571,7 @@ BLOCKED AST:
|
|||
|
||||
MAIN BLOCK:
|
||||
text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39582,7 +39582,7 @@ RAW AST:
|
|||
|
||||
AST ROOT:
|
||||
text="block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39592,7 +39592,7 @@ BLOCKED AST:
|
|||
|
||||
MAIN BLOCK:
|
||||
text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39604,7 +39604,7 @@ RAW AST:
|
|||
|
||||
AST ROOT:
|
||||
text="block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39614,7 +39614,7 @@ BLOCKED AST:
|
|||
|
||||
MAIN BLOCK:
|
||||
text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39631,7 +39631,7 @@ text="block", type=STATEMENT_BLOCK:
|
|||
text="NR", type=CONTEXT_VARIABLE.
|
||||
text="3", type=NUMERIC_LITERAL.
|
||||
text="cond_block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39645,7 +39645,7 @@ text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth
|
|||
text="NR", type=CONTEXT_VARIABLE.
|
||||
text="3", type=NUMERIC_LITERAL.
|
||||
text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39661,7 +39661,7 @@ text="block", type=STATEMENT_BLOCK:
|
|||
text="NR", type=CONTEXT_VARIABLE.
|
||||
text="3", type=NUMERIC_LITERAL.
|
||||
text="cond_block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39676,7 +39676,7 @@ text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth
|
|||
text="NR", type=CONTEXT_VARIABLE.
|
||||
text="3", type=NUMERIC_LITERAL.
|
||||
text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39693,7 +39693,7 @@ text="block", type=STATEMENT_BLOCK:
|
|||
text="NR", type=CONTEXT_VARIABLE.
|
||||
text="3", type=NUMERIC_LITERAL.
|
||||
text="cond_block", type=STATEMENT_BLOCK:
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
@ -39708,7 +39708,7 @@ text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth
|
|||
text="NR", type=CONTEXT_VARIABLE.
|
||||
text="3", type=NUMERIC_LITERAL.
|
||||
text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0
|
||||
text="=", type=FULL_SREC_FROM_OOSVAR_ASSIGNMENT:
|
||||
text="=", type=FULL_SREC_ASSIGNMENT:
|
||||
text="$*", type=FULL_SREC.
|
||||
text="oosvar_keylist", type=OOSVAR_KEYLIST:
|
||||
text="v", type=STRING_LITERAL.
|
||||
|
|
|
|||
|
|
@ -107,10 +107,10 @@ k assign LHS localvar ? assign RHS localvar
|
|||
|
||||
----------------------------------------------------------------
|
||||
! we are going to need builtin functions which deal with maps.
|
||||
- length(@map), proxy for NF.
|
||||
- length(@map) and length(map), proxy for NF. make it work with length({...}) and length($*).
|
||||
- depth on maps
|
||||
- deepcount on maps
|
||||
- split/join: but these are on lists. and would benefit from infix operators ...
|
||||
- split/join: but these are on lists. and would benefit from infix operators?
|
||||
- variadic list-cat function ...
|
||||
- variadic map-cat function ...
|
||||
- ?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue