diff options
author | Alain Frisch <alain@frisch.fr> | 2012-06-21 17:07:19 +0000 |
---|---|---|
committer | Alain Frisch <alain@frisch.fr> | 2012-06-21 17:07:19 +0000 |
commit | 7630d3c41fc1316a555be2b5537ad1b9531ab8a3 (patch) | |
tree | 33c97fa5b180fe22c06f0e98c7abc5cfee7bfd28 | |
parent | 98748d213d8616985cc07d389d3a2541b2c8c811 (diff) |
#5657: fix location of punned record fields (for patterns as well).
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12637 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | parsing/parser.mly | 24 |
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 */ |