mapvar iterate

This commit is contained in:
John Kerl 2016-11-12 09:22:08 -05:00
parent bc1fe690d8
commit fdd33c8bdb
8 changed files with 40 additions and 52 deletions

View file

@ -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). {

View file

@ -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;

View file

@ -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,

View file

@ -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;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View file

@ -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);

View file

@ -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:

View file

@ -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.

View file

@ -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 ...
- ?