corner-case bug fixes for put, filter, step

This commit is contained in:
John Kerl 2015-05-06 19:49:23 -07:00
parent 7df98c19a2
commit 194998f397
5 changed files with 17 additions and 5 deletions

View file

@ -78,7 +78,7 @@
return FILTER_DSL_NOT;
}
\$[a-zA-Z_0-9]* {
\$[a-zA-Z_0-9]+ {
// Note: the parser depends on the dollar sign being here. If this is changed,
// that needs to be changed as well.
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FIELD_NAME);
@ -125,7 +125,7 @@
return FILTER_DSL_RPAREN;
}
[a-zA-Z_][a-zA-Z_0-9]* {
[a-zA-Z_][a-zA-Z_0-9]+ {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME);
return FILTER_DSL_FCN_NAME;
}

View file

@ -11,7 +11,7 @@
%option extra-type="struct _mlr_dsl_ast_node_t **"
%%
\$[a-zA-Z_0-9]* {
\$[a-zA-Z_0-9]+ {
// Note: the parser depends on the dollar sign being here. If this is changed,
// that needs to be changed as well.
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FIELD_NAME);
@ -43,7 +43,7 @@
return PUT_DSL_CONTEXT_VARIABLE;
}
[a-zA-Z_][a-zA-Z_0-9]* {
[a-zA-Z_][a-zA-Z_0-9]+ {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME);
return PUT_DSL_FCN_NAME;
}

View file

@ -80,6 +80,10 @@ mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv) {
mlr_dsl_expression = argv[(*pargi)++];
mlr_dsl_ast_node_holder_t* past = filter_dsl_parse(mlr_dsl_expression);
if (past == NULL) {
mapper_filter_usage(argv[0], verb);
return NULL;
}
if (print_asts) {
mlr_dsl_ast_node_print(past->proot);
}

View file

@ -115,6 +115,10 @@ mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv) {
// Linked list of mlr_dsl_ast_node_t*.
sllv_t* pasts = put_dsl_parse(mlr_dsl_expression);
if (pasts == NULL) {
mapper_put_usage(argv[0], verb);
return NULL;
}
if (print_asts) {
for (sllve_t* pe = pasts->phead; pe != NULL; pe = pe->pnext)
mlr_dsl_ast_node_print(pe->pvdata);

View file

@ -208,7 +208,11 @@ sllv_t* mapper_step_func(lrec_t* pinrec, context_t* pctx, void* pvstate) {
step_t* pstep = lhmsv_get(pmaps_level_3, step_name);
if (pstep == NULL) {
pstep = make_step(step_name, value_field_name, &pctx->statx);
// xxx fix me when lookup is null; and/or check at ctor time
if (pstep == NULL) {
fprintf(stderr, "mlr step: stepper \"%s\" not found.\n",
step_name);
exit(1);
}
lhmsv_put(pmaps_level_3, step_name, pstep);
}