summaryrefslogtreecommitdiffstats
path: root/camlp4/Camlp4
diff options
context:
space:
mode:
authorMichel Mauny <Michel.Mauny@ensta.fr>2008-07-09 13:03:38 +0000
committerMichel Mauny <Michel.Mauny@ensta.fr>2008-07-09 13:03:38 +0000
commit6ba024a12e85e50315ea7999a45e08ea263c9023 (patch)
tree76c0e81a397c9d8a0c665980bc79842082419399 /camlp4/Camlp4
parent0ccc1f7ff074353e81420ff77733e79179e25720 (diff)
Add lazy patterns.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@8906 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'camlp4/Camlp4')
-rw-r--r--camlp4/Camlp4/Camlp4Ast.partial.ml3
-rw-r--r--camlp4/Camlp4/Printers/OCaml.ml7
-rw-r--r--camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml1
3 files changed, 8 insertions, 3 deletions
diff --git a/camlp4/Camlp4/Camlp4Ast.partial.ml b/camlp4/Camlp4/Camlp4Ast.partial.ml
index 5d9da8239..ba941d7a8 100644
--- a/camlp4/Camlp4/Camlp4Ast.partial.ml
+++ b/camlp4/Camlp4/Camlp4Ast.partial.ml
@@ -86,7 +86,8 @@
| PaTup of loc and patt (* ( p ) *)
| PaTyc of loc and patt and ctyp (* (p : t) *)
| PaTyp of loc and ident (* #i *)
- | PaVrn of loc and string (* `s *) ]
+ | PaVrn of loc and string (* `s *)
+ | PaLaz of loc and patt (* lazy p *) ]
and expr =
[ ExNil of loc
| ExId of loc and ident (* i *)
diff --git a/camlp4/Camlp4/Printers/OCaml.ml b/camlp4/Camlp4/Printers/OCaml.ml
index a637dffef..846cbd598 100644
--- a/camlp4/Camlp4/Printers/OCaml.ml
+++ b/camlp4/Camlp4/Printers/OCaml.ml
@@ -589,6 +589,8 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
method patt5 f = fun
[ <:patt< [$_$ :: $_$] >> as p -> o#simple_patt f p
+ | <:patt< lazy $p$ >> ->
+ pp f "@[<2>lazy %a@]" o#simple_patt p
| <:patt< $x$ $y$ >> ->
let (a, al) = get_patt_args x [y] in
if not (Ast.is_patt_constructor a) then
@@ -637,8 +639,9 @@ module Make (Syntax : Sig.Camlp4Syntax) = struct
pp f "@[<2>?%s:@,@[<1>(%a =@ %a)@]@]" s o#patt_tycon p o#expr e
| <:patt< $_$ $_$ >> | <:patt< ($_$ as $_$) >> | <:patt< $_$ | $_$ >> |
<:patt< $_$ .. $_$ >> | <:patt< $_$, $_$ >> |
- <:patt< $_$; $_$ >> | <:patt< $_$ = $_$ >> as p ->
- pp f "@[<1>(%a)@]" o#patt p ];
+ <:patt< $_$; $_$ >> | <:patt< $_$ = $_$ >> | <:patt< lazy $_$ >> as p ->
+ pp f "@[<1>(%a)@]" o#patt p
+ ];
method patt_tycon f =
fun
diff --git a/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml b/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml
index 45b65fb64..ce92c6330 100644
--- a/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml
+++ b/camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml
@@ -500,6 +500,7 @@ module Make (Ast : Sig.Camlp4Ast) = struct
| PaTyc loc p t -> mkpat loc (Ppat_constraint (patt p) (ctyp t))
| PaTyp loc i -> mkpat loc (Ppat_type (long_type_ident i))
| PaVrn loc s -> mkpat loc (Ppat_variant s None)
+ | PaLaz loc p -> mkpat loc (Ppat_lazy (patt p))
| PaEq _ _ _ | PaSem _ _ _ | PaCom _ _ _ | PaNil _ as p ->
error (loc_of_patt p) "invalid pattern" ]
and mklabpat =