From 420e088eec75c993fb0acbebde613ff97ebd7b61 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Fri, 11 Nov 2016 23:54:10 -0500 Subject: [PATCH] mapvar iterate --- c/dsls/mlr_dsl_parse.y | 22 +++++++++++++++++----- c/mapping/mlr_dsl_ast.c | 15 +++++++++++---- c/mapping/mlr_dsl_ast.h | 2 ++ c/todo.txt | 24 ++++++++++++------------ 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/c/dsls/mlr_dsl_parse.y b/c/dsls/mlr_dsl_parse.y index 44d464067..4d0a88c1f 100644 --- a/c/dsls/mlr_dsl_parse.y +++ b/c/dsls/mlr_dsl_parse.y @@ -170,11 +170,12 @@ md_statement_not_braced_end(A) ::= MD_TOKEN_SUBR_CALL md_fcn_or_subr_call(B). { } // Not valid in begin/end since they refer to srecs: -md_statement_not_braced_end(A) ::= md_srec_assignment(B). { A = B; } -md_statement_not_braced_end(A) ::= md_srec_indirect_assignment(B). { A = B; } -md_statement_not_braced_end(A) ::= md_oosvar_from_full_srec_assignment(B). { A = B; } -md_statement_not_braced_end(A) ::= md_full_srec_from_oosvar_assignment(B). { A = B; } -md_statement_not_braced_end(A) ::= md_env_assignment(B). { A = B; } +md_statement_not_braced_end(A) ::= md_srec_assignment(B). { A = B; } +md_statement_not_braced_end(A) ::= md_srec_indirect_assignment(B). { A = B; } +md_statement_not_braced_end(A) ::= md_oosvar_from_full_srec_assignment(B). { A = B; } +md_statement_not_braced_end(A) ::= md_full_srec_from_oosvar_assignment(B). { A = B; } +md_statement_not_braced_end(A) ::= md_full_srec_from_map_literal_assignment(B). { A = B; } +md_statement_not_braced_end(A) ::= md_env_assignment(B). { A = B; } // Valid in begin/end since they don't refer to srecs (although the RHSs might): md_statement_not_braced_end(A) ::= md_do_while_block(B). { A = B; } @@ -822,9 +823,20 @@ md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); } +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_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_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); } +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_OOSVAR_ASSIGNMENT, B, C); +} md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, C); diff --git a/c/mapping/mlr_dsl_ast.c b/c/mapping/mlr_dsl_ast.c index 8e57a2e67..c7e4e4f6d 100644 --- a/c/mapping/mlr_dsl_ast.c +++ b/c/mapping/mlr_dsl_ast.c @@ -264,7 +264,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) { case MD_AST_NODE_TYPE_STATEMENT_BLOCK: return "STATEMENT_BLOCK"; break; case MD_AST_NODE_TYPE_STATEMENT_LIST: return "STATEMENT_LIST"; break; case MD_AST_NODE_TYPE_FUNC_DEF: return "FUNC_DEF"; break; - case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return "FUNCTION_CALLSITE"; break; + case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return "FUNCTION_CALLSITE"; break; case MD_AST_NODE_TYPE_SUBR_DEF: return "SUBR_DEF"; break; case MD_AST_NODE_TYPE_SUBR_CALLSITE: return "SUBR_CALLSITE"; break; case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return "UNTYPED_LOCAL_DEFINITION"; break; @@ -273,7 +273,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) { case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return "FLOAT_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return "BOOLEAN_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return "STRING_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return "MAP_LOCAL_DEFINITION"; break; + case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return "MAP_LOCAL_DEFINITION"; break; case MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION: return "UNTYPED_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION: return "NUMERIC_PARAMETER_DEFINITION"; break; case MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION: return "INT_PARAMETER_DEFINITION"; break; @@ -299,13 +299,19 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) { case MD_AST_NODE_TYPE_FULL_OOSVAR: return "FULL_OOSVAR"; break; case MD_AST_NODE_TYPE_NON_SIGIL_NAME: return "NON_SIGIL_NAME"; break; case MD_AST_NODE_TYPE_OPERATOR: return "OPERATOR"; break; - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return "NONINDEXED_LOCAL_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return "INDEXED_LOCAL_ASSIGNMENT"; break; + case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return "NONINDEXED_LOCAL_ASSIGNMENT"; break; + case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return "INDEXED_LOCAL_ASSIGNMENT"; break; case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "SREC_ASSIGNMENT"; break; 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_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; @@ -348,6 +354,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) { case MD_AST_NODE_TYPE_CONTINUE: return "CONTINUE"; break; case MD_AST_NODE_TYPE_IF_HEAD: return "IF_HEAD"; break; case MD_AST_NODE_TYPE_IF_ITEM: return "IF_ITEM"; break; + default: return "UNRECOGNIZED_AST_NODE_TYPE"; } } diff --git a/c/mapping/mlr_dsl_ast.h b/c/mapping/mlr_dsl_ast.h index 30f53cc5c..c9c92cd7d 100644 --- a/c/mapping/mlr_dsl_ast.h +++ b/c/mapping/mlr_dsl_ast.h @@ -54,6 +54,8 @@ typedef enum _mlr_dsl_ast_node_type_t { 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_ENV_ASSIGNMENT, MD_AST_NODE_TYPE_CONTEXT_VARIABLE, MD_AST_NODE_TYPE_ENV, diff --git a/c/todo.txt b/c/todo.txt index 12d491bfa..b3d49a6cf 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -94,7 +94,7 @@ k assign LHS full-srec ? assign RHS oosvar - assign LHS full-oosvar ? assign RHS localvar - assign LHS full-oosvar ? assign RHS func-retval . -- assign LHS oosvar ? assign RHS maplit +k assign LHS oosvar ? assign RHS maplit k assign LHS oosvar ? assign RHS full-srec - assign LHS oosvar ? assign RHS full-oosvar k assign LHS oosvar ? assign RHS oosvar @@ -105,21 +105,21 @@ k define LHS map-typed-localvar ? assign RHS maplit k define LHS map-typed-localvar ? assign RHS full-srec k define LHS map-typed-localvar ? assign RHS full-oosvar k define LHS map-typed-localvar ? assign RHS oosvar -- define LHS map-typed-localvar ? assign RHS localvar +k define LHS map-typed-localvar ? assign RHS localvar - define LHS map-typed-localvar ? assign RHS func-retval . -- define LHS untyped-localvar ? assign RHS maplit -- define LHS untyped-localvar ? assign RHS full-srec -- define LHS untyped-localvar ? assign RHS full-oosvar -- define LHS untyped-localvar ? assign RHS oosvar -- define LHS untyped-localvar ? assign RHS localvar +k define LHS untyped-localvar ? assign RHS maplit +k define LHS untyped-localvar ? assign RHS full-srec +k define LHS untyped-localvar ? assign RHS full-oosvar +k define LHS untyped-localvar ? assign RHS oosvar +k define LHS untyped-localvar ? assign RHS localvar - define LHS untyped-localvar ? assign RHS func-retval . -- assign LHS localvar ? assign RHS maplit -- assign LHS localvar ? assign RHS full-srec -- assign LHS localvar ? assign RHS full-oosvar -- assign LHS localvar ? assign RHS oosvar -- assign LHS localvar ? assign RHS localvar +k assign LHS localvar ? assign RHS maplit +k assign LHS localvar ? assign RHS full-srec +k assign LHS localvar ? assign RHS full-oosvar +k assign LHS localvar ? assign RHS oosvar +k assign LHS localvar ? assign RHS localvar - assign LHS localvar ? assign RHS func-retval new: