diff options
author | Michel Mauny <Michel.Mauny@ensta.fr> | 2008-07-09 13:03:38 +0000 |
---|---|---|
committer | Michel Mauny <Michel.Mauny@ensta.fr> | 2008-07-09 13:03:38 +0000 |
commit | 6ba024a12e85e50315ea7999a45e08ea263c9023 (patch) | |
tree | 76c0e81a397c9d8a0c665980bc79842082419399 /camlp4/Camlp4 | |
parent | 0ccc1f7ff074353e81420ff77733e79179e25720 (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.ml | 3 | ||||
-rw-r--r-- | camlp4/Camlp4/Printers/OCaml.ml | 7 | ||||
-rw-r--r-- | camlp4/Camlp4/Struct/Camlp4Ast2OCamlAst.ml | 1 |
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 = |