summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parsing/parser.mly24
1 files changed, 13 insertions, 11 deletions
diff --git a/parsing/parser.mly b/parsing/parser.mly
index 0164e3219..fb7d5745a 100644
--- a/parsing/parser.mly
+++ b/parsing/parser.mly
@@ -1281,9 +1281,9 @@ simple_pattern:
{ mkpat(Ppat_variant($1, None)) }
| SHARP type_longident
{ mkpat(Ppat_type (mkrhs $2 2)) }
- | LBRACE lbl_pattern_list record_pattern_end RBRACE
- { mkpat(Ppat_record(List.rev $2, $3)) }
- | LBRACE lbl_pattern_list opt_semi error
+ | LBRACE lbl_pattern_list RBRACE
+ { let (fields, closed) = $2 in mkpat(Ppat_record(fields, closed)) }
+ | LBRACE lbl_pattern_list error
{ unclosed "{" 1 "}" 4 }
| LBRACKET pattern_semi_list opt_semi RBRACKET
{ reloc_pat (mktailpat (List.rev $2)) }
@@ -1320,14 +1320,16 @@ pattern_semi_list:
| pattern_semi_list SEMI pattern { $3 :: $1 }
;
lbl_pattern_list:
- label_longident EQUAL pattern { [(mkrhs $1 1, $3)] }
- | label_longident { [(mkrhs $1 1, pat_of_label $1 1)] }
- | lbl_pattern_list SEMI label_longident EQUAL pattern { (mkrhs $3 3, $5) :: $1 }
- | lbl_pattern_list SEMI label_longident { (mkrhs $3 3, pat_of_label $3 3) :: $1 }
-;
-record_pattern_end:
- opt_semi { Closed }
- | SEMI UNDERSCORE opt_semi { Open }
+ lbl_pattern { [$1], Closed }
+ | lbl_pattern SEMI { [$1], Closed }
+ | lbl_pattern SEMI UNDERSCORE opt_semi { [$1], Open }
+ | lbl_pattern SEMI lbl_pattern_list { let (fields, closed) = $3 in $1 :: fields, closed }
+;
+lbl_pattern:
+ label_longident EQUAL pattern
+ { (mkrhs $1 1,$3) }
+ | label_longident
+ { (mkrhs $1 1, pat_of_label $1 1) }
;
/* Primitive declarations */