diff options
author | Nicolas Pouillard <np@nicolaspouillard.fr> | 2006-09-26 07:10:57 +0000 |
---|---|---|
committer | Nicolas Pouillard <np@nicolaspouillard.fr> | 2006-09-26 07:10:57 +0000 |
commit | 75d0c77ab1d54d65da5b3618fdf22671904e8710 (patch) | |
tree | 48aeda188b8f50741d1baf097f53a2ca00838a10 | |
parent | e70d1faf44903075193141c925788e35dfeb29f1 (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.ml | 15 |
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 ] >> |