summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Pouillard <np@nicolaspouillard.fr>2006-09-26 07:10:57 +0000
committerNicolas Pouillard <np@nicolaspouillard.fr>2006-09-26 07:10:57 +0000
commit75d0c77ab1d54d65da5b3618fdf22671904e8710 (patch)
tree48aeda188b8f50741d1baf097f53a2ca00838a10
parente70d1faf44903075193141c925788e35dfeb29f1 (diff)
[camlp4] Fix a bug with backquoted records
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@7644 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--camlp4/Camlp4Parsers/Grammar.ml15
1 files changed, 11 insertions, 4 deletions
diff --git a/camlp4/Camlp4Parsers/Grammar.ml b/camlp4/Camlp4Parsers/Grammar.ml
index 1d4a77938..a151e8028 100644
--- a/camlp4/Camlp4Parsers/Grammar.ml
+++ b/camlp4/Camlp4Parsers/Grammar.ml
@@ -594,11 +594,18 @@ module Make (Syntax : Sig.Camlp4Syntax.S) = struct
in
subst_gmod (let_in_of_extend _loc gram gl el args) gmod;
+ value wildcarder = object (self)
+ inherit Ast.map as super;
+ method patt =
+ fun
+ [ <:patt@_loc< $lid:_$ >> -> <:patt< _ >>
+ | <:patt< ($p$ as $_$) >> -> self#patt p
+ | <:patt@_loc< $p1$ = $p2$ >> -> <:patt@_loc< $p1$ = $self#patt p2$ >>
+ | p -> super#patt p ];
+ end;
+
value mk_tok _loc p t =
- let p' = Ast.map_patt
- (fun [ <:patt@_loc< $lid:_$ >> -> <:patt< _ >>
- | <:patt< ($p$ as $_$) >> -> p
- | p -> p ]) p in
+ let p' = wildcarder#patt p in
let match_fun =
if Ast.is_irrefut_patt p' then
<:expr< fun [ $pat:p'$ -> True ] >>