diff options
-rw-r--r-- | camlp4/boot/Camlp4.ml | 119 | ||||
-rw-r--r-- | camlp4/boot/Camlp4Ast.ml | 69 | ||||
-rw-r--r-- | camlp4/boot/camlp4boot.ml | 78 |
3 files changed, 259 insertions, 7 deletions
diff --git a/camlp4/boot/Camlp4.ml b/camlp4/boot/Camlp4.ml index d71ef6477..dfdb0bc72 100644 --- a/camlp4/boot/Camlp4.ml +++ b/camlp4/boot/Camlp4.ml @@ -910,6 +910,8 @@ module Sig = | (* t & t *) TyOfAmp of loc * ctyp * ctyp | (* t of & t *) + TyPkg of loc * module_type + | (* (module S) *) TyAnt of loc * string and (* $s$ *) patt = @@ -1048,6 +1050,8 @@ module Sig = ExWhi of loc * expr * expr | (* let open i in e *) ExOpI of loc * ident * expr + | (* (module ME : S) which is represented as (module (ME : S)) *) + ExPkg of loc * module_expr and module_type = | MtNil of loc | (* i *) @@ -1156,6 +1160,9 @@ module Sig = MeStr of loc * str_item | (* (me : mt) *) MeTyc of loc * module_expr * module_type + | (* (value e) *) + (* (value e : S) which is represented as (value (e : S)) *) + MePkg of loc * expr | MeAnt of loc * string and (* $s$ *) str_item = @@ -1755,6 +1762,7 @@ module Sig = | TyVrnInfSup of loc * ctyp * ctyp | TyAmp of loc * ctyp * ctyp | TyOfAmp of loc * ctyp * ctyp + | TyPkg of loc * module_type | TyAnt of loc * string and patt = | PaNil of loc @@ -1828,6 +1836,7 @@ module Sig = | ExVrn of loc * string | ExWhi of loc * expr * expr | ExOpI of loc * ident * expr + | ExPkg of loc * module_expr and module_type = | MtNil of loc | MtId of loc * ident @@ -1888,6 +1897,7 @@ module Sig = | MeFun of loc * string * module_type * module_expr | MeStr of loc * str_item | MeTyc of loc * module_expr * module_type + | MePkg of loc * expr | MeAnt of loc * string and str_item = | StNil of loc @@ -2658,6 +2668,8 @@ module Sig = val module_type : Ast.module_type Gram.Entry.t + val package_type : Ast.module_type Gram.Entry.t + val module_type_quot : Ast.module_type Gram.Entry.t val more_ctyp : Ast.ctyp Gram.Entry.t @@ -7729,6 +7741,14 @@ module Struct = and meta_ctyp _loc = function | Ast.TyAnt (x0, x1) -> Ast.ExAnt (x0, x1) + | Ast.TyPkg (x0, x1) -> + Ast.ExApp (_loc, + Ast.ExApp (_loc, + Ast.ExId (_loc, + Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"), + Ast.IdUid (_loc, "TyPkg"))), + meta_loc _loc x0), + meta_module_type _loc x1) | Ast.TyOfAmp (x0, x1, x2) -> Ast.ExApp (_loc, Ast.ExApp (_loc, @@ -8073,6 +8093,14 @@ module Struct = meta_loc _loc x0) and meta_expr _loc = function + | Ast.ExPkg (x0, x1) -> + Ast.ExApp (_loc, + Ast.ExApp (_loc, + Ast.ExId (_loc, + Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"), + Ast.IdUid (_loc, "ExPkg"))), + meta_loc _loc x0), + meta_module_expr _loc x1) | Ast.ExOpI (x0, x1, x2) -> Ast.ExApp (_loc, Ast.ExApp (_loc, @@ -8638,6 +8666,14 @@ module Struct = and meta_module_expr _loc = function | Ast.MeAnt (x0, x1) -> Ast.ExAnt (x0, x1) + | Ast.MePkg (x0, x1) -> + Ast.ExApp (_loc, + Ast.ExApp (_loc, + Ast.ExId (_loc, + Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"), + Ast.IdUid (_loc, "MePkg"))), + meta_loc _loc x0), + meta_expr _loc x1) | Ast.MeTyc (x0, x1, x2) -> Ast.ExApp (_loc, Ast.ExApp (_loc, @@ -9801,6 +9837,14 @@ module Struct = and meta_ctyp _loc = function | Ast.TyAnt (x0, x1) -> Ast.PaAnt (x0, x1) + | Ast.TyPkg (x0, x1) -> + Ast.PaApp (_loc, + Ast.PaApp (_loc, + Ast.PaId (_loc, + Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"), + Ast.IdUid (_loc, "TyPkg"))), + meta_loc _loc x0), + meta_module_type _loc x1) | Ast.TyOfAmp (x0, x1, x2) -> Ast.PaApp (_loc, Ast.PaApp (_loc, @@ -10145,6 +10189,14 @@ module Struct = meta_loc _loc x0) and meta_expr _loc = function + | Ast.ExPkg (x0, x1) -> + Ast.PaApp (_loc, + Ast.PaApp (_loc, + Ast.PaId (_loc, + Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"), + Ast.IdUid (_loc, "ExPkg"))), + meta_loc _loc x0), + meta_module_expr _loc x1) | Ast.ExOpI (x0, x1, x2) -> Ast.PaApp (_loc, Ast.PaApp (_loc, @@ -10710,6 +10762,14 @@ module Struct = and meta_module_expr _loc = function | Ast.MeAnt (x0, x1) -> Ast.PaAnt (x0, x1) + | Ast.MePkg (x0, x1) -> + Ast.PaApp (_loc, + Ast.PaApp (_loc, + Ast.PaId (_loc, + Ast.IdAcc (_loc, Ast.IdUid (_loc, "Ast"), + Ast.IdUid (_loc, "MePkg"))), + meta_loc _loc x0), + meta_expr _loc x1) | Ast.MeTyc (x0, x1, x2) -> Ast.PaApp (_loc, Ast.PaApp (_loc, @@ -11780,6 +11840,9 @@ module Struct = let _x_i1 = o#module_expr _x_i1 in let _x_i2 = o#module_type _x_i2 in MeTyc (_x, _x_i1, _x_i2) + | MePkg (_x, _x_i1) -> + let _x = o#loc _x in + let _x_i1 = o#expr _x_i1 in MePkg (_x, _x_i1) | MeAnt (_x, _x_i1) -> let _x = o#loc _x in let _x_i1 = o#string _x_i1 in MeAnt (_x, _x_i1) @@ -12037,6 +12100,9 @@ module Struct = let _x = o#loc _x in let _x_i1 = o#ident _x_i1 in let _x_i2 = o#expr _x_i2 in ExOpI (_x, _x_i1, _x_i2) + | ExPkg (_x, _x_i1) -> + let _x = o#loc _x in + let _x_i1 = o#module_expr _x_i1 in ExPkg (_x, _x_i1) method ctyp : ctyp -> ctyp = function @@ -12170,6 +12236,9 @@ module Struct = let _x = o#loc _x in let _x_i1 = o#ctyp _x_i1 in let _x_i2 = o#ctyp _x_i2 in TyOfAmp (_x, _x_i1, _x_i2) + | TyPkg (_x, _x_i1) -> + let _x = o#loc _x in + let _x_i1 = o#module_type _x_i1 in TyPkg (_x, _x_i1) | TyAnt (_x, _x_i1) -> let _x = o#loc _x in let _x_i1 = o#string _x_i1 in TyAnt (_x, _x_i1) @@ -12614,6 +12683,8 @@ module Struct = let o = o#loc _x in let o = o#module_expr _x_i1 in let o = o#module_type _x_i2 in o + | MePkg (_x, _x_i1) -> + let o = o#loc _x in let o = o#expr _x_i1 in o | MeAnt (_x, _x_i1) -> let o = o#loc _x in let o = o#string _x_i1 in o @@ -12811,6 +12882,8 @@ module Struct = | ExOpI (_x, _x_i1, _x_i2) -> let o = o#loc _x in let o = o#ident _x_i1 in let o = o#expr _x_i2 in o + | ExPkg (_x, _x_i1) -> + let o = o#loc _x in let o = o#module_expr _x_i1 in o method ctyp : ctyp -> 'self_type = function @@ -12909,6 +12982,8 @@ module Struct = | TyOfAmp (_x, _x_i1, _x_i2) -> let o = o#loc _x in let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o + | TyPkg (_x, _x_i1) -> + let o = o#loc _x in let o = o#module_type _x_i1 in o | TyAnt (_x, _x_i1) -> let o = o#loc _x in let o = o#string _x_i1 in o @@ -13654,6 +13729,9 @@ module Struct = mktyp loc (Ptyp_object (meth_list fl [ mkfield loc Pfield_var ])) | TyCls (loc, id) -> mktyp loc (Ptyp_class (ident id, [], [])) + | Ast.TyPkg (loc, pt) -> + let (i, cs) = package_type pt + in mktyp loc (Ptyp_package (i, cs)) | TyLab (loc, _, _) -> error loc "labelled type not allowed here" | TyMan (loc, _, _) -> @@ -13718,6 +13796,23 @@ module Struct = | Ast.TyCol (loc, (Ast.TyId (_, (Ast.IdLid (_, lab)))), t) -> (mkfield loc (Pfield (lab, mkpolytype (ctyp t)))) :: acc | _ -> assert false + and package_type_constraints wc acc = + match wc with + | Ast.WcNil _ -> acc + | Ast.WcTyp (_, (Ast.TyId (_, (Ast.IdLid (_, id)))), ct) -> + (id, (ctyp ct)) :: acc + | Ast.WcAnd (_, wc1, wc2) -> + package_type_constraints wc1 + (package_type_constraints wc2 acc) + | _ -> + error (loc_of_with_constr wc) + "unexpected `with constraint' for a package type" + and package_type : module_type -> package_type = + function + | Ast.MtWit (_, (Ast.MtId (_, i)), wc) -> + ((long_uident i), (package_type_constraints wc [])) + | Ast.MtId (_, i) -> ((long_uident i), []) + | mt -> error (loc_of_module_type mt) "unexpected package type" let mktype loc tl cl tk tp tm = let (params, variance) = List.split tl @@ -14301,6 +14396,10 @@ module Struct = in mkexp loc (Pexp_while (expr e1, expr e2)) | Ast.ExOpI (loc, i, e) -> mkexp loc (Pexp_open (long_uident i, expr e)) + | Ast.ExPkg (loc, (Ast.MeTyc (_, me, pt))) -> + mkexp loc (Pexp_pack (module_expr me, package_type pt)) + | Ast.ExPkg (loc, _) -> + error loc "(module_expr : package_type) expected here" | Ast.ExCom (loc, _, _) -> error loc "expr, expr: not allowed here" | Ast.ExSem (loc, _, _) -> @@ -14462,6 +14561,10 @@ module Struct = | Ast.MeTyc (loc, me, mt) -> mkmod loc (Pmod_constraint (module_expr me, module_type mt)) + | Ast.MePkg (loc, (Ast.ExTyc (_, e, (Ast.TyPkg (_, pt))))) -> + mkmod loc (Pmod_unpack (expr e, package_type pt)) + | Ast.MePkg (loc, _) -> + error loc "(value expr) not supported yet" | Ast.MeAnt (loc, _) -> error loc "antiquotation in module_expr" and str_item s l = @@ -18635,6 +18738,12 @@ module Printers = pp f "%a,@ %a" o#simple_expr e1 o#simple_expr e2 | Ast.ExSem (_, e1, e2) -> pp f "%a;@ %a" o#under_semi#expr e1 o#expr e2 + | Ast.ExPkg (_, (Ast.MeTyc (_, me, mt))) -> + pp f "@[<hv0>@[<hv2>(module %a : %a@])@]" + o#module_expr me o#module_type mt + | Ast.ExPkg (_, me) -> + pp f "@[<hv0>@[<hv2>(module %a@])@]" o#module_expr + me | Ast.ExApp (_, _, _) | Ast.ExAcc (_, _, _) | Ast.ExAre (_, _, _) | Ast.ExSte (_, _, _) | Ast.ExAss (_, _, _) | Ast.ExSnd (_, _, _) | @@ -18809,6 +18918,8 @@ module Printers = | Ast.TyRec (_, t) -> pp f "@[<2>{@ %a@]@ }" o#ctyp t | Ast.TySum (_, t) -> pp f "@[<0>%a@]" o#sum_type t | Ast.TyTup (_, t) -> pp f "@[<1>(%a)@]" o#ctyp t + | Ast.TyPkg (_, mt) -> + pp f "@[<2>(module@ %a@])" o#module_type mt | Ast.TyVrnEq (_, t) -> pp f "@[<2>[@ %a@]@ ]" o#sum_type t | Ast.TyVrnInf (_, t) -> @@ -19101,6 +19212,12 @@ module Printers = | Ast.MeTyc (_, me, mt) -> pp f "@[<1>(%a :@ %a)@]" o#module_expr me o#module_type mt + | Ast.MePkg (_, + (Ast.ExTyc (_, e, (Ast.TyPkg (_, mt))))) -> + pp f "@[<1>(%s %a :@ %a)@]" value_val o#expr e + o#module_type mt + | Ast.MePkg (_, e) -> + pp f "@[<1>(%s %a)@]" value_val o#expr e method class_expr = fun f ce -> @@ -20011,6 +20128,8 @@ module OCamlInitSyntax = let module_type = Gram.Entry.mk "module_type" + let package_type = Gram.Entry.mk "package_type" + let more_ctyp = Gram.Entry.mk "more_ctyp" let name_tags = Gram.Entry.mk "name_tags" diff --git a/camlp4/boot/Camlp4Ast.ml b/camlp4/boot/Camlp4Ast.ml index 457f29e9d..831fb92cf 100644 --- a/camlp4/boot/Camlp4Ast.ml +++ b/camlp4/boot/Camlp4Ast.ml @@ -855,6 +855,14 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = and meta_ctyp _loc = fun [ Ast.TyAnt x0 x1 -> Ast.ExAnt x0 x1 + | Ast.TyPkg x0 x1 -> + Ast.ExApp _loc + (Ast.ExApp _loc + (Ast.ExId _loc + (Ast.IdAcc _loc (Ast.IdUid _loc "Ast") + (Ast.IdUid _loc "TyPkg"))) + (meta_loc _loc x0)) + (meta_module_type _loc x1) | Ast.TyOfAmp x0 x1 x2 -> Ast.ExApp _loc (Ast.ExApp _loc @@ -1180,7 +1188,15 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = (meta_loc _loc x0) ] and meta_expr _loc = fun - [ Ast.ExOpI x0 x1 x2 -> + [ Ast.ExPkg x0 x1 -> + Ast.ExApp _loc + (Ast.ExApp _loc + (Ast.ExId _loc + (Ast.IdAcc _loc (Ast.IdUid _loc "Ast") + (Ast.IdUid _loc "ExPkg"))) + (meta_loc _loc x0)) + (meta_module_expr _loc x1) + | Ast.ExOpI x0 x1 x2 -> Ast.ExApp _loc (Ast.ExApp _loc (Ast.ExApp _loc @@ -1717,6 +1733,14 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = and meta_module_expr _loc = fun [ Ast.MeAnt x0 x1 -> Ast.ExAnt x0 x1 + | Ast.MePkg x0 x1 -> + Ast.ExApp _loc + (Ast.ExApp _loc + (Ast.ExId _loc + (Ast.IdAcc _loc (Ast.IdUid _loc "Ast") + (Ast.IdUid _loc "MePkg"))) + (meta_loc _loc x0)) + (meta_expr _loc x1) | Ast.MeTyc x0 x1 x2 -> Ast.ExApp _loc (Ast.ExApp _loc @@ -2805,6 +2829,14 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = and meta_ctyp _loc = fun [ Ast.TyAnt x0 x1 -> Ast.PaAnt x0 x1 + | Ast.TyPkg x0 x1 -> + Ast.PaApp _loc + (Ast.PaApp _loc + (Ast.PaId _loc + (Ast.IdAcc _loc (Ast.IdUid _loc "Ast") + (Ast.IdUid _loc "TyPkg"))) + (meta_loc _loc x0)) + (meta_module_type _loc x1) | Ast.TyOfAmp x0 x1 x2 -> Ast.PaApp _loc (Ast.PaApp _loc @@ -3130,7 +3162,15 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = (meta_loc _loc x0) ] and meta_expr _loc = fun - [ Ast.ExOpI x0 x1 x2 -> + [ Ast.ExPkg x0 x1 -> + Ast.PaApp _loc + (Ast.PaApp _loc + (Ast.PaId _loc + (Ast.IdAcc _loc (Ast.IdUid _loc "Ast") + (Ast.IdUid _loc "ExPkg"))) + (meta_loc _loc x0)) + (meta_module_expr _loc x1) + | Ast.ExOpI x0 x1 x2 -> Ast.PaApp _loc (Ast.PaApp _loc (Ast.PaApp _loc @@ -3667,6 +3707,14 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = and meta_module_expr _loc = fun [ Ast.MeAnt x0 x1 -> Ast.PaAnt x0 x1 + | Ast.MePkg x0 x1 -> + Ast.PaApp _loc + (Ast.PaApp _loc + (Ast.PaId _loc + (Ast.IdAcc _loc (Ast.IdUid _loc "Ast") + (Ast.IdUid _loc "MePkg"))) + (meta_loc _loc x0)) + (meta_expr _loc x1) | Ast.MeTyc x0 x1 x2 -> Ast.PaApp _loc (Ast.PaApp _loc @@ -4661,6 +4709,8 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = let _x = o#loc _x in let _x_i1 = o#module_expr _x_i1 in let _x_i2 = o#module_type _x_i2 in MeTyc _x _x_i1 _x_i2 + | MePkg _x _x_i1 -> + let _x = o#loc _x in let _x_i1 = o#expr _x_i1 in MePkg _x _x_i1 | MeAnt _x _x_i1 -> let _x = o#loc _x in let _x_i1 = o#string _x_i1 in MeAnt _x _x_i1 ]; @@ -4889,7 +4939,10 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = | ExOpI _x _x_i1 _x_i2 -> let _x = o#loc _x in let _x_i1 = o#ident _x_i1 in - let _x_i2 = o#expr _x_i2 in ExOpI _x _x_i1 _x_i2 ]; + let _x_i2 = o#expr _x_i2 in ExOpI _x _x_i1 _x_i2 + | ExPkg _x _x_i1 -> + let _x = o#loc _x in + let _x_i1 = o#module_expr _x_i1 in ExPkg _x _x_i1 ]; method ctyp : ctyp -> ctyp = fun [ TyNil _x -> let _x = o#loc _x in TyNil _x @@ -5014,6 +5067,9 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = let _x = o#loc _x in let _x_i1 = o#ctyp _x_i1 in let _x_i2 = o#ctyp _x_i2 in TyOfAmp _x _x_i1 _x_i2 + | TyPkg _x _x_i1 -> + let _x = o#loc _x in + let _x_i1 = o#module_type _x_i1 in TyPkg _x _x_i1 | TyAnt _x _x_i1 -> let _x = o#loc _x in let _x_i1 = o#string _x_i1 in TyAnt _x _x_i1 ]; @@ -5378,6 +5434,7 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = | MeTyc _x _x_i1 _x_i2 -> let o = o#loc _x in let o = o#module_expr _x_i1 in let o = o#module_type _x_i2 in o + | MePkg _x _x_i1 -> let o = o#loc _x in let o = o#expr _x_i1 in o | MeAnt _x _x_i1 -> let o = o#loc _x in let o = o#string _x_i1 in o ]; method module_binding : module_binding -> 'self_type = fun @@ -5538,7 +5595,9 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = let o = o#expr _x_i1 in let o = o#expr _x_i2 in o | ExOpI _x _x_i1 _x_i2 -> let o = o#loc _x in - let o = o#ident _x_i1 in let o = o#expr _x_i2 in o ]; + let o = o#ident _x_i1 in let o = o#expr _x_i2 in o + | ExPkg _x _x_i1 -> + let o = o#loc _x in let o = o#module_expr _x_i1 in o ]; method ctyp : ctyp -> 'self_type = fun [ TyNil _x -> let o = o#loc _x in o @@ -5624,6 +5683,8 @@ module Make (Loc : Sig.Loc) : Sig.Camlp4Ast with module Loc = Loc = | TyOfAmp _x _x_i1 _x_i2 -> let o = o#loc _x in let o = o#ctyp _x_i1 in let o = o#ctyp _x_i2 in o + | TyPkg _x _x_i1 -> + let o = o#loc _x in let o = o#module_type _x_i1 in o | TyAnt _x _x_i1 -> let o = o#loc _x in let o = o#string _x_i1 in o ]; method class_type : class_type -> 'self_type = fun diff --git a/camlp4/boot/camlp4boot.ml b/camlp4/boot/camlp4boot.ml index 8199a391a..9d507d5e9 100644 --- a/camlp4/boot/camlp4boot.ml +++ b/camlp4/boot/camlp4boot.ml @@ -758,6 +758,7 @@ Very old (no more supported) syntax:\n\ let _ = let _ = (a_CHAR : 'a_CHAR Gram.Entry.t) + and _ = (package_type : 'package_type Gram.Entry.t) and _ = (do_sequence : 'do_sequence Gram.Entry.t) and _ = (infixop4 : 'infixop4 Gram.Entry.t) and _ = (infixop3 : 'infixop3 Gram.Entry.t) @@ -983,7 +984,34 @@ Very old (no more supported) syntax:\n\ (_loc : Gram.Loc.t) -> (Ast.MeApp (_loc, me1, me2) : 'module_expr)))) ]); ((Some "simple"), None, - [ ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ")" ], + [ ([ Gram.Skeyword "("; + Gram.Snterm + (Gram.Entry.obj + (value_val : 'value_val Gram.Entry.t)); + Gram.Snterm + (Gram.Entry.obj (expr : 'expr Gram.Entry.t)); + Gram.Skeyword ":"; + Gram.Snterm + (Gram.Entry.obj + (package_type : 'package_type Gram.Entry.t)); + Gram.Skeyword ")" ], + (Gram.Action.mk + (fun _ (p : 'package_type) _ (e : 'expr) _ _ + (_loc : Gram.Loc.t) -> + (Ast.MePkg (_loc, + Ast.ExTyc (_loc, e, Ast.TyPkg (_loc, p))) : + 'module_expr)))); + ([ Gram.Skeyword "("; + Gram.Snterm + (Gram.Entry.obj + (value_val : 'value_val Gram.Entry.t)); + Gram.Snterm + (Gram.Entry.obj (expr : 'expr Gram.Entry.t)); + Gram.Skeyword ")" ], + (Gram.Action.mk + (fun _ (e : 'expr) _ _ (_loc : Gram.Loc.t) -> + (Ast.MePkg (_loc, e) : 'module_expr)))); + ([ Gram.Skeyword "("; Gram.Sself; Gram.Skeyword ")" ], (Gram.Action.mk (fun _ (me : 'module_expr) _ (_loc : Gram.Loc.t) -> (me : 'module_expr)))); @@ -2280,7 +2308,31 @@ Very old (no more supported) syntax:\n\ Ast.ExId (_loc, Ast.IdLid (_loc, "val"))) : 'expr)))) ]); ((Some "simple"), None, - [ ([ Gram.Skeyword "begin"; Gram.Skeyword "end" ], + [ ([ Gram.Skeyword "("; Gram.Skeyword "module"; + Gram.Snterm + (Gram.Entry.obj + (module_expr : 'module_expr Gram.Entry.t)); + Gram.Skeyword ":"; + Gram.Snterm + (Gram.Entry.obj + (package_type : 'package_type Gram.Entry.t)); + Gram.Skeyword ")" ], + (Gram.Action.mk + (fun _ (pt : 'package_type) _ + (me : 'module_expr) _ _ (_loc : Gram.Loc.t) + -> + (Ast.ExPkg (_loc, Ast.MeTyc (_loc, me, pt)) : + 'expr)))); + ([ Gram.Skeyword "("; Gram.Skeyword "module"; + Gram.Snterm + (Gram.Entry.obj + (module_expr : 'module_expr Gram.Entry.t)); + Gram.Skeyword ")" ], + (Gram.Action.mk + (fun _ (me : 'module_expr) _ _ + (_loc : Gram.Loc.t) -> + (Ast.ExPkg (_loc, me) : 'expr)))); + ([ Gram.Skeyword "begin"; Gram.Skeyword "end" ], (Gram.Action.mk (fun _ _ (_loc : Gram.Loc.t) -> (Ast.ExId (_loc, Ast.IdUid (_loc, "()")) : @@ -4390,7 +4442,16 @@ Very old (no more supported) syntax:\n\ raise (Stream.Error s) : 'ctyp)))) ]); ((Some "simple"), None, - [ ([ Gram.Skeyword "<"; + [ ([ Gram.Skeyword "("; Gram.Skeyword "module"; + Gram.Snterm + (Gram.Entry.obj + (package_type : 'package_type Gram.Entry.t)); + Gram.Skeyword ")" ], + (Gram.Action.mk + (fun _ (p : 'package_type) _ _ + (_loc : Gram.Loc.t) -> + (Ast.TyPkg (_loc, p) : 'ctyp)))); + ([ Gram.Skeyword "<"; Gram.Snterm (Gram.Entry.obj (opt_meth_list : @@ -6565,6 +6626,17 @@ Very old (no more supported) syntax:\n\ (fun (t : 'ctyp) (_loc : Gram.Loc.t) -> (t : 'poly_type)))) ]) ])) ()); + Gram.extend (package_type : 'package_type Gram.Entry.t) + ((fun () -> + (None, + [ (None, None, + [ ([ Gram.Snterm + (Gram.Entry.obj + (module_type : 'module_type Gram.Entry.t)) ], + (Gram.Action.mk + (fun (p : 'module_type) (_loc : Gram.Loc.t) -> + (p : 'package_type)))) ]) ])) + ()); Gram.extend (typevars : 'typevars Gram.Entry.t) ((fun () -> (None, |