diff --git a/src/libexpr/parser.y b/src/libexpr/parser.y index 067a0f8d5..7713021a9 100644 --- a/src/libexpr/parser.y +++ b/src/libexpr/parser.y @@ -211,7 +211,7 @@ static void freeAndUnprotect(void * p) } %type start expr expr_function expr_if expr_op -%type expr_app expr_select expr_simple bind inheritsrc formal +%type expr_app expr_select expr_simple bind inheritsrc formal pattern %type binds ids expr_list formals string_parts ind_string_parts %token ID INT STR IND_STR PATH URI %token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL @@ -236,10 +236,8 @@ start: expr { data->result = $1; }; expr: expr_function; expr_function - : '{' formals '}' ':' expr_function - { $$ = makeFunction(makeAttrsPat($2), $5, CUR_POS); } - | ID ':' expr_function - { $$ = makeFunction(makeVarPat($1), $3, CUR_POS); } + : pattern ':' expr_function + { $$ = makeFunction($1, $3, CUR_POS); } | ASSERT expr ';' expr_function { $$ = makeAssert($2, $4, CUR_POS); } | WITH expr ';' expr_function @@ -320,6 +318,11 @@ ind_string_parts | { $$ = ATempty; } ; +pattern + : ID { $$ = makeVarPat($1); } + | '{' formals '}' { $$ = makeAttrsPat($2); } + ; + binds : binds bind { $$ = ATinsert($1, $2); } | { $$ = ATempty; }