diff --git a/c/dsls/mlr_dsl_parse.y b/c/dsls/mlr_dsl_parse.y index b9f241e61..6aac5d3f4 100644 --- a/c/dsls/mlr_dsl_parse.y +++ b/c/dsls/mlr_dsl_parse.y @@ -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). { diff --git a/c/mapping/mlr_dsl_ast.c b/c/mapping/mlr_dsl_ast.c index d2ec28e6c..cbe1fcc8e 100644 --- a/c/mapping/mlr_dsl_ast.c +++ b/c/mapping/mlr_dsl_ast.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; diff --git a/c/mapping/mlr_dsl_ast.h b/c/mapping/mlr_dsl_ast.h index 6924eba89..4f2865ee4 100644 --- a/c/mapping/mlr_dsl_ast.h +++ b/c/mapping/mlr_dsl_ast.h @@ -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, diff --git a/c/mapping/mlr_dsl_cst.h b/c/mapping/mlr_dsl_cst.h index a892cf99a..9b48f7368 100644 --- a/c/mapping/mlr_dsl_cst.h +++ b/c/mapping/mlr_dsl_cst.h @@ -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; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/c/mapping/mlr_dsl_cst_assignment_statements.c b/c/mapping/mlr_dsl_cst_assignment_statements.c index 1cf28a7f8..a4467e7e5 100644 --- a/c/mapping/mlr_dsl_cst_assignment_statements.c +++ b/c/mapping/mlr_dsl_cst_assignment_statements.c @@ -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); diff --git a/c/mapping/mlr_dsl_cst_statements.c b/c/mapping/mlr_dsl_cst_statements.c index e2623e6ce..936100ad4 100644 --- a/c/mapping/mlr_dsl_cst_statements.c +++ b/c/mapping/mlr_dsl_cst_statements.c @@ -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: diff --git a/c/reg_test/expected/out b/c/reg_test/expected/out index 3c0e94983..6652fe31d 100644 --- a/c/reg_test/expected/out +++ b/c/reg_test/expected/out @@ -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. diff --git a/c/todo.txt b/c/todo.txt index cdcc20463..33c786d58 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -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 ... - ?