diff options
| author | Nicolas Pouillard <np@nicolaspouillard.fr> | 2010-05-11 14:24:44 +0000 |
|---|---|---|
| committer | Nicolas Pouillard <np@nicolaspouillard.fr> | 2010-05-11 14:24:44 +0000 |
| commit | 03aaba0aae333793c06b50b3dc4684bd6a8dc152 (patch) | |
| tree | c0e60b898b6d4fc970dac37b0d0514087b8f92ca | |
| parent | b8cef86ba3d8a926de901c15c282955cde9f6b1a (diff) | |
| download | ocaml-03aaba0aae333793c06b50b3dc4684bd6a8dc152.tar.gz | |
Merge remote branch 'ocaml-git/buildsys' into trunk
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@10388 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
| -rw-r--r-- | camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml | 6 | ||||
| -rw-r--r-- | camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml | 2 | ||||
| -rw-r--r-- | camlp4/boot/Camlp4.ml | 11 | ||||
| -rw-r--r-- | camlp4/boot/camlp4boot.ml | 19 |
4 files changed, 34 insertions, 4 deletions
diff --git a/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml b/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml index dc5192bf03..de6e8add48 100644 --- a/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml +++ b/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml @@ -490,7 +490,11 @@ module Make (Ast : Sig.Camlp4Ast) = struct mkrangepat loc c1 c2 | _ -> error loc "range pattern allowed only for characters" ] | PaRec loc p -> - mkpat loc (Ppat_record (List.map mklabpat (list_of_patt p []), Closed)) + let ps = list_of_patt p [] in + let is_wildcard = fun [ <:patt< _ >> -> True | _ -> False ] in + let (wildcards,ps) = List.partition is_wildcard ps in + let is_closed = if wildcards = [] then Closed else Open in + mkpat loc (Ppat_record (List.map mklabpat ps, is_closed)) | PaStr loc s -> mkpat loc (Ppat_constant (Const_string (string_of_string_token loc s))) | <:patt@loc< ($p1$, $p2$) >> -> diff --git a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml index 9dab8bd747..b51c493244 100644 --- a/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml +++ b/camlp4/Camlp4Parsers/Camlp4OCamlRevisedParser.ml @@ -909,6 +909,8 @@ Very old (no more supported) syntax:\n\ ; label_patt_list: [ [ p1 = label_patt; ";"; p2 = SELF -> <:patt< $p1$ ; $p2$ >> + | p1 = label_patt; ";"; "_" -> <:patt< $p1$ ; _ >> + | p1 = label_patt; ";"; "_"; ";" -> <:patt< $p1$ ; _ >> | p1 = label_patt; ";" -> p1 | p1 = label_patt -> p1 ] ]; diff --git a/camlp4/boot/Camlp4.ml b/camlp4/boot/Camlp4.ml index 6d948e5aea..9e49f8f872 100644 --- a/camlp4/boot/Camlp4.ml +++ b/camlp4/boot/Camlp4.ml @@ -13889,9 +13889,14 @@ module Struct = | _ -> error loc "range pattern allowed only for characters") | PaRec (loc, p) -> - mkpat loc - (Ppat_record - (((List.map mklabpat (list_of_patt p [])), Closed))) + let ps = list_of_patt p [] in + let is_wildcard = + (function | Ast.PaAny _ -> true | _ -> false) in + let (wildcards, ps) = List.partition is_wildcard ps in + let is_closed = if wildcards = [] then Closed else Open + in + mkpat loc + (Ppat_record (((List.map mklabpat ps), is_closed))) | PaStr (loc, s) -> mkpat loc (Ppat_constant diff --git a/camlp4/boot/camlp4boot.ml b/camlp4/boot/camlp4boot.ml index 8b5537a54e..9e9ef23275 100644 --- a/camlp4/boot/camlp4boot.ml +++ b/camlp4/boot/camlp4boot.ml @@ -3676,6 +3676,25 @@ Very old (no more supported) syntax:\n\ ([ Gram.Snterm (Gram.Entry.obj (label_patt : 'label_patt Gram.Entry.t)); + Gram.Skeyword ";"; Gram.Skeyword "_"; + Gram.Skeyword ";" ], + (Gram.Action.mk + (fun _ _ _ (p1 : 'label_patt) + (_loc : Gram.Loc.t) -> + (Ast.PaSem (_loc, p1, Ast.PaAny _loc) : + 'label_patt_list)))); + ([ Gram.Snterm + (Gram.Entry.obj + (label_patt : 'label_patt Gram.Entry.t)); + Gram.Skeyword ";"; Gram.Skeyword "_" ], + (Gram.Action.mk + (fun _ _ (p1 : 'label_patt) (_loc : Gram.Loc.t) + -> + (Ast.PaSem (_loc, p1, Ast.PaAny _loc) : + 'label_patt_list)))); + ([ Gram.Snterm + (Gram.Entry.obj + (label_patt : 'label_patt Gram.Entry.t)); Gram.Skeyword ";"; Gram.Sself ], (Gram.Action.mk (fun (p2 : 'label_patt_list) _ |
