diff --git a/.depend b/.depend
index 4875991..a9e66ac 100644
--- a/.depend
+++ b/.depend
@@ -545,6 +545,144 @@ typing/datarepr.cmi : \
     typing/types.cmi \
     typing/path.cmi \
     typing/ident.cmi
+typing/debug_core.cmo : \
+    typing/types.cmi \
+    typing/typemod.cmi \
+    typing/typedtree.cmi \
+    typing/printtyp.cmi \
+    parsing/pprintast.cmi \
+    typing/path.cmi \
+    parsing/parsetree.cmi \
+    parsing/parse.cmi \
+    parsing/longident.cmi \
+    parsing/location.cmi \
+    typing/ident.cmi \
+    typing/env.cmi \
+    parsing/asttypes.cmi \
+    parsing/ast_helper.cmi \
+    typing/debug_core.cmi
+typing/debug_core.cmx : \
+    typing/types.cmx \
+    typing/typemod.cmx \
+    typing/typedtree.cmx \
+    typing/printtyp.cmx \
+    parsing/pprintast.cmx \
+    typing/path.cmx \
+    parsing/parsetree.cmi \
+    parsing/parse.cmx \
+    parsing/longident.cmx \
+    parsing/location.cmx \
+    typing/ident.cmx \
+    typing/env.cmx \
+    parsing/asttypes.cmi \
+    parsing/ast_helper.cmx \
+    typing/debug_core.cmi
+typing/debug_core.cmi : \
+    typing/types.cmi \
+    parsing/parsetree.cmi \
+    parsing/location.cmi \
+    typing/env.cmi \
+    parsing/asttypes.cmi
+typing/debug_main.cmo : \
+    utils/warnings.cmi \
+    typing/typemod.cmi \
+    typing/typedtree.cmi \
+    typing/typedecl.cmi \
+    typing/typecore.cmi \
+    parsing/syntaxerr.cmi \
+    typing/printtyp.cmi \
+    parsing/pprintast.cmi \
+    parsing/parsetree.cmi \
+    parsing/longident.cmi \
+    parsing/location.cmi \
+    typing/env.cmi \
+    typing/debug_slice.cmi \
+    typing/debug_message.cmo \
+    typing/debug_core.cmi \
+    typing/ctype.cmi \
+    typing/btype.cmi \
+    parsing/asttypes.cmi \
+    parsing/ast_helper.cmi \
+    typing/debug_main.cmi
+typing/debug_main.cmx : \
+    utils/warnings.cmx \
+    typing/typemod.cmx \
+    typing/typedtree.cmx \
+    typing/typedecl.cmx \
+    typing/typecore.cmx \
+    parsing/syntaxerr.cmx \
+    typing/printtyp.cmx \
+    parsing/pprintast.cmx \
+    parsing/parsetree.cmi \
+    parsing/longident.cmx \
+    parsing/location.cmx \
+    typing/env.cmx \
+    typing/debug_slice.cmx \
+    typing/debug_message.cmx \
+    typing/debug_core.cmx \
+    typing/ctype.cmx \
+    typing/btype.cmx \
+    parsing/asttypes.cmi \
+    parsing/ast_helper.cmx \
+    typing/debug_main.cmi
+typing/debug_main.cmi : \
+    parsing/parsetree.cmi \
+    typing/env.cmi
+typing/debug_message.cmo : \
+    typing/types.cmi \
+    typing/typecore.cmi \
+    parsing/syntaxerr.cmi \
+    typing/printtyp.cmi \
+    parsing/pprintast.cmi \
+    typing/path.cmi \
+    parsing/parsetree.cmi \
+    parsing/longident.cmi \
+    parsing/location.cmi \
+    typing/ident.cmi \
+    typing/debug_core.cmi
+typing/debug_message.cmx : \
+    typing/types.cmx \
+    typing/typecore.cmx \
+    parsing/syntaxerr.cmx \
+    typing/printtyp.cmx \
+    parsing/pprintast.cmx \
+    typing/path.cmx \
+    parsing/parsetree.cmi \
+    parsing/longident.cmx \
+    parsing/location.cmx \
+    typing/ident.cmx \
+    typing/debug_core.cmx
+typing/debug_slice.cmo : \
+    utils/warnings.cmi \
+    typing/typemod.cmi \
+    typing/typedtree.cmi \
+    parsing/pprintast.cmi \
+    parsing/parsetree.cmi \
+    bytecomp/meta.cmi \
+    parsing/longident.cmi \
+    parsing/location.cmi \
+    typing/env.cmi \
+    typing/debug_core.cmi \
+    parsing/asttypes.cmi \
+    parsing/ast_helper.cmi \
+    typing/debug_slice.cmi
+typing/debug_slice.cmx : \
+    utils/warnings.cmx \
+    typing/typemod.cmx \
+    typing/typedtree.cmx \
+    parsing/pprintast.cmx \
+    parsing/parsetree.cmi \
+    bytecomp/meta.cmx \
+    parsing/longident.cmx \
+    parsing/location.cmx \
+    typing/env.cmx \
+    typing/debug_core.cmx \
+    parsing/asttypes.cmi \
+    parsing/ast_helper.cmx \
+    typing/debug_slice.cmi
+typing/debug_slice.cmi : \
+    parsing/parsetree.cmi \
+    typing/env.cmi
 typing/env.cmo : \
     utils/warnings.cmi \
     typing/types.cmi \
@@ -5788,6 +5926,7 @@ driver/compile_common.cmo : \
     utils/misc.cmi \
     typing/includemod.cmi \
     typing/env.cmi \
+    typing/debug_main.cmi \
     utils/config.cmi \
     driver/compmisc.cmi \
     driver/compenv.cmi \
@@ -5808,6 +5947,7 @@ driver/compile_common.cmx : \
     utils/misc.cmx \
     typing/includemod.cmx \
     typing/env.cmx \
+    typing/debug_main.cmx \
     utils/config.cmx \
     driver/compmisc.cmx \
     driver/compenv.cmx \
@@ -6358,6 +6498,7 @@ toplevel/toploop.cmo : \
     typing/env.cmi \
     bytecomp/emitcode.cmi \
     bytecomp/dll.cmi \
+    typing/debug_main.cmi \
     utils/config.cmi \
     driver/compmisc.cmi \
     driver/compenv.cmi \
@@ -6402,6 +6543,7 @@ toplevel/toploop.cmx : \
     typing/env.cmx \
     bytecomp/emitcode.cmx \
     bytecomp/dll.cmx \
+    typing/debug_main.cmx \
     utils/config.cmx \
     driver/compmisc.cmx \
     driver/compenv.cmx \
diff --git a/boot/menhir/parser.ml b/boot/menhir/parser.ml
index 6b6fc22..dce95f7 100644
--- a/boot/menhir/parser.ml
+++ b/boot/menhir/parser.ml
@@ -16,7 +16,7 @@ module MenhirBasics = struct
     | VAL
     | UNDERSCORE
     | UIDENT of (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
 # 22 "parsing/parser.ml"
   )
@@ -28,7 +28,7 @@ module MenhirBasics = struct
     | THEN
     | STRUCT
     | STRING of (
-# 689 "parsing/parser.mly"
+# 697 "parsing/parser.mly"
        (string * Location.t * string option)
 # 34 "parsing/parser.ml"
   )
@@ -41,12 +41,12 @@ module MenhirBasics = struct
     | RBRACKET
     | RBRACE
     | QUOTED_STRING_ITEM of (
-# 693 "parsing/parser.mly"
+# 701 "parsing/parser.mly"
   (string * Location.t * string * Location.t * string option)
 # 47 "parsing/parser.ml"
   )
     | QUOTED_STRING_EXPR of (
-# 691 "parsing/parser.mly"
+# 699 "parsing/parser.mly"
   (string * Location.t * string * Location.t * string option)
 # 52 "parsing/parser.ml"
   )
@@ -54,7 +54,7 @@ module MenhirBasics = struct
     | QUESTION
     | PRIVATE
     | PREFIXOP of (
-# 675 "parsing/parser.mly"
+# 683 "parsing/parser.mly"
        (string)
 # 60 "parsing/parser.ml"
   )
@@ -64,7 +64,7 @@ module MenhirBasics = struct
     | PERCENT
     | OR
     | OPTLABEL of (
-# 668 "parsing/parser.mly"
+# 676 "parsing/parser.mly"
        (string)
 # 70 "parsing/parser.ml"
   )
@@ -82,12 +82,12 @@ module MenhirBasics = struct
     | MATCH
     | LPAREN
     | LIDENT of (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
 # 88 "parsing/parser.ml"
   )
     | LETOP of (
-# 633 "parsing/parser.mly"
+# 641 "parsing/parser.mly"
        (string)
 # 93 "parsing/parser.ml"
   )
@@ -107,39 +107,39 @@ module MenhirBasics = struct
     | LBRACE
     | LAZY
     | LABEL of (
-# 638 "parsing/parser.mly"
+# 646 "parsing/parser.mly"
        (string)
 # 113 "parsing/parser.ml"
   )
     | INT of (
-# 637 "parsing/parser.mly"
+# 645 "parsing/parser.mly"
        (string * char option)
 # 118 "parsing/parser.ml"
   )
     | INITIALIZER
     | INHERIT
     | INFIXOP4 of (
-# 631 "parsing/parser.mly"
+# 639 "parsing/parser.mly"
        (string)
 # 125 "parsing/parser.ml"
   )
     | INFIXOP3 of (
-# 630 "parsing/parser.mly"
+# 638 "parsing/parser.mly"
        (string)
 # 130 "parsing/parser.ml"
   )
     | INFIXOP2 of (
-# 629 "parsing/parser.mly"
+# 637 "parsing/parser.mly"
        (string)
 # 135 "parsing/parser.ml"
   )
     | INFIXOP1 of (
-# 628 "parsing/parser.mly"
+# 636 "parsing/parser.mly"
        (string)
 # 140 "parsing/parser.ml"
   )
     | INFIXOP0 of (
-# 627 "parsing/parser.mly"
+# 635 "parsing/parser.mly"
        (string)
 # 145 "parsing/parser.ml"
   )
@@ -147,7 +147,7 @@ module MenhirBasics = struct
     | IN
     | IF
     | HASHOP of (
-# 686 "parsing/parser.mly"
+# 694 "parsing/parser.mly"
        (string)
 # 153 "parsing/parser.ml"
   )
@@ -160,7 +160,7 @@ module MenhirBasics = struct
     | FUN
     | FOR
     | FLOAT of (
-# 616 "parsing/parser.mly"
+# 624 "parsing/parser.mly"
        (string * char option)
 # 166 "parsing/parser.ml"
   )
@@ -174,7 +174,7 @@ module MenhirBasics = struct
     | ELSE
     | DOWNTO
     | DOTOP of (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
 # 180 "parsing/parser.ml"
   )
@@ -182,14 +182,14 @@ module MenhirBasics = struct
     | DOT
     | DONE
     | DOCSTRING of (
-# 709 "parsing/parser.mly"
+# 717 "parsing/parser.mly"
        (Docstrings.docstring)
 # 188 "parsing/parser.ml"
   )
     | DO
     | CONSTRAINT
     | COMMENT of (
-# 708 "parsing/parser.mly"
+# 716 "parsing/parser.mly"
        (string * Location.t)
 # 195 "parsing/parser.ml"
   )
@@ -200,7 +200,7 @@ module MenhirBasics = struct
     | COLON
     | CLASS
     | CHAR of (
-# 596 "parsing/parser.mly"
+# 604 "parsing/parser.mly"
        (char)
 # 206 "parsing/parser.ml"
   )
@@ -213,7 +213,7 @@ module MenhirBasics = struct
     | ASSERT
     | AS
     | ANDOP of (
-# 634 "parsing/parser.mly"
+# 642 "parsing/parser.mly"
        (string)
 # 219 "parsing/parser.ml"
   )
@@ -238,6 +238,8 @@ open Ast_helper
 open Docstrings
 open Docstrings.WithMenhir
 
+let language_level = Syntaxerr.language_level
+
 let mkloc = Location.mkloc
 let mknoloc = Location.mknoloc
 
@@ -792,8 +794,14 @@ let mk_directive ~loc name arg =
       pdir_loc = make_loc loc;
     }
 
+let expert_exp ~loc str =
+  raise Syntaxerr.(Error(Expert_exp(str, language_level, make_loc loc)))
 
-# 797 "parsing/parser.ml"
+let infixop0 ~loc str =
+  raise Syntaxerr.(Error(InfixOP0(str, language_level, make_loc loc)))
+
+
+# 805 "parsing/parser.ml"
 
 module Tables = struct
   
@@ -1336,9 +1344,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3657 "parsing/parser.mly"
+# 3685 "parsing/parser.mly"
                                                 ( "+" )
-# 1342 "parsing/parser.ml"
+# 1350 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1361,9 +1369,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3658 "parsing/parser.mly"
+# 3686 "parsing/parser.mly"
                                                 ( "+." )
-# 1367 "parsing/parser.ml"
+# 1375 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1386,9 +1394,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = 
-# 3214 "parsing/parser.mly"
+# 3234 "parsing/parser.mly"
       ( _1 )
-# 1392 "parsing/parser.ml"
+# 1400 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1433,24 +1441,24 @@ module Tables = struct
         let _endpos = _endpos_tyvar_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3217 "parsing/parser.mly"
+# 3237 "parsing/parser.mly"
         ( Ptyp_alias(ty, tyvar) )
-# 1439 "parsing/parser.ml"
+# 1447 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_tyvar_, _startpos_ty_) in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 1448 "parsing/parser.ml"
+# 1456 "parsing/parser.ml"
           
         in
         
-# 3219 "parsing/parser.mly"
+# 3239 "parsing/parser.mly"
     ( _1 )
-# 1454 "parsing/parser.ml"
+# 1462 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1496,30 +1504,30 @@ module Tables = struct
         let _v : (let_binding) = let attrs2 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 1502 "parsing/parser.ml"
+# 1510 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined2_ in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 1511 "parsing/parser.ml"
+# 1519 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2480 "parsing/parser.mly"
+# 2500 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       mklb ~loc:_sloc false body attrs
     )
-# 1523 "parsing/parser.ml"
+# 1531 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1542,9 +1550,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3544 "parsing/parser.mly"
+# 3572 "parsing/parser.mly"
       ( _1 )
-# 1548 "parsing/parser.ml"
+# 1556 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1567,9 +1575,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3545 "parsing/parser.mly"
+# 3573 "parsing/parser.mly"
                                  ( Lident _1 )
-# 1573 "parsing/parser.ml"
+# 1581 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1606,9 +1614,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.core_type) = 
-# 3275 "parsing/parser.mly"
+# 3295 "parsing/parser.mly"
       ( _2 )
-# 1612 "parsing/parser.ml"
+# 1620 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1671,11 +1679,11 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 1679 "parsing/parser.ml"
+# 1687 "parsing/parser.ml"
           
         in
         let _3 =
@@ -1683,24 +1691,24 @@ module Tables = struct
           let _2 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 1689 "parsing/parser.ml"
+# 1697 "parsing/parser.ml"
             
           in
           
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 1695 "parsing/parser.ml"
+# 1703 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3277 "parsing/parser.mly"
+# 3297 "parsing/parser.mly"
       ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc _4) _3 )
-# 1704 "parsing/parser.ml"
+# 1712 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1731,24 +1739,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3280 "parsing/parser.mly"
+# 3300 "parsing/parser.mly"
         ( Ptyp_var _2 )
-# 1737 "parsing/parser.ml"
+# 1745 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 1746 "parsing/parser.ml"
+# 1754 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 1752 "parsing/parser.ml"
+# 1760 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1772,23 +1780,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3282 "parsing/parser.mly"
+# 3302 "parsing/parser.mly"
         ( Ptyp_any )
-# 1778 "parsing/parser.ml"
+# 1786 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 1786 "parsing/parser.ml"
+# 1794 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 1792 "parsing/parser.ml"
+# 1800 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1817,35 +1825,35 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 1823 "parsing/parser.ml"
+# 1831 "parsing/parser.ml"
               
             in
             let tys = 
-# 3327 "parsing/parser.mly"
+# 3347 "parsing/parser.mly"
       ( [] )
-# 1829 "parsing/parser.ml"
+# 1837 "parsing/parser.ml"
              in
             
-# 3285 "parsing/parser.mly"
+# 3305 "parsing/parser.mly"
         ( Ptyp_constr(tid, tys) )
-# 1834 "parsing/parser.ml"
+# 1842 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 1843 "parsing/parser.ml"
+# 1851 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 1849 "parsing/parser.ml"
+# 1857 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1881,20 +1889,20 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 1887 "parsing/parser.ml"
+# 1895 "parsing/parser.ml"
               
             in
             let tys = 
-# 3329 "parsing/parser.mly"
+# 3349 "parsing/parser.mly"
       ( [ty] )
-# 1893 "parsing/parser.ml"
+# 1901 "parsing/parser.ml"
              in
             
-# 3285 "parsing/parser.mly"
+# 3305 "parsing/parser.mly"
         ( Ptyp_constr(tid, tys) )
-# 1898 "parsing/parser.ml"
+# 1906 "parsing/parser.ml"
             
           in
           let _startpos__1_ = _startpos_ty_ in
@@ -1902,15 +1910,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 1908 "parsing/parser.ml"
+# 1916 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 1914 "parsing/parser.ml"
+# 1922 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -1961,9 +1969,9 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 1967 "parsing/parser.ml"
+# 1975 "parsing/parser.ml"
               
             in
             let tys =
@@ -1971,24 +1979,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 1975 "parsing/parser.ml"
+# 1983 "parsing/parser.ml"
                  in
                 
-# 979 "parsing/parser.mly"
+# 987 "parsing/parser.mly"
     ( xs )
-# 1980 "parsing/parser.ml"
+# 1988 "parsing/parser.ml"
                 
               in
               
-# 3331 "parsing/parser.mly"
+# 3351 "parsing/parser.mly"
       ( tys )
-# 1986 "parsing/parser.ml"
+# 1994 "parsing/parser.ml"
               
             in
             
-# 3285 "parsing/parser.mly"
+# 3305 "parsing/parser.mly"
         ( Ptyp_constr(tid, tys) )
-# 1992 "parsing/parser.ml"
+# 2000 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -1996,15 +2004,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2002 "parsing/parser.ml"
+# 2010 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2008 "parsing/parser.ml"
+# 2016 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2042,24 +2050,24 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3287 "parsing/parser.mly"
+# 3307 "parsing/parser.mly"
         ( let (f, c) = _2 in Ptyp_object (f, c) )
-# 2048 "parsing/parser.ml"
+# 2056 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2057 "parsing/parser.ml"
+# 2065 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2063 "parsing/parser.ml"
+# 2071 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2090,24 +2098,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3289 "parsing/parser.mly"
+# 3309 "parsing/parser.mly"
         ( Ptyp_object ([], Closed) )
-# 2096 "parsing/parser.ml"
+# 2104 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2105 "parsing/parser.ml"
+# 2113 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2111 "parsing/parser.ml"
+# 2119 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2143,20 +2151,20 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 2149 "parsing/parser.ml"
+# 2157 "parsing/parser.ml"
               
             in
             let tys = 
-# 3327 "parsing/parser.mly"
+# 3347 "parsing/parser.mly"
       ( [] )
-# 2155 "parsing/parser.ml"
+# 2163 "parsing/parser.ml"
              in
             
-# 3293 "parsing/parser.mly"
+# 3313 "parsing/parser.mly"
         ( Ptyp_class(cid, tys) )
-# 2160 "parsing/parser.ml"
+# 2168 "parsing/parser.ml"
             
           in
           let _startpos__1_ = _startpos__2_ in
@@ -2164,15 +2172,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2170 "parsing/parser.ml"
+# 2178 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2176 "parsing/parser.ml"
+# 2184 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2215,20 +2223,20 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 2221 "parsing/parser.ml"
+# 2229 "parsing/parser.ml"
               
             in
             let tys = 
-# 3329 "parsing/parser.mly"
+# 3349 "parsing/parser.mly"
       ( [ty] )
-# 2227 "parsing/parser.ml"
+# 2235 "parsing/parser.ml"
              in
             
-# 3293 "parsing/parser.mly"
+# 3313 "parsing/parser.mly"
         ( Ptyp_class(cid, tys) )
-# 2232 "parsing/parser.ml"
+# 2240 "parsing/parser.ml"
             
           in
           let _startpos__1_ = _startpos_ty_ in
@@ -2236,15 +2244,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2242 "parsing/parser.ml"
+# 2250 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2248 "parsing/parser.ml"
+# 2256 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2302,9 +2310,9 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 2308 "parsing/parser.ml"
+# 2316 "parsing/parser.ml"
               
             in
             let tys =
@@ -2312,24 +2320,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2316 "parsing/parser.ml"
+# 2324 "parsing/parser.ml"
                  in
                 
-# 979 "parsing/parser.mly"
+# 987 "parsing/parser.mly"
     ( xs )
-# 2321 "parsing/parser.ml"
+# 2329 "parsing/parser.ml"
                 
               in
               
-# 3331 "parsing/parser.mly"
+# 3351 "parsing/parser.mly"
       ( tys )
-# 2327 "parsing/parser.ml"
+# 2335 "parsing/parser.ml"
               
             in
             
-# 3293 "parsing/parser.mly"
+# 3313 "parsing/parser.mly"
         ( Ptyp_class(cid, tys) )
-# 2333 "parsing/parser.ml"
+# 2341 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -2337,15 +2345,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2343 "parsing/parser.ml"
+# 2351 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2349 "parsing/parser.ml"
+# 2357 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2383,24 +2391,24 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3296 "parsing/parser.mly"
+# 3316 "parsing/parser.mly"
         ( Ptyp_variant([_2], Closed, None) )
-# 2389 "parsing/parser.ml"
+# 2397 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2398 "parsing/parser.ml"
+# 2406 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2404 "parsing/parser.ml"
+# 2412 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2450,24 +2458,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2454 "parsing/parser.ml"
+# 2462 "parsing/parser.ml"
                  in
                 
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 2459 "parsing/parser.ml"
+# 2467 "parsing/parser.ml"
                 
               in
               
-# 3341 "parsing/parser.mly"
+# 3361 "parsing/parser.mly"
     ( _1 )
-# 2465 "parsing/parser.ml"
+# 2473 "parsing/parser.ml"
               
             in
             
-# 3298 "parsing/parser.mly"
+# 3318 "parsing/parser.mly"
         ( Ptyp_variant(_3, Closed, None) )
-# 2471 "parsing/parser.ml"
+# 2479 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -2475,15 +2483,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2481 "parsing/parser.ml"
+# 2489 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2487 "parsing/parser.ml"
+# 2495 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2540,24 +2548,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2544 "parsing/parser.ml"
+# 2552 "parsing/parser.ml"
                  in
                 
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 2549 "parsing/parser.ml"
+# 2557 "parsing/parser.ml"
                 
               in
               
-# 3341 "parsing/parser.mly"
+# 3361 "parsing/parser.mly"
     ( _1 )
-# 2555 "parsing/parser.ml"
+# 2563 "parsing/parser.ml"
               
             in
             
-# 3300 "parsing/parser.mly"
+# 3320 "parsing/parser.mly"
         ( Ptyp_variant(_2 :: _4, Closed, None) )
-# 2561 "parsing/parser.ml"
+# 2569 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -2565,15 +2573,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2571 "parsing/parser.ml"
+# 2579 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2577 "parsing/parser.ml"
+# 2585 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2623,24 +2631,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2627 "parsing/parser.ml"
+# 2635 "parsing/parser.ml"
                  in
                 
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 2632 "parsing/parser.ml"
+# 2640 "parsing/parser.ml"
                 
               in
               
-# 3341 "parsing/parser.mly"
+# 3361 "parsing/parser.mly"
     ( _1 )
-# 2638 "parsing/parser.ml"
+# 2646 "parsing/parser.ml"
               
             in
             
-# 3302 "parsing/parser.mly"
+# 3322 "parsing/parser.mly"
         ( Ptyp_variant(_3, Open, None) )
-# 2644 "parsing/parser.ml"
+# 2652 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -2648,15 +2656,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2654 "parsing/parser.ml"
+# 2662 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2660 "parsing/parser.ml"
+# 2668 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2687,24 +2695,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3304 "parsing/parser.mly"
+# 3324 "parsing/parser.mly"
         ( Ptyp_variant([], Open, None) )
-# 2693 "parsing/parser.ml"
+# 2701 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2702 "parsing/parser.ml"
+# 2710 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2708 "parsing/parser.ml"
+# 2716 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2754,24 +2762,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2758 "parsing/parser.ml"
+# 2766 "parsing/parser.ml"
                  in
                 
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 2763 "parsing/parser.ml"
+# 2771 "parsing/parser.ml"
                 
               in
               
-# 3341 "parsing/parser.mly"
+# 3361 "parsing/parser.mly"
     ( _1 )
-# 2769 "parsing/parser.ml"
+# 2777 "parsing/parser.ml"
               
             in
             
-# 3306 "parsing/parser.mly"
+# 3326 "parsing/parser.mly"
         ( Ptyp_variant(_3, Closed, Some []) )
-# 2775 "parsing/parser.ml"
+# 2783 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -2779,15 +2787,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2785 "parsing/parser.ml"
+# 2793 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2791 "parsing/parser.ml"
+# 2799 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2852,18 +2860,18 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2856 "parsing/parser.ml"
+# 2864 "parsing/parser.ml"
                  in
                 
-# 919 "parsing/parser.mly"
+# 927 "parsing/parser.mly"
     ( xs )
-# 2861 "parsing/parser.ml"
+# 2869 "parsing/parser.ml"
                 
               in
               
-# 3369 "parsing/parser.mly"
+# 3389 "parsing/parser.mly"
     ( _1 )
-# 2867 "parsing/parser.ml"
+# 2875 "parsing/parser.ml"
               
             in
             let _3 =
@@ -2871,24 +2879,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 2875 "parsing/parser.ml"
+# 2883 "parsing/parser.ml"
                  in
                 
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 2880 "parsing/parser.ml"
+# 2888 "parsing/parser.ml"
                 
               in
               
-# 3341 "parsing/parser.mly"
+# 3361 "parsing/parser.mly"
     ( _1 )
-# 2886 "parsing/parser.ml"
+# 2894 "parsing/parser.ml"
               
             in
             
-# 3308 "parsing/parser.mly"
+# 3328 "parsing/parser.mly"
         ( Ptyp_variant(_3, Closed, Some _5) )
-# 2892 "parsing/parser.ml"
+# 2900 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__6_ in
@@ -2896,15 +2904,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2902 "parsing/parser.ml"
+# 2910 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2908 "parsing/parser.ml"
+# 2916 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2928,23 +2936,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 3310 "parsing/parser.mly"
+# 3330 "parsing/parser.mly"
         ( Ptyp_extension _1 )
-# 2934 "parsing/parser.ml"
+# 2942 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 2942 "parsing/parser.ml"
+# 2950 "parsing/parser.ml"
           
         in
         
-# 3312 "parsing/parser.mly"
+# 3332 "parsing/parser.mly"
   ( _1 )
-# 2948 "parsing/parser.ml"
+# 2956 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -2968,23 +2976,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (string Asttypes.loc) = let _1 =
           let _1 = 
-# 3724 "parsing/parser.mly"
+# 3752 "parsing/parser.mly"
                      ( _1 )
-# 2974 "parsing/parser.ml"
+# 2982 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 847 "parsing/parser.mly"
+# 855 "parsing/parser.mly"
     ( mkloc _1 (make_loc _sloc) )
-# 2982 "parsing/parser.ml"
+# 2990 "parsing/parser.ml"
           
         in
         
-# 3726 "parsing/parser.mly"
+# 3754 "parsing/parser.mly"
     ( _1 )
-# 2988 "parsing/parser.ml"
+# 2996 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3022,24 +3030,24 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (string Asttypes.loc) = let _1 =
           let _1 = 
-# 3725 "parsing/parser.mly"
+# 3753 "parsing/parser.mly"
                                  ( _1 ^ "." ^ _3.txt )
-# 3028 "parsing/parser.ml"
+# 3036 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 847 "parsing/parser.mly"
+# 855 "parsing/parser.mly"
     ( mkloc _1 (make_loc _sloc) )
-# 3037 "parsing/parser.ml"
+# 3045 "parsing/parser.ml"
           
         in
         
-# 3726 "parsing/parser.mly"
+# 3754 "parsing/parser.mly"
     ( _1 )
-# 3043 "parsing/parser.ml"
+# 3051 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3086,9 +3094,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3730 "parsing/parser.mly"
+# 3758 "parsing/parser.mly"
     ( Attr.mk ~loc:(make_loc _sloc) _2 _3 )
-# 3092 "parsing/parser.ml"
+# 3100 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3111,9 +3119,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.class_expr) = 
-# 1768 "parsing/parser.mly"
+# 1776 "parsing/parser.mly"
       ( _1 )
-# 3117 "parsing/parser.ml"
+# 3125 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3152,18 +3160,18 @@ module Tables = struct
         let _v : (Parsetree.class_expr) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3158 "parsing/parser.ml"
+# 3166 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__3_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1770 "parsing/parser.mly"
+# 1778 "parsing/parser.mly"
       ( wrap_class_attrs ~loc:_sloc _3 _2 )
-# 3167 "parsing/parser.ml"
+# 3175 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3203,9 +3211,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1772 "parsing/parser.mly"
+# 1780 "parsing/parser.mly"
       ( class_of_let_bindings ~loc:_sloc _1 _3 )
-# 3209 "parsing/parser.ml"
+# 3217 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3268,34 +3276,34 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 3274 "parsing/parser.ml"
+# 3282 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined2_ in
         let _4 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3283 "parsing/parser.ml"
+# 3291 "parsing/parser.ml"
           
         in
         let _3 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 3289 "parsing/parser.ml"
+# 3297 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1774 "parsing/parser.mly"
+# 1782 "parsing/parser.mly"
       ( let loc = (_startpos__2_, _endpos__5_) in
         let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in
         mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) )
-# 3299 "parsing/parser.ml"
+# 3307 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3365,37 +3373,37 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 3371 "parsing/parser.ml"
+# 3379 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined3_ in
         let _4 =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3380 "parsing/parser.ml"
+# 3388 "parsing/parser.ml"
           
         in
         let _3 =
           let _1 = _1_inlined1 in
           
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 3388 "parsing/parser.ml"
+# 3396 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1774 "parsing/parser.mly"
+# 1782 "parsing/parser.mly"
       ( let loc = (_startpos__2_, _endpos__5_) in
         let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in
         mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) )
-# 3399 "parsing/parser.ml"
+# 3407 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3425,9 +3433,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.class_expr) = 
-# 1778 "parsing/parser.mly"
+# 1786 "parsing/parser.mly"
       ( Cl.attr _1 _2 )
-# 3431 "parsing/parser.ml"
+# 3439 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3462,18 +3470,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 3466 "parsing/parser.ml"
+# 3474 "parsing/parser.ml"
                in
               
-# 919 "parsing/parser.mly"
+# 927 "parsing/parser.mly"
     ( xs )
-# 3471 "parsing/parser.ml"
+# 3479 "parsing/parser.ml"
               
             in
             
-# 1781 "parsing/parser.mly"
+# 1789 "parsing/parser.mly"
         ( Pcl_apply(_1, _2) )
-# 3477 "parsing/parser.ml"
+# 3485 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_xs_ in
@@ -3481,15 +3489,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 3487 "parsing/parser.ml"
+# 3495 "parsing/parser.ml"
           
         in
         
-# 1784 "parsing/parser.mly"
+# 1792 "parsing/parser.mly"
       ( _1 )
-# 3493 "parsing/parser.ml"
+# 3501 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3513,23 +3521,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.class_expr) = let _1 =
           let _1 = 
-# 1783 "parsing/parser.mly"
+# 1791 "parsing/parser.mly"
         ( Pcl_extension _1 )
-# 3519 "parsing/parser.ml"
+# 3527 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 3527 "parsing/parser.ml"
+# 3535 "parsing/parser.ml"
           
         in
         
-# 1784 "parsing/parser.mly"
+# 1792 "parsing/parser.mly"
       ( _1 )
-# 3533 "parsing/parser.ml"
+# 3541 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3582,33 +3590,33 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _6 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3588 "parsing/parser.ml"
+# 3596 "parsing/parser.ml"
           
         in
         let _endpos__6_ = _endpos__1_inlined2_ in
         let _3 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3597 "parsing/parser.ml"
+# 3605 "parsing/parser.ml"
           
         in
         let _2 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 3603 "parsing/parser.ml"
+# 3611 "parsing/parser.ml"
          in
         let _endpos = _endpos__6_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1833 "parsing/parser.mly"
+# 1841 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs )
-# 3612 "parsing/parser.ml"
+# 3620 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3668,36 +3676,36 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _6 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3674 "parsing/parser.ml"
+# 3682 "parsing/parser.ml"
           
         in
         let _endpos__6_ = _endpos__1_inlined3_ in
         let _3 =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3683 "parsing/parser.ml"
+# 3691 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 3691 "parsing/parser.ml"
+# 3699 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__6_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1833 "parsing/parser.mly"
+# 1841 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs )
-# 3701 "parsing/parser.ml"
+# 3709 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3738,9 +3746,9 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3744 "parsing/parser.ml"
+# 3752 "parsing/parser.ml"
           
         in
         let _endpos__3_ = _endpos__1_inlined1_ in
@@ -3748,11 +3756,11 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1836 "parsing/parser.mly"
+# 1844 "parsing/parser.mly"
       ( let v, attrs = _2 in
         let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_val v) ~attrs:(attrs@_3) ~docs )
-# 3756 "parsing/parser.ml"
+# 3764 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3793,9 +3801,9 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3799 "parsing/parser.ml"
+# 3807 "parsing/parser.ml"
           
         in
         let _endpos__3_ = _endpos__1_inlined1_ in
@@ -3803,11 +3811,11 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1840 "parsing/parser.mly"
+# 1848 "parsing/parser.mly"
       ( let meth, attrs = _2 in
         let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_method meth) ~attrs:(attrs@_3) ~docs )
-# 3811 "parsing/parser.ml"
+# 3819 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3853,28 +3861,28 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _4 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3859 "parsing/parser.ml"
+# 3867 "parsing/parser.ml"
           
         in
         let _endpos__4_ = _endpos__1_inlined2_ in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3868 "parsing/parser.ml"
+# 3876 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1844 "parsing/parser.mly"
+# 1852 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_constraint _3) ~attrs:(_2@_4) ~docs )
-# 3878 "parsing/parser.ml"
+# 3886 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3920,28 +3928,28 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _4 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3926 "parsing/parser.ml"
+# 3934 "parsing/parser.ml"
           
         in
         let _endpos__4_ = _endpos__1_inlined2_ in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 3935 "parsing/parser.ml"
+# 3943 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1847 "parsing/parser.mly"
+# 1855 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_initializer _3) ~attrs:(_2@_4) ~docs )
-# 3945 "parsing/parser.ml"
+# 3953 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -3973,9 +3981,9 @@ module Tables = struct
         let _v : (Parsetree.class_field) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 3979 "parsing/parser.ml"
+# 3987 "parsing/parser.ml"
           
         in
         let _endpos__2_ = _endpos__1_inlined1_ in
@@ -3983,10 +3991,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1850 "parsing/parser.mly"
+# 1858 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkcf ~loc:_sloc (Pcf_extension _1) ~attrs:_2 ~docs )
-# 3990 "parsing/parser.ml"
+# 3998 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4010,23 +4018,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.class_field) = let _1 =
           let _1 = 
-# 1853 "parsing/parser.mly"
+# 1861 "parsing/parser.mly"
       ( Pcf_attribute _1 )
-# 4016 "parsing/parser.ml"
+# 4024 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 868 "parsing/parser.mly"
+# 876 "parsing/parser.mly"
     ( mkcf ~loc:_sloc _1 )
-# 4024 "parsing/parser.ml"
+# 4032 "parsing/parser.ml"
           
         in
         
-# 1854 "parsing/parser.mly"
+# 1862 "parsing/parser.mly"
       ( _1 )
-# 4030 "parsing/parser.ml"
+# 4038 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4056,9 +4064,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.class_expr) = 
-# 1748 "parsing/parser.mly"
+# 1756 "parsing/parser.mly"
       ( _2 )
-# 4062 "parsing/parser.ml"
+# 4070 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4103,24 +4111,24 @@ module Tables = struct
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.class_expr) = let _1 =
           let _1 = 
-# 1751 "parsing/parser.mly"
+# 1759 "parsing/parser.mly"
         ( Pcl_constraint(_4, _2) )
-# 4109 "parsing/parser.ml"
+# 4117 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__4_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 4118 "parsing/parser.ml"
+# 4126 "parsing/parser.ml"
           
         in
         
-# 1754 "parsing/parser.mly"
+# 1762 "parsing/parser.mly"
       ( _1 )
-# 4124 "parsing/parser.ml"
+# 4132 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4151,24 +4159,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.class_expr) = let _1 =
           let _1 = 
-# 1753 "parsing/parser.mly"
+# 1761 "parsing/parser.mly"
       ( let (l,o,p) = _1 in Pcl_fun(l, o, p, _2) )
-# 4157 "parsing/parser.ml"
+# 4165 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 4166 "parsing/parser.ml"
+# 4174 "parsing/parser.ml"
           
         in
         
-# 1754 "parsing/parser.mly"
+# 1762 "parsing/parser.mly"
       ( _1 )
-# 4172 "parsing/parser.ml"
+# 4180 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4206,24 +4214,24 @@ module Tables = struct
         let _endpos = _endpos_e_ in
         let _v : (Parsetree.class_expr) = let _1 =
           let _1 = 
-# 1809 "parsing/parser.mly"
+# 1817 "parsing/parser.mly"
       ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) )
-# 4212 "parsing/parser.ml"
+# 4220 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos_e_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 4221 "parsing/parser.ml"
+# 4229 "parsing/parser.ml"
           
         in
         
-# 1810 "parsing/parser.mly"
+# 1818 "parsing/parser.mly"
     ( _1 )
-# 4227 "parsing/parser.ml"
+# 4235 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4254,24 +4262,24 @@ module Tables = struct
         let _endpos = _endpos_e_ in
         let _v : (Parsetree.class_expr) = let _1 =
           let _1 = 
-# 1809 "parsing/parser.mly"
+# 1817 "parsing/parser.mly"
       ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) )
-# 4260 "parsing/parser.ml"
+# 4268 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos_e_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 4269 "parsing/parser.ml"
+# 4277 "parsing/parser.ml"
           
         in
         
-# 1810 "parsing/parser.mly"
+# 1818 "parsing/parser.mly"
     ( _1 )
-# 4275 "parsing/parser.ml"
+# 4283 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4294,9 +4302,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3535 "parsing/parser.mly"
+# 3563 "parsing/parser.mly"
                                       ( _1 )
-# 4300 "parsing/parser.ml"
+# 4308 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4336,9 +4344,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1818 "parsing/parser.mly"
+# 1826 "parsing/parser.mly"
       ( reloc_pat ~loc:_sloc _2 )
-# 4342 "parsing/parser.ml"
+# 4350 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4390,24 +4398,24 @@ module Tables = struct
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 1820 "parsing/parser.mly"
+# 1828 "parsing/parser.mly"
       ( Ppat_constraint(_2, _4) )
-# 4396 "parsing/parser.ml"
+# 4404 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__5_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 4405 "parsing/parser.ml"
+# 4413 "parsing/parser.ml"
           
         in
         
-# 1821 "parsing/parser.mly"
+# 1829 "parsing/parser.mly"
       ( _1 )
-# 4411 "parsing/parser.ml"
+# 4419 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4426,9 +4434,9 @@ module Tables = struct
         let _symbolstartpos = _endpos in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1823 "parsing/parser.mly"
+# 1831 "parsing/parser.mly"
       ( ghpat ~loc:_sloc Ppat_any )
-# 4432 "parsing/parser.ml"
+# 4440 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4465,9 +4473,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.core_type) = 
-# 1948 "parsing/parser.mly"
+# 1956 "parsing/parser.mly"
       ( _2 )
-# 4471 "parsing/parser.ml"
+# 4479 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4484,24 +4492,24 @@ module Tables = struct
         let _endpos = _startpos in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 1949 "parsing/parser.mly"
+# 1957 "parsing/parser.mly"
                       ( Ptyp_any )
-# 4490 "parsing/parser.ml"
+# 4498 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__0_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _endpos in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 4499 "parsing/parser.ml"
+# 4507 "parsing/parser.ml"
           
         in
         
-# 1950 "parsing/parser.mly"
+# 1958 "parsing/parser.mly"
       ( _1 )
-# 4505 "parsing/parser.ml"
+# 4513 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4547,28 +4555,28 @@ module Tables = struct
         let _v : (Parsetree.class_type_field) = let _4 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 4553 "parsing/parser.ml"
+# 4561 "parsing/parser.ml"
           
         in
         let _endpos__4_ = _endpos__1_inlined2_ in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 4562 "parsing/parser.ml"
+# 4570 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1958 "parsing/parser.mly"
+# 1966 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkctf ~loc:_sloc (Pctf_inherit _3) ~attrs:(_2@_4) ~docs )
-# 4572 "parsing/parser.ml"
+# 4580 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4626,9 +4634,9 @@ module Tables = struct
         let ty : (Parsetree.core_type) = Obj.magic ty in
         let _3 : unit = Obj.magic _3 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 4632 "parsing/parser.ml"
+# 4640 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let flags : (Asttypes.mutable_flag * Asttypes.virtual_flag) = Obj.magic flags in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -4639,9 +4647,9 @@ module Tables = struct
         let _v : (Parsetree.class_type_field) = let _4 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 4645 "parsing/parser.ml"
+# 4653 "parsing/parser.ml"
           
         in
         let _endpos__4_ = _endpos__1_inlined3_ in
@@ -4649,44 +4657,44 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let label =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 4655 "parsing/parser.ml"
+# 4663 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 4663 "parsing/parser.ml"
+# 4671 "parsing/parser.ml"
             
           in
           
-# 1983 "parsing/parser.mly"
+# 1991 "parsing/parser.mly"
   (
     let mut, virt = flags in
     label, mut, virt, ty
   )
-# 4672 "parsing/parser.ml"
+# 4680 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 4680 "parsing/parser.ml"
+# 4688 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1961 "parsing/parser.mly"
+# 1969 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkctf ~loc:_sloc (Pctf_val _3) ~attrs:(_2@_4) ~docs )
-# 4690 "parsing/parser.ml"
+# 4698 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4744,9 +4752,9 @@ module Tables = struct
         let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 4750 "parsing/parser.ml"
+# 4758 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _3 : (Asttypes.private_flag * Asttypes.virtual_flag) = Obj.magic _3 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -4757,53 +4765,53 @@ module Tables = struct
         let _v : (Parsetree.class_type_field) = let _7 =
           let _1 = _1_inlined4 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 4763 "parsing/parser.ml"
+# 4771 "parsing/parser.ml"
           
         in
         let _endpos__7_ = _endpos__1_inlined4_ in
         let _6 =
           let _1 = _1_inlined3 in
           
-# 3180 "parsing/parser.mly"
+# 3200 "parsing/parser.mly"
     ( _1 )
-# 4772 "parsing/parser.ml"
+# 4780 "parsing/parser.ml"
           
         in
         let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 4780 "parsing/parser.ml"
+# 4788 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 4788 "parsing/parser.ml"
+# 4796 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 4796 "parsing/parser.ml"
+# 4804 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1965 "parsing/parser.mly"
+# 1973 "parsing/parser.mly"
       ( let (p, v) = _3 in
         let docs = symbol_docs _sloc in
         mkctf ~loc:_sloc (Pctf_method (_4, p, v, _6)) ~attrs:(_2@_7) ~docs )
-# 4807 "parsing/parser.ml"
+# 4815 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4849,28 +4857,28 @@ module Tables = struct
         let _v : (Parsetree.class_type_field) = let _4 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 4855 "parsing/parser.ml"
+# 4863 "parsing/parser.ml"
           
         in
         let _endpos__4_ = _endpos__1_inlined2_ in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 4864 "parsing/parser.ml"
+# 4872 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1969 "parsing/parser.mly"
+# 1977 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkctf ~loc:_sloc (Pctf_constraint _3) ~attrs:(_2@_4) ~docs )
-# 4874 "parsing/parser.ml"
+# 4882 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4902,9 +4910,9 @@ module Tables = struct
         let _v : (Parsetree.class_type_field) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 4908 "parsing/parser.ml"
+# 4916 "parsing/parser.ml"
           
         in
         let _endpos__2_ = _endpos__1_inlined1_ in
@@ -4912,10 +4920,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1972 "parsing/parser.mly"
+# 1980 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mkctf ~loc:_sloc (Pctf_extension _1) ~attrs:_2 ~docs )
-# 4919 "parsing/parser.ml"
+# 4927 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4939,23 +4947,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.class_type_field) = let _1 =
           let _1 = 
-# 1975 "parsing/parser.mly"
+# 1983 "parsing/parser.mly"
       ( Pctf_attribute _1 )
-# 4945 "parsing/parser.ml"
+# 4953 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 866 "parsing/parser.mly"
+# 874 "parsing/parser.mly"
     ( mkctf ~loc:_sloc _1 )
-# 4953 "parsing/parser.ml"
+# 4961 "parsing/parser.ml"
           
         in
         
-# 1976 "parsing/parser.mly"
+# 1984 "parsing/parser.mly"
       ( _1 )
-# 4959 "parsing/parser.ml"
+# 4967 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -4984,42 +4992,42 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 4990 "parsing/parser.ml"
+# 4998 "parsing/parser.ml"
               
             in
             let tys =
               let tys = 
-# 1934 "parsing/parser.mly"
+# 1942 "parsing/parser.mly"
       ( [] )
-# 4997 "parsing/parser.ml"
+# 5005 "parsing/parser.ml"
                in
               
-# 1940 "parsing/parser.mly"
+# 1948 "parsing/parser.mly"
     ( tys )
-# 5002 "parsing/parser.ml"
+# 5010 "parsing/parser.ml"
               
             in
             
-# 1917 "parsing/parser.mly"
+# 1925 "parsing/parser.mly"
         ( Pcty_constr (cid, tys) )
-# 5008 "parsing/parser.ml"
+# 5016 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 864 "parsing/parser.mly"
+# 872 "parsing/parser.mly"
     ( mkcty ~loc:_sloc _1 )
-# 5017 "parsing/parser.ml"
+# 5025 "parsing/parser.ml"
           
         in
         
-# 1920 "parsing/parser.mly"
+# 1928 "parsing/parser.mly"
       ( _1 )
-# 5023 "parsing/parser.ml"
+# 5031 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5070,9 +5078,9 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 5076 "parsing/parser.ml"
+# 5084 "parsing/parser.ml"
               
             in
             let tys =
@@ -5081,30 +5089,30 @@ module Tables = struct
                   let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 5085 "parsing/parser.ml"
+# 5093 "parsing/parser.ml"
                    in
                   
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 5090 "parsing/parser.ml"
+# 5098 "parsing/parser.ml"
                   
                 in
                 
-# 1936 "parsing/parser.mly"
+# 1944 "parsing/parser.mly"
       ( params )
-# 5096 "parsing/parser.ml"
+# 5104 "parsing/parser.ml"
                 
               in
               
-# 1940 "parsing/parser.mly"
+# 1948 "parsing/parser.mly"
     ( tys )
-# 5102 "parsing/parser.ml"
+# 5110 "parsing/parser.ml"
               
             in
             
-# 1917 "parsing/parser.mly"
+# 1925 "parsing/parser.mly"
         ( Pcty_constr (cid, tys) )
-# 5108 "parsing/parser.ml"
+# 5116 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -5112,15 +5120,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 864 "parsing/parser.mly"
+# 872 "parsing/parser.mly"
     ( mkcty ~loc:_sloc _1 )
-# 5118 "parsing/parser.ml"
+# 5126 "parsing/parser.ml"
           
         in
         
-# 1920 "parsing/parser.mly"
+# 1928 "parsing/parser.mly"
       ( _1 )
-# 5124 "parsing/parser.ml"
+# 5132 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5144,23 +5152,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.class_type) = let _1 =
           let _1 = 
-# 1919 "parsing/parser.mly"
+# 1927 "parsing/parser.mly"
         ( Pcty_extension _1 )
-# 5150 "parsing/parser.ml"
+# 5158 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 864 "parsing/parser.mly"
+# 872 "parsing/parser.mly"
     ( mkcty ~loc:_sloc _1 )
-# 5158 "parsing/parser.ml"
+# 5166 "parsing/parser.ml"
           
         in
         
-# 1920 "parsing/parser.mly"
+# 1928 "parsing/parser.mly"
       ( _1 )
-# 5164 "parsing/parser.ml"
+# 5172 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5217,44 +5225,44 @@ module Tables = struct
               let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 5221 "parsing/parser.ml"
+# 5229 "parsing/parser.ml"
                in
               
-# 1954 "parsing/parser.mly"
+# 1962 "parsing/parser.mly"
     ( _1 )
-# 5226 "parsing/parser.ml"
+# 5234 "parsing/parser.ml"
               
             in
             let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
             let _endpos = _endpos__1_ in
             let _startpos = _startpos__1_ in
             
-# 812 "parsing/parser.mly"
+# 820 "parsing/parser.mly"
                                ( extra_csig _startpos _endpos _1 )
-# 5235 "parsing/parser.ml"
+# 5243 "parsing/parser.ml"
             
           in
           
-# 1944 "parsing/parser.mly"
+# 1952 "parsing/parser.mly"
       ( Csig.mk _1 _2 )
-# 5241 "parsing/parser.ml"
+# 5249 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 5249 "parsing/parser.ml"
+# 5257 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1922 "parsing/parser.mly"
+# 1930 "parsing/parser.mly"
       ( mkcty ~loc:_sloc ~attrs:_2 (Pcty_signature _3) )
-# 5258 "parsing/parser.ml"
+# 5266 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5311,43 +5319,43 @@ module Tables = struct
               let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 5315 "parsing/parser.ml"
+# 5323 "parsing/parser.ml"
                in
               
-# 1954 "parsing/parser.mly"
+# 1962 "parsing/parser.mly"
     ( _1 )
-# 5320 "parsing/parser.ml"
+# 5328 "parsing/parser.ml"
               
             in
             let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
             let _endpos = _endpos__1_ in
             let _startpos = _startpos__1_ in
             
-# 812 "parsing/parser.mly"
+# 820 "parsing/parser.mly"
                                ( extra_csig _startpos _endpos _1 )
-# 5329 "parsing/parser.ml"
+# 5337 "parsing/parser.ml"
             
           in
           
-# 1944 "parsing/parser.mly"
+# 1952 "parsing/parser.mly"
       ( Csig.mk _1 _2 )
-# 5335 "parsing/parser.ml"
+# 5343 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 5343 "parsing/parser.ml"
+# 5351 "parsing/parser.ml"
           
         in
         let _loc__4_ = (_startpos__4_, _endpos__4_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1924 "parsing/parser.mly"
+# 1932 "parsing/parser.mly"
       ( unclosed "object" _loc__1_ "end" _loc__4_ )
-# 5351 "parsing/parser.ml"
+# 5359 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5377,9 +5385,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.class_type) = 
-# 1926 "parsing/parser.mly"
+# 1934 "parsing/parser.mly"
       ( Cty.attr _1 _2 )
-# 5383 "parsing/parser.ml"
+# 5391 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5442,34 +5450,34 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 5448 "parsing/parser.ml"
+# 5456 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined2_ in
         let _4 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 5457 "parsing/parser.ml"
+# 5465 "parsing/parser.ml"
           
         in
         let _3 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 5463 "parsing/parser.ml"
+# 5471 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1928 "parsing/parser.mly"
+# 1936 "parsing/parser.mly"
       ( let loc = (_startpos__2_, _endpos__5_) in
         let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in
         mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) )
-# 5473 "parsing/parser.ml"
+# 5481 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5539,37 +5547,37 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 5545 "parsing/parser.ml"
+# 5553 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined3_ in
         let _4 =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 5554 "parsing/parser.ml"
+# 5562 "parsing/parser.ml"
           
         in
         let _3 =
           let _1 = _1_inlined1 in
           
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 5562 "parsing/parser.ml"
+# 5570 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1928 "parsing/parser.mly"
+# 1936 "parsing/parser.mly"
       ( let loc = (_startpos__2_, _endpos__5_) in
         let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in
         mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) )
-# 5573 "parsing/parser.ml"
+# 5581 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5606,9 +5614,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.class_expr) = 
-# 1788 "parsing/parser.mly"
+# 1796 "parsing/parser.mly"
       ( _2 )
-# 5612 "parsing/parser.ml"
+# 5620 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5647,9 +5655,9 @@ module Tables = struct
         let _v : (Parsetree.class_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1790 "parsing/parser.mly"
+# 1798 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__3_ )
-# 5653 "parsing/parser.ml"
+# 5661 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5678,42 +5686,42 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 5684 "parsing/parser.ml"
+# 5692 "parsing/parser.ml"
               
             in
             let tys =
               let tys = 
-# 1934 "parsing/parser.mly"
+# 1942 "parsing/parser.mly"
       ( [] )
-# 5691 "parsing/parser.ml"
+# 5699 "parsing/parser.ml"
                in
               
-# 1940 "parsing/parser.mly"
+# 1948 "parsing/parser.mly"
     ( tys )
-# 5696 "parsing/parser.ml"
+# 5704 "parsing/parser.ml"
               
             in
             
-# 1793 "parsing/parser.mly"
+# 1801 "parsing/parser.mly"
         ( Pcl_constr(cid, tys) )
-# 5702 "parsing/parser.ml"
+# 5710 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 5711 "parsing/parser.ml"
+# 5719 "parsing/parser.ml"
           
         in
         
-# 1800 "parsing/parser.mly"
+# 1808 "parsing/parser.mly"
       ( _1 )
-# 5717 "parsing/parser.ml"
+# 5725 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5764,9 +5772,9 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 5770 "parsing/parser.ml"
+# 5778 "parsing/parser.ml"
               
             in
             let tys =
@@ -5775,30 +5783,30 @@ module Tables = struct
                   let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 5779 "parsing/parser.ml"
+# 5787 "parsing/parser.ml"
                    in
                   
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 5784 "parsing/parser.ml"
+# 5792 "parsing/parser.ml"
                   
                 in
                 
-# 1936 "parsing/parser.mly"
+# 1944 "parsing/parser.mly"
       ( params )
-# 5790 "parsing/parser.ml"
+# 5798 "parsing/parser.ml"
                 
               in
               
-# 1940 "parsing/parser.mly"
+# 1948 "parsing/parser.mly"
     ( tys )
-# 5796 "parsing/parser.ml"
+# 5804 "parsing/parser.ml"
               
             in
             
-# 1793 "parsing/parser.mly"
+# 1801 "parsing/parser.mly"
         ( Pcl_constr(cid, tys) )
-# 5802 "parsing/parser.ml"
+# 5810 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -5806,15 +5814,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 5812 "parsing/parser.ml"
+# 5820 "parsing/parser.ml"
           
         in
         
-# 1800 "parsing/parser.mly"
+# 1808 "parsing/parser.mly"
       ( _1 )
-# 5818 "parsing/parser.ml"
+# 5826 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5873,43 +5881,43 @@ module Tables = struct
                   let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 5877 "parsing/parser.ml"
+# 5885 "parsing/parser.ml"
                    in
                   
-# 1827 "parsing/parser.mly"
+# 1835 "parsing/parser.mly"
     ( _1 )
-# 5882 "parsing/parser.ml"
+# 5890 "parsing/parser.ml"
                   
                 in
                 let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
                 let _endpos = _endpos__1_ in
                 let _startpos = _startpos__1_ in
                 
-# 811 "parsing/parser.mly"
+# 819 "parsing/parser.mly"
                                ( extra_cstr _startpos _endpos _1 )
-# 5891 "parsing/parser.ml"
+# 5899 "parsing/parser.ml"
                 
               in
               
-# 1814 "parsing/parser.mly"
+# 1822 "parsing/parser.mly"
        ( Cstr.mk _1 _2 )
-# 5897 "parsing/parser.ml"
+# 5905 "parsing/parser.ml"
               
             in
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 5905 "parsing/parser.ml"
+# 5913 "parsing/parser.ml"
               
             in
             let _loc__4_ = (_startpos__4_, _endpos__4_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 1795 "parsing/parser.mly"
+# 1803 "parsing/parser.mly"
         ( unclosed "object" _loc__1_ "end" _loc__4_ )
-# 5913 "parsing/parser.ml"
+# 5921 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -5917,15 +5925,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 5923 "parsing/parser.ml"
+# 5931 "parsing/parser.ml"
           
         in
         
-# 1800 "parsing/parser.mly"
+# 1808 "parsing/parser.mly"
       ( _1 )
-# 5929 "parsing/parser.ml"
+# 5937 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -5977,24 +5985,24 @@ module Tables = struct
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.class_expr) = let _1 =
           let _1 = 
-# 1797 "parsing/parser.mly"
+# 1805 "parsing/parser.mly"
         ( Pcl_constraint(_2, _4) )
-# 5983 "parsing/parser.ml"
+# 5991 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__5_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 5992 "parsing/parser.ml"
+# 6000 "parsing/parser.ml"
           
         in
         
-# 1800 "parsing/parser.mly"
+# 1808 "parsing/parser.mly"
       ( _1 )
-# 5998 "parsing/parser.ml"
+# 6006 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6049,9 +6057,9 @@ module Tables = struct
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 1799 "parsing/parser.mly"
+# 1807 "parsing/parser.mly"
         ( unclosed "(" _loc__1_ ")" _loc__5_ )
-# 6055 "parsing/parser.ml"
+# 6063 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -6059,15 +6067,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 870 "parsing/parser.mly"
+# 878 "parsing/parser.mly"
     ( mkclass ~loc:_sloc _1 )
-# 6065 "parsing/parser.ml"
+# 6073 "parsing/parser.ml"
           
         in
         
-# 1800 "parsing/parser.mly"
+# 1808 "parsing/parser.mly"
       ( _1 )
-# 6071 "parsing/parser.ml"
+# 6079 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6124,44 +6132,44 @@ module Tables = struct
               let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 6128 "parsing/parser.ml"
+# 6136 "parsing/parser.ml"
                in
               
-# 1827 "parsing/parser.mly"
+# 1835 "parsing/parser.mly"
     ( _1 )
-# 6133 "parsing/parser.ml"
+# 6141 "parsing/parser.ml"
               
             in
             let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
             let _endpos = _endpos__1_ in
             let _startpos = _startpos__1_ in
             
-# 811 "parsing/parser.mly"
+# 819 "parsing/parser.mly"
                                ( extra_cstr _startpos _endpos _1 )
-# 6142 "parsing/parser.ml"
+# 6150 "parsing/parser.ml"
             
           in
           
-# 1814 "parsing/parser.mly"
+# 1822 "parsing/parser.mly"
        ( Cstr.mk _1 _2 )
-# 6148 "parsing/parser.ml"
+# 6156 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 6156 "parsing/parser.ml"
+# 6164 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1802 "parsing/parser.mly"
+# 1810 "parsing/parser.mly"
     ( mkclass ~loc:_sloc ~attrs:_2 (Pcl_structure _3) )
-# 6165 "parsing/parser.ml"
+# 6173 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6184,9 +6192,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.class_type) = 
-# 1905 "parsing/parser.mly"
+# 1913 "parsing/parser.mly"
       ( _1 )
-# 6190 "parsing/parser.ml"
+# 6198 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6232,14 +6240,14 @@ module Tables = struct
         let _v : (Parsetree.class_type) = let _1 =
           let _1 =
             let label = 
-# 3243 "parsing/parser.mly"
+# 3263 "parsing/parser.mly"
       ( Optional label )
-# 6238 "parsing/parser.ml"
+# 6246 "parsing/parser.ml"
              in
             
-# 1911 "parsing/parser.mly"
+# 1919 "parsing/parser.mly"
         ( Pcty_arrow(label, domain, codomain) )
-# 6243 "parsing/parser.ml"
+# 6251 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in
@@ -6247,15 +6255,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 864 "parsing/parser.mly"
+# 872 "parsing/parser.mly"
     ( mkcty ~loc:_sloc _1 )
-# 6253 "parsing/parser.ml"
+# 6261 "parsing/parser.ml"
           
         in
         
-# 1912 "parsing/parser.mly"
+# 1920 "parsing/parser.mly"
       ( _1 )
-# 6259 "parsing/parser.ml"
+# 6267 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6302,9 +6310,9 @@ module Tables = struct
         let domain : (Parsetree.core_type) = Obj.magic domain in
         let _2 : unit = Obj.magic _2 in
         let label : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 6308 "parsing/parser.ml"
+# 6316 "parsing/parser.ml"
         ) = Obj.magic label in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_label_ in
@@ -6312,14 +6320,14 @@ module Tables = struct
         let _v : (Parsetree.class_type) = let _1 =
           let _1 =
             let label = 
-# 3245 "parsing/parser.mly"
+# 3265 "parsing/parser.mly"
       ( Labelled label )
-# 6318 "parsing/parser.ml"
+# 6326 "parsing/parser.ml"
              in
             
-# 1911 "parsing/parser.mly"
+# 1919 "parsing/parser.mly"
         ( Pcty_arrow(label, domain, codomain) )
-# 6323 "parsing/parser.ml"
+# 6331 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in
@@ -6327,15 +6335,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 864 "parsing/parser.mly"
+# 872 "parsing/parser.mly"
     ( mkcty ~loc:_sloc _1 )
-# 6333 "parsing/parser.ml"
+# 6341 "parsing/parser.ml"
           
         in
         
-# 1912 "parsing/parser.mly"
+# 1920 "parsing/parser.mly"
       ( _1 )
-# 6339 "parsing/parser.ml"
+# 6347 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6374,14 +6382,14 @@ module Tables = struct
         let _v : (Parsetree.class_type) = let _1 =
           let _1 =
             let label = 
-# 3247 "parsing/parser.mly"
+# 3267 "parsing/parser.mly"
       ( Nolabel )
-# 6380 "parsing/parser.ml"
+# 6388 "parsing/parser.ml"
              in
             
-# 1911 "parsing/parser.mly"
+# 1919 "parsing/parser.mly"
         ( Pcty_arrow(label, domain, codomain) )
-# 6385 "parsing/parser.ml"
+# 6393 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_domain_) in
@@ -6389,15 +6397,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 864 "parsing/parser.mly"
+# 872 "parsing/parser.mly"
     ( mkcty ~loc:_sloc _1 )
-# 6395 "parsing/parser.ml"
+# 6403 "parsing/parser.ml"
           
         in
         
-# 1912 "parsing/parser.mly"
+# 1920 "parsing/parser.mly"
       ( _1 )
-# 6401 "parsing/parser.ml"
+# 6409 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6480,9 +6488,9 @@ module Tables = struct
         let csig : (Parsetree.class_type) = Obj.magic csig in
         let _8 : unit = Obj.magic _8 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 6486 "parsing/parser.ml"
+# 6494 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let virt : (Asttypes.virtual_flag) = Obj.magic virt in
@@ -6498,9 +6506,9 @@ module Tables = struct
             let attrs2 =
               let _1 = _1_inlined3 in
               
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 6504 "parsing/parser.ml"
+# 6512 "parsing/parser.ml"
               
             in
             let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -6510,24 +6518,24 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 6516 "parsing/parser.ml"
+# 6524 "parsing/parser.ml"
               
             in
             let attrs1 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 6524 "parsing/parser.ml"
+# 6532 "parsing/parser.ml"
               
             in
             let _endpos = _endpos_attrs2_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 2050 "parsing/parser.mly"
+# 2058 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       let loc = make_loc _sloc in
@@ -6535,19 +6543,19 @@ module Tables = struct
       ext,
       Ci.mk id csig ~virt ~params ~attrs ~loc ~docs
     )
-# 6539 "parsing/parser.ml"
+# 6547 "parsing/parser.ml"
             
           in
           
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 6545 "parsing/parser.ml"
+# 6553 "parsing/parser.ml"
           
         in
         
-# 2038 "parsing/parser.mly"
+# 2046 "parsing/parser.mly"
     ( _1 )
-# 6551 "parsing/parser.ml"
+# 6559 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6570,9 +6578,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3532 "parsing/parser.mly"
+# 3560 "parsing/parser.mly"
                                            ( _1 )
-# 6576 "parsing/parser.ml"
+# 6584 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6591,17 +6599,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 637 "parsing/parser.mly"
+# 645 "parsing/parser.mly"
        (string * char option)
-# 6597 "parsing/parser.ml"
+# 6605 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.constant) = 
-# 3415 "parsing/parser.mly"
+# 3435 "parsing/parser.mly"
                  ( let (n, m) = _1 in Pconst_integer (n, m) )
-# 6605 "parsing/parser.ml"
+# 6613 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6620,17 +6628,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 596 "parsing/parser.mly"
+# 604 "parsing/parser.mly"
        (char)
-# 6626 "parsing/parser.ml"
+# 6634 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.constant) = 
-# 3416 "parsing/parser.mly"
+# 3436 "parsing/parser.mly"
                  ( Pconst_char _1 )
-# 6634 "parsing/parser.ml"
+# 6642 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6649,17 +6657,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 689 "parsing/parser.mly"
+# 697 "parsing/parser.mly"
        (string * Location.t * string option)
-# 6655 "parsing/parser.ml"
+# 6663 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.constant) = 
-# 3417 "parsing/parser.mly"
+# 3437 "parsing/parser.mly"
                  ( let (s, strloc, d) = _1 in Pconst_string (s, strloc, d) )
-# 6663 "parsing/parser.ml"
+# 6671 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6678,17 +6686,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 616 "parsing/parser.mly"
+# 624 "parsing/parser.mly"
        (string * char option)
-# 6684 "parsing/parser.ml"
+# 6692 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.constant) = 
-# 3418 "parsing/parser.mly"
+# 3438 "parsing/parser.mly"
                  ( let (f, m) = _1 in Pconst_float (f, m) )
-# 6692 "parsing/parser.ml"
+# 6700 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6718,9 +6726,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.label) = 
-# 3489 "parsing/parser.mly"
+# 3517 "parsing/parser.mly"
                                                 ( "[]" )
-# 6724 "parsing/parser.ml"
+# 6732 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6750,9 +6758,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.label) = 
-# 3490 "parsing/parser.mly"
+# 3518 "parsing/parser.mly"
                                                 ( "()" )
-# 6756 "parsing/parser.ml"
+# 6764 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6775,9 +6783,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3491 "parsing/parser.mly"
+# 3519 "parsing/parser.mly"
                                                 ( "false" )
-# 6781 "parsing/parser.ml"
+# 6789 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6800,9 +6808,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3492 "parsing/parser.mly"
+# 3520 "parsing/parser.mly"
                                                 ( "true" )
-# 6806 "parsing/parser.ml"
+# 6814 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6821,17 +6829,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 6827 "parsing/parser.ml"
+# 6835 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3495 "parsing/parser.mly"
+# 3523 "parsing/parser.mly"
                                                 ( _1 )
-# 6835 "parsing/parser.ml"
+# 6843 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6868,14 +6876,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3486 "parsing/parser.mly"
+# 3514 "parsing/parser.mly"
                                                 ( "::" )
-# 6874 "parsing/parser.ml"
+# 6882 "parsing/parser.ml"
          in
         
-# 3496 "parsing/parser.mly"
+# 3524 "parsing/parser.mly"
                                                 ( _1 )
-# 6879 "parsing/parser.ml"
+# 6887 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6898,9 +6906,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3497 "parsing/parser.mly"
+# 3525 "parsing/parser.mly"
                                                 ( _1 )
-# 6904 "parsing/parser.ml"
+# 6912 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6923,9 +6931,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3500 "parsing/parser.mly"
+# 3528 "parsing/parser.mly"
                                          ( _1 )
-# 6929 "parsing/parser.ml"
+# 6937 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -6978,15 +6986,15 @@ module Tables = struct
         let _v : (Longident.t) = let _3 =
           let (_2, _1) = (_2_inlined1, _1_inlined1) in
           
-# 3486 "parsing/parser.mly"
+# 3514 "parsing/parser.mly"
                                                 ( "::" )
-# 6984 "parsing/parser.ml"
+# 6992 "parsing/parser.ml"
           
         in
         
-# 3501 "parsing/parser.mly"
+# 3529 "parsing/parser.mly"
                                          ( Ldot(_1,_3) )
-# 6990 "parsing/parser.ml"
+# 6998 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7023,14 +7031,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = let _1 = 
-# 3486 "parsing/parser.mly"
+# 3514 "parsing/parser.mly"
                                                 ( "::" )
-# 7029 "parsing/parser.ml"
+# 7037 "parsing/parser.ml"
          in
         
-# 3502 "parsing/parser.mly"
+# 3530 "parsing/parser.mly"
                                          ( Lident _1 )
-# 7034 "parsing/parser.ml"
+# 7042 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7053,9 +7061,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3503 "parsing/parser.mly"
+# 3531 "parsing/parser.mly"
                                          ( Lident _1 )
-# 7059 "parsing/parser.ml"
+# 7067 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7092,9 +7100,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.core_type * Parsetree.core_type) = 
-# 1994 "parsing/parser.mly"
+# 2002 "parsing/parser.mly"
     ( _1, _3 )
-# 7098 "parsing/parser.ml"
+# 7106 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7119,26 +7127,26 @@ module Tables = struct
         let _v : (Parsetree.constructor_arguments) = let tys =
           let xs =
             let xs = 
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 7125 "parsing/parser.ml"
+# 7133 "parsing/parser.ml"
              in
             
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 7130 "parsing/parser.ml"
+# 7138 "parsing/parser.ml"
             
           in
           
-# 955 "parsing/parser.mly"
+# 963 "parsing/parser.mly"
     ( xs )
-# 7136 "parsing/parser.ml"
+# 7144 "parsing/parser.ml"
           
         in
         
-# 3050 "parsing/parser.mly"
+# 3070 "parsing/parser.mly"
       ( Pcstr_tuple tys )
-# 7142 "parsing/parser.ml"
+# 7150 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7177,26 +7185,26 @@ module Tables = struct
         let _v : (Parsetree.constructor_arguments) = let tys =
           let xs =
             let xs = 
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 7183 "parsing/parser.ml"
+# 7191 "parsing/parser.ml"
              in
             
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 7188 "parsing/parser.ml"
+# 7196 "parsing/parser.ml"
             
           in
           
-# 955 "parsing/parser.mly"
+# 963 "parsing/parser.mly"
     ( xs )
-# 7194 "parsing/parser.ml"
+# 7202 "parsing/parser.ml"
           
         in
         
-# 3050 "parsing/parser.mly"
+# 3070 "parsing/parser.mly"
       ( Pcstr_tuple tys )
-# 7200 "parsing/parser.ml"
+# 7208 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7233,9 +7241,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.constructor_arguments) = 
-# 3052 "parsing/parser.mly"
+# 3072 "parsing/parser.mly"
       ( Pcstr_record _2 )
-# 7239 "parsing/parser.ml"
+# 7247 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7258,9 +7266,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.constructor_declaration list) = 
-# 2971 "parsing/parser.mly"
+# 2991 "parsing/parser.mly"
       ( [] )
-# 7264 "parsing/parser.ml"
+# 7272 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7283,14 +7291,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_xs_ in
         let _v : (Parsetree.constructor_declaration list) = let cs = 
-# 1040 "parsing/parser.mly"
+# 1048 "parsing/parser.mly"
     ( List.rev xs )
-# 7289 "parsing/parser.ml"
+# 7297 "parsing/parser.ml"
          in
         
-# 2973 "parsing/parser.mly"
+# 2993 "parsing/parser.mly"
       ( cs )
-# 7294 "parsing/parser.ml"
+# 7302 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7313,14 +7321,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = let _1 = 
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 7319 "parsing/parser.ml"
+# 7327 "parsing/parser.ml"
          in
         
-# 3195 "parsing/parser.mly"
+# 3215 "parsing/parser.mly"
       ( _1 )
-# 7324 "parsing/parser.ml"
+# 7332 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7350,9 +7358,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type) = 
-# 3197 "parsing/parser.mly"
+# 3217 "parsing/parser.mly"
       ( Typ.attr _1 _2 )
-# 7356 "parsing/parser.ml"
+# 7364 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7375,9 +7383,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.direction_flag) = 
-# 3594 "parsing/parser.mly"
+# 3622 "parsing/parser.mly"
                                                 ( Upto )
-# 7381 "parsing/parser.ml"
+# 7389 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7400,9 +7408,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.direction_flag) = 
-# 3595 "parsing/parser.mly"
+# 3623 "parsing/parser.mly"
                                                 ( Downto )
-# 7406 "parsing/parser.ml"
+# 7414 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7425,9 +7433,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = 
-# 2141 "parsing/parser.mly"
+# 2155 "parsing/parser.mly"
       ( _1 )
-# 7431 "parsing/parser.ml"
+# 7439 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7505,9 +7513,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 7511 "parsing/parser.ml"
+# 7519 "parsing/parser.ml"
             
           in
           let _3 =
@@ -7515,21 +7523,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 7521 "parsing/parser.ml"
+# 7529 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 7527 "parsing/parser.ml"
+# 7535 "parsing/parser.ml"
             
           in
           
-# 2189 "parsing/parser.mly"
+# 2203 "parsing/parser.mly"
       ( Pexp_letmodule(_4, _5, _7), _3 )
-# 7533 "parsing/parser.ml"
+# 7541 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__7_ in
@@ -7537,10 +7545,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 7544 "parsing/parser.ml"
+# 7552 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7624,9 +7632,9 @@ module Tables = struct
             let _3 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 7630 "parsing/parser.ml"
+# 7638 "parsing/parser.ml"
               
             in
             let _endpos__3_ = _endpos__1_inlined1_ in
@@ -7635,19 +7643,19 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 7641 "parsing/parser.ml"
+# 7649 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__3_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 3035 "parsing/parser.mly"
+# 3055 "parsing/parser.mly"
       ( let args, res = _2 in
         Te.decl _1 ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) )
-# 7651 "parsing/parser.ml"
+# 7659 "parsing/parser.ml"
             
           in
           let _3 =
@@ -7655,21 +7663,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 7661 "parsing/parser.ml"
+# 7669 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 7667 "parsing/parser.ml"
+# 7675 "parsing/parser.ml"
             
           in
           
-# 2191 "parsing/parser.mly"
+# 2205 "parsing/parser.mly"
       ( Pexp_letexception(_4, _6), _3 )
-# 7673 "parsing/parser.ml"
+# 7681 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__6_ in
@@ -7677,10 +7685,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 7684 "parsing/parser.ml"
+# 7692 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7750,28 +7758,28 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 7756 "parsing/parser.ml"
+# 7764 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 7762 "parsing/parser.ml"
+# 7770 "parsing/parser.ml"
             
           in
           let _3 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 7768 "parsing/parser.ml"
+# 7776 "parsing/parser.ml"
            in
           
-# 2193 "parsing/parser.mly"
+# 2207 "parsing/parser.mly"
       ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in
         let od = Opn.mk _5 ~override:_3 ~loc:open_loc in
         Pexp_open(od, _7), _4 )
-# 7775 "parsing/parser.ml"
+# 7783 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__7_ in
@@ -7779,10 +7787,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 7786 "parsing/parser.ml"
+# 7794 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7859,31 +7867,31 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 7865 "parsing/parser.ml"
+# 7873 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 7871 "parsing/parser.ml"
+# 7879 "parsing/parser.ml"
             
           in
           let _3 =
             let _1 = _1_inlined1 in
             
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 7879 "parsing/parser.ml"
+# 7887 "parsing/parser.ml"
             
           in
           
-# 2193 "parsing/parser.mly"
+# 2207 "parsing/parser.mly"
       ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in
         let od = Opn.mk _5 ~override:_3 ~loc:open_loc in
         Pexp_open(od, _7), _4 )
-# 7887 "parsing/parser.ml"
+# 7895 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__7_ in
@@ -7891,10 +7899,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 7898 "parsing/parser.ml"
+# 7906 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -7943,18 +7951,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 7947 "parsing/parser.ml"
+# 7955 "parsing/parser.ml"
                in
               
-# 1012 "parsing/parser.mly"
+# 1020 "parsing/parser.mly"
     ( xs )
-# 7952 "parsing/parser.ml"
+# 7960 "parsing/parser.ml"
               
             in
             
-# 2521 "parsing/parser.mly"
+# 2541 "parsing/parser.mly"
     ( xs )
-# 7958 "parsing/parser.ml"
+# 7966 "parsing/parser.ml"
             
           in
           let _2 =
@@ -7962,21 +7970,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 7968 "parsing/parser.ml"
+# 7976 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 7974 "parsing/parser.ml"
+# 7982 "parsing/parser.ml"
             
           in
           
-# 2197 "parsing/parser.mly"
+# 2211 "parsing/parser.mly"
       ( Pexp_function _3, _2 )
-# 7980 "parsing/parser.ml"
+# 7988 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos_xs_ in
@@ -7984,10 +7992,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 7991 "parsing/parser.ml"
+# 7999 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8043,22 +8051,22 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8049 "parsing/parser.ml"
+# 8057 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8055 "parsing/parser.ml"
+# 8063 "parsing/parser.ml"
             
           in
           
-# 2199 "parsing/parser.mly"
+# 2213 "parsing/parser.mly"
       ( let (l,o,p) = _3 in
         Pexp_fun(l, o, p, _4), _2 )
-# 8062 "parsing/parser.ml"
+# 8070 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__4_ in
@@ -8066,10 +8074,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8073 "parsing/parser.ml"
+# 8081 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8142,33 +8150,33 @@ module Tables = struct
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _1 =
           let _5 = 
-# 2416 "parsing/parser.mly"
+# 2436 "parsing/parser.mly"
     ( xs )
-# 8148 "parsing/parser.ml"
+# 8156 "parsing/parser.ml"
            in
           let _2 =
             let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8157 "parsing/parser.ml"
+# 8165 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8163 "parsing/parser.ml"
+# 8171 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__7_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2202 "parsing/parser.mly"
+# 2216 "parsing/parser.mly"
       ( (mk_newtypes ~loc:_sloc _5 _7).pexp_desc, _2 )
-# 8172 "parsing/parser.ml"
+# 8180 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__7_ in
@@ -8176,10 +8184,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8183 "parsing/parser.ml"
+# 8191 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8242,18 +8250,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 8246 "parsing/parser.ml"
+# 8254 "parsing/parser.ml"
                in
               
-# 1012 "parsing/parser.mly"
+# 1020 "parsing/parser.mly"
     ( xs )
-# 8251 "parsing/parser.ml"
+# 8259 "parsing/parser.ml"
               
             in
             
-# 2521 "parsing/parser.mly"
+# 2541 "parsing/parser.mly"
     ( xs )
-# 8257 "parsing/parser.ml"
+# 8265 "parsing/parser.ml"
             
           in
           let _2 =
@@ -8261,21 +8269,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8267 "parsing/parser.ml"
+# 8275 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8273 "parsing/parser.ml"
+# 8281 "parsing/parser.ml"
             
           in
           
-# 2204 "parsing/parser.mly"
+# 2218 "parsing/parser.mly"
       ( Pexp_match(_3, _5), _2 )
-# 8279 "parsing/parser.ml"
+# 8287 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos_xs_ in
@@ -8283,10 +8291,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8290 "parsing/parser.ml"
+# 8298 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8349,18 +8357,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 8353 "parsing/parser.ml"
+# 8361 "parsing/parser.ml"
                in
               
-# 1012 "parsing/parser.mly"
+# 1020 "parsing/parser.mly"
     ( xs )
-# 8358 "parsing/parser.ml"
+# 8366 "parsing/parser.ml"
               
             in
             
-# 2521 "parsing/parser.mly"
+# 2541 "parsing/parser.mly"
     ( xs )
-# 8364 "parsing/parser.ml"
+# 8372 "parsing/parser.ml"
             
           in
           let _2 =
@@ -8368,21 +8376,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8374 "parsing/parser.ml"
+# 8382 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8380 "parsing/parser.ml"
+# 8388 "parsing/parser.ml"
             
           in
           
-# 2206 "parsing/parser.mly"
+# 2220 "parsing/parser.mly"
       ( Pexp_try(_3, _5), _2 )
-# 8386 "parsing/parser.ml"
+# 8394 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos_xs_ in
@@ -8390,10 +8398,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8397 "parsing/parser.ml"
+# 8405 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8456,21 +8464,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8462 "parsing/parser.ml"
+# 8470 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8468 "parsing/parser.ml"
+# 8476 "parsing/parser.ml"
             
           in
           
-# 2208 "parsing/parser.mly"
+# 2222 "parsing/parser.mly"
       ( syntax_error() )
-# 8474 "parsing/parser.ml"
+# 8482 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__5_ in
@@ -8478,10 +8486,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8485 "parsing/parser.ml"
+# 8493 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8558,21 +8566,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8564 "parsing/parser.ml"
+# 8572 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8570 "parsing/parser.ml"
+# 8578 "parsing/parser.ml"
             
           in
           
-# 2210 "parsing/parser.mly"
+# 2224 "parsing/parser.mly"
       ( Pexp_ifthenelse(_3, _5, Some _7), _2 )
-# 8576 "parsing/parser.ml"
+# 8584 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__7_ in
@@ -8580,10 +8588,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8587 "parsing/parser.ml"
+# 8595 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8646,21 +8654,26 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8652 "parsing/parser.ml"
+# 8660 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8658 "parsing/parser.ml"
+# 8666 "parsing/parser.ml"
             
           in
+          let _endpos = _endpos__5_ in
+          let _startpos = _startpos__1_ in
+          let _loc = (_startpos, _endpos) in
           
-# 2212 "parsing/parser.mly"
-      ( Pexp_ifthenelse(_3, _5, None), _2 )
-# 8664 "parsing/parser.ml"
+# 2226 "parsing/parser.mly"
+      ( if language_level < 3
+        then expert_exp ~loc:_loc "if"
+        else Pexp_ifthenelse(_3, _5, None), _2 )
+# 8677 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__5_ in
@@ -8668,10 +8681,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8675 "parsing/parser.ml"
+# 8688 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8741,21 +8754,26 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8747 "parsing/parser.ml"
+# 8760 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8753 "parsing/parser.ml"
+# 8766 "parsing/parser.ml"
             
           in
+          let _endpos = _endpos__6_ in
+          let _startpos = _startpos__1_ in
+          let _loc = (_startpos, _endpos) in
           
-# 2214 "parsing/parser.mly"
-      ( Pexp_while(_3, _5), _2 )
-# 8759 "parsing/parser.ml"
+# 2230 "parsing/parser.mly"
+      ( if language_level < 4
+        then expert_exp ~loc:_loc "while"
+        else Pexp_while(_3, _5), _2 )
+# 8777 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__6_ in
@@ -8763,10 +8781,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8770 "parsing/parser.ml"
+# 8788 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8864,21 +8882,26 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8870 "parsing/parser.ml"
+# 8888 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8876 "parsing/parser.ml"
+# 8894 "parsing/parser.ml"
             
           in
+          let _endpos = _endpos__10_ in
+          let _startpos = _startpos__1_ in
+          let _loc = (_startpos, _endpos) in
           
-# 2217 "parsing/parser.mly"
-      ( Pexp_for(_3, _5, _7, _6, _9), _2 )
-# 8882 "parsing/parser.ml"
+# 2235 "parsing/parser.mly"
+      ( if language_level < 4
+        then expert_exp ~loc:_loc "for"
+        else Pexp_for(_3, _5, _7, _6, _9), _2 )
+# 8905 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__10_ in
@@ -8886,10 +8909,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8893 "parsing/parser.ml"
+# 8916 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -8938,21 +8961,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 8944 "parsing/parser.ml"
+# 8967 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 8950 "parsing/parser.ml"
+# 8973 "parsing/parser.ml"
             
           in
           
-# 2219 "parsing/parser.mly"
+# 2239 "parsing/parser.mly"
       ( Pexp_assert _3, _2 )
-# 8956 "parsing/parser.ml"
+# 8979 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__3_ in
@@ -8960,10 +8983,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 8967 "parsing/parser.ml"
+# 8990 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9012,21 +9035,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 9018 "parsing/parser.ml"
+# 9041 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 9024 "parsing/parser.ml"
+# 9047 "parsing/parser.ml"
             
           in
           
-# 2221 "parsing/parser.mly"
+# 2241 "parsing/parser.mly"
       ( Pexp_lazy _3, _2 )
-# 9030 "parsing/parser.ml"
+# 9053 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__3_ in
@@ -9034,10 +9057,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 9041 "parsing/parser.ml"
+# 9064 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9102,27 +9125,27 @@ module Tables = struct
                 let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 9106 "parsing/parser.ml"
+# 9129 "parsing/parser.ml"
                  in
                 
-# 1827 "parsing/parser.mly"
+# 1835 "parsing/parser.mly"
     ( _1 )
-# 9111 "parsing/parser.ml"
+# 9134 "parsing/parser.ml"
                 
               in
               let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
               let _endpos = _endpos__1_ in
               let _startpos = _startpos__1_ in
               
-# 811 "parsing/parser.mly"
+# 819 "parsing/parser.mly"
                                ( extra_cstr _startpos _endpos _1 )
-# 9120 "parsing/parser.ml"
+# 9143 "parsing/parser.ml"
               
             in
             
-# 1814 "parsing/parser.mly"
+# 1822 "parsing/parser.mly"
        ( Cstr.mk _1 _2 )
-# 9126 "parsing/parser.ml"
+# 9149 "parsing/parser.ml"
             
           in
           let _2 =
@@ -9130,21 +9153,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 9136 "parsing/parser.ml"
+# 9159 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 9142 "parsing/parser.ml"
+# 9165 "parsing/parser.ml"
             
           in
           
-# 2223 "parsing/parser.mly"
+# 2243 "parsing/parser.mly"
       ( Pexp_object _3, _2 )
-# 9148 "parsing/parser.ml"
+# 9171 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__4_ in
@@ -9152,10 +9175,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 9159 "parsing/parser.ml"
+# 9182 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9220,27 +9243,27 @@ module Tables = struct
                 let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 9224 "parsing/parser.ml"
+# 9247 "parsing/parser.ml"
                  in
                 
-# 1827 "parsing/parser.mly"
+# 1835 "parsing/parser.mly"
     ( _1 )
-# 9229 "parsing/parser.ml"
+# 9252 "parsing/parser.ml"
                 
               in
               let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
               let _endpos = _endpos__1_ in
               let _startpos = _startpos__1_ in
               
-# 811 "parsing/parser.mly"
+# 819 "parsing/parser.mly"
                                ( extra_cstr _startpos _endpos _1 )
-# 9238 "parsing/parser.ml"
+# 9261 "parsing/parser.ml"
               
             in
             
-# 1814 "parsing/parser.mly"
+# 1822 "parsing/parser.mly"
        ( Cstr.mk _1 _2 )
-# 9244 "parsing/parser.ml"
+# 9267 "parsing/parser.ml"
             
           in
           let _2 =
@@ -9248,23 +9271,23 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 9254 "parsing/parser.ml"
+# 9277 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 9260 "parsing/parser.ml"
+# 9283 "parsing/parser.ml"
             
           in
           let _loc__4_ = (_startpos__4_, _endpos__4_) in
           let _loc__1_ = (_startpos__1_, _endpos__1_) in
           
-# 2225 "parsing/parser.mly"
+# 2245 "parsing/parser.mly"
       ( unclosed "object" _loc__1_ "end" _loc__4_ )
-# 9268 "parsing/parser.ml"
+# 9291 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__4_ in
@@ -9272,10 +9295,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2143 "parsing/parser.mly"
+# 2157 "parsing/parser.mly"
       ( let desc, attrs = _1 in
         mkexp_attrs ~loc:_sloc desc attrs )
-# 9279 "parsing/parser.ml"
+# 9302 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9310,18 +9333,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 9314 "parsing/parser.ml"
+# 9337 "parsing/parser.ml"
                in
               
-# 919 "parsing/parser.mly"
+# 927 "parsing/parser.mly"
     ( xs )
-# 9319 "parsing/parser.ml"
+# 9342 "parsing/parser.ml"
               
             in
             
-# 2229 "parsing/parser.mly"
+# 2249 "parsing/parser.mly"
       ( Pexp_apply(_1, _2) )
-# 9325 "parsing/parser.ml"
+# 9348 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_xs_ in
@@ -9329,15 +9352,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9335 "parsing/parser.ml"
+# 9358 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9341 "parsing/parser.ml"
+# 9364 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9366,24 +9389,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 9370 "parsing/parser.ml"
+# 9393 "parsing/parser.ml"
                  in
                 
-# 979 "parsing/parser.mly"
+# 987 "parsing/parser.mly"
     ( xs )
-# 9375 "parsing/parser.ml"
+# 9398 "parsing/parser.ml"
                 
               in
               
-# 2548 "parsing/parser.mly"
+# 2568 "parsing/parser.mly"
     ( es )
-# 9381 "parsing/parser.ml"
+# 9404 "parsing/parser.ml"
               
             in
             
-# 2231 "parsing/parser.mly"
+# 2251 "parsing/parser.mly"
       ( Pexp_tuple(_1) )
-# 9387 "parsing/parser.ml"
+# 9410 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in
@@ -9391,15 +9414,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9397 "parsing/parser.ml"
+# 9420 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9403 "parsing/parser.ml"
+# 9426 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9435,15 +9458,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 9441 "parsing/parser.ml"
+# 9464 "parsing/parser.ml"
               
             in
             
-# 2233 "parsing/parser.mly"
+# 2253 "parsing/parser.mly"
       ( Pexp_construct(_1, Some _2) )
-# 9447 "parsing/parser.ml"
+# 9470 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_ in
@@ -9451,15 +9474,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9457 "parsing/parser.ml"
+# 9480 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9463 "parsing/parser.ml"
+# 9486 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9490,24 +9513,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2235 "parsing/parser.mly"
+# 2255 "parsing/parser.mly"
       ( Pexp_variant(_1, Some _2) )
-# 9496 "parsing/parser.ml"
+# 9519 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9505 "parsing/parser.ml"
+# 9528 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9511 "parsing/parser.ml"
+# 9534 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9539,9 +9562,9 @@ module Tables = struct
         } = _menhir_stack in
         let e2 : (Parsetree.expression) = Obj.magic e2 in
         let op : (
-# 627 "parsing/parser.mly"
+# 635 "parsing/parser.mly"
        (string)
-# 9545 "parsing/parser.ml"
+# 9568 "parsing/parser.ml"
         ) = Obj.magic op in
         let e1 : (Parsetree.expression) = Obj.magic e1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -9550,25 +9573,36 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let op =
-              let _1 = 
-# 3459 "parsing/parser.mly"
-                  ( op )
-# 9557 "parsing/parser.ml"
-               in
+              let _1 =
+                let _endpos = _endpos_op_ in
+                let _startpos = _startpos_op_ in
+                let _loc = (_startpos, _endpos) in
+                
+# 3479 "parsing/parser.mly"
+                  ( if language_level < 4
+                    then begin match op with
+                             "==" -> infixop0 ~loc:_loc "="
+                           | "!=" -> infixop0 ~loc:_loc "<>"
+                           | _ -> op
+                         end
+                    else op )
+# 9590 "parsing/parser.ml"
+                
+              in
               let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 9566 "parsing/parser.ml"
+# 9600 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 9572 "parsing/parser.ml"
+# 9606 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -9576,15 +9610,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9582 "parsing/parser.ml"
+# 9616 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9588 "parsing/parser.ml"
+# 9622 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9616,9 +9650,9 @@ module Tables = struct
         } = _menhir_stack in
         let e2 : (Parsetree.expression) = Obj.magic e2 in
         let op : (
-# 628 "parsing/parser.mly"
+# 636 "parsing/parser.mly"
        (string)
-# 9622 "parsing/parser.ml"
+# 9656 "parsing/parser.ml"
         ) = Obj.magic op in
         let e1 : (Parsetree.expression) = Obj.magic e1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -9628,24 +9662,24 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3460 "parsing/parser.mly"
+# 3486 "parsing/parser.mly"
                   ( op )
-# 9634 "parsing/parser.ml"
+# 9668 "parsing/parser.ml"
                in
               let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 9643 "parsing/parser.ml"
+# 9677 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 9649 "parsing/parser.ml"
+# 9683 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -9653,15 +9687,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9659 "parsing/parser.ml"
+# 9693 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9665 "parsing/parser.ml"
+# 9699 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9693,9 +9727,9 @@ module Tables = struct
         } = _menhir_stack in
         let e2 : (Parsetree.expression) = Obj.magic e2 in
         let op : (
-# 629 "parsing/parser.mly"
+# 637 "parsing/parser.mly"
        (string)
-# 9699 "parsing/parser.ml"
+# 9733 "parsing/parser.ml"
         ) = Obj.magic op in
         let e1 : (Parsetree.expression) = Obj.magic e1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -9705,24 +9739,24 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3461 "parsing/parser.mly"
+# 3487 "parsing/parser.mly"
                   ( op )
-# 9711 "parsing/parser.ml"
+# 9745 "parsing/parser.ml"
                in
               let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 9720 "parsing/parser.ml"
+# 9754 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 9726 "parsing/parser.ml"
+# 9760 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -9730,15 +9764,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9736 "parsing/parser.ml"
+# 9770 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9742 "parsing/parser.ml"
+# 9776 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9770,9 +9804,9 @@ module Tables = struct
         } = _menhir_stack in
         let e2 : (Parsetree.expression) = Obj.magic e2 in
         let op : (
-# 630 "parsing/parser.mly"
+# 638 "parsing/parser.mly"
        (string)
-# 9776 "parsing/parser.ml"
+# 9810 "parsing/parser.ml"
         ) = Obj.magic op in
         let e1 : (Parsetree.expression) = Obj.magic e1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -9782,24 +9816,24 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3462 "parsing/parser.mly"
+# 3488 "parsing/parser.mly"
                   ( op )
-# 9788 "parsing/parser.ml"
+# 9822 "parsing/parser.ml"
                in
               let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 9797 "parsing/parser.ml"
+# 9831 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 9803 "parsing/parser.ml"
+# 9837 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -9807,15 +9841,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9813 "parsing/parser.ml"
+# 9847 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9819 "parsing/parser.ml"
+# 9853 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9847,9 +9881,9 @@ module Tables = struct
         } = _menhir_stack in
         let e2 : (Parsetree.expression) = Obj.magic e2 in
         let op : (
-# 631 "parsing/parser.mly"
+# 639 "parsing/parser.mly"
        (string)
-# 9853 "parsing/parser.ml"
+# 9887 "parsing/parser.ml"
         ) = Obj.magic op in
         let e1 : (Parsetree.expression) = Obj.magic e1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -9859,24 +9893,24 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3463 "parsing/parser.mly"
+# 3489 "parsing/parser.mly"
                   ( op )
-# 9865 "parsing/parser.ml"
+# 9899 "parsing/parser.ml"
                in
               let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 9874 "parsing/parser.ml"
+# 9908 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 9880 "parsing/parser.ml"
+# 9914 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -9884,15 +9918,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9890 "parsing/parser.ml"
+# 9924 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9896 "parsing/parser.ml"
+# 9930 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -9932,23 +9966,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3464 "parsing/parser.mly"
+# 3490 "parsing/parser.mly"
                    ("+")
-# 9938 "parsing/parser.ml"
+# 9972 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 9946 "parsing/parser.ml"
+# 9980 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 9952 "parsing/parser.ml"
+# 9986 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -9956,15 +9990,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 9962 "parsing/parser.ml"
+# 9996 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 9968 "parsing/parser.ml"
+# 10002 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10004,23 +10038,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3465 "parsing/parser.mly"
+# 3491 "parsing/parser.mly"
                   ("+.")
-# 10010 "parsing/parser.ml"
+# 10044 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10018 "parsing/parser.ml"
+# 10052 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10024 "parsing/parser.ml"
+# 10058 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10028,15 +10062,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10034 "parsing/parser.ml"
+# 10068 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10040 "parsing/parser.ml"
+# 10074 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10076,23 +10110,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3466 "parsing/parser.mly"
+# 3492 "parsing/parser.mly"
                   ("+=")
-# 10082 "parsing/parser.ml"
+# 10116 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10090 "parsing/parser.ml"
+# 10124 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10096 "parsing/parser.ml"
+# 10130 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10100,15 +10134,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10106 "parsing/parser.ml"
+# 10140 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10112 "parsing/parser.ml"
+# 10146 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10148,23 +10182,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3467 "parsing/parser.mly"
+# 3493 "parsing/parser.mly"
                    ("-")
-# 10154 "parsing/parser.ml"
+# 10188 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10162 "parsing/parser.ml"
+# 10196 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10168 "parsing/parser.ml"
+# 10202 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10172,15 +10206,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10178 "parsing/parser.ml"
+# 10212 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10184 "parsing/parser.ml"
+# 10218 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10220,23 +10254,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3468 "parsing/parser.mly"
+# 3494 "parsing/parser.mly"
                   ("-.")
-# 10226 "parsing/parser.ml"
+# 10260 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10234 "parsing/parser.ml"
+# 10268 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10240 "parsing/parser.ml"
+# 10274 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10244,15 +10278,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10250 "parsing/parser.ml"
+# 10284 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10256 "parsing/parser.ml"
+# 10290 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10292,23 +10326,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3469 "parsing/parser.mly"
+# 3495 "parsing/parser.mly"
                    ("*")
-# 10298 "parsing/parser.ml"
+# 10332 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10306 "parsing/parser.ml"
+# 10340 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10312 "parsing/parser.ml"
+# 10346 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10316,15 +10350,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10322 "parsing/parser.ml"
+# 10356 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10328 "parsing/parser.ml"
+# 10362 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10364,23 +10398,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3470 "parsing/parser.mly"
+# 3496 "parsing/parser.mly"
                    ("%")
-# 10370 "parsing/parser.ml"
+# 10404 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10378 "parsing/parser.ml"
+# 10412 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10384 "parsing/parser.ml"
+# 10418 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10388,15 +10422,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10394 "parsing/parser.ml"
+# 10428 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10400 "parsing/parser.ml"
+# 10434 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10436,23 +10470,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3471 "parsing/parser.mly"
+# 3497 "parsing/parser.mly"
                    ("=")
-# 10442 "parsing/parser.ml"
+# 10476 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10450 "parsing/parser.ml"
+# 10484 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10456 "parsing/parser.ml"
+# 10490 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10460,15 +10494,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10466 "parsing/parser.ml"
+# 10500 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10472 "parsing/parser.ml"
+# 10506 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10508,23 +10542,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3472 "parsing/parser.mly"
+# 3498 "parsing/parser.mly"
                    ("<")
-# 10514 "parsing/parser.ml"
+# 10548 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10522 "parsing/parser.ml"
+# 10556 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10528 "parsing/parser.ml"
+# 10562 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10532,15 +10566,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10538 "parsing/parser.ml"
+# 10572 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10544 "parsing/parser.ml"
+# 10578 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10580,23 +10614,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3473 "parsing/parser.mly"
+# 3499 "parsing/parser.mly"
                    (">")
-# 10586 "parsing/parser.ml"
+# 10620 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10594 "parsing/parser.ml"
+# 10628 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10600 "parsing/parser.ml"
+# 10634 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10604,15 +10638,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10610 "parsing/parser.ml"
+# 10644 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10616 "parsing/parser.ml"
+# 10650 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10652,23 +10686,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3474 "parsing/parser.mly"
+# 3500 "parsing/parser.mly"
                   ("or")
-# 10658 "parsing/parser.ml"
+# 10692 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10666 "parsing/parser.ml"
+# 10700 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10672 "parsing/parser.ml"
+# 10706 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10676,15 +10710,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10682 "parsing/parser.ml"
+# 10716 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10688 "parsing/parser.ml"
+# 10722 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10724,23 +10758,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3475 "parsing/parser.mly"
+# 3501 "parsing/parser.mly"
                   ("||")
-# 10730 "parsing/parser.ml"
+# 10764 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10738 "parsing/parser.ml"
+# 10772 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10744 "parsing/parser.ml"
+# 10778 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10748,15 +10782,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10754 "parsing/parser.ml"
+# 10788 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10760 "parsing/parser.ml"
+# 10794 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10796,23 +10830,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3476 "parsing/parser.mly"
+# 3502 "parsing/parser.mly"
                    ("&")
-# 10802 "parsing/parser.ml"
+# 10836 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10810 "parsing/parser.ml"
+# 10844 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10816 "parsing/parser.ml"
+# 10850 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10820,15 +10854,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10826 "parsing/parser.ml"
+# 10860 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10832 "parsing/parser.ml"
+# 10866 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10868,23 +10902,23 @@ module Tables = struct
           let _1 =
             let op =
               let _1 = 
-# 3477 "parsing/parser.mly"
+# 3503 "parsing/parser.mly"
                   ("&&")
-# 10874 "parsing/parser.ml"
+# 10908 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10882 "parsing/parser.ml"
+# 10916 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10888 "parsing/parser.ml"
+# 10922 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10892,15 +10926,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10898 "parsing/parser.ml"
+# 10932 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10904 "parsing/parser.ml"
+# 10938 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -10939,24 +10973,31 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let op =
-              let _1 = 
-# 3478 "parsing/parser.mly"
-                  (":=")
-# 10946 "parsing/parser.ml"
-               in
+              let _1 =
+                let _endpos = _endpos__1_ in
+                let _startpos = _startpos__1_ in
+                let _loc = (_startpos, _endpos) in
+                
+# 3504 "parsing/parser.mly"
+                  ( if language_level < 3
+                    then expert_exp ~loc:_loc "assign"
+                    else ":=" )
+# 10986 "parsing/parser.ml"
+                
+              in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 10954 "parsing/parser.ml"
+# 10995 "parsing/parser.ml"
               
             in
             
-# 2237 "parsing/parser.mly"
+# 2257 "parsing/parser.mly"
       ( mkinfix e1 op e2 )
-# 10960 "parsing/parser.ml"
+# 11001 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in
@@ -10964,15 +11005,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 10970 "parsing/parser.ml"
+# 11011 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 10976 "parsing/parser.ml"
+# 11017 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11005,9 +11046,9 @@ module Tables = struct
           let _1 =
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2239 "parsing/parser.mly"
+# 2259 "parsing/parser.mly"
       ( mkuminus ~oploc:_loc__1_ _1 _2 )
-# 11011 "parsing/parser.ml"
+# 11052 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_ in
@@ -11015,15 +11056,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 11021 "parsing/parser.ml"
+# 11062 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 11027 "parsing/parser.ml"
+# 11068 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11056,9 +11097,9 @@ module Tables = struct
           let _1 =
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2241 "parsing/parser.mly"
+# 2261 "parsing/parser.mly"
       ( mkuplus ~oploc:_loc__1_ _1 _2 )
-# 11062 "parsing/parser.ml"
+# 11103 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_ in
@@ -11066,15 +11107,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 11072 "parsing/parser.ml"
+# 11113 "parsing/parser.ml"
           
         in
         
-# 2146 "parsing/parser.mly"
+# 2160 "parsing/parser.mly"
       ( _1 )
-# 11078 "parsing/parser.ml"
+# 11119 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11114,9 +11155,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2148 "parsing/parser.mly"
+# 2162 "parsing/parser.mly"
       ( expr_of_let_bindings ~loc:_sloc _1 _3 )
-# 11120 "parsing/parser.ml"
+# 11161 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11156,9 +11197,9 @@ module Tables = struct
         let _3 : unit = Obj.magic _3 in
         let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in
         let _1 : (
-# 633 "parsing/parser.mly"
+# 641 "parsing/parser.mly"
        (string)
-# 11162 "parsing/parser.ml"
+# 11203 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -11168,9 +11209,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 11174 "parsing/parser.ml"
+# 11215 "parsing/parser.ml"
           
         in
         let _startpos_pbop_op_ = _startpos__1_ in
@@ -11178,13 +11219,13 @@ module Tables = struct
         let _symbolstartpos = _startpos_pbop_op_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2150 "parsing/parser.mly"
+# 2164 "parsing/parser.mly"
       ( let (pbop_pat, pbop_exp, rev_ands) = bindings in
         let ands = List.rev rev_ands in
         let pbop_loc = make_loc _sloc in
         let let_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in
         mkexp ~loc:_sloc (Pexp_letop{ let_; ands; body}) )
-# 11188 "parsing/parser.ml"
+# 11229 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11225,9 +11266,9 @@ module Tables = struct
         let _loc__2_ = (_startpos__2_, _endpos__2_) in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2156 "parsing/parser.mly"
+# 2170 "parsing/parser.mly"
       ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) )
-# 11231 "parsing/parser.ml"
+# 11272 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11260,35 +11301,35 @@ module Tables = struct
         let _3 : (Parsetree.expression) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 11266 "parsing/parser.ml"
+# 11307 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 11275 "parsing/parser.ml"
+# 11316 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 11283 "parsing/parser.ml"
+# 11324 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__3_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2158 "parsing/parser.mly"
+# 2172 "parsing/parser.mly"
       ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) )
-# 11292 "parsing/parser.ml"
+# 11333 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11344,18 +11385,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 11350 "parsing/parser.ml"
+# 11391 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2160 "parsing/parser.mly"
+# 2174 "parsing/parser.mly"
       ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) )
-# 11359 "parsing/parser.ml"
+# 11400 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11423,9 +11464,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2162 "parsing/parser.mly"
+# 2176 "parsing/parser.mly"
       ( array_set ~loc:_sloc _1 _4 _7 )
-# 11429 "parsing/parser.ml"
+# 11470 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11493,9 +11534,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2164 "parsing/parser.mly"
+# 2178 "parsing/parser.mly"
       ( string_set ~loc:_sloc _1 _4 _7 )
-# 11499 "parsing/parser.ml"
+# 11540 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11563,9 +11604,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2166 "parsing/parser.mly"
+# 2180 "parsing/parser.mly"
       ( bigarray_set ~loc:_sloc _1 _4 _7 )
-# 11569 "parsing/parser.ml"
+# 11610 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11625,26 +11666,26 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 11631 "parsing/parser.ml"
+# 11672 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 11640 "parsing/parser.ml"
+# 11681 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2168 "parsing/parser.mly"
+# 2182 "parsing/parser.mly"
       ( dotop_set ~loc:_sloc lident bracket _2 _1 _4 _7 )
-# 11648 "parsing/parser.ml"
+# 11689 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11704,26 +11745,26 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 11710 "parsing/parser.ml"
+# 11751 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 11719 "parsing/parser.ml"
+# 11760 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2170 "parsing/parser.mly"
+# 2184 "parsing/parser.mly"
       ( dotop_set ~loc:_sloc lident paren _2 _1 _4 _7 )
-# 11727 "parsing/parser.ml"
+# 11768 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11783,26 +11824,26 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 11789 "parsing/parser.ml"
+# 11830 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 11798 "parsing/parser.ml"
+# 11839 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2172 "parsing/parser.mly"
+# 2186 "parsing/parser.mly"
       ( dotop_set ~loc:_sloc lident brace _2 _1 _4 _7 )
-# 11806 "parsing/parser.ml"
+# 11847 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11874,9 +11915,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 11880 "parsing/parser.ml"
+# 11921 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -11885,17 +11926,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__9_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 11891 "parsing/parser.ml"
+# 11932 "parsing/parser.ml"
          in
         let _endpos = _endpos__9_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2175 "parsing/parser.mly"
+# 2189 "parsing/parser.mly"
       ( dotop_set ~loc:_sloc (ldot _3) bracket _4 _1 _6 _9 )
-# 11899 "parsing/parser.ml"
+# 11940 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -11967,9 +12008,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 11973 "parsing/parser.ml"
+# 12014 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -11978,17 +12019,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__9_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 11984 "parsing/parser.ml"
+# 12025 "parsing/parser.ml"
          in
         let _endpos = _endpos__9_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2178 "parsing/parser.mly"
+# 2192 "parsing/parser.mly"
       ( dotop_set ~loc:_sloc (ldot _3) paren _4 _1 _6 _9  )
-# 11992 "parsing/parser.ml"
+# 12033 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12060,9 +12101,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 12066 "parsing/parser.ml"
+# 12107 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -12071,17 +12112,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__9_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 12077 "parsing/parser.ml"
+# 12118 "parsing/parser.ml"
          in
         let _endpos = _endpos__9_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2181 "parsing/parser.mly"
+# 2195 "parsing/parser.mly"
       ( dotop_set ~loc:_sloc (ldot _3) brace _4 _1 _6 _9 )
-# 12085 "parsing/parser.ml"
+# 12126 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12111,9 +12152,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.expression) = 
-# 2183 "parsing/parser.mly"
+# 2197 "parsing/parser.mly"
       ( Exp.attr _1 _2 )
-# 12117 "parsing/parser.ml"
+# 12158 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12137,9 +12178,9 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 2185 "parsing/parser.mly"
+# 2199 "parsing/parser.mly"
      ( not_expecting _loc__1_ "wildcard \"_\"" )
-# 12143 "parsing/parser.ml"
+# 12184 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12155,9 +12196,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (string Asttypes.loc option) = 
-# 3750 "parsing/parser.mly"
+# 3778 "parsing/parser.mly"
                     ( None )
-# 12161 "parsing/parser.ml"
+# 12202 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12187,9 +12228,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (string Asttypes.loc option) = 
-# 3751 "parsing/parser.mly"
+# 3779 "parsing/parser.mly"
                     ( Some _2 )
-# 12193 "parsing/parser.ml"
+# 12234 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12233,9 +12274,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.extension) = 
-# 3761 "parsing/parser.mly"
+# 3789 "parsing/parser.mly"
                                              ( (_2, _3) )
-# 12239 "parsing/parser.ml"
+# 12280 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12254,9 +12295,9 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 691 "parsing/parser.mly"
+# 699 "parsing/parser.mly"
   (string * Location.t * string * Location.t * string option)
-# 12260 "parsing/parser.ml"
+# 12301 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -12265,9 +12306,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3763 "parsing/parser.mly"
+# 3791 "parsing/parser.mly"
     ( mk_quotedext ~loc:_sloc _1 )
-# 12271 "parsing/parser.ml"
+# 12312 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12320,9 +12361,9 @@ module Tables = struct
         let _v : (Parsetree.extension_constructor) = let attrs =
           let _1 = _1_inlined3 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 12326 "parsing/parser.ml"
+# 12367 "parsing/parser.ml"
           
         in
         let _endpos_attrs_ = _endpos__1_inlined3_ in
@@ -12332,9 +12373,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 12338 "parsing/parser.ml"
+# 12379 "parsing/parser.ml"
           
         in
         let cid =
@@ -12343,19 +12384,19 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 12349 "parsing/parser.ml"
+# 12390 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3119 "parsing/parser.mly"
+# 3139 "parsing/parser.mly"
       ( let info = symbol_info _endpos in
         Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info )
-# 12359 "parsing/parser.ml"
+# 12400 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12401,9 +12442,9 @@ module Tables = struct
         let _v : (Parsetree.extension_constructor) = let attrs =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 12407 "parsing/parser.ml"
+# 12448 "parsing/parser.ml"
           
         in
         let _endpos_attrs_ = _endpos__1_inlined2_ in
@@ -12413,9 +12454,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 12419 "parsing/parser.ml"
+# 12460 "parsing/parser.ml"
           
         in
         let cid =
@@ -12423,25 +12464,25 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 12429 "parsing/parser.ml"
+# 12470 "parsing/parser.ml"
           
         in
         let _startpos_cid_ = _startpos__1_ in
         let _1 = 
-# 3570 "parsing/parser.mly"
+# 3598 "parsing/parser.mly"
     ( () )
-# 12436 "parsing/parser.ml"
+# 12477 "parsing/parser.ml"
          in
         let _endpos = _endpos_attrs_ in
         let _symbolstartpos = _startpos_cid_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3119 "parsing/parser.mly"
+# 3139 "parsing/parser.mly"
       ( let info = symbol_info _endpos in
         Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info )
-# 12445 "parsing/parser.ml"
+# 12486 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12488,10 +12529,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3738 "parsing/parser.mly"
+# 3766 "parsing/parser.mly"
     ( mark_symbol_docs _sloc;
       Attr.mk ~loc:(make_loc _sloc) _2 _3 )
-# 12495 "parsing/parser.ml"
+# 12536 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12507,14 +12548,14 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = 
-# 1934 "parsing/parser.mly"
+# 1942 "parsing/parser.mly"
       ( [] )
-# 12513 "parsing/parser.ml"
+# 12554 "parsing/parser.ml"
          in
         
-# 1759 "parsing/parser.mly"
+# 1767 "parsing/parser.mly"
     ( params )
-# 12518 "parsing/parser.ml"
+# 12559 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12555,24 +12596,24 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 12559 "parsing/parser.ml"
+# 12600 "parsing/parser.ml"
              in
             
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 12564 "parsing/parser.ml"
+# 12605 "parsing/parser.ml"
             
           in
           
-# 1936 "parsing/parser.mly"
+# 1944 "parsing/parser.mly"
       ( params )
-# 12570 "parsing/parser.ml"
+# 12611 "parsing/parser.ml"
           
         in
         
-# 1759 "parsing/parser.mly"
+# 1767 "parsing/parser.mly"
     ( params )
-# 12576 "parsing/parser.ml"
+# 12617 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12595,9 +12636,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = 
-# 2507 "parsing/parser.mly"
+# 2527 "parsing/parser.mly"
       ( _1 )
-# 12601 "parsing/parser.ml"
+# 12642 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12637,9 +12678,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2509 "parsing/parser.mly"
+# 2529 "parsing/parser.mly"
       ( mkexp_constraint ~loc:_sloc _3 _1 )
-# 12643 "parsing/parser.ml"
+# 12684 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12669,9 +12710,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.expression) = 
-# 2533 "parsing/parser.mly"
+# 2553 "parsing/parser.mly"
       ( _2 )
-# 12675 "parsing/parser.ml"
+# 12716 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12716,24 +12757,24 @@ module Tables = struct
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2535 "parsing/parser.mly"
+# 2555 "parsing/parser.mly"
       ( Pexp_constraint (_4, _2) )
-# 12722 "parsing/parser.ml"
+# 12763 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__4_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 12731 "parsing/parser.ml"
+# 12772 "parsing/parser.ml"
           
         in
         
-# 2536 "parsing/parser.mly"
+# 2556 "parsing/parser.mly"
       ( _1 )
-# 12737 "parsing/parser.ml"
+# 12778 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12766,12 +12807,12 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2539 "parsing/parser.mly"
+# 2559 "parsing/parser.mly"
       (
        let (l,o,p) = _1 in
        ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2))
       )
-# 12775 "parsing/parser.ml"
+# 12816 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12822,17 +12863,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _3 = 
-# 2416 "parsing/parser.mly"
+# 2436 "parsing/parser.mly"
     ( xs )
-# 12828 "parsing/parser.ml"
+# 12869 "parsing/parser.ml"
          in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2544 "parsing/parser.mly"
+# 2564 "parsing/parser.mly"
       ( mk_newtypes ~loc:_sloc _3 _5 )
-# 12836 "parsing/parser.ml"
+# 12877 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12855,9 +12896,9 @@ module Tables = struct
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : (Parsetree.core_type) = 
-# 3231 "parsing/parser.mly"
+# 3251 "parsing/parser.mly"
       ( ty )
-# 12861 "parsing/parser.ml"
+# 12902 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12903,19 +12944,19 @@ module Tables = struct
         let _v : (Parsetree.core_type) = let _1 =
           let _1 =
             let domain = 
-# 815 "parsing/parser.mly"
+# 823 "parsing/parser.mly"
                               ( extra_rhs_core_type _1 ~pos:_endpos__1_ )
-# 12909 "parsing/parser.ml"
+# 12950 "parsing/parser.ml"
              in
             let label = 
-# 3243 "parsing/parser.mly"
+# 3263 "parsing/parser.mly"
       ( Optional label )
-# 12914 "parsing/parser.ml"
+# 12955 "parsing/parser.ml"
              in
             
-# 3237 "parsing/parser.mly"
+# 3257 "parsing/parser.mly"
         ( Ptyp_arrow(label, domain, codomain) )
-# 12919 "parsing/parser.ml"
+# 12960 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in
@@ -12923,15 +12964,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 12929 "parsing/parser.ml"
+# 12970 "parsing/parser.ml"
           
         in
         
-# 3239 "parsing/parser.mly"
+# 3259 "parsing/parser.mly"
     ( _1 )
-# 12935 "parsing/parser.ml"
+# 12976 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -12978,9 +13019,9 @@ module Tables = struct
         let _1 : (Parsetree.core_type) = Obj.magic _1 in
         let _2 : unit = Obj.magic _2 in
         let label : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 12984 "parsing/parser.ml"
+# 13025 "parsing/parser.ml"
         ) = Obj.magic label in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_label_ in
@@ -12988,19 +13029,19 @@ module Tables = struct
         let _v : (Parsetree.core_type) = let _1 =
           let _1 =
             let domain = 
-# 815 "parsing/parser.mly"
+# 823 "parsing/parser.mly"
                               ( extra_rhs_core_type _1 ~pos:_endpos__1_ )
-# 12994 "parsing/parser.ml"
+# 13035 "parsing/parser.ml"
              in
             let label = 
-# 3245 "parsing/parser.mly"
+# 3265 "parsing/parser.mly"
       ( Labelled label )
-# 12999 "parsing/parser.ml"
+# 13040 "parsing/parser.ml"
              in
             
-# 3237 "parsing/parser.mly"
+# 3257 "parsing/parser.mly"
         ( Ptyp_arrow(label, domain, codomain) )
-# 13004 "parsing/parser.ml"
+# 13045 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in
@@ -13008,15 +13049,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 13014 "parsing/parser.ml"
+# 13055 "parsing/parser.ml"
           
         in
         
-# 3239 "parsing/parser.mly"
+# 3259 "parsing/parser.mly"
     ( _1 )
-# 13020 "parsing/parser.ml"
+# 13061 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13055,19 +13096,19 @@ module Tables = struct
         let _v : (Parsetree.core_type) = let _1 =
           let _1 =
             let domain = 
-# 815 "parsing/parser.mly"
+# 823 "parsing/parser.mly"
                               ( extra_rhs_core_type _1 ~pos:_endpos__1_ )
-# 13061 "parsing/parser.ml"
+# 13102 "parsing/parser.ml"
              in
             let label = 
-# 3247 "parsing/parser.mly"
+# 3267 "parsing/parser.mly"
       ( Nolabel )
-# 13066 "parsing/parser.ml"
+# 13107 "parsing/parser.ml"
              in
             
-# 3237 "parsing/parser.mly"
+# 3257 "parsing/parser.mly"
         ( Ptyp_arrow(label, domain, codomain) )
-# 13071 "parsing/parser.ml"
+# 13112 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_codomain_ in
@@ -13075,15 +13116,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 13081 "parsing/parser.ml"
+# 13122 "parsing/parser.ml"
           
         in
         
-# 3239 "parsing/parser.mly"
+# 3259 "parsing/parser.mly"
     ( _1 )
-# 13087 "parsing/parser.ml"
+# 13128 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13114,9 +13155,9 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in
         
-# 1190 "parsing/parser.mly"
+# 1198 "parsing/parser.mly"
       ( _startpos, Unit )
-# 13120 "parsing/parser.ml"
+# 13161 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13172,16 +13213,16 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 13178 "parsing/parser.ml"
+# 13219 "parsing/parser.ml"
           
         in
         let _startpos = _startpos__1_ in
         
-# 1193 "parsing/parser.mly"
+# 1201 "parsing/parser.mly"
       ( _startpos, Named (x, mty) )
-# 13185 "parsing/parser.ml"
+# 13226 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13197,9 +13238,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = 
-# 3039 "parsing/parser.mly"
+# 3059 "parsing/parser.mly"
                                   ( (Pcstr_tuple [],None) )
-# 13203 "parsing/parser.ml"
+# 13244 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13229,9 +13270,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = 
-# 3040 "parsing/parser.mly"
+# 3060 "parsing/parser.mly"
                                   ( (_2,None) )
-# 13235 "parsing/parser.ml"
+# 13276 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13275,9 +13316,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = 
-# 3042 "parsing/parser.mly"
+# 3062 "parsing/parser.mly"
                                   ( (_2,Some _4) )
-# 13281 "parsing/parser.ml"
+# 13322 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13307,9 +13348,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = 
-# 3044 "parsing/parser.mly"
+# 3064 "parsing/parser.mly"
                                   ( (Pcstr_tuple [],Some _2) )
-# 13313 "parsing/parser.ml"
+# 13354 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13357,9 +13398,9 @@ module Tables = struct
   Docstrings.info) = let attrs =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 13363 "parsing/parser.ml"
+# 13404 "parsing/parser.ml"
           
         in
         let _endpos_attrs_ = _endpos__1_inlined2_ in
@@ -13369,23 +13410,23 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 13375 "parsing/parser.ml"
+# 13416 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2987 "parsing/parser.mly"
+# 3007 "parsing/parser.mly"
     (
       let args, res = args_res in
       let info = symbol_info _endpos in
       let loc = make_loc _sloc in
       cid, args, res, attrs, loc, info
     )
-# 13389 "parsing/parser.ml"
+# 13430 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13426,9 +13467,9 @@ module Tables = struct
   Docstrings.info) = let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 13432 "parsing/parser.ml"
+# 13473 "parsing/parser.ml"
           
         in
         let _endpos_attrs_ = _endpos__1_inlined1_ in
@@ -13437,29 +13478,29 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 13443 "parsing/parser.ml"
+# 13484 "parsing/parser.ml"
           
         in
         let _startpos_cid_ = _startpos__1_ in
         let _1 = 
-# 3570 "parsing/parser.mly"
+# 3598 "parsing/parser.mly"
     ( () )
-# 13450 "parsing/parser.ml"
+# 13491 "parsing/parser.ml"
          in
         let _endpos = _endpos_attrs_ in
         let _symbolstartpos = _startpos_cid_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2987 "parsing/parser.mly"
+# 3007 "parsing/parser.mly"
     (
       let args, res = args_res in
       let info = symbol_info _endpos in
       let loc = make_loc _sloc in
       cid, args, res, attrs, loc, info
     )
-# 13463 "parsing/parser.ml"
+# 13504 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13530,9 +13571,9 @@ module Tables = struct
         let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in
         let _1_inlined3 : unit = Obj.magic _1_inlined3 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 13536 "parsing/parser.ml"
+# 13577 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -13545,9 +13586,9 @@ module Tables = struct
   Parsetree.type_declaration) = let attrs2 =
           let _1 = _1_inlined4 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 13551 "parsing/parser.ml"
+# 13592 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined4_ in
@@ -13556,26 +13597,26 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 13560 "parsing/parser.ml"
+# 13601 "parsing/parser.ml"
              in
             
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 13565 "parsing/parser.ml"
+# 13606 "parsing/parser.ml"
             
           in
           
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 13571 "parsing/parser.ml"
+# 13612 "parsing/parser.ml"
           
         in
         let kind_priv_manifest =
           let _1 = _1_inlined3 in
           
-# 2927 "parsing/parser.mly"
+# 2947 "parsing/parser.mly"
       ( _2 )
-# 13579 "parsing/parser.ml"
+# 13620 "parsing/parser.ml"
           
         in
         let id =
@@ -13584,29 +13625,29 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 13590 "parsing/parser.ml"
+# 13631 "parsing/parser.ml"
           
         in
         let flag = 
-# 3590 "parsing/parser.mly"
+# 3618 "parsing/parser.mly"
                 ( Recursive )
-# 13596 "parsing/parser.ml"
+# 13637 "parsing/parser.ml"
          in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 13603 "parsing/parser.ml"
+# 13644 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2864 "parsing/parser.mly"
+# 2884 "parsing/parser.mly"
     (
       let (kind, priv, manifest) = kind_priv_manifest in
       let docs = symbol_docs _sloc in
@@ -13615,7 +13656,7 @@ module Tables = struct
       (flag, ext),
       Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs
     )
-# 13619 "parsing/parser.ml"
+# 13660 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13692,9 +13733,9 @@ module Tables = struct
         let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in
         let _1_inlined4 : unit = Obj.magic _1_inlined4 in
         let _1_inlined3 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 13698 "parsing/parser.ml"
+# 13739 "parsing/parser.ml"
         ) = Obj.magic _1_inlined3 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let _1_inlined2 : unit = Obj.magic _1_inlined2 in
@@ -13708,9 +13749,9 @@ module Tables = struct
   Parsetree.type_declaration) = let attrs2 =
           let _1 = _1_inlined5 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 13714 "parsing/parser.ml"
+# 13755 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined5_ in
@@ -13719,26 +13760,26 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 13723 "parsing/parser.ml"
+# 13764 "parsing/parser.ml"
              in
             
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 13728 "parsing/parser.ml"
+# 13769 "parsing/parser.ml"
             
           in
           
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 13734 "parsing/parser.ml"
+# 13775 "parsing/parser.ml"
           
         in
         let kind_priv_manifest =
           let _1 = _1_inlined4 in
           
-# 2927 "parsing/parser.mly"
+# 2947 "parsing/parser.mly"
       ( _2 )
-# 13742 "parsing/parser.ml"
+# 13783 "parsing/parser.ml"
           
         in
         let id =
@@ -13747,9 +13788,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 13753 "parsing/parser.ml"
+# 13794 "parsing/parser.ml"
           
         in
         let flag =
@@ -13758,24 +13799,24 @@ module Tables = struct
           let _startpos = _startpos__1_ in
           let _loc = (_startpos, _endpos) in
           
-# 3591 "parsing/parser.mly"
+# 3619 "parsing/parser.mly"
                 ( not_expecting _loc "nonrec flag" )
-# 13764 "parsing/parser.ml"
+# 13805 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 13772 "parsing/parser.ml"
+# 13813 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2864 "parsing/parser.mly"
+# 2884 "parsing/parser.mly"
     (
       let (kind, priv, manifest) = kind_priv_manifest in
       let docs = symbol_docs _sloc in
@@ -13784,7 +13825,7 @@ module Tables = struct
       (flag, ext),
       Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs
     )
-# 13788 "parsing/parser.ml"
+# 13829 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13848,9 +13889,9 @@ module Tables = struct
         let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in
         let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 13854 "parsing/parser.ml"
+# 13895 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -13863,9 +13904,9 @@ module Tables = struct
   Parsetree.type_declaration) = let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 13869 "parsing/parser.ml"
+# 13910 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -13874,18 +13915,18 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 13878 "parsing/parser.ml"
+# 13919 "parsing/parser.ml"
              in
             
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 13883 "parsing/parser.ml"
+# 13924 "parsing/parser.ml"
             
           in
           
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 13889 "parsing/parser.ml"
+# 13930 "parsing/parser.ml"
           
         in
         let id =
@@ -13894,29 +13935,29 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 13900 "parsing/parser.ml"
+# 13941 "parsing/parser.ml"
           
         in
         let flag = 
-# 3586 "parsing/parser.mly"
+# 3614 "parsing/parser.mly"
                                                 ( Recursive )
-# 13906 "parsing/parser.ml"
+# 13947 "parsing/parser.ml"
          in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 13913 "parsing/parser.ml"
+# 13954 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2864 "parsing/parser.mly"
+# 2884 "parsing/parser.mly"
     (
       let (kind, priv, manifest) = kind_priv_manifest in
       let docs = symbol_docs _sloc in
@@ -13925,7 +13966,7 @@ module Tables = struct
       (flag, ext),
       Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs
     )
-# 13929 "parsing/parser.ml"
+# 13970 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -13995,9 +14036,9 @@ module Tables = struct
         let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in
         let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in
         let _1_inlined3 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14001 "parsing/parser.ml"
+# 14042 "parsing/parser.ml"
         ) = Obj.magic _1_inlined3 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let _1_inlined2 : unit = Obj.magic _1_inlined2 in
@@ -14011,9 +14052,9 @@ module Tables = struct
   Parsetree.type_declaration) = let attrs2 =
           let _1 = _1_inlined4 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 14017 "parsing/parser.ml"
+# 14058 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined4_ in
@@ -14022,18 +14063,18 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 14026 "parsing/parser.ml"
+# 14067 "parsing/parser.ml"
              in
             
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 14031 "parsing/parser.ml"
+# 14072 "parsing/parser.ml"
             
           in
           
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 14037 "parsing/parser.ml"
+# 14078 "parsing/parser.ml"
           
         in
         let id =
@@ -14042,32 +14083,32 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 14048 "parsing/parser.ml"
+# 14089 "parsing/parser.ml"
           
         in
         let flag =
           let _1 = _1_inlined2 in
           
-# 3587 "parsing/parser.mly"
+# 3615 "parsing/parser.mly"
                                                 ( Nonrecursive )
-# 14056 "parsing/parser.ml"
+# 14097 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 14064 "parsing/parser.ml"
+# 14105 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2864 "parsing/parser.mly"
+# 2884 "parsing/parser.mly"
     (
       let (kind, priv, manifest) = kind_priv_manifest in
       let docs = symbol_docs _sloc in
@@ -14076,7 +14117,7 @@ module Tables = struct
       (flag, ext),
       Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs
     )
-# 14080 "parsing/parser.ml"
+# 14121 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14095,17 +14136,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 14101 "parsing/parser.ml"
+# 14142 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3431 "parsing/parser.mly"
+# 3451 "parsing/parser.mly"
                               ( _1 )
-# 14109 "parsing/parser.ml"
+# 14150 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14124,17 +14165,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14130 "parsing/parser.ml"
+# 14171 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3432 "parsing/parser.mly"
+# 3452 "parsing/parser.mly"
                               ( _1 )
-# 14138 "parsing/parser.ml"
+# 14179 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14164,13 +14205,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 781 "parsing/parser.mly"
+# 789 "parsing/parser.mly"
       (Parsetree.structure)
-# 14170 "parsing/parser.ml"
+# 14211 "parsing/parser.ml"
         ) = 
-# 1072 "parsing/parser.mly"
+# 1080 "parsing/parser.mly"
     ( _1 )
-# 14174 "parsing/parser.ml"
+# 14215 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14186,9 +14227,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (string) = 
-# 3481 "parsing/parser.mly"
+# 3509 "parsing/parser.mly"
   ( "" )
-# 14192 "parsing/parser.ml"
+# 14233 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14218,9 +14259,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (string) = 
-# 3482 "parsing/parser.mly"
+# 3510 "parsing/parser.mly"
               ( ";.." )
-# 14224 "parsing/parser.ml"
+# 14265 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14250,13 +14291,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 783 "parsing/parser.mly"
+# 791 "parsing/parser.mly"
       (Parsetree.signature)
-# 14256 "parsing/parser.ml"
+# 14297 "parsing/parser.ml"
         ) = 
-# 1078 "parsing/parser.mly"
+# 1086 "parsing/parser.mly"
     ( _1 )
-# 14260 "parsing/parser.ml"
+# 14301 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14300,9 +14341,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.extension) = 
-# 3766 "parsing/parser.mly"
+# 3794 "parsing/parser.mly"
                                                     ( (_2, _3) )
-# 14306 "parsing/parser.ml"
+# 14347 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14321,9 +14362,9 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 693 "parsing/parser.mly"
+# 701 "parsing/parser.mly"
   (string * Location.t * string * Location.t * string option)
-# 14327 "parsing/parser.ml"
+# 14368 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -14332,9 +14373,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3768 "parsing/parser.mly"
+# 3796 "parsing/parser.mly"
     ( mk_quotedext ~loc:_sloc _1 )
-# 14338 "parsing/parser.ml"
+# 14379 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14380,9 +14421,9 @@ module Tables = struct
         let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in
         let _3 : unit = Obj.magic _3 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14386 "parsing/parser.ml"
+# 14427 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -14391,34 +14432,34 @@ module Tables = struct
         let _v : (Parsetree.label_declaration) = let _5 =
           let _1 = _1_inlined3 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 14397 "parsing/parser.ml"
+# 14438 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined3_ in
         let _4 =
           let _1 = _1_inlined2 in
           
-# 3184 "parsing/parser.mly"
+# 3204 "parsing/parser.mly"
     ( _1 )
-# 14406 "parsing/parser.ml"
+# 14447 "parsing/parser.ml"
           
         in
         let _2 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 14414 "parsing/parser.ml"
+# 14455 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 14422 "parsing/parser.ml"
+# 14463 "parsing/parser.ml"
           
         in
         let _startpos__2_ = _startpos__1_inlined1_ in
@@ -14429,10 +14470,10 @@ module Tables = struct
           _startpos__2_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3061 "parsing/parser.mly"
+# 3081 "parsing/parser.mly"
       ( let info = symbol_info _endpos in
         Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info )
-# 14436 "parsing/parser.ml"
+# 14477 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14492,9 +14533,9 @@ module Tables = struct
         let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in
         let _3 : unit = Obj.magic _3 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14498 "parsing/parser.ml"
+# 14539 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -14503,43 +14544,43 @@ module Tables = struct
         let _v : (Parsetree.label_declaration) = let _7 =
           let _1 = _1_inlined4 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 14509 "parsing/parser.ml"
+# 14550 "parsing/parser.ml"
           
         in
         let _endpos__7_ = _endpos__1_inlined4_ in
         let _5 =
           let _1 = _1_inlined3 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 14518 "parsing/parser.ml"
+# 14559 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined3_ in
         let _4 =
           let _1 = _1_inlined2 in
           
-# 3184 "parsing/parser.mly"
+# 3204 "parsing/parser.mly"
     ( _1 )
-# 14527 "parsing/parser.ml"
+# 14568 "parsing/parser.ml"
           
         in
         let _2 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 14535 "parsing/parser.ml"
+# 14576 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 14543 "parsing/parser.ml"
+# 14584 "parsing/parser.ml"
           
         in
         let _startpos__2_ = _startpos__1_inlined1_ in
@@ -14550,14 +14591,14 @@ module Tables = struct
           _startpos__2_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3066 "parsing/parser.mly"
+# 3086 "parsing/parser.mly"
       ( let info =
           match rhs_info _endpos__5_ with
           | Some _ as info_before_semi -> info_before_semi
           | None -> symbol_info _endpos
        in
        Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info )
-# 14561 "parsing/parser.ml"
+# 14602 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14580,9 +14621,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.label_declaration list) = 
-# 3055 "parsing/parser.mly"
+# 3075 "parsing/parser.mly"
                                                 ( [_1] )
-# 14586 "parsing/parser.ml"
+# 14627 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14605,9 +14646,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.label_declaration list) = 
-# 3056 "parsing/parser.mly"
+# 3076 "parsing/parser.mly"
                                                 ( [_1] )
-# 14611 "parsing/parser.ml"
+# 14652 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14637,9 +14678,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.label_declaration list) = 
-# 3057 "parsing/parser.mly"
+# 3077 "parsing/parser.mly"
                                                 ( _1 :: _2 )
-# 14643 "parsing/parser.ml"
+# 14684 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14658,9 +14699,9 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14664 "parsing/parser.ml"
+# 14705 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -14671,24 +14712,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 14677 "parsing/parser.ml"
+# 14718 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2129 "parsing/parser.mly"
+# 2143 "parsing/parser.mly"
       ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) )
-# 14686 "parsing/parser.ml"
+# 14727 "parsing/parser.ml"
           
         in
         
-# 2121 "parsing/parser.mly"
+# 2135 "parsing/parser.mly"
       ( x )
-# 14692 "parsing/parser.ml"
+# 14733 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14721,9 +14762,9 @@ module Tables = struct
         let cty : (Parsetree.core_type) = Obj.magic cty in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14727 "parsing/parser.ml"
+# 14768 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -14734,18 +14775,18 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 14740 "parsing/parser.ml"
+# 14781 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2129 "parsing/parser.mly"
+# 2143 "parsing/parser.mly"
       ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) )
-# 14749 "parsing/parser.ml"
+# 14790 "parsing/parser.ml"
           
         in
         let _startpos_x_ = _startpos__1_ in
@@ -14753,11 +14794,11 @@ module Tables = struct
         let _symbolstartpos = _startpos_x_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2123 "parsing/parser.mly"
+# 2137 "parsing/parser.mly"
       ( let lab, pat = x in
         lab,
         mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) )
-# 14761 "parsing/parser.ml"
+# 14802 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14780,9 +14821,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3513 "parsing/parser.mly"
+# 3541 "parsing/parser.mly"
                                         ( _1 )
-# 14786 "parsing/parser.ml"
+# 14827 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14805,9 +14846,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.arg_label * Parsetree.expression) = 
-# 2402 "parsing/parser.mly"
+# 2422 "parsing/parser.mly"
       ( (Nolabel, _1) )
-# 14811 "parsing/parser.ml"
+# 14852 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14833,17 +14874,17 @@ module Tables = struct
         } = _menhir_stack in
         let _2 : (Parsetree.expression) = Obj.magic _2 in
         let _1 : (
-# 638 "parsing/parser.mly"
+# 646 "parsing/parser.mly"
        (string)
-# 14839 "parsing/parser.ml"
+# 14880 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.arg_label * Parsetree.expression) = 
-# 2404 "parsing/parser.mly"
+# 2424 "parsing/parser.mly"
       ( (Labelled _1, _2) )
-# 14847 "parsing/parser.ml"
+# 14888 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14868,9 +14909,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let label : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14874 "parsing/parser.ml"
+# 14915 "parsing/parser.ml"
         ) = Obj.magic label in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -14878,10 +14919,10 @@ module Tables = struct
         let _endpos = _endpos_label_ in
         let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in
         
-# 2406 "parsing/parser.mly"
+# 2426 "parsing/parser.mly"
       ( let loc = _loc_label_ in
         (Labelled label, mkexpvar ~loc label) )
-# 14885 "parsing/parser.ml"
+# 14926 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14906,9 +14947,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let label : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 14912 "parsing/parser.ml"
+# 14953 "parsing/parser.ml"
         ) = Obj.magic label in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -14916,10 +14957,10 @@ module Tables = struct
         let _endpos = _endpos_label_ in
         let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in
         
-# 2409 "parsing/parser.mly"
+# 2429 "parsing/parser.mly"
       ( let loc = _loc_label_ in
         (Optional label, mkexpvar ~loc label) )
-# 14923 "parsing/parser.ml"
+# 14964 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -14945,17 +14986,17 @@ module Tables = struct
         } = _menhir_stack in
         let _2 : (Parsetree.expression) = Obj.magic _2 in
         let _1 : (
-# 668 "parsing/parser.mly"
+# 676 "parsing/parser.mly"
        (string)
-# 14951 "parsing/parser.ml"
+# 14992 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.arg_label * Parsetree.expression) = 
-# 2412 "parsing/parser.mly"
+# 2432 "parsing/parser.mly"
       ( (Optional _1, _2) )
-# 14959 "parsing/parser.ml"
+# 15000 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15008,15 +15049,15 @@ module Tables = struct
         let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 =
           let _1 = _1_inlined1 in
           
-# 2117 "parsing/parser.mly"
+# 2131 "parsing/parser.mly"
     ( _1 )
-# 15014 "parsing/parser.ml"
+# 15055 "parsing/parser.ml"
           
         in
         
-# 2091 "parsing/parser.mly"
+# 2105 "parsing/parser.mly"
       ( (Optional (fst _3), _4, snd _3) )
-# 15020 "parsing/parser.ml"
+# 15061 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15041,9 +15082,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 15047 "parsing/parser.ml"
+# 15088 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -15056,24 +15097,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 15062 "parsing/parser.ml"
+# 15103 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2129 "parsing/parser.mly"
+# 2143 "parsing/parser.mly"
       ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) )
-# 15071 "parsing/parser.ml"
+# 15112 "parsing/parser.ml"
           
         in
         
-# 2093 "parsing/parser.mly"
+# 2107 "parsing/parser.mly"
       ( (Optional (fst _2), None, snd _2) )
-# 15077 "parsing/parser.ml"
+# 15118 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15120,9 +15161,9 @@ module Tables = struct
         let _3 : (Parsetree.pattern) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 668 "parsing/parser.mly"
+# 676 "parsing/parser.mly"
        (string)
-# 15126 "parsing/parser.ml"
+# 15167 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -15130,15 +15171,15 @@ module Tables = struct
         let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 =
           let _1 = _1_inlined1 in
           
-# 2117 "parsing/parser.mly"
+# 2131 "parsing/parser.mly"
     ( _1 )
-# 15136 "parsing/parser.ml"
+# 15177 "parsing/parser.ml"
           
         in
         
-# 2095 "parsing/parser.mly"
+# 2109 "parsing/parser.mly"
       ( (Optional _1, _4, _3) )
-# 15142 "parsing/parser.ml"
+# 15183 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15164,17 +15205,17 @@ module Tables = struct
         } = _menhir_stack in
         let _2 : (Parsetree.pattern) = Obj.magic _2 in
         let _1 : (
-# 668 "parsing/parser.mly"
+# 676 "parsing/parser.mly"
        (string)
-# 15170 "parsing/parser.ml"
+# 15211 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 
-# 2097 "parsing/parser.mly"
+# 2111 "parsing/parser.mly"
       ( (Optional _1, None, _2) )
-# 15178 "parsing/parser.ml"
+# 15219 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15218,9 +15259,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 
-# 2099 "parsing/parser.mly"
+# 2113 "parsing/parser.mly"
       ( (Labelled (fst _3), None, snd _3) )
-# 15224 "parsing/parser.ml"
+# 15265 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15245,9 +15286,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 15251 "parsing/parser.ml"
+# 15292 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -15260,24 +15301,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 15266 "parsing/parser.ml"
+# 15307 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2129 "parsing/parser.mly"
+# 2143 "parsing/parser.mly"
       ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) )
-# 15275 "parsing/parser.ml"
+# 15316 "parsing/parser.ml"
           
         in
         
-# 2101 "parsing/parser.mly"
+# 2115 "parsing/parser.mly"
       ( (Labelled (fst _2), None, snd _2) )
-# 15281 "parsing/parser.ml"
+# 15322 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15303,17 +15344,17 @@ module Tables = struct
         } = _menhir_stack in
         let _2 : (Parsetree.pattern) = Obj.magic _2 in
         let _1 : (
-# 638 "parsing/parser.mly"
+# 646 "parsing/parser.mly"
        (string)
-# 15309 "parsing/parser.ml"
+# 15350 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 
-# 2103 "parsing/parser.mly"
+# 2117 "parsing/parser.mly"
       ( (Labelled _1, None, _2) )
-# 15317 "parsing/parser.ml"
+# 15358 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15336,9 +15377,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 
-# 2105 "parsing/parser.mly"
+# 2119 "parsing/parser.mly"
       ( (Nolabel, None, _1) )
-# 15342 "parsing/parser.ml"
+# 15383 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15372,15 +15413,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2419 "parsing/parser.mly"
+# 2439 "parsing/parser.mly"
               ( mkpatvar ~loc:_sloc _1 )
-# 15378 "parsing/parser.ml"
+# 15419 "parsing/parser.ml"
           
         in
         
-# 2423 "parsing/parser.mly"
+# 2443 "parsing/parser.mly"
       ( (_1, _2) )
-# 15384 "parsing/parser.ml"
+# 15425 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15428,16 +15469,16 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2419 "parsing/parser.mly"
+# 2439 "parsing/parser.mly"
               ( mkpatvar ~loc:_sloc _1 )
-# 15434 "parsing/parser.ml"
+# 15475 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2425 "parsing/parser.mly"
+# 2445 "parsing/parser.mly"
       ( let v = _1 in (* PR#7344 *)
         let t =
           match _2 with
@@ -15450,7 +15491,7 @@ module Tables = struct
         let patloc = (_startpos__1_, _endpos__2_) in
         (ghpat ~loc:patloc (Ppat_constraint(v, typ)),
          mkexp_constraint ~loc:_sloc _4 _2) )
-# 15454 "parsing/parser.ml"
+# 15495 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15519,18 +15560,18 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 15523 "parsing/parser.ml"
+# 15564 "parsing/parser.ml"
              in
             
-# 919 "parsing/parser.mly"
+# 927 "parsing/parser.mly"
     ( xs )
-# 15528 "parsing/parser.ml"
+# 15569 "parsing/parser.ml"
             
           in
           
-# 3166 "parsing/parser.mly"
+# 3186 "parsing/parser.mly"
     ( _1 )
-# 15534 "parsing/parser.ml"
+# 15575 "parsing/parser.ml"
           
         in
         let _startpos__3_ = _startpos_xs_ in
@@ -15539,19 +15580,19 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2419 "parsing/parser.mly"
+# 2439 "parsing/parser.mly"
               ( mkpatvar ~loc:_sloc _1 )
-# 15545 "parsing/parser.ml"
+# 15586 "parsing/parser.ml"
           
         in
         
-# 2441 "parsing/parser.mly"
+# 2461 "parsing/parser.mly"
       ( let typloc = (_startpos__3_, _endpos__5_) in
         let patloc = (_startpos__1_, _endpos__5_) in
         (ghpat ~loc:patloc
            (Ppat_constraint(_1, ghtyp ~loc:typloc (Ptyp_poly(_3,_5)))),
          _7) )
-# 15555 "parsing/parser.ml"
+# 15596 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15623,30 +15664,30 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__8_ in
         let _v : (Parsetree.pattern * Parsetree.expression) = let _4 = 
-# 2416 "parsing/parser.mly"
+# 2436 "parsing/parser.mly"
     ( xs )
-# 15629 "parsing/parser.ml"
+# 15670 "parsing/parser.ml"
          in
         let _1 =
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2419 "parsing/parser.mly"
+# 2439 "parsing/parser.mly"
               ( mkpatvar ~loc:_sloc _1 )
-# 15638 "parsing/parser.ml"
+# 15679 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__8_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2447 "parsing/parser.mly"
+# 2467 "parsing/parser.mly"
       ( let exp, poly =
           wrap_type_annotation ~loc:_sloc _4 _6 _8 in
         let loc = (_startpos__1_, _endpos__6_) in
         (ghpat ~loc (Ppat_constraint(_1, poly)), exp) )
-# 15650 "parsing/parser.ml"
+# 15691 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15683,9 +15724,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern * Parsetree.expression) = 
-# 2452 "parsing/parser.mly"
+# 2472 "parsing/parser.mly"
       ( (_1, _3) )
-# 15689 "parsing/parser.ml"
+# 15730 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15736,10 +15777,10 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.pattern * Parsetree.expression) = 
-# 2454 "parsing/parser.mly"
+# 2474 "parsing/parser.mly"
       ( let loc = (_startpos__1_, _endpos__3_) in
         (ghpat ~loc (Ppat_constraint(_1, _3)), _5) )
-# 15743 "parsing/parser.ml"
+# 15784 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15800,36 +15841,36 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined2 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 15806 "parsing/parser.ml"
+# 15847 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined2_ in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 15815 "parsing/parser.ml"
+# 15856 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2470 "parsing/parser.mly"
+# 2490 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       mklbs ~loc:_sloc ext rec_flag (mklb ~loc:_sloc true body attrs)
     )
-# 15827 "parsing/parser.ml"
+# 15868 "parsing/parser.ml"
           
         in
         
-# 2460 "parsing/parser.mly"
+# 2480 "parsing/parser.mly"
                                                 ( _1 )
-# 15833 "parsing/parser.ml"
+# 15874 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15859,9 +15900,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (let_bindings) = 
-# 2461 "parsing/parser.mly"
+# 2481 "parsing/parser.mly"
                                                 ( addlb _1 _2 )
-# 15865 "parsing/parser.ml"
+# 15906 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -15915,41 +15956,41 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined2 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 15921 "parsing/parser.ml"
+# 15962 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined2_ in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 15930 "parsing/parser.ml"
+# 15971 "parsing/parser.ml"
             
           in
           let ext = 
-# 3754 "parsing/parser.mly"
+# 3782 "parsing/parser.mly"
                     ( None )
-# 15936 "parsing/parser.ml"
+# 15977 "parsing/parser.ml"
            in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2470 "parsing/parser.mly"
+# 2490 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       mklbs ~loc:_sloc ext rec_flag (mklb ~loc:_sloc true body attrs)
     )
-# 15947 "parsing/parser.ml"
+# 15988 "parsing/parser.ml"
           
         in
         
-# 2460 "parsing/parser.mly"
+# 2480 "parsing/parser.mly"
                                                 ( _1 )
-# 15953 "parsing/parser.ml"
+# 15994 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16017,18 +16058,18 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 16023 "parsing/parser.ml"
+# 16064 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
           let attrs1 =
             let _1 = _1_inlined2 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 16032 "parsing/parser.ml"
+# 16073 "parsing/parser.ml"
             
           in
           let ext =
@@ -16037,27 +16078,27 @@ module Tables = struct
             let _startpos = _startpos__1_ in
             let _loc = (_startpos, _endpos) in
             
-# 3755 "parsing/parser.mly"
+# 3783 "parsing/parser.mly"
                     ( not_expecting _loc "extension" )
-# 16043 "parsing/parser.ml"
+# 16084 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2470 "parsing/parser.mly"
+# 2490 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       mklbs ~loc:_sloc ext rec_flag (mklb ~loc:_sloc true body attrs)
     )
-# 16055 "parsing/parser.ml"
+# 16096 "parsing/parser.ml"
           
         in
         
-# 2460 "parsing/parser.mly"
+# 2480 "parsing/parser.mly"
                                                 ( _1 )
-# 16061 "parsing/parser.ml"
+# 16102 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16087,9 +16128,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (let_bindings) = 
-# 2461 "parsing/parser.mly"
+# 2481 "parsing/parser.mly"
                                                 ( addlb _1 _2 )
-# 16093 "parsing/parser.ml"
+# 16134 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16112,9 +16153,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = 
-# 2133 "parsing/parser.mly"
+# 2147 "parsing/parser.mly"
       ( _1 )
-# 16118 "parsing/parser.ml"
+# 16159 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16152,24 +16193,24 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2135 "parsing/parser.mly"
+# 2149 "parsing/parser.mly"
       ( Ppat_constraint(_1, _3) )
-# 16158 "parsing/parser.ml"
+# 16199 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 16167 "parsing/parser.ml"
+# 16208 "parsing/parser.ml"
           
         in
         
-# 2136 "parsing/parser.mly"
+# 2150 "parsing/parser.mly"
       ( _1 )
-# 16173 "parsing/parser.ml"
+# 16214 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16203,15 +16244,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2419 "parsing/parser.mly"
+# 2439 "parsing/parser.mly"
               ( mkpatvar ~loc:_sloc _1 )
-# 16209 "parsing/parser.ml"
+# 16250 "parsing/parser.ml"
           
         in
         
-# 2487 "parsing/parser.mly"
+# 2507 "parsing/parser.mly"
       ( (pat, exp) )
-# 16215 "parsing/parser.ml"
+# 16256 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16262,10 +16303,10 @@ module Tables = struct
         let _startpos = _startpos_pat_ in
         let _endpos = _endpos_exp_ in
         let _v : (Parsetree.pattern * Parsetree.expression) = 
-# 2489 "parsing/parser.mly"
+# 2509 "parsing/parser.mly"
       ( let loc = (_startpos_pat_, _endpos_typ_) in
         (ghpat ~loc (Ppat_constraint(pat, typ)), exp) )
-# 16269 "parsing/parser.ml"
+# 16310 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16302,9 +16343,9 @@ module Tables = struct
         let _startpos = _startpos_pat_ in
         let _endpos = _endpos_exp_ in
         let _v : (Parsetree.pattern * Parsetree.expression) = 
-# 2492 "parsing/parser.mly"
+# 2512 "parsing/parser.mly"
       ( (pat, exp) )
-# 16308 "parsing/parser.ml"
+# 16349 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16327,10 +16368,10 @@ module Tables = struct
         let _startpos = _startpos_body_ in
         let _endpos = _endpos_body_ in
         let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = 
-# 2496 "parsing/parser.mly"
+# 2516 "parsing/parser.mly"
       ( let let_pat, let_exp = body in
         let_pat, let_exp, [] )
-# 16334 "parsing/parser.ml"
+# 16375 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16362,9 +16403,9 @@ module Tables = struct
         } = _menhir_stack in
         let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in
         let _1 : (
-# 634 "parsing/parser.mly"
+# 642 "parsing/parser.mly"
        (string)
-# 16368 "parsing/parser.ml"
+# 16409 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -16375,22 +16416,22 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 16381 "parsing/parser.ml"
+# 16422 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_body_ in
         let _symbolstartpos = _startpos_bindings_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2499 "parsing/parser.mly"
+# 2519 "parsing/parser.mly"
       ( let let_pat, let_exp, rev_ands = bindings in
         let pbop_pat, pbop_exp = body in
         let pbop_loc = make_loc _sloc in
         let and_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in
         let_pat, let_exp, and_ :: rev_ands )
-# 16394 "parsing/parser.ml"
+# 16435 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16408,7 +16449,7 @@ module Tables = struct
         let _v : (Parsetree.class_declaration list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 16412 "parsing/parser.ml"
+# 16453 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16472,9 +16513,9 @@ module Tables = struct
         let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in
         let body : (Parsetree.class_expr) = Obj.magic body in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 16478 "parsing/parser.ml"
+# 16519 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let virt : (Asttypes.virtual_flag) = Obj.magic virt in
@@ -16487,9 +16528,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 16493 "parsing/parser.ml"
+# 16534 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -16499,24 +16540,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 16505 "parsing/parser.ml"
+# 16546 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 16513 "parsing/parser.ml"
+# 16554 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 1737 "parsing/parser.mly"
+# 1745 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
@@ -16524,13 +16565,13 @@ module Tables = struct
     let text = symbol_text _symbolstartpos in
     Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs
   )
-# 16528 "parsing/parser.ml"
+# 16569 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 16534 "parsing/parser.ml"
+# 16575 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16548,7 +16589,7 @@ module Tables = struct
         let _v : (Parsetree.class_description list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 16552 "parsing/parser.ml"
+# 16593 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16619,9 +16660,9 @@ module Tables = struct
         let cty : (Parsetree.class_type) = Obj.magic cty in
         let _6 : unit = Obj.magic _6 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 16625 "parsing/parser.ml"
+# 16666 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let virt : (Asttypes.virtual_flag) = Obj.magic virt in
@@ -16634,9 +16675,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 16640 "parsing/parser.ml"
+# 16681 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -16646,24 +16687,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 16652 "parsing/parser.ml"
+# 16693 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 16660 "parsing/parser.ml"
+# 16701 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2028 "parsing/parser.mly"
+# 2036 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       let loc = make_loc _sloc in
@@ -16671,13 +16712,13 @@ module Tables = struct
       let text = symbol_text _symbolstartpos in
       Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs
     )
-# 16675 "parsing/parser.ml"
+# 16716 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 16681 "parsing/parser.ml"
+# 16722 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16695,7 +16736,7 @@ module Tables = struct
         let _v : (Parsetree.class_type_declaration list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 16699 "parsing/parser.ml"
+# 16740 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16766,9 +16807,9 @@ module Tables = struct
         let csig : (Parsetree.class_type) = Obj.magic csig in
         let _6 : unit = Obj.magic _6 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 16772 "parsing/parser.ml"
+# 16813 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let virt : (Asttypes.virtual_flag) = Obj.magic virt in
@@ -16781,9 +16822,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 16787 "parsing/parser.ml"
+# 16828 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -16793,24 +16834,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 16799 "parsing/parser.ml"
+# 16840 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 16807 "parsing/parser.ml"
+# 16848 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2067 "parsing/parser.mly"
+# 2075 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       let loc = make_loc _sloc in
@@ -16818,13 +16859,13 @@ module Tables = struct
       let text = symbol_text _symbolstartpos in
       Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs
     )
-# 16822 "parsing/parser.ml"
+# 16863 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 16828 "parsing/parser.ml"
+# 16869 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16842,7 +16883,7 @@ module Tables = struct
         let _v : (Parsetree.module_binding list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 16846 "parsing/parser.ml"
+# 16887 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16903,9 +16944,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 16909 "parsing/parser.ml"
+# 16950 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -16915,24 +16956,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 16921 "parsing/parser.ml"
+# 16962 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 16929 "parsing/parser.ml"
+# 16970 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 1418 "parsing/parser.mly"
+# 1426 "parsing/parser.mly"
   (
     let loc = make_loc _sloc in
     let attrs = attrs1 @ attrs2 in
@@ -16940,13 +16981,13 @@ module Tables = struct
     let text = symbol_text _symbolstartpos in
     Mb.mk name body ~attrs ~loc ~text ~docs
   )
-# 16944 "parsing/parser.ml"
+# 16985 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 16950 "parsing/parser.ml"
+# 16991 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -16964,7 +17005,7 @@ module Tables = struct
         let _v : (Parsetree.module_declaration list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 16968 "parsing/parser.ml"
+# 17009 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17032,9 +17073,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 17038 "parsing/parser.ml"
+# 17079 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -17044,24 +17085,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 17050 "parsing/parser.ml"
+# 17091 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 17058 "parsing/parser.ml"
+# 17099 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 1695 "parsing/parser.mly"
+# 1703 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let docs = symbol_docs _sloc in
@@ -17069,13 +17110,13 @@ module Tables = struct
     let text = symbol_text _symbolstartpos in
     Md.mk name mty ~attrs ~loc ~text ~docs
   )
-# 17073 "parsing/parser.ml"
+# 17114 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17079 "parsing/parser.ml"
+# 17120 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17093,7 +17134,7 @@ module Tables = struct
         let _v : (Parsetree.attributes) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17097 "parsing/parser.ml"
+# 17138 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17125,7 +17166,7 @@ module Tables = struct
         let _v : (Parsetree.attributes) = 
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17129 "parsing/parser.ml"
+# 17170 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17143,7 +17184,7 @@ module Tables = struct
         let _v : (Parsetree.type_declaration list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17147 "parsing/parser.ml"
+# 17188 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17208,9 +17249,9 @@ module Tables = struct
         let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs_inlined1 in
         let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 17214 "parsing/parser.ml"
+# 17255 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -17223,9 +17264,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined3 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 17229 "parsing/parser.ml"
+# 17270 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -17234,18 +17275,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 17238 "parsing/parser.ml"
+# 17279 "parsing/parser.ml"
                in
               
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 17243 "parsing/parser.ml"
+# 17284 "parsing/parser.ml"
               
             in
             
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 17249 "parsing/parser.ml"
+# 17290 "parsing/parser.ml"
             
           in
           let id =
@@ -17254,24 +17295,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 17260 "parsing/parser.ml"
+# 17301 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 17268 "parsing/parser.ml"
+# 17309 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2881 "parsing/parser.mly"
+# 2901 "parsing/parser.mly"
     (
       let (kind, priv, manifest) = kind_priv_manifest in
       let docs = symbol_docs _sloc in
@@ -17280,13 +17321,13 @@ module Tables = struct
       let text = symbol_text _symbolstartpos in
       Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text
     )
-# 17284 "parsing/parser.ml"
+# 17325 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17290 "parsing/parser.ml"
+# 17331 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17304,7 +17345,7 @@ module Tables = struct
         let _v : (Parsetree.type_declaration list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17308 "parsing/parser.ml"
+# 17349 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17376,9 +17417,9 @@ module Tables = struct
         let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in
         let _1_inlined3 : unit = Obj.magic _1_inlined3 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 17382 "parsing/parser.ml"
+# 17423 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -17391,9 +17432,9 @@ module Tables = struct
           let attrs2 =
             let _1 = _1_inlined4 in
             
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 17397 "parsing/parser.ml"
+# 17438 "parsing/parser.ml"
             
           in
           let _endpos_attrs2_ = _endpos__1_inlined4_ in
@@ -17402,26 +17443,26 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 17406 "parsing/parser.ml"
+# 17447 "parsing/parser.ml"
                in
               
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 17411 "parsing/parser.ml"
+# 17452 "parsing/parser.ml"
               
             in
             
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 17417 "parsing/parser.ml"
+# 17458 "parsing/parser.ml"
             
           in
           let kind_priv_manifest =
             let _1 = _1_inlined3 in
             
-# 2927 "parsing/parser.mly"
+# 2947 "parsing/parser.mly"
       ( _2 )
-# 17425 "parsing/parser.ml"
+# 17466 "parsing/parser.ml"
             
           in
           let id =
@@ -17430,24 +17471,24 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 17436 "parsing/parser.ml"
+# 17477 "parsing/parser.ml"
             
           in
           let attrs1 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 17444 "parsing/parser.ml"
+# 17485 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_attrs2_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2881 "parsing/parser.mly"
+# 2901 "parsing/parser.mly"
     (
       let (kind, priv, manifest) = kind_priv_manifest in
       let docs = symbol_docs _sloc in
@@ -17456,13 +17497,13 @@ module Tables = struct
       let text = symbol_text _symbolstartpos in
       Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text
     )
-# 17460 "parsing/parser.ml"
+# 17501 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17466 "parsing/parser.ml"
+# 17507 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17480,7 +17521,7 @@ module Tables = struct
         let _v : (Parsetree.attributes) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17484 "parsing/parser.ml"
+# 17525 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17512,7 +17553,7 @@ module Tables = struct
         let _v : (Parsetree.attributes) = 
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17516 "parsing/parser.ml"
+# 17557 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17530,7 +17571,7 @@ module Tables = struct
         let _v : (Parsetree.signature_item list list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17534 "parsing/parser.ml"
+# 17575 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17563,21 +17604,21 @@ module Tables = struct
           let _1 =
             let _startpos = _startpos__1_ in
             
-# 827 "parsing/parser.mly"
+# 835 "parsing/parser.mly"
   ( text_sig _startpos )
-# 17569 "parsing/parser.ml"
+# 17610 "parsing/parser.ml"
             
           in
           
-# 1556 "parsing/parser.mly"
+# 1564 "parsing/parser.mly"
       ( _1 )
-# 17575 "parsing/parser.ml"
+# 17616 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17581 "parsing/parser.ml"
+# 17622 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17610,21 +17651,21 @@ module Tables = struct
           let _1 =
             let _startpos = _startpos__1_ in
             
-# 825 "parsing/parser.mly"
+# 833 "parsing/parser.mly"
   ( text_sig _startpos @ [_1] )
-# 17616 "parsing/parser.ml"
+# 17657 "parsing/parser.ml"
             
           in
           
-# 1556 "parsing/parser.mly"
+# 1564 "parsing/parser.mly"
       ( _1 )
-# 17622 "parsing/parser.ml"
+# 17663 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17628 "parsing/parser.ml"
+# 17669 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17642,7 +17683,7 @@ module Tables = struct
         let _v : (Parsetree.structure_item list list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17646 "parsing/parser.ml"
+# 17687 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17675,40 +17716,40 @@ module Tables = struct
           let _1 =
             let ys =
               let items = 
-# 887 "parsing/parser.mly"
+# 895 "parsing/parser.mly"
     ( [] )
-# 17681 "parsing/parser.ml"
+# 17722 "parsing/parser.ml"
                in
               
-# 1301 "parsing/parser.mly"
+# 1309 "parsing/parser.mly"
     ( items )
-# 17686 "parsing/parser.ml"
+# 17727 "parsing/parser.ml"
               
             in
             let xs =
               let _startpos = _startpos__1_ in
               
-# 823 "parsing/parser.mly"
+# 831 "parsing/parser.mly"
   ( text_str _startpos )
-# 17694 "parsing/parser.ml"
+# 17735 "parsing/parser.ml"
               
             in
             
 # 267 "<standard.mly>"
     ( xs @ ys )
-# 17700 "parsing/parser.ml"
+# 17741 "parsing/parser.ml"
             
           in
           
-# 1317 "parsing/parser.mly"
+# 1325 "parsing/parser.mly"
       ( _1 )
-# 17706 "parsing/parser.ml"
+# 17747 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17712 "parsing/parser.ml"
+# 17753 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17760,70 +17801,70 @@ module Tables = struct
                   let _1 =
                     let _1 =
                       let attrs = 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 17766 "parsing/parser.ml"
+# 17807 "parsing/parser.ml"
                        in
                       
-# 1308 "parsing/parser.mly"
+# 1316 "parsing/parser.mly"
     ( mkstrexp e attrs )
-# 17771 "parsing/parser.ml"
+# 17812 "parsing/parser.ml"
                       
                     in
                     let _startpos__1_ = _startpos_e_ in
                     let _startpos = _startpos__1_ in
                     
-# 821 "parsing/parser.mly"
+# 829 "parsing/parser.mly"
   ( text_str _startpos @ [_1] )
-# 17779 "parsing/parser.ml"
+# 17820 "parsing/parser.ml"
                     
                   in
                   let _startpos__1_ = _startpos_e_ in
                   let _endpos = _endpos__1_ in
                   let _startpos = _startpos__1_ in
                   
-# 840 "parsing/parser.mly"
+# 848 "parsing/parser.mly"
   ( mark_rhs_docs _startpos _endpos;
     _1 )
-# 17789 "parsing/parser.ml"
+# 17830 "parsing/parser.ml"
                   
                 in
                 
-# 889 "parsing/parser.mly"
+# 897 "parsing/parser.mly"
     ( x )
-# 17795 "parsing/parser.ml"
+# 17836 "parsing/parser.ml"
                 
               in
               
-# 1301 "parsing/parser.mly"
+# 1309 "parsing/parser.mly"
     ( items )
-# 17801 "parsing/parser.ml"
+# 17842 "parsing/parser.ml"
               
             in
             let xs =
               let _startpos = _startpos__1_ in
               
-# 823 "parsing/parser.mly"
+# 831 "parsing/parser.mly"
   ( text_str _startpos )
-# 17809 "parsing/parser.ml"
+# 17850 "parsing/parser.ml"
               
             in
             
 # 267 "<standard.mly>"
     ( xs @ ys )
-# 17815 "parsing/parser.ml"
+# 17856 "parsing/parser.ml"
             
           in
           
-# 1317 "parsing/parser.mly"
+# 1325 "parsing/parser.mly"
       ( _1 )
-# 17821 "parsing/parser.ml"
+# 17862 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17827 "parsing/parser.ml"
+# 17868 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17856,21 +17897,21 @@ module Tables = struct
           let _1 =
             let _startpos = _startpos__1_ in
             
-# 821 "parsing/parser.mly"
+# 829 "parsing/parser.mly"
   ( text_str _startpos @ [_1] )
-# 17862 "parsing/parser.ml"
+# 17903 "parsing/parser.ml"
             
           in
           
-# 1317 "parsing/parser.mly"
+# 1325 "parsing/parser.mly"
       ( _1 )
-# 17868 "parsing/parser.ml"
+# 17909 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17874 "parsing/parser.ml"
+# 17915 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17888,7 +17929,7 @@ module Tables = struct
         let _v : (Parsetree.class_type_field list list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17892 "parsing/parser.ml"
+# 17933 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17920,15 +17961,15 @@ module Tables = struct
         let _v : (Parsetree.class_type_field list list) = let x =
           let _startpos = _startpos__1_ in
           
-# 835 "parsing/parser.mly"
+# 843 "parsing/parser.mly"
   ( text_csig _startpos @ [_1] )
-# 17926 "parsing/parser.ml"
+# 17967 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17932 "parsing/parser.ml"
+# 17973 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17946,7 +17987,7 @@ module Tables = struct
         let _v : (Parsetree.class_field list list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 17950 "parsing/parser.ml"
+# 17991 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -17978,15 +18019,15 @@ module Tables = struct
         let _v : (Parsetree.class_field list list) = let x =
           let _startpos = _startpos__1_ in
           
-# 833 "parsing/parser.mly"
+# 841 "parsing/parser.mly"
   ( text_cstr _startpos @ [_1] )
-# 17984 "parsing/parser.ml"
+# 18025 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 17990 "parsing/parser.ml"
+# 18031 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18004,7 +18045,7 @@ module Tables = struct
         let _v : (Parsetree.structure_item list list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 18008 "parsing/parser.ml"
+# 18049 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18036,15 +18077,15 @@ module Tables = struct
         let _v : (Parsetree.structure_item list list) = let x =
           let _startpos = _startpos__1_ in
           
-# 821 "parsing/parser.mly"
+# 829 "parsing/parser.mly"
   ( text_str _startpos @ [_1] )
-# 18042 "parsing/parser.ml"
+# 18083 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 18048 "parsing/parser.ml"
+# 18089 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18062,7 +18103,7 @@ module Tables = struct
         let _v : (Parsetree.toplevel_phrase list list) = 
 # 211 "<standard.mly>"
     ( [] )
-# 18066 "parsing/parser.ml"
+# 18107 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18095,32 +18136,32 @@ module Tables = struct
           let _1 =
             let x =
               let _1 = 
-# 887 "parsing/parser.mly"
+# 895 "parsing/parser.mly"
     ( [] )
-# 18101 "parsing/parser.ml"
+# 18142 "parsing/parser.ml"
                in
               
-# 1117 "parsing/parser.mly"
+# 1125 "parsing/parser.mly"
     ( _1 )
-# 18106 "parsing/parser.ml"
+# 18147 "parsing/parser.ml"
               
             in
             
 # 183 "<standard.mly>"
     ( x )
-# 18112 "parsing/parser.ml"
+# 18153 "parsing/parser.ml"
             
           in
           
-# 1129 "parsing/parser.mly"
+# 1137 "parsing/parser.mly"
       ( _1 )
-# 18118 "parsing/parser.ml"
+# 18159 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 18124 "parsing/parser.ml"
+# 18165 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18172,58 +18213,58 @@ module Tables = struct
                   let _1 =
                     let _1 =
                       let attrs = 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 18178 "parsing/parser.ml"
+# 18219 "parsing/parser.ml"
                        in
                       
-# 1308 "parsing/parser.mly"
+# 1316 "parsing/parser.mly"
     ( mkstrexp e attrs )
-# 18183 "parsing/parser.ml"
+# 18224 "parsing/parser.ml"
                       
                     in
                     
-# 831 "parsing/parser.mly"
+# 839 "parsing/parser.mly"
   ( Ptop_def [_1] )
-# 18189 "parsing/parser.ml"
+# 18230 "parsing/parser.ml"
                     
                   in
                   let _startpos__1_ = _startpos_e_ in
                   let _startpos = _startpos__1_ in
                   
-# 829 "parsing/parser.mly"
+# 837 "parsing/parser.mly"
   ( text_def _startpos @ [_1] )
-# 18197 "parsing/parser.ml"
+# 18238 "parsing/parser.ml"
                   
                 in
                 
-# 889 "parsing/parser.mly"
+# 897 "parsing/parser.mly"
     ( x )
-# 18203 "parsing/parser.ml"
+# 18244 "parsing/parser.ml"
                 
               in
               
-# 1117 "parsing/parser.mly"
+# 1125 "parsing/parser.mly"
     ( _1 )
-# 18209 "parsing/parser.ml"
+# 18250 "parsing/parser.ml"
               
             in
             
 # 183 "<standard.mly>"
     ( x )
-# 18215 "parsing/parser.ml"
+# 18256 "parsing/parser.ml"
             
           in
           
-# 1129 "parsing/parser.mly"
+# 1137 "parsing/parser.mly"
       ( _1 )
-# 18221 "parsing/parser.ml"
+# 18262 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 18227 "parsing/parser.ml"
+# 18268 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18255,27 +18296,27 @@ module Tables = struct
         let _v : (Parsetree.toplevel_phrase list list) = let x =
           let _1 =
             let _1 = 
-# 831 "parsing/parser.mly"
+# 839 "parsing/parser.mly"
   ( Ptop_def [_1] )
-# 18261 "parsing/parser.ml"
+# 18302 "parsing/parser.ml"
              in
             let _startpos = _startpos__1_ in
             
-# 829 "parsing/parser.mly"
+# 837 "parsing/parser.mly"
   ( text_def _startpos @ [_1] )
-# 18267 "parsing/parser.ml"
+# 18308 "parsing/parser.ml"
             
           in
           
-# 1129 "parsing/parser.mly"
+# 1137 "parsing/parser.mly"
       ( _1 )
-# 18273 "parsing/parser.ml"
+# 18314 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 18279 "parsing/parser.ml"
+# 18320 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18310,29 +18351,29 @@ module Tables = struct
               let _endpos = _endpos__1_ in
               let _startpos = _startpos__1_ in
               
-# 840 "parsing/parser.mly"
+# 848 "parsing/parser.mly"
   ( mark_rhs_docs _startpos _endpos;
     _1 )
-# 18317 "parsing/parser.ml"
+# 18358 "parsing/parser.ml"
               
             in
             let _startpos = _startpos__1_ in
             
-# 829 "parsing/parser.mly"
+# 837 "parsing/parser.mly"
   ( text_def _startpos @ [_1] )
-# 18324 "parsing/parser.ml"
+# 18365 "parsing/parser.ml"
             
           in
           
-# 1129 "parsing/parser.mly"
+# 1137 "parsing/parser.mly"
       ( _1 )
-# 18330 "parsing/parser.ml"
+# 18371 "parsing/parser.ml"
           
         in
         
 # 213 "<standard.mly>"
     ( x :: xs )
-# 18336 "parsing/parser.ml"
+# 18377 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18371,7 +18412,7 @@ module Tables = struct
         let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = 
 # 124 "<standard.mly>"
     ( None )
-# 18375 "parsing/parser.ml"
+# 18416 "parsing/parser.ml"
          in
         let x =
           let label =
@@ -18379,9 +18420,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 18385 "parsing/parser.ml"
+# 18426 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -18389,7 +18430,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2767 "parsing/parser.mly"
+# 2787 "parsing/parser.mly"
     ( let label, pat =
         match opat with
         | None ->
@@ -18403,13 +18444,13 @@ module Tables = struct
       in
       label, mkpat_opt_constraint ~loc:_sloc pat octy
     )
-# 18407 "parsing/parser.ml"
+# 18448 "parsing/parser.ml"
           
         in
         
-# 1056 "parsing/parser.mly"
+# 1064 "parsing/parser.mly"
     ( [x], None )
-# 18413 "parsing/parser.ml"
+# 18454 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18455,7 +18496,7 @@ module Tables = struct
         let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = 
 # 126 "<standard.mly>"
     ( Some x )
-# 18459 "parsing/parser.ml"
+# 18500 "parsing/parser.ml"
          in
         let x =
           let label =
@@ -18463,9 +18504,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 18469 "parsing/parser.ml"
+# 18510 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -18473,7 +18514,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2767 "parsing/parser.mly"
+# 2787 "parsing/parser.mly"
     ( let label, pat =
         match opat with
         | None ->
@@ -18487,13 +18528,13 @@ module Tables = struct
       in
       label, mkpat_opt_constraint ~loc:_sloc pat octy
     )
-# 18491 "parsing/parser.ml"
+# 18532 "parsing/parser.ml"
           
         in
         
-# 1056 "parsing/parser.mly"
+# 1064 "parsing/parser.mly"
     ( [x], None )
-# 18497 "parsing/parser.ml"
+# 18538 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18556,9 +18597,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 18562 "parsing/parser.ml"
+# 18603 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -18566,7 +18607,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2767 "parsing/parser.mly"
+# 2787 "parsing/parser.mly"
     ( let label, pat =
         match opat with
         | None ->
@@ -18580,13 +18621,13 @@ module Tables = struct
       in
       label, mkpat_opt_constraint ~loc:_sloc pat octy
     )
-# 18584 "parsing/parser.ml"
+# 18625 "parsing/parser.ml"
           
         in
         
-# 1058 "parsing/parser.mly"
+# 1066 "parsing/parser.mly"
     ( [x], Some y )
-# 18590 "parsing/parser.ml"
+# 18631 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18642,9 +18683,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 18648 "parsing/parser.ml"
+# 18689 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -18652,7 +18693,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2767 "parsing/parser.mly"
+# 2787 "parsing/parser.mly"
     ( let label, pat =
         match opat with
         | None ->
@@ -18666,14 +18707,14 @@ module Tables = struct
       in
       label, mkpat_opt_constraint ~loc:_sloc pat octy
     )
-# 18670 "parsing/parser.ml"
+# 18711 "parsing/parser.ml"
           
         in
         
-# 1062 "parsing/parser.mly"
+# 1070 "parsing/parser.mly"
     ( let xs, y = tail in
       x :: xs, y )
-# 18677 "parsing/parser.ml"
+# 18718 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18710,9 +18751,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.case) = 
-# 2525 "parsing/parser.mly"
+# 2545 "parsing/parser.mly"
       ( Exp.case _1 _3 )
-# 18716 "parsing/parser.ml"
+# 18757 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18763,9 +18804,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.case) = 
-# 2527 "parsing/parser.mly"
+# 2547 "parsing/parser.mly"
       ( Exp.case _1 ~guard:_3 _5 )
-# 18769 "parsing/parser.ml"
+# 18810 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18803,9 +18844,9 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2529 "parsing/parser.mly"
+# 2549 "parsing/parser.mly"
       ( Exp.case _1 (Exp.unreachable ~loc:(make_loc _loc__3_) ()) )
-# 18809 "parsing/parser.ml"
+# 18850 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18866,9 +18907,9 @@ module Tables = struct
         let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 18872 "parsing/parser.ml"
+# 18913 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -18877,49 +18918,49 @@ module Tables = struct
           let _6 =
             let _1 = _1_inlined3 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 18883 "parsing/parser.ml"
+# 18924 "parsing/parser.ml"
             
           in
           let _endpos__6_ = _endpos__1_inlined3_ in
           let _4 =
             let _1 = _1_inlined2 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 18892 "parsing/parser.ml"
+# 18933 "parsing/parser.ml"
             
           in
           let _endpos__4_ = _endpos__1_inlined2_ in
           let _3 =
             let _1 = _1_inlined1 in
             
-# 3184 "parsing/parser.mly"
+# 3204 "parsing/parser.mly"
     ( _1 )
-# 18901 "parsing/parser.ml"
+# 18942 "parsing/parser.ml"
             
           in
           let _1 =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 18908 "parsing/parser.ml"
+# 18949 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 18916 "parsing/parser.ml"
+# 18957 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__6_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3394 "parsing/parser.mly"
+# 3414 "parsing/parser.mly"
     ( let info =
         match rhs_info _endpos__4_ with
         | Some _ as info_before_semi -> info_before_semi
@@ -18927,13 +18968,13 @@ module Tables = struct
       in
       let attrs = add_info_attrs info (_4 @ _6) in
       Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 )
-# 18931 "parsing/parser.ml"
+# 18972 "parsing/parser.ml"
           
         in
         
-# 3375 "parsing/parser.mly"
+# 3395 "parsing/parser.mly"
       ( let (f, c) = tail in (head :: f, c) )
-# 18937 "parsing/parser.ml"
+# 18978 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -18974,15 +19015,15 @@ module Tables = struct
           let _symbolstartpos = _startpos_ty_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3405 "parsing/parser.mly"
+# 3425 "parsing/parser.mly"
     ( Of.inherit_ ~loc:(make_loc _sloc) ty )
-# 18980 "parsing/parser.ml"
+# 19021 "parsing/parser.ml"
           
         in
         
-# 3375 "parsing/parser.mly"
+# 3395 "parsing/parser.mly"
       ( let (f, c) = tail in (head :: f, c) )
-# 18986 "parsing/parser.ml"
+# 19027 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19036,9 +19077,9 @@ module Tables = struct
         let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19042 "parsing/parser.ml"
+# 19083 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -19047,49 +19088,49 @@ module Tables = struct
           let _6 =
             let _1 = _1_inlined3 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19053 "parsing/parser.ml"
+# 19094 "parsing/parser.ml"
             
           in
           let _endpos__6_ = _endpos__1_inlined3_ in
           let _4 =
             let _1 = _1_inlined2 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19062 "parsing/parser.ml"
+# 19103 "parsing/parser.ml"
             
           in
           let _endpos__4_ = _endpos__1_inlined2_ in
           let _3 =
             let _1 = _1_inlined1 in
             
-# 3184 "parsing/parser.mly"
+# 3204 "parsing/parser.mly"
     ( _1 )
-# 19071 "parsing/parser.ml"
+# 19112 "parsing/parser.ml"
             
           in
           let _1 =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19078 "parsing/parser.ml"
+# 19119 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19086 "parsing/parser.ml"
+# 19127 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__6_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3394 "parsing/parser.mly"
+# 3414 "parsing/parser.mly"
     ( let info =
         match rhs_info _endpos__4_ with
         | Some _ as info_before_semi -> info_before_semi
@@ -19097,13 +19138,13 @@ module Tables = struct
       in
       let attrs = add_info_attrs info (_4 @ _6) in
       Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 )
-# 19101 "parsing/parser.ml"
+# 19142 "parsing/parser.ml"
           
         in
         
-# 3378 "parsing/parser.mly"
+# 3398 "parsing/parser.mly"
       ( [head], Closed )
-# 19107 "parsing/parser.ml"
+# 19148 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19137,15 +19178,15 @@ module Tables = struct
           let _symbolstartpos = _startpos_ty_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3405 "parsing/parser.mly"
+# 3425 "parsing/parser.mly"
     ( Of.inherit_ ~loc:(make_loc _sloc) ty )
-# 19143 "parsing/parser.ml"
+# 19184 "parsing/parser.ml"
           
         in
         
-# 3378 "parsing/parser.mly"
+# 3398 "parsing/parser.mly"
       ( [head], Closed )
-# 19149 "parsing/parser.ml"
+# 19190 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19185,9 +19226,9 @@ module Tables = struct
         let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19191 "parsing/parser.ml"
+# 19232 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -19196,50 +19237,50 @@ module Tables = struct
           let _4 =
             let _1 = _1_inlined2 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19202 "parsing/parser.ml"
+# 19243 "parsing/parser.ml"
             
           in
           let _endpos__4_ = _endpos__1_inlined2_ in
           let _3 =
             let _1 = _1_inlined1 in
             
-# 3184 "parsing/parser.mly"
+# 3204 "parsing/parser.mly"
     ( _1 )
-# 19211 "parsing/parser.ml"
+# 19252 "parsing/parser.ml"
             
           in
           let _1 =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19218 "parsing/parser.ml"
+# 19259 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19226 "parsing/parser.ml"
+# 19267 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__4_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3387 "parsing/parser.mly"
+# 3407 "parsing/parser.mly"
     ( let info = symbol_info _endpos in
       let attrs = add_info_attrs info _4 in
       Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 )
-# 19237 "parsing/parser.ml"
+# 19278 "parsing/parser.ml"
           
         in
         
-# 3381 "parsing/parser.mly"
+# 3401 "parsing/parser.mly"
       ( [head], Closed )
-# 19243 "parsing/parser.ml"
+# 19284 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19266,15 +19307,15 @@ module Tables = struct
           let _symbolstartpos = _startpos_ty_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3405 "parsing/parser.mly"
+# 3425 "parsing/parser.mly"
     ( Of.inherit_ ~loc:(make_loc _sloc) ty )
-# 19272 "parsing/parser.ml"
+# 19313 "parsing/parser.ml"
           
         in
         
-# 3381 "parsing/parser.mly"
+# 3401 "parsing/parser.mly"
       ( [head], Closed )
-# 19278 "parsing/parser.ml"
+# 19319 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19297,9 +19338,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.object_field list * Asttypes.closed_flag) = 
-# 3383 "parsing/parser.mly"
+# 3403 "parsing/parser.mly"
       ( [], Open )
-# 19303 "parsing/parser.ml"
+# 19344 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19344,9 +19385,9 @@ module Tables = struct
         let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19350 "parsing/parser.ml"
+# 19391 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let private_ : (Asttypes.private_flag) = Obj.magic private_ in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -19358,41 +19399,41 @@ module Tables = struct
   Parsetree.attributes) = let ty =
           let _1 = _1_inlined2 in
           
-# 3180 "parsing/parser.mly"
+# 3200 "parsing/parser.mly"
     ( _1 )
-# 19364 "parsing/parser.ml"
+# 19405 "parsing/parser.ml"
           
         in
         let label =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19372 "parsing/parser.ml"
+# 19413 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19380 "parsing/parser.ml"
+# 19421 "parsing/parser.ml"
           
         in
         let attrs = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19386 "parsing/parser.ml"
+# 19427 "parsing/parser.ml"
          in
         let _1 = 
-# 3646 "parsing/parser.mly"
+# 3674 "parsing/parser.mly"
                                                 ( Fresh )
-# 19391 "parsing/parser.ml"
+# 19432 "parsing/parser.ml"
          in
         
-# 1875 "parsing/parser.mly"
+# 1883 "parsing/parser.mly"
       ( (label, private_, Cfk_virtual ty), attrs )
-# 19396 "parsing/parser.ml"
+# 19437 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19430,9 +19471,9 @@ module Tables = struct
         } = _menhir_stack in
         let _5 : (Parsetree.expression) = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19436 "parsing/parser.ml"
+# 19477 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _3 : (Asttypes.private_flag) = Obj.magic _3 in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -19444,36 +19485,36 @@ module Tables = struct
   Parsetree.attributes) = let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19450 "parsing/parser.ml"
+# 19491 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19458 "parsing/parser.ml"
+# 19499 "parsing/parser.ml"
           
         in
         let _2 = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19464 "parsing/parser.ml"
+# 19505 "parsing/parser.ml"
          in
         let _1 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 19469 "parsing/parser.ml"
+# 19510 "parsing/parser.ml"
          in
         
-# 1877 "parsing/parser.mly"
+# 1885 "parsing/parser.mly"
       ( let e = _5 in
         let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in
         (_4, _3,
         Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 )
-# 19477 "parsing/parser.ml"
+# 19518 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19517,9 +19558,9 @@ module Tables = struct
         } = _menhir_stack in
         let _5 : (Parsetree.expression) = Obj.magic _5 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19523 "parsing/parser.ml"
+# 19564 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _3 : (Asttypes.private_flag) = Obj.magic _3 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -19532,39 +19573,39 @@ module Tables = struct
   Parsetree.attributes) = let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19538 "parsing/parser.ml"
+# 19579 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19546 "parsing/parser.ml"
+# 19587 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19554 "parsing/parser.ml"
+# 19595 "parsing/parser.ml"
           
         in
         let _1 = 
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 19560 "parsing/parser.ml"
+# 19601 "parsing/parser.ml"
          in
         
-# 1877 "parsing/parser.mly"
+# 1885 "parsing/parser.mly"
       ( let e = _5 in
         let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in
         (_4, _3,
         Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 )
-# 19568 "parsing/parser.ml"
+# 19609 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19623,9 +19664,9 @@ module Tables = struct
         let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19629 "parsing/parser.ml"
+# 19670 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _3 : (Asttypes.private_flag) = Obj.magic _3 in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -19637,45 +19678,45 @@ module Tables = struct
   Parsetree.attributes) = let _6 =
           let _1 = _1_inlined2 in
           
-# 3180 "parsing/parser.mly"
+# 3200 "parsing/parser.mly"
     ( _1 )
-# 19643 "parsing/parser.ml"
+# 19684 "parsing/parser.ml"
           
         in
         let _startpos__6_ = _startpos__1_inlined2_ in
         let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19652 "parsing/parser.ml"
+# 19693 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19660 "parsing/parser.ml"
+# 19701 "parsing/parser.ml"
           
         in
         let _2 = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19666 "parsing/parser.ml"
+# 19707 "parsing/parser.ml"
          in
         let _1 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 19671 "parsing/parser.ml"
+# 19712 "parsing/parser.ml"
          in
         
-# 1883 "parsing/parser.mly"
+# 1891 "parsing/parser.mly"
       ( let poly_exp =
           let loc = (_startpos__6_, _endpos__8_) in
           ghexp ~loc (Pexp_poly(_8, Some _6)) in
         (_4, _3, Cfk_concrete (_1, poly_exp)), _2 )
-# 19679 "parsing/parser.ml"
+# 19720 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19740,9 +19781,9 @@ module Tables = struct
         let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19746 "parsing/parser.ml"
+# 19787 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _3 : (Asttypes.private_flag) = Obj.magic _3 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -19755,48 +19796,48 @@ module Tables = struct
   Parsetree.attributes) = let _6 =
           let _1 = _1_inlined3 in
           
-# 3180 "parsing/parser.mly"
+# 3200 "parsing/parser.mly"
     ( _1 )
-# 19761 "parsing/parser.ml"
+# 19802 "parsing/parser.ml"
           
         in
         let _startpos__6_ = _startpos__1_inlined3_ in
         let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19770 "parsing/parser.ml"
+# 19811 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19778 "parsing/parser.ml"
+# 19819 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19786 "parsing/parser.ml"
+# 19827 "parsing/parser.ml"
           
         in
         let _1 = 
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 19792 "parsing/parser.ml"
+# 19833 "parsing/parser.ml"
          in
         
-# 1883 "parsing/parser.mly"
+# 1891 "parsing/parser.mly"
       ( let poly_exp =
           let loc = (_startpos__6_, _endpos__8_) in
           ghexp ~loc (Pexp_poly(_8, Some _6)) in
         (_4, _3, Cfk_concrete (_1, poly_exp)), _2 )
-# 19800 "parsing/parser.ml"
+# 19841 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -19876,9 +19917,9 @@ module Tables = struct
         let _6 : unit = Obj.magic _6 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 19882 "parsing/parser.ml"
+# 19923 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _3 : (Asttypes.private_flag) = Obj.magic _3 in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -19888,38 +19929,38 @@ module Tables = struct
         let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag *
    Parsetree.class_field_kind) *
   Parsetree.attributes) = let _7 = 
-# 2416 "parsing/parser.mly"
+# 2436 "parsing/parser.mly"
     ( xs )
-# 19894 "parsing/parser.ml"
+# 19935 "parsing/parser.ml"
          in
         let _startpos__7_ = _startpos_xs_ in
         let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 19902 "parsing/parser.ml"
+# 19943 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 19910 "parsing/parser.ml"
+# 19951 "parsing/parser.ml"
           
         in
         let _startpos__4_ = _startpos__1_inlined1_ in
         let _2 = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 19917 "parsing/parser.ml"
+# 19958 "parsing/parser.ml"
          in
         let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in
         let _1 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 19923 "parsing/parser.ml"
+# 19964 "parsing/parser.ml"
          in
         let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in
         let _endpos = _endpos__11_ in
@@ -19935,7 +19976,7 @@ module Tables = struct
               _startpos__4_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1889 "parsing/parser.mly"
+# 1897 "parsing/parser.mly"
       ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in
         let poly_exp =
           let exp, poly =
@@ -19946,7 +19987,7 @@ module Tables = struct
           ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in
         (_4, _3,
         Cfk_concrete (_1, poly_exp)), _2 )
-# 19950 "parsing/parser.ml"
+# 19991 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20032,9 +20073,9 @@ module Tables = struct
         let _6 : unit = Obj.magic _6 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 20038 "parsing/parser.ml"
+# 20079 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _3 : (Asttypes.private_flag) = Obj.magic _3 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -20045,41 +20086,41 @@ module Tables = struct
         let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag *
    Parsetree.class_field_kind) *
   Parsetree.attributes) = let _7 = 
-# 2416 "parsing/parser.mly"
+# 2436 "parsing/parser.mly"
     ( xs )
-# 20051 "parsing/parser.ml"
+# 20092 "parsing/parser.ml"
          in
         let _startpos__7_ = _startpos_xs_ in
         let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 20059 "parsing/parser.ml"
+# 20100 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 20067 "parsing/parser.ml"
+# 20108 "parsing/parser.ml"
           
         in
         let _startpos__4_ = _startpos__1_inlined2_ in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 20076 "parsing/parser.ml"
+# 20117 "parsing/parser.ml"
           
         in
         let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in
         let _1 = 
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 20083 "parsing/parser.ml"
+# 20124 "parsing/parser.ml"
          in
         let _endpos = _endpos__11_ in
         let _symbolstartpos = if _startpos__1_ != _endpos__1_ then
@@ -20094,7 +20135,7 @@ module Tables = struct
               _startpos__4_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1889 "parsing/parser.mly"
+# 1897 "parsing/parser.mly"
       ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in
         let poly_exp =
           let exp, poly =
@@ -20105,7 +20146,7 @@ module Tables = struct
           ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in
         (_4, _3,
         Cfk_concrete (_1, poly_exp)), _2 )
-# 20109 "parsing/parser.ml"
+# 20150 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20124,17 +20165,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 20130 "parsing/parser.ml"
+# 20171 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20138 "parsing/parser.ml"
+# 20179 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20165,9 +20206,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _3 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 20171 "parsing/parser.ml"
+# 20212 "parsing/parser.ml"
         ) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (Longident.t) = Obj.magic _1 in
@@ -20175,9 +20216,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = 
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20181 "parsing/parser.ml"
+# 20222 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20196,17 +20237,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 20202 "parsing/parser.ml"
+# 20243 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20210 "parsing/parser.ml"
+# 20251 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20237,9 +20278,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _3 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 20243 "parsing/parser.ml"
+# 20284 "parsing/parser.ml"
         ) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (Longident.t) = Obj.magic _1 in
@@ -20247,9 +20288,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = 
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20253 "parsing/parser.ml"
+# 20294 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20272,14 +20313,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = let _1 = 
-# 3543 "parsing/parser.mly"
+# 3571 "parsing/parser.mly"
                                                   ( _1 )
-# 20278 "parsing/parser.ml"
+# 20319 "parsing/parser.ml"
          in
         
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20283 "parsing/parser.ml"
+# 20324 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20317,20 +20358,20 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = let _1 =
           let _1 = 
-# 3486 "parsing/parser.mly"
+# 3514 "parsing/parser.mly"
                                                 ( "::" )
-# 20323 "parsing/parser.ml"
+# 20364 "parsing/parser.ml"
            in
           
-# 3543 "parsing/parser.mly"
+# 3571 "parsing/parser.mly"
                                                   ( _1 )
-# 20328 "parsing/parser.ml"
+# 20369 "parsing/parser.ml"
           
         in
         
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20334 "parsing/parser.ml"
+# 20375 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20353,14 +20394,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = let _1 = 
-# 3543 "parsing/parser.mly"
+# 3571 "parsing/parser.mly"
                                                   ( _1 )
-# 20359 "parsing/parser.ml"
+# 20400 "parsing/parser.ml"
          in
         
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20364 "parsing/parser.ml"
+# 20405 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20399,15 +20440,15 @@ module Tables = struct
         let _v : (Longident.t) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3543 "parsing/parser.mly"
+# 3571 "parsing/parser.mly"
                                                   ( _1 )
-# 20405 "parsing/parser.ml"
+# 20446 "parsing/parser.ml"
           
         in
         
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20411 "parsing/parser.ml"
+# 20452 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20460,20 +20501,20 @@ module Tables = struct
         let _v : (Longident.t) = let _3 =
           let (_2, _1) = (_2_inlined1, _1_inlined1) in
           let _1 = 
-# 3486 "parsing/parser.mly"
+# 3514 "parsing/parser.mly"
                                                 ( "::" )
-# 20466 "parsing/parser.ml"
+# 20507 "parsing/parser.ml"
            in
           
-# 3543 "parsing/parser.mly"
+# 3571 "parsing/parser.mly"
                                                   ( _1 )
-# 20471 "parsing/parser.ml"
+# 20512 "parsing/parser.ml"
           
         in
         
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20477 "parsing/parser.ml"
+# 20518 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20512,15 +20553,15 @@ module Tables = struct
         let _v : (Longident.t) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3543 "parsing/parser.mly"
+# 3571 "parsing/parser.mly"
                                                   ( _1 )
-# 20518 "parsing/parser.ml"
+# 20559 "parsing/parser.ml"
           
         in
         
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20524 "parsing/parser.ml"
+# 20565 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20543,9 +20584,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20549 "parsing/parser.ml"
+# 20590 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20582,9 +20623,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = 
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20588 "parsing/parser.ml"
+# 20629 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20603,17 +20644,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 20609 "parsing/parser.ml"
+# 20650 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20617 "parsing/parser.ml"
+# 20658 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20644,9 +20685,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _3 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 20650 "parsing/parser.ml"
+# 20691 "parsing/parser.ml"
         ) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (Longident.t) = Obj.magic _1 in
@@ -20654,9 +20695,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = 
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20660 "parsing/parser.ml"
+# 20701 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20675,17 +20716,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 20681 "parsing/parser.ml"
+# 20722 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20689 "parsing/parser.ml"
+# 20730 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20716,9 +20757,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _3 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 20722 "parsing/parser.ml"
+# 20763 "parsing/parser.ml"
         ) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (Longident.t) = Obj.magic _1 in
@@ -20726,9 +20767,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = 
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20732 "parsing/parser.ml"
+# 20773 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20751,9 +20792,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3506 "parsing/parser.mly"
+# 3534 "parsing/parser.mly"
                       ( Lident _1 )
-# 20757 "parsing/parser.ml"
+# 20798 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20790,9 +20831,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = 
-# 3507 "parsing/parser.mly"
+# 3535 "parsing/parser.mly"
                       ( Ldot(_1,_3) )
-# 20796 "parsing/parser.ml"
+# 20837 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20815,9 +20856,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3522 "parsing/parser.mly"
+# 3550 "parsing/parser.mly"
                                             ( _1 )
-# 20821 "parsing/parser.ml"
+# 20862 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20864,9 +20905,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3524 "parsing/parser.mly"
+# 3552 "parsing/parser.mly"
       ( lapply ~loc:_sloc _1 _3 )
-# 20870 "parsing/parser.ml"
+# 20911 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20904,9 +20945,9 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 3526 "parsing/parser.mly"
+# 3554 "parsing/parser.mly"
       ( expecting _loc__3_ "module path" )
-# 20910 "parsing/parser.ml"
+# 20951 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20929,9 +20970,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3519 "parsing/parser.mly"
+# 3547 "parsing/parser.mly"
                                          ( _1 )
-# 20935 "parsing/parser.ml"
+# 20976 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -20961,9 +21002,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_me_ in
         let _v : (Parsetree.module_expr) = 
-# 1377 "parsing/parser.mly"
+# 1385 "parsing/parser.mly"
       ( me )
-# 20967 "parsing/parser.ml"
+# 21008 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21008,24 +21049,24 @@ module Tables = struct
         let _endpos = _endpos_me_ in
         let _v : (Parsetree.module_expr) = let _1 =
           let _1 = 
-# 1380 "parsing/parser.mly"
+# 1388 "parsing/parser.mly"
         ( Pmod_constraint(me, mty) )
-# 21014 "parsing/parser.ml"
+# 21055 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos_me_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 860 "parsing/parser.mly"
+# 868 "parsing/parser.mly"
     ( mkmod ~loc:_sloc _1 )
-# 21023 "parsing/parser.ml"
+# 21064 "parsing/parser.ml"
           
         in
         
-# 1384 "parsing/parser.mly"
+# 1392 "parsing/parser.mly"
     ( _1 )
-# 21029 "parsing/parser.ml"
+# 21070 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21056,25 +21097,25 @@ module Tables = struct
         let _endpos = _endpos_body_ in
         let _v : (Parsetree.module_expr) = let _1 =
           let _1 = 
-# 1382 "parsing/parser.mly"
+# 1390 "parsing/parser.mly"
         ( let (_, arg) = arg_and_pos in
           Pmod_functor(arg, body) )
-# 21063 "parsing/parser.ml"
+# 21104 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 860 "parsing/parser.mly"
+# 868 "parsing/parser.mly"
     ( mkmod ~loc:_sloc _1 )
-# 21072 "parsing/parser.ml"
+# 21113 "parsing/parser.ml"
           
         in
         
-# 1384 "parsing/parser.mly"
+# 1392 "parsing/parser.mly"
     ( _1 )
-# 21078 "parsing/parser.ml"
+# 21119 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21104,9 +21145,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_mty_ in
         let _v : (Parsetree.module_type) = 
-# 1621 "parsing/parser.mly"
+# 1629 "parsing/parser.mly"
       ( mty )
-# 21110 "parsing/parser.ml"
+# 21151 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21137,25 +21178,25 @@ module Tables = struct
         let _endpos = _endpos_body_ in
         let _v : (Parsetree.module_type) = let _1 =
           let _1 = 
-# 1624 "parsing/parser.mly"
+# 1632 "parsing/parser.mly"
         ( let (_, arg) = arg_and_pos in
           Pmty_functor(arg, body) )
-# 21144 "parsing/parser.ml"
+# 21185 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 862 "parsing/parser.mly"
+# 870 "parsing/parser.mly"
     ( mkmty ~loc:_sloc _1 )
-# 21153 "parsing/parser.ml"
+# 21194 "parsing/parser.ml"
           
         in
         
-# 1627 "parsing/parser.mly"
+# 1635 "parsing/parser.mly"
     ( _1 )
-# 21159 "parsing/parser.ml"
+# 21200 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21201,18 +21242,18 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21207 "parsing/parser.ml"
+# 21248 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1216 "parsing/parser.mly"
+# 1224 "parsing/parser.mly"
       ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) )
-# 21216 "parsing/parser.ml"
+# 21257 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21258,17 +21299,17 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21264 "parsing/parser.ml"
+# 21305 "parsing/parser.ml"
           
         in
         let _loc__4_ = (_startpos__4_, _endpos__4_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1218 "parsing/parser.mly"
+# 1226 "parsing/parser.mly"
       ( unclosed "struct" _loc__1_ "end" _loc__4_ )
-# 21272 "parsing/parser.ml"
+# 21313 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21321,30 +21362,30 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let args =
           let _1 = _1_inlined2 in
           
-# 1182 "parsing/parser.mly"
+# 1190 "parsing/parser.mly"
     ( _1 )
-# 21327 "parsing/parser.ml"
+# 21368 "parsing/parser.ml"
           
         in
         let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21335 "parsing/parser.ml"
+# 21376 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_me_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1220 "parsing/parser.mly"
+# 1228 "parsing/parser.mly"
       ( wrap_mod_attrs ~loc:_sloc attrs (
           List.fold_left (fun acc (startpos, arg) ->
             mkmod ~loc:(startpos, _endpos) (Pmod_functor (arg, acc))
           ) me args
         ) )
-# 21348 "parsing/parser.ml"
+# 21389 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21367,9 +21408,9 @@ module Tables = struct
         let _startpos = _startpos_me_ in
         let _endpos = _endpos_me_ in
         let _v : (Parsetree.module_expr) = 
-# 1226 "parsing/parser.mly"
+# 1234 "parsing/parser.mly"
       ( me )
-# 21373 "parsing/parser.ml"
+# 21414 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21399,9 +21440,9 @@ module Tables = struct
         let _startpos = _startpos_me_ in
         let _endpos = _endpos_attr_ in
         let _v : (Parsetree.module_expr) = 
-# 1228 "parsing/parser.mly"
+# 1236 "parsing/parser.mly"
       ( Mod.attr me attr )
-# 21405 "parsing/parser.ml"
+# 21446 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21430,30 +21471,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 21436 "parsing/parser.ml"
+# 21477 "parsing/parser.ml"
               
             in
             
-# 1232 "parsing/parser.mly"
+# 1240 "parsing/parser.mly"
         ( Pmod_ident x )
-# 21442 "parsing/parser.ml"
+# 21483 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 860 "parsing/parser.mly"
+# 868 "parsing/parser.mly"
     ( mkmod ~loc:_sloc _1 )
-# 21451 "parsing/parser.ml"
+# 21492 "parsing/parser.ml"
           
         in
         
-# 1244 "parsing/parser.mly"
+# 1252 "parsing/parser.mly"
     ( _1 )
-# 21457 "parsing/parser.ml"
+# 21498 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21484,24 +21525,24 @@ module Tables = struct
         let _endpos = _endpos_me2_ in
         let _v : (Parsetree.module_expr) = let _1 =
           let _1 = 
-# 1235 "parsing/parser.mly"
+# 1243 "parsing/parser.mly"
         ( Pmod_apply(me1, me2) )
-# 21490 "parsing/parser.ml"
+# 21531 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_me2_, _startpos_me1_) in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 860 "parsing/parser.mly"
+# 868 "parsing/parser.mly"
     ( mkmod ~loc:_sloc _1 )
-# 21499 "parsing/parser.ml"
+# 21540 "parsing/parser.ml"
           
         in
         
-# 1244 "parsing/parser.mly"
+# 1252 "parsing/parser.mly"
     ( _1 )
-# 21505 "parsing/parser.ml"
+# 21546 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21543,10 +21584,10 @@ module Tables = struct
             let _symbolstartpos = _startpos_me1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 1238 "parsing/parser.mly"
+# 1246 "parsing/parser.mly"
         ( (* TODO review mkmod location *)
           Pmod_apply(me1, mkmod ~loc:_sloc (Pmod_structure [])) )
-# 21550 "parsing/parser.ml"
+# 21591 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me1_) in
@@ -21554,15 +21595,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 860 "parsing/parser.mly"
+# 868 "parsing/parser.mly"
     ( mkmod ~loc:_sloc _1 )
-# 21560 "parsing/parser.ml"
+# 21601 "parsing/parser.ml"
           
         in
         
-# 1244 "parsing/parser.mly"
+# 1252 "parsing/parser.mly"
     ( _1 )
-# 21566 "parsing/parser.ml"
+# 21607 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21586,24 +21627,24 @@ module Tables = struct
         let _endpos = _endpos_ex_ in
         let _v : (Parsetree.module_expr) = let _1 =
           let _1 = 
-# 1242 "parsing/parser.mly"
+# 1250 "parsing/parser.mly"
         ( Pmod_extension ex )
-# 21592 "parsing/parser.ml"
+# 21633 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_ex_, _startpos_ex_) in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 860 "parsing/parser.mly"
+# 868 "parsing/parser.mly"
     ( mkmod ~loc:_sloc _1 )
-# 21601 "parsing/parser.ml"
+# 21642 "parsing/parser.ml"
           
         in
         
-# 1244 "parsing/parser.mly"
+# 1252 "parsing/parser.mly"
     ( _1 )
-# 21607 "parsing/parser.ml"
+# 21648 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21622,17 +21663,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let x : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 21628 "parsing/parser.ml"
+# 21669 "parsing/parser.ml"
         ) = Obj.magic x in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : (string option) = 
-# 1199 "parsing/parser.mly"
+# 1207 "parsing/parser.mly"
       ( Some x )
-# 21636 "parsing/parser.ml"
+# 21677 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21655,9 +21696,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string option) = 
-# 1202 "parsing/parser.mly"
+# 1210 "parsing/parser.mly"
       ( None )
-# 21661 "parsing/parser.ml"
+# 21702 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21715,9 +21756,9 @@ module Tables = struct
         let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined2 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 21721 "parsing/parser.ml"
+# 21762 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
         let ext : (string Asttypes.loc option) = Obj.magic ext in
@@ -21728,9 +21769,9 @@ module Tables = struct
         let _v : (Parsetree.module_substitution * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined4 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 21734 "parsing/parser.ml"
+# 21775 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined4_ in
@@ -21740,9 +21781,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 21746 "parsing/parser.ml"
+# 21787 "parsing/parser.ml"
           
         in
         let uid =
@@ -21751,31 +21792,31 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 21757 "parsing/parser.ml"
+# 21798 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21765 "parsing/parser.ml"
+# 21806 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1657 "parsing/parser.mly"
+# 1665 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Ms.mk uid body ~attrs ~loc ~docs, ext
   )
-# 21779 "parsing/parser.ml"
+# 21820 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21826,9 +21867,9 @@ module Tables = struct
         let _6 : unit = Obj.magic _6 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined2 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 21832 "parsing/parser.ml"
+# 21873 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
         let _2 : (string Asttypes.loc option) = Obj.magic _2 in
@@ -21842,24 +21883,24 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 21848 "parsing/parser.ml"
+# 21889 "parsing/parser.ml"
           
         in
         let _3 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21856 "parsing/parser.ml"
+# 21897 "parsing/parser.ml"
           
         in
         let _loc__6_ = (_startpos__6_, _endpos__6_) in
         
-# 1664 "parsing/parser.mly"
+# 1672 "parsing/parser.mly"
     ( expecting _loc__6_ "module path" )
-# 21863 "parsing/parser.ml"
+# 21904 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21905,18 +21946,18 @@ module Tables = struct
         let _v : (Parsetree.module_type) = let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21911 "parsing/parser.ml"
+# 21952 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__4_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1509 "parsing/parser.mly"
+# 1517 "parsing/parser.mly"
       ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) )
-# 21920 "parsing/parser.ml"
+# 21961 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -21962,17 +22003,17 @@ module Tables = struct
         let _v : (Parsetree.module_type) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 21968 "parsing/parser.ml"
+# 22009 "parsing/parser.ml"
           
         in
         let _loc__4_ = (_startpos__4_, _endpos__4_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1511 "parsing/parser.mly"
+# 1519 "parsing/parser.mly"
       ( unclosed "sig" _loc__1_ "end" _loc__4_ )
-# 21976 "parsing/parser.ml"
+# 22017 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22025,30 +22066,30 @@ module Tables = struct
         let _v : (Parsetree.module_type) = let args =
           let _1 = _1_inlined2 in
           
-# 1182 "parsing/parser.mly"
+# 1190 "parsing/parser.mly"
     ( _1 )
-# 22031 "parsing/parser.ml"
+# 22072 "parsing/parser.ml"
           
         in
         let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 22039 "parsing/parser.ml"
+# 22080 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_mty_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1515 "parsing/parser.mly"
+# 1523 "parsing/parser.mly"
       ( wrap_mty_attrs ~loc:_sloc attrs (
           List.fold_left (fun acc (startpos, arg) ->
             mkmty ~loc:(startpos, _endpos) (Pmty_functor (arg, acc))
           ) mty args
         ) )
-# 22052 "parsing/parser.ml"
+# 22093 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22101,18 +22142,18 @@ module Tables = struct
         let _v : (Parsetree.module_type) = let _4 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 22107 "parsing/parser.ml"
+# 22148 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1521 "parsing/parser.mly"
+# 1529 "parsing/parser.mly"
       ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) )
-# 22116 "parsing/parser.ml"
+# 22157 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22149,9 +22190,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.module_type) = 
-# 1523 "parsing/parser.mly"
+# 1531 "parsing/parser.mly"
       ( _2 )
-# 22155 "parsing/parser.ml"
+# 22196 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22190,9 +22231,9 @@ module Tables = struct
         let _v : (Parsetree.module_type) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1525 "parsing/parser.mly"
+# 1533 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__3_ )
-# 22196 "parsing/parser.ml"
+# 22237 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22222,9 +22263,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.module_type) = 
-# 1527 "parsing/parser.mly"
+# 1535 "parsing/parser.mly"
       ( Mty.attr _1 _2 )
-# 22228 "parsing/parser.ml"
+# 22269 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22253,30 +22294,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 22259 "parsing/parser.ml"
+# 22300 "parsing/parser.ml"
               
             in
             
-# 1530 "parsing/parser.mly"
+# 1538 "parsing/parser.mly"
         ( Pmty_ident _1 )
-# 22265 "parsing/parser.ml"
+# 22306 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 862 "parsing/parser.mly"
+# 870 "parsing/parser.mly"
     ( mkmty ~loc:_sloc _1 )
-# 22274 "parsing/parser.ml"
+# 22315 "parsing/parser.ml"
           
         in
         
-# 1541 "parsing/parser.mly"
+# 1549 "parsing/parser.mly"
     ( _1 )
-# 22280 "parsing/parser.ml"
+# 22321 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22314,24 +22355,24 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.module_type) = let _1 =
           let _1 = 
-# 1533 "parsing/parser.mly"
+# 1541 "parsing/parser.mly"
         ( Pmty_functor(Named (mknoloc None, _1), _3) )
-# 22320 "parsing/parser.ml"
+# 22361 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 862 "parsing/parser.mly"
+# 870 "parsing/parser.mly"
     ( mkmty ~loc:_sloc _1 )
-# 22329 "parsing/parser.ml"
+# 22370 "parsing/parser.ml"
           
         in
         
-# 1541 "parsing/parser.mly"
+# 1549 "parsing/parser.mly"
     ( _1 )
-# 22335 "parsing/parser.ml"
+# 22376 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22373,18 +22414,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 22377 "parsing/parser.ml"
+# 22418 "parsing/parser.ml"
                in
               
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 22382 "parsing/parser.ml"
+# 22423 "parsing/parser.ml"
               
             in
             
-# 1535 "parsing/parser.mly"
+# 1543 "parsing/parser.mly"
         ( Pmty_with(_1, _3) )
-# 22388 "parsing/parser.ml"
+# 22429 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_xs_ in
@@ -22392,15 +22433,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 862 "parsing/parser.mly"
+# 870 "parsing/parser.mly"
     ( mkmty ~loc:_sloc _1 )
-# 22398 "parsing/parser.ml"
+# 22439 "parsing/parser.ml"
           
         in
         
-# 1541 "parsing/parser.mly"
+# 1549 "parsing/parser.mly"
     ( _1 )
-# 22404 "parsing/parser.ml"
+# 22445 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22424,23 +22465,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.module_type) = let _1 =
           let _1 = 
-# 1539 "parsing/parser.mly"
+# 1547 "parsing/parser.mly"
         ( Pmty_extension _1 )
-# 22430 "parsing/parser.ml"
+# 22471 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 862 "parsing/parser.mly"
+# 870 "parsing/parser.mly"
     ( mkmty ~loc:_sloc _1 )
-# 22438 "parsing/parser.ml"
+# 22479 "parsing/parser.ml"
           
         in
         
-# 1541 "parsing/parser.mly"
+# 1549 "parsing/parser.mly"
     ( _1 )
-# 22444 "parsing/parser.ml"
+# 22485 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22507,9 +22548,9 @@ module Tables = struct
         let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 22513 "parsing/parser.ml"
+# 22554 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -22519,31 +22560,31 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 22525 "parsing/parser.ml"
+# 22566 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 22533 "parsing/parser.ml"
+# 22574 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1455 "parsing/parser.mly"
+# 1463 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Mtd.mk id ?typ ~attrs ~loc ~docs, ext
   )
-# 22547 "parsing/parser.ml"
+# 22588 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22566,9 +22607,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3529 "parsing/parser.mly"
+# 3557 "parsing/parser.mly"
                                           ( _1 )
-# 22572 "parsing/parser.ml"
+# 22613 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22584,9 +22625,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.mutable_flag) = 
-# 3606 "parsing/parser.mly"
+# 3634 "parsing/parser.mly"
                                                 ( Immutable )
-# 22590 "parsing/parser.ml"
+# 22631 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22609,9 +22650,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.mutable_flag) = 
-# 3607 "parsing/parser.mly"
+# 3635 "parsing/parser.mly"
                                                 ( Mutable )
-# 22615 "parsing/parser.ml"
+# 22656 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22627,9 +22668,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = 
-# 3615 "parsing/parser.mly"
+# 3643 "parsing/parser.mly"
       ( Immutable, Concrete )
-# 22633 "parsing/parser.ml"
+# 22674 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22652,9 +22693,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = 
-# 3617 "parsing/parser.mly"
+# 3645 "parsing/parser.mly"
       ( Mutable, Concrete )
-# 22658 "parsing/parser.ml"
+# 22699 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22677,9 +22718,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = 
-# 3619 "parsing/parser.mly"
+# 3647 "parsing/parser.mly"
       ( Immutable, Virtual )
-# 22683 "parsing/parser.ml"
+# 22724 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22709,9 +22750,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = 
-# 3622 "parsing/parser.mly"
+# 3650 "parsing/parser.mly"
       ( Mutable, Virtual )
-# 22715 "parsing/parser.ml"
+# 22756 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22741,9 +22782,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = 
-# 3622 "parsing/parser.mly"
+# 3650 "parsing/parser.mly"
       ( Mutable, Virtual )
-# 22747 "parsing/parser.ml"
+# 22788 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22773,9 +22814,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.label) = 
-# 3579 "parsing/parser.mly"
+# 3607 "parsing/parser.mly"
                                                 ( _2 )
-# 22779 "parsing/parser.ml"
+# 22820 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22794,9 +22835,9 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 22800 "parsing/parser.ml"
+# 22841 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -22806,15 +22847,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 22812 "parsing/parser.ml"
+# 22853 "parsing/parser.ml"
           
         in
         
 # 221 "<standard.mly>"
     ( [ x ] )
-# 22818 "parsing/parser.ml"
+# 22859 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22840,9 +22881,9 @@ module Tables = struct
         } = _menhir_stack in
         let xs : (string Asttypes.loc list) = Obj.magic xs in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 22846 "parsing/parser.ml"
+# 22887 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -22852,15 +22893,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 22858 "parsing/parser.ml"
+# 22899 "parsing/parser.ml"
           
         in
         
 # 223 "<standard.mly>"
     ( x :: xs )
-# 22864 "parsing/parser.ml"
+# 22905 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22879,22 +22920,22 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let s : (
-# 689 "parsing/parser.mly"
+# 697 "parsing/parser.mly"
        (string * Location.t * string option)
-# 22885 "parsing/parser.ml"
+# 22926 "parsing/parser.ml"
         ) = Obj.magic s in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_s_ in
         let _v : (string list) = let x = 
-# 3575 "parsing/parser.mly"
+# 3603 "parsing/parser.mly"
     ( let body, _, _ = s in body )
-# 22893 "parsing/parser.ml"
+# 22934 "parsing/parser.ml"
          in
         
 # 221 "<standard.mly>"
     ( [ x ] )
-# 22898 "parsing/parser.ml"
+# 22939 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22920,22 +22961,22 @@ module Tables = struct
         } = _menhir_stack in
         let xs : (string list) = Obj.magic xs in
         let s : (
-# 689 "parsing/parser.mly"
+# 697 "parsing/parser.mly"
        (string * Location.t * string option)
-# 22926 "parsing/parser.ml"
+# 22967 "parsing/parser.ml"
         ) = Obj.magic s in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_s_ in
         let _endpos = _endpos_xs_ in
         let _v : (string list) = let x = 
-# 3575 "parsing/parser.mly"
+# 3603 "parsing/parser.mly"
     ( let body, _, _ = s in body )
-# 22934 "parsing/parser.ml"
+# 22975 "parsing/parser.ml"
          in
         
 # 223 "<standard.mly>"
     ( x :: xs )
-# 22939 "parsing/parser.ml"
+# 22980 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22958,14 +22999,14 @@ module Tables = struct
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 22964 "parsing/parser.ml"
+# 23005 "parsing/parser.ml"
          in
         
-# 2901 "parsing/parser.mly"
+# 2921 "parsing/parser.mly"
       ( (Ptype_abstract, priv, Some ty) )
-# 22969 "parsing/parser.ml"
+# 23010 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -22995,14 +23036,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_ty_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23001 "parsing/parser.ml"
+# 23042 "parsing/parser.ml"
          in
         
-# 2901 "parsing/parser.mly"
+# 2921 "parsing/parser.mly"
       ( (Ptype_abstract, priv, Some ty) )
-# 23006 "parsing/parser.ml"
+# 23047 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23025,26 +23066,26 @@ module Tables = struct
         let _startpos = _startpos_cs_ in
         let _endpos = _endpos_cs_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 23031 "parsing/parser.ml"
+# 23072 "parsing/parser.ml"
          in
         let oty =
           let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 23037 "parsing/parser.ml"
+# 23078 "parsing/parser.ml"
            in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23042 "parsing/parser.ml"
+# 23083 "parsing/parser.ml"
           
         in
         
-# 2905 "parsing/parser.mly"
+# 2925 "parsing/parser.mly"
       ( (Ptype_variant cs, priv, oty) )
-# 23048 "parsing/parser.ml"
+# 23089 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23074,26 +23115,26 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos_cs_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23080 "parsing/parser.ml"
+# 23121 "parsing/parser.ml"
          in
         let oty =
           let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 23086 "parsing/parser.ml"
+# 23127 "parsing/parser.ml"
            in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23091 "parsing/parser.ml"
+# 23132 "parsing/parser.ml"
           
         in
         
-# 2905 "parsing/parser.mly"
+# 2925 "parsing/parser.mly"
       ( (Ptype_variant cs, priv, oty) )
-# 23097 "parsing/parser.ml"
+# 23138 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23130,33 +23171,33 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_cs_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 23136 "parsing/parser.ml"
+# 23177 "parsing/parser.ml"
          in
         let oty =
           let _1 =
             let x = 
 # 191 "<standard.mly>"
     ( x )
-# 23143 "parsing/parser.ml"
+# 23184 "parsing/parser.ml"
              in
             
 # 126 "<standard.mly>"
     ( Some x )
-# 23148 "parsing/parser.ml"
+# 23189 "parsing/parser.ml"
             
           in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23154 "parsing/parser.ml"
+# 23195 "parsing/parser.ml"
           
         in
         
-# 2905 "parsing/parser.mly"
+# 2925 "parsing/parser.mly"
       ( (Ptype_variant cs, priv, oty) )
-# 23160 "parsing/parser.ml"
+# 23201 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23200,33 +23241,33 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_cs_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23206 "parsing/parser.ml"
+# 23247 "parsing/parser.ml"
          in
         let oty =
           let _1 =
             let x = 
 # 191 "<standard.mly>"
     ( x )
-# 23213 "parsing/parser.ml"
+# 23254 "parsing/parser.ml"
              in
             
 # 126 "<standard.mly>"
     ( Some x )
-# 23218 "parsing/parser.ml"
+# 23259 "parsing/parser.ml"
             
           in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23224 "parsing/parser.ml"
+# 23265 "parsing/parser.ml"
           
         in
         
-# 2905 "parsing/parser.mly"
+# 2925 "parsing/parser.mly"
       ( (Ptype_variant cs, priv, oty) )
-# 23230 "parsing/parser.ml"
+# 23271 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23249,26 +23290,26 @@ module Tables = struct
         let _startpos = _startpos__3_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 23255 "parsing/parser.ml"
+# 23296 "parsing/parser.ml"
          in
         let oty =
           let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 23261 "parsing/parser.ml"
+# 23302 "parsing/parser.ml"
            in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23266 "parsing/parser.ml"
+# 23307 "parsing/parser.ml"
           
         in
         
-# 2909 "parsing/parser.mly"
+# 2929 "parsing/parser.mly"
       ( (Ptype_open, priv, oty) )
-# 23272 "parsing/parser.ml"
+# 23313 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23298,26 +23339,26 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23304 "parsing/parser.ml"
+# 23345 "parsing/parser.ml"
          in
         let oty =
           let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 23310 "parsing/parser.ml"
+# 23351 "parsing/parser.ml"
            in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23315 "parsing/parser.ml"
+# 23356 "parsing/parser.ml"
           
         in
         
-# 2909 "parsing/parser.mly"
+# 2929 "parsing/parser.mly"
       ( (Ptype_open, priv, oty) )
-# 23321 "parsing/parser.ml"
+# 23362 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23354,33 +23395,33 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 23360 "parsing/parser.ml"
+# 23401 "parsing/parser.ml"
          in
         let oty =
           let _1 =
             let x = 
 # 191 "<standard.mly>"
     ( x )
-# 23367 "parsing/parser.ml"
+# 23408 "parsing/parser.ml"
              in
             
 # 126 "<standard.mly>"
     ( Some x )
-# 23372 "parsing/parser.ml"
+# 23413 "parsing/parser.ml"
             
           in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23378 "parsing/parser.ml"
+# 23419 "parsing/parser.ml"
           
         in
         
-# 2909 "parsing/parser.mly"
+# 2929 "parsing/parser.mly"
       ( (Ptype_open, priv, oty) )
-# 23384 "parsing/parser.ml"
+# 23425 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23424,33 +23465,33 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23430 "parsing/parser.ml"
+# 23471 "parsing/parser.ml"
          in
         let oty =
           let _1 =
             let x = 
 # 191 "<standard.mly>"
     ( x )
-# 23437 "parsing/parser.ml"
+# 23478 "parsing/parser.ml"
              in
             
 # 126 "<standard.mly>"
     ( Some x )
-# 23442 "parsing/parser.ml"
+# 23483 "parsing/parser.ml"
             
           in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23448 "parsing/parser.ml"
+# 23489 "parsing/parser.ml"
           
         in
         
-# 2909 "parsing/parser.mly"
+# 2929 "parsing/parser.mly"
       ( (Ptype_open, priv, oty) )
-# 23454 "parsing/parser.ml"
+# 23495 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23487,26 +23528,26 @@ module Tables = struct
         let _startpos = _startpos__3_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 23493 "parsing/parser.ml"
+# 23534 "parsing/parser.ml"
          in
         let oty =
           let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 23499 "parsing/parser.ml"
+# 23540 "parsing/parser.ml"
            in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23504 "parsing/parser.ml"
+# 23545 "parsing/parser.ml"
           
         in
         
-# 2913 "parsing/parser.mly"
+# 2933 "parsing/parser.mly"
       ( (Ptype_record ls, priv, oty) )
-# 23510 "parsing/parser.ml"
+# 23551 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23550,26 +23591,26 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23556 "parsing/parser.ml"
+# 23597 "parsing/parser.ml"
          in
         let oty =
           let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 23562 "parsing/parser.ml"
+# 23603 "parsing/parser.ml"
            in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23567 "parsing/parser.ml"
+# 23608 "parsing/parser.ml"
           
         in
         
-# 2913 "parsing/parser.mly"
+# 2933 "parsing/parser.mly"
       ( (Ptype_record ls, priv, oty) )
-# 23573 "parsing/parser.ml"
+# 23614 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23620,33 +23661,33 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 23626 "parsing/parser.ml"
+# 23667 "parsing/parser.ml"
          in
         let oty =
           let _1 =
             let x = 
 # 191 "<standard.mly>"
     ( x )
-# 23633 "parsing/parser.ml"
+# 23674 "parsing/parser.ml"
              in
             
 # 126 "<standard.mly>"
     ( Some x )
-# 23638 "parsing/parser.ml"
+# 23679 "parsing/parser.ml"
             
           in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23644 "parsing/parser.ml"
+# 23685 "parsing/parser.ml"
           
         in
         
-# 2913 "parsing/parser.mly"
+# 2933 "parsing/parser.mly"
       ( (Ptype_record ls, priv, oty) )
-# 23650 "parsing/parser.ml"
+# 23691 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23704,33 +23745,33 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 23710 "parsing/parser.ml"
+# 23751 "parsing/parser.ml"
          in
         let oty =
           let _1 =
             let x = 
 # 191 "<standard.mly>"
     ( x )
-# 23717 "parsing/parser.ml"
+# 23758 "parsing/parser.ml"
              in
             
 # 126 "<standard.mly>"
     ( Some x )
-# 23722 "parsing/parser.ml"
+# 23763 "parsing/parser.ml"
             
           in
           
-# 2917 "parsing/parser.mly"
+# 2937 "parsing/parser.mly"
     ( _1 )
-# 23728 "parsing/parser.ml"
+# 23769 "parsing/parser.ml"
           
         in
         
-# 2913 "parsing/parser.mly"
+# 2933 "parsing/parser.mly"
       ( (Ptype_record ls, priv, oty) )
-# 23734 "parsing/parser.ml"
+# 23775 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23783,37 +23824,37 @@ module Tables = struct
         let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined2 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 23789 "parsing/parser.ml"
+# 23830 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined2_ in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 23798 "parsing/parser.ml"
+# 23839 "parsing/parser.ml"
           
         in
         let override = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 23804 "parsing/parser.ml"
+# 23845 "parsing/parser.ml"
          in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1474 "parsing/parser.mly"
+# 1482 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Opn.mk me ~override ~attrs ~loc ~docs, ext
   )
-# 23817 "parsing/parser.ml"
+# 23858 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23873,40 +23914,40 @@ module Tables = struct
         let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 23879 "parsing/parser.ml"
+# 23920 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
         let attrs1 =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 23888 "parsing/parser.ml"
+# 23929 "parsing/parser.ml"
           
         in
         let override =
           let _1 = _1_inlined1 in
           
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 23896 "parsing/parser.ml"
+# 23937 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1474 "parsing/parser.mly"
+# 1482 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Opn.mk me ~override ~attrs ~loc ~docs, ext
   )
-# 23910 "parsing/parser.ml"
+# 23951 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -23959,9 +24000,9 @@ module Tables = struct
         let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 23965 "parsing/parser.ml"
+# 24006 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -23971,36 +24012,36 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 23977 "parsing/parser.ml"
+# 24018 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 23985 "parsing/parser.ml"
+# 24026 "parsing/parser.ml"
           
         in
         let override = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 23991 "parsing/parser.ml"
+# 24032 "parsing/parser.ml"
          in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1489 "parsing/parser.mly"
+# 1497 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Opn.mk id ~override ~attrs ~loc ~docs, ext
   )
-# 24004 "parsing/parser.ml"
+# 24045 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24060,9 +24101,9 @@ module Tables = struct
         let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined4 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 24066 "parsing/parser.ml"
+# 24107 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined4_ in
@@ -24072,39 +24113,39 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 24078 "parsing/parser.ml"
+# 24119 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined2 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 24086 "parsing/parser.ml"
+# 24127 "parsing/parser.ml"
           
         in
         let override =
           let _1 = _1_inlined1 in
           
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 24094 "parsing/parser.ml"
+# 24135 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1489 "parsing/parser.mly"
+# 1497 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Opn.mk id ~override ~attrs ~loc ~docs, ext
   )
-# 24108 "parsing/parser.ml"
+# 24149 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24123,17 +24164,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 675 "parsing/parser.mly"
+# 683 "parsing/parser.mly"
        (string)
-# 24129 "parsing/parser.ml"
+# 24170 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3445 "parsing/parser.mly"
+# 3465 "parsing/parser.mly"
                                                 ( _1 )
-# 24137 "parsing/parser.ml"
+# 24178 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24152,17 +24193,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 633 "parsing/parser.mly"
+# 641 "parsing/parser.mly"
        (string)
-# 24158 "parsing/parser.ml"
+# 24199 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3446 "parsing/parser.mly"
+# 3466 "parsing/parser.mly"
                                                 ( _1 )
-# 24166 "parsing/parser.ml"
+# 24207 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24181,17 +24222,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 634 "parsing/parser.mly"
+# 642 "parsing/parser.mly"
        (string)
-# 24187 "parsing/parser.ml"
+# 24228 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3447 "parsing/parser.mly"
+# 3467 "parsing/parser.mly"
                                                 ( _1 )
-# 24195 "parsing/parser.ml"
+# 24236 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24231,17 +24272,17 @@ module Tables = struct
         let _3 : (string) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 24237 "parsing/parser.ml"
+# 24278 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Asttypes.label) = 
-# 3448 "parsing/parser.mly"
+# 3468 "parsing/parser.mly"
                                                 ( "."^ _1 ^"(" ^ _3 ^ ")" )
-# 24245 "parsing/parser.ml"
+# 24286 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24288,17 +24329,17 @@ module Tables = struct
         let _3 : (string) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 24294 "parsing/parser.ml"
+# 24335 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Asttypes.label) = 
-# 3449 "parsing/parser.mly"
+# 3469 "parsing/parser.mly"
                                                 ( "."^ _1 ^ "(" ^ _3 ^ ")<-" )
-# 24302 "parsing/parser.ml"
+# 24343 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24338,17 +24379,17 @@ module Tables = struct
         let _3 : (string) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 24344 "parsing/parser.ml"
+# 24385 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Asttypes.label) = 
-# 3450 "parsing/parser.mly"
+# 3470 "parsing/parser.mly"
                                                 ( "."^ _1 ^"[" ^ _3 ^ "]" )
-# 24352 "parsing/parser.ml"
+# 24393 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24395,17 +24436,17 @@ module Tables = struct
         let _3 : (string) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 24401 "parsing/parser.ml"
+# 24442 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Asttypes.label) = 
-# 3451 "parsing/parser.mly"
+# 3471 "parsing/parser.mly"
                                                 ( "."^ _1 ^ "[" ^ _3 ^ "]<-" )
-# 24409 "parsing/parser.ml"
+# 24450 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24445,17 +24486,17 @@ module Tables = struct
         let _3 : (string) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 24451 "parsing/parser.ml"
+# 24492 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Asttypes.label) = 
-# 3452 "parsing/parser.mly"
+# 3472 "parsing/parser.mly"
                                                 ( "."^ _1 ^"{" ^ _3 ^ "}" )
-# 24459 "parsing/parser.ml"
+# 24500 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24502,17 +24543,17 @@ module Tables = struct
         let _3 : (string) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 24508 "parsing/parser.ml"
+# 24549 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Asttypes.label) = 
-# 3453 "parsing/parser.mly"
+# 3473 "parsing/parser.mly"
                                                 ( "."^ _1 ^ "{" ^ _3 ^ "}<-" )
-# 24516 "parsing/parser.ml"
+# 24557 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24531,17 +24572,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 686 "parsing/parser.mly"
+# 694 "parsing/parser.mly"
        (string)
-# 24537 "parsing/parser.ml"
+# 24578 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3454 "parsing/parser.mly"
+# 3474 "parsing/parser.mly"
                                                 ( _1 )
-# 24545 "parsing/parser.ml"
+# 24586 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24564,9 +24605,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3455 "parsing/parser.mly"
+# 3475 "parsing/parser.mly"
                                                 ( "!" )
-# 24570 "parsing/parser.ml"
+# 24611 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24585,22 +24626,33 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let op : (
-# 627 "parsing/parser.mly"
+# 635 "parsing/parser.mly"
        (string)
-# 24591 "parsing/parser.ml"
+# 24632 "parsing/parser.ml"
         ) = Obj.magic op in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_op_ in
         let _endpos = _endpos_op_ in
-        let _v : (Asttypes.label) = let _1 = 
-# 3459 "parsing/parser.mly"
-                  ( op )
-# 24599 "parsing/parser.ml"
-         in
+        let _v : (Asttypes.label) = let _1 =
+          let _endpos = _endpos_op_ in
+          let _startpos = _startpos_op_ in
+          let _loc = (_startpos, _endpos) in
+          
+# 3479 "parsing/parser.mly"
+                  ( if language_level < 4
+                    then begin match op with
+                             "==" -> infixop0 ~loc:_loc "="
+                           | "!=" -> infixop0 ~loc:_loc "<>"
+                           | _ -> op
+                         end
+                    else op )
+# 24650 "parsing/parser.ml"
+          
+        in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24604 "parsing/parser.ml"
+# 24656 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24619,22 +24671,22 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let op : (
-# 628 "parsing/parser.mly"
+# 636 "parsing/parser.mly"
        (string)
-# 24625 "parsing/parser.ml"
+# 24677 "parsing/parser.ml"
         ) = Obj.magic op in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_op_ in
         let _endpos = _endpos_op_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3460 "parsing/parser.mly"
+# 3486 "parsing/parser.mly"
                   ( op )
-# 24633 "parsing/parser.ml"
+# 24685 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24638 "parsing/parser.ml"
+# 24690 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24653,22 +24705,22 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let op : (
-# 629 "parsing/parser.mly"
+# 637 "parsing/parser.mly"
        (string)
-# 24659 "parsing/parser.ml"
+# 24711 "parsing/parser.ml"
         ) = Obj.magic op in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_op_ in
         let _endpos = _endpos_op_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3461 "parsing/parser.mly"
+# 3487 "parsing/parser.mly"
                   ( op )
-# 24667 "parsing/parser.ml"
+# 24719 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24672 "parsing/parser.ml"
+# 24724 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24687,22 +24739,22 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let op : (
-# 630 "parsing/parser.mly"
+# 638 "parsing/parser.mly"
        (string)
-# 24693 "parsing/parser.ml"
+# 24745 "parsing/parser.ml"
         ) = Obj.magic op in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_op_ in
         let _endpos = _endpos_op_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3462 "parsing/parser.mly"
+# 3488 "parsing/parser.mly"
                   ( op )
-# 24701 "parsing/parser.ml"
+# 24753 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24706 "parsing/parser.ml"
+# 24758 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24721,22 +24773,22 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let op : (
-# 631 "parsing/parser.mly"
+# 639 "parsing/parser.mly"
        (string)
-# 24727 "parsing/parser.ml"
+# 24779 "parsing/parser.ml"
         ) = Obj.magic op in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos_op_ in
         let _endpos = _endpos_op_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3463 "parsing/parser.mly"
+# 3489 "parsing/parser.mly"
                   ( op )
-# 24735 "parsing/parser.ml"
+# 24787 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24740 "parsing/parser.ml"
+# 24792 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24759,14 +24811,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3464 "parsing/parser.mly"
+# 3490 "parsing/parser.mly"
                    ("+")
-# 24765 "parsing/parser.ml"
+# 24817 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24770 "parsing/parser.ml"
+# 24822 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24789,14 +24841,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3465 "parsing/parser.mly"
+# 3491 "parsing/parser.mly"
                   ("+.")
-# 24795 "parsing/parser.ml"
+# 24847 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24800 "parsing/parser.ml"
+# 24852 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24819,14 +24871,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3466 "parsing/parser.mly"
+# 3492 "parsing/parser.mly"
                   ("+=")
-# 24825 "parsing/parser.ml"
+# 24877 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24830 "parsing/parser.ml"
+# 24882 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24849,14 +24901,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3467 "parsing/parser.mly"
+# 3493 "parsing/parser.mly"
                    ("-")
-# 24855 "parsing/parser.ml"
+# 24907 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24860 "parsing/parser.ml"
+# 24912 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24879,14 +24931,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3468 "parsing/parser.mly"
+# 3494 "parsing/parser.mly"
                   ("-.")
-# 24885 "parsing/parser.ml"
+# 24937 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24890 "parsing/parser.ml"
+# 24942 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24909,14 +24961,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3469 "parsing/parser.mly"
+# 3495 "parsing/parser.mly"
                    ("*")
-# 24915 "parsing/parser.ml"
+# 24967 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24920 "parsing/parser.ml"
+# 24972 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24939,14 +24991,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3470 "parsing/parser.mly"
+# 3496 "parsing/parser.mly"
                    ("%")
-# 24945 "parsing/parser.ml"
+# 24997 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24950 "parsing/parser.ml"
+# 25002 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24969,14 +25021,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3471 "parsing/parser.mly"
+# 3497 "parsing/parser.mly"
                    ("=")
-# 24975 "parsing/parser.ml"
+# 25027 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 24980 "parsing/parser.ml"
+# 25032 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -24999,14 +25051,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3472 "parsing/parser.mly"
+# 3498 "parsing/parser.mly"
                    ("<")
-# 25005 "parsing/parser.ml"
+# 25057 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25010 "parsing/parser.ml"
+# 25062 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25029,14 +25081,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3473 "parsing/parser.mly"
+# 3499 "parsing/parser.mly"
                    (">")
-# 25035 "parsing/parser.ml"
+# 25087 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25040 "parsing/parser.ml"
+# 25092 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25059,14 +25111,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3474 "parsing/parser.mly"
+# 3500 "parsing/parser.mly"
                   ("or")
-# 25065 "parsing/parser.ml"
+# 25117 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25070 "parsing/parser.ml"
+# 25122 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25089,14 +25141,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3475 "parsing/parser.mly"
+# 3501 "parsing/parser.mly"
                   ("||")
-# 25095 "parsing/parser.ml"
+# 25147 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25100 "parsing/parser.ml"
+# 25152 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25119,14 +25171,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3476 "parsing/parser.mly"
+# 3502 "parsing/parser.mly"
                    ("&")
-# 25125 "parsing/parser.ml"
+# 25177 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25130 "parsing/parser.ml"
+# 25182 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25149,14 +25201,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = let _1 = 
-# 3477 "parsing/parser.mly"
+# 3503 "parsing/parser.mly"
                   ("&&")
-# 25155 "parsing/parser.ml"
+# 25207 "parsing/parser.ml"
          in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25160 "parsing/parser.ml"
+# 25212 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25178,15 +25230,22 @@ module Tables = struct
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
-        let _v : (Asttypes.label) = let _1 = 
-# 3478 "parsing/parser.mly"
-                  (":=")
-# 25185 "parsing/parser.ml"
-         in
+        let _v : (Asttypes.label) = let _1 =
+          let _endpos = _endpos__1_ in
+          let _startpos = _startpos__1_ in
+          let _loc = (_startpos, _endpos) in
+          
+# 3504 "parsing/parser.mly"
+                  ( if language_level < 3
+                    then expert_exp ~loc:_loc "assign"
+                    else ":=" )
+# 25243 "parsing/parser.ml"
+          
+        in
         
-# 3456 "parsing/parser.mly"
+# 3476 "parsing/parser.mly"
                                                 ( _1 )
-# 25190 "parsing/parser.ml"
+# 25249 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25209,9 +25268,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (bool) = 
-# 3360 "parsing/parser.mly"
+# 3380 "parsing/parser.mly"
                                                 ( true )
-# 25215 "parsing/parser.ml"
+# 25274 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25227,9 +25286,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (bool) = 
-# 3361 "parsing/parser.mly"
+# 3381 "parsing/parser.mly"
                                                 ( false )
-# 25233 "parsing/parser.ml"
+# 25292 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25247,7 +25306,7 @@ module Tables = struct
         let _v : (unit option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25251 "parsing/parser.ml"
+# 25310 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25272,7 +25331,7 @@ module Tables = struct
         let _v : (unit option) = 
 # 116 "<standard.mly>"
     ( Some x )
-# 25276 "parsing/parser.ml"
+# 25335 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25290,7 +25349,7 @@ module Tables = struct
         let _v : (unit option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25294 "parsing/parser.ml"
+# 25353 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25315,7 +25374,7 @@ module Tables = struct
         let _v : (unit option) = 
 # 116 "<standard.mly>"
     ( Some x )
-# 25319 "parsing/parser.ml"
+# 25378 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25333,7 +25392,7 @@ module Tables = struct
         let _v : (string Asttypes.loc option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25337 "parsing/parser.ml"
+# 25396 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25358,9 +25417,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 25364 "parsing/parser.ml"
+# 25423 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -25373,21 +25432,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 25379 "parsing/parser.ml"
+# 25438 "parsing/parser.ml"
             
           in
           
 # 183 "<standard.mly>"
     ( x )
-# 25385 "parsing/parser.ml"
+# 25444 "parsing/parser.ml"
           
         in
         
 # 116 "<standard.mly>"
     ( Some x )
-# 25391 "parsing/parser.ml"
+# 25450 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25405,7 +25464,7 @@ module Tables = struct
         let _v : (Parsetree.core_type option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25409 "parsing/parser.ml"
+# 25468 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25437,12 +25496,12 @@ module Tables = struct
         let _v : (Parsetree.core_type option) = let x = 
 # 183 "<standard.mly>"
     ( x )
-# 25441 "parsing/parser.ml"
+# 25500 "parsing/parser.ml"
          in
         
 # 116 "<standard.mly>"
     ( Some x )
-# 25446 "parsing/parser.ml"
+# 25505 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25460,7 +25519,7 @@ module Tables = struct
         let _v : (Parsetree.expression option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25464 "parsing/parser.ml"
+# 25523 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25492,12 +25551,12 @@ module Tables = struct
         let _v : (Parsetree.expression option) = let x = 
 # 183 "<standard.mly>"
     ( x )
-# 25496 "parsing/parser.ml"
+# 25555 "parsing/parser.ml"
          in
         
 # 116 "<standard.mly>"
     ( Some x )
-# 25501 "parsing/parser.ml"
+# 25560 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25515,7 +25574,7 @@ module Tables = struct
         let _v : (Parsetree.module_type option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25519 "parsing/parser.ml"
+# 25578 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25547,12 +25606,12 @@ module Tables = struct
         let _v : (Parsetree.module_type option) = let x = 
 # 183 "<standard.mly>"
     ( x )
-# 25551 "parsing/parser.ml"
+# 25610 "parsing/parser.ml"
          in
         
 # 116 "<standard.mly>"
     ( Some x )
-# 25556 "parsing/parser.ml"
+# 25615 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25570,7 +25629,7 @@ module Tables = struct
         let _v : (Parsetree.pattern option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25574 "parsing/parser.ml"
+# 25633 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25602,12 +25661,12 @@ module Tables = struct
         let _v : (Parsetree.pattern option) = let x = 
 # 183 "<standard.mly>"
     ( x )
-# 25606 "parsing/parser.ml"
+# 25665 "parsing/parser.ml"
          in
         
 # 116 "<standard.mly>"
     ( Some x )
-# 25611 "parsing/parser.ml"
+# 25670 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25625,7 +25684,7 @@ module Tables = struct
         let _v : (Parsetree.expression option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25629 "parsing/parser.ml"
+# 25688 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25657,12 +25716,12 @@ module Tables = struct
         let _v : (Parsetree.expression option) = let x = 
 # 183 "<standard.mly>"
     ( x )
-# 25661 "parsing/parser.ml"
+# 25720 "parsing/parser.ml"
          in
         
 # 116 "<standard.mly>"
     ( Some x )
-# 25666 "parsing/parser.ml"
+# 25725 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25680,7 +25739,7 @@ module Tables = struct
         let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = 
 # 114 "<standard.mly>"
     ( None )
-# 25684 "parsing/parser.ml"
+# 25743 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25705,7 +25764,7 @@ module Tables = struct
         let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = 
 # 116 "<standard.mly>"
     ( Some x )
-# 25709 "parsing/parser.ml"
+# 25768 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25724,17 +25783,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 668 "parsing/parser.mly"
+# 676 "parsing/parser.mly"
        (string)
-# 25730 "parsing/parser.ml"
+# 25789 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3661 "parsing/parser.mly"
+# 3689 "parsing/parser.mly"
                                                 ( _1 )
-# 25738 "parsing/parser.ml"
+# 25797 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25766,18 +25825,18 @@ module Tables = struct
         } = _menhir_stack in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 25772 "parsing/parser.ml"
+# 25831 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (string) = 
-# 3662 "parsing/parser.mly"
+# 3690 "parsing/parser.mly"
                                                 ( _2 )
-# 25781 "parsing/parser.ml"
+# 25840 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25831,9 +25890,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1253 "parsing/parser.mly"
+# 1261 "parsing/parser.mly"
       ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) )
-# 25837 "parsing/parser.ml"
+# 25896 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25886,9 +25945,9 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1255 "parsing/parser.mly"
+# 1263 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__5_ )
-# 25892 "parsing/parser.ml"
+# 25951 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25925,9 +25984,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.module_expr) = 
-# 1258 "parsing/parser.mly"
+# 1266 "parsing/parser.mly"
       ( me (* TODO consider reloc *) )
-# 25931 "parsing/parser.ml"
+# 25990 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -25966,9 +26025,9 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1260 "parsing/parser.mly"
+# 1268 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__3_ )
-# 25972 "parsing/parser.ml"
+# 26031 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26019,25 +26078,25 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.module_expr) = let e = 
-# 1277 "parsing/parser.mly"
+# 1285 "parsing/parser.mly"
       ( e )
-# 26025 "parsing/parser.ml"
+# 26084 "parsing/parser.ml"
          in
         let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26032 "parsing/parser.ml"
+# 26091 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1264 "parsing/parser.mly"
+# 1272 "parsing/parser.mly"
       ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) )
-# 26041 "parsing/parser.ml"
+# 26100 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26108,11 +26167,11 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 26116 "parsing/parser.ml"
+# 26175 "parsing/parser.ml"
             
           in
           let _endpos_ty_ = _endpos__1_ in
@@ -26120,26 +26179,26 @@ module Tables = struct
           let _startpos = _startpos_e_ in
           let _loc = (_startpos, _endpos) in
           
-# 1279 "parsing/parser.mly"
+# 1287 "parsing/parser.mly"
       ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) )
-# 26126 "parsing/parser.ml"
+# 26185 "parsing/parser.ml"
           
         in
         let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26134 "parsing/parser.ml"
+# 26193 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1264 "parsing/parser.mly"
+# 1272 "parsing/parser.mly"
       ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) )
-# 26143 "parsing/parser.ml"
+# 26202 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26225,11 +26284,11 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 26233 "parsing/parser.ml"
+# 26292 "parsing/parser.ml"
             
           in
           let _endpos_ty2_ = _endpos__1_inlined1_ in
@@ -26238,37 +26297,37 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 26246 "parsing/parser.ml"
+# 26305 "parsing/parser.ml"
             
           in
           let _endpos = _endpos_ty2_ in
           let _startpos = _startpos_e_ in
           let _loc = (_startpos, _endpos) in
           
-# 1281 "parsing/parser.mly"
+# 1289 "parsing/parser.mly"
       ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) )
-# 26255 "parsing/parser.ml"
+# 26314 "parsing/parser.ml"
           
         in
         let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26263 "parsing/parser.ml"
+# 26322 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1264 "parsing/parser.mly"
+# 1272 "parsing/parser.mly"
       ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) )
-# 26272 "parsing/parser.ml"
+# 26331 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26339,11 +26398,11 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 26347 "parsing/parser.ml"
+# 26406 "parsing/parser.ml"
             
           in
           let _endpos_ty2_ = _endpos__1_ in
@@ -26351,26 +26410,26 @@ module Tables = struct
           let _startpos = _startpos_e_ in
           let _loc = (_startpos, _endpos) in
           
-# 1283 "parsing/parser.mly"
+# 1291 "parsing/parser.mly"
       ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) )
-# 26357 "parsing/parser.ml"
+# 26416 "parsing/parser.ml"
           
         in
         let attrs =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26365 "parsing/parser.ml"
+# 26424 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1264 "parsing/parser.mly"
+# 1272 "parsing/parser.mly"
       ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) )
-# 26374 "parsing/parser.ml"
+# 26433 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26430,17 +26489,17 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26436 "parsing/parser.ml"
+# 26495 "parsing/parser.ml"
           
         in
         let _loc__6_ = (_startpos__6_, _endpos__6_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1266 "parsing/parser.mly"
+# 1274 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__6_ )
-# 26444 "parsing/parser.ml"
+# 26503 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26500,17 +26559,17 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26506 "parsing/parser.ml"
+# 26565 "parsing/parser.ml"
           
         in
         let _loc__6_ = (_startpos__6_, _endpos__6_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1268 "parsing/parser.mly"
+# 1276 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__6_ )
-# 26514 "parsing/parser.ml"
+# 26573 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26563,17 +26622,17 @@ module Tables = struct
         let _v : (Parsetree.module_expr) = let _3 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 26569 "parsing/parser.ml"
+# 26628 "parsing/parser.ml"
           
         in
         let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 1270 "parsing/parser.mly"
+# 1278 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__5_ )
-# 26577 "parsing/parser.ml"
+# 26636 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26603,13 +26662,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 805 "parsing/parser.mly"
+# 813 "parsing/parser.mly"
       (Longident.t)
-# 26609 "parsing/parser.ml"
+# 26668 "parsing/parser.ml"
         ) = 
-# 1174 "parsing/parser.mly"
+# 1182 "parsing/parser.mly"
     ( _1 )
-# 26613 "parsing/parser.ml"
+# 26672 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26639,13 +26698,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 795 "parsing/parser.mly"
+# 803 "parsing/parser.mly"
       (Longident.t)
-# 26645 "parsing/parser.ml"
+# 26704 "parsing/parser.ml"
         ) = 
-# 1159 "parsing/parser.mly"
+# 1167 "parsing/parser.mly"
     ( _1 )
-# 26649 "parsing/parser.ml"
+# 26708 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26675,13 +26734,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 789 "parsing/parser.mly"
+# 797 "parsing/parser.mly"
       (Parsetree.core_type)
-# 26681 "parsing/parser.ml"
+# 26740 "parsing/parser.ml"
         ) = 
-# 1134 "parsing/parser.mly"
+# 1142 "parsing/parser.mly"
     ( _1 )
-# 26685 "parsing/parser.ml"
+# 26744 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26711,13 +26770,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 791 "parsing/parser.mly"
+# 799 "parsing/parser.mly"
       (Parsetree.expression)
-# 26717 "parsing/parser.ml"
+# 26776 "parsing/parser.ml"
         ) = 
-# 1139 "parsing/parser.mly"
+# 1147 "parsing/parser.mly"
     ( _1 )
-# 26721 "parsing/parser.ml"
+# 26780 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26747,13 +26806,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 801 "parsing/parser.mly"
+# 809 "parsing/parser.mly"
       (Longident.t)
-# 26753 "parsing/parser.ml"
+# 26812 "parsing/parser.ml"
         ) = 
-# 1164 "parsing/parser.mly"
+# 1172 "parsing/parser.mly"
     ( _1 )
-# 26757 "parsing/parser.ml"
+# 26816 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26783,13 +26842,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 803 "parsing/parser.mly"
+# 811 "parsing/parser.mly"
       (Longident.t)
-# 26789 "parsing/parser.ml"
+# 26848 "parsing/parser.ml"
         ) = 
-# 1169 "parsing/parser.mly"
+# 1177 "parsing/parser.mly"
     ( _1 )
-# 26793 "parsing/parser.ml"
+# 26852 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26819,13 +26878,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 799 "parsing/parser.mly"
+# 807 "parsing/parser.mly"
       (Longident.t)
-# 26825 "parsing/parser.ml"
+# 26884 "parsing/parser.ml"
         ) = 
-# 1149 "parsing/parser.mly"
+# 1157 "parsing/parser.mly"
     ( _1 )
-# 26829 "parsing/parser.ml"
+# 26888 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26855,13 +26914,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 793 "parsing/parser.mly"
+# 801 "parsing/parser.mly"
       (Parsetree.pattern)
-# 26861 "parsing/parser.ml"
+# 26920 "parsing/parser.ml"
         ) = 
-# 1144 "parsing/parser.mly"
+# 1152 "parsing/parser.mly"
     ( _1 )
-# 26865 "parsing/parser.ml"
+# 26924 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26891,13 +26950,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 797 "parsing/parser.mly"
+# 805 "parsing/parser.mly"
       (Longident.t)
-# 26897 "parsing/parser.ml"
+# 26956 "parsing/parser.ml"
         ) = 
-# 1154 "parsing/parser.mly"
+# 1162 "parsing/parser.mly"
     ( _1 )
-# 26901 "parsing/parser.ml"
+# 26960 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26939,15 +26998,15 @@ module Tables = struct
           let _loc__2_ = (_startpos__2_, _endpos__2_) in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2633 "parsing/parser.mly"
+# 2653 "parsing/parser.mly"
       ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) )
-# 26945 "parsing/parser.ml"
+# 27004 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 26951 "parsing/parser.ml"
+# 27010 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -26977,14 +27036,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.pattern) = let _1 = 
-# 2635 "parsing/parser.mly"
+# 2655 "parsing/parser.mly"
       ( Pat.attr _1 _2 )
-# 26983 "parsing/parser.ml"
+# 27042 "parsing/parser.ml"
          in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 26988 "parsing/parser.ml"
+# 27047 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27007,14 +27066,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 = 
-# 2637 "parsing/parser.mly"
+# 2657 "parsing/parser.mly"
       ( _1 )
-# 27013 "parsing/parser.ml"
+# 27072 "parsing/parser.ml"
          in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27018 "parsing/parser.ml"
+# 27077 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27059,15 +27118,15 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 27065 "parsing/parser.ml"
+# 27124 "parsing/parser.ml"
                 
               in
               
-# 2640 "parsing/parser.mly"
+# 2660 "parsing/parser.mly"
         ( Ppat_alias(_1, _3) )
-# 27071 "parsing/parser.ml"
+# 27130 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__1_inlined1_ in
@@ -27075,21 +27134,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27081 "parsing/parser.ml"
+# 27140 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 27087 "parsing/parser.ml"
+# 27146 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27093 "parsing/parser.ml"
+# 27152 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27130,9 +27189,9 @@ module Tables = struct
             let _1 =
               let _loc__3_ = (_startpos__3_, _endpos__3_) in
               
-# 2642 "parsing/parser.mly"
+# 2662 "parsing/parser.mly"
         ( expecting _loc__3_ "identifier" )
-# 27136 "parsing/parser.ml"
+# 27195 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__3_ in
@@ -27140,21 +27199,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27146 "parsing/parser.ml"
+# 27205 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 27152 "parsing/parser.ml"
+# 27211 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27158 "parsing/parser.ml"
+# 27217 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27179,29 +27238,29 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _1 = 
-# 2644 "parsing/parser.mly"
+# 2664 "parsing/parser.mly"
         ( Ppat_tuple(List.rev _1) )
-# 27185 "parsing/parser.ml"
+# 27244 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27193 "parsing/parser.ml"
+# 27252 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 27199 "parsing/parser.ml"
+# 27258 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27205 "parsing/parser.ml"
+# 27264 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27242,9 +27301,9 @@ module Tables = struct
             let _1 =
               let _loc__3_ = (_startpos__3_, _endpos__3_) in
               
-# 2646 "parsing/parser.mly"
+# 2666 "parsing/parser.mly"
         ( expecting _loc__3_ "pattern" )
-# 27248 "parsing/parser.ml"
+# 27307 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__3_ in
@@ -27252,21 +27311,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27258 "parsing/parser.ml"
+# 27317 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 27264 "parsing/parser.ml"
+# 27323 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27270 "parsing/parser.ml"
+# 27329 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27305,30 +27364,30 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _1 = 
-# 2648 "parsing/parser.mly"
+# 2668 "parsing/parser.mly"
         ( Ppat_or(_1, _3) )
-# 27311 "parsing/parser.ml"
+# 27370 "parsing/parser.ml"
              in
             let _endpos__1_ = _endpos__3_ in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27320 "parsing/parser.ml"
+# 27379 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 27326 "parsing/parser.ml"
+# 27385 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27332 "parsing/parser.ml"
+# 27391 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27369,9 +27428,9 @@ module Tables = struct
             let _1 =
               let _loc__3_ = (_startpos__3_, _endpos__3_) in
               
-# 2650 "parsing/parser.mly"
+# 2670 "parsing/parser.mly"
         ( expecting _loc__3_ "pattern" )
-# 27375 "parsing/parser.ml"
+# 27434 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__3_ in
@@ -27379,21 +27438,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27385 "parsing/parser.ml"
+# 27444 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 27391 "parsing/parser.ml"
+# 27450 "parsing/parser.ml"
           
         in
         
-# 2621 "parsing/parser.mly"
+# 2641 "parsing/parser.mly"
       ( _1 )
-# 27397 "parsing/parser.ml"
+# 27456 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27441,24 +27500,24 @@ module Tables = struct
           let _2 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 27447 "parsing/parser.ml"
+# 27506 "parsing/parser.ml"
             
           in
           
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 27453 "parsing/parser.ml"
+# 27512 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__3_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2623 "parsing/parser.mly"
+# 2643 "parsing/parser.mly"
       ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2)
-# 27462 "parsing/parser.ml"
+# 27521 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27495,9 +27554,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern list) = 
-# 2747 "parsing/parser.mly"
+# 2767 "parsing/parser.mly"
                                                 ( _3 :: _1 )
-# 27501 "parsing/parser.ml"
+# 27560 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27534,9 +27593,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern list) = 
-# 2748 "parsing/parser.mly"
+# 2768 "parsing/parser.mly"
                                                 ( [_3; _1] )
-# 27540 "parsing/parser.ml"
+# 27599 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27574,9 +27633,9 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2749 "parsing/parser.mly"
+# 2769 "parsing/parser.mly"
                                                 ( expecting _loc__3_ "pattern" )
-# 27580 "parsing/parser.ml"
+# 27639 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27613,9 +27672,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern list) = 
-# 2747 "parsing/parser.mly"
+# 2767 "parsing/parser.mly"
                                                 ( _3 :: _1 )
-# 27619 "parsing/parser.ml"
+# 27678 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27652,9 +27711,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern list) = 
-# 2748 "parsing/parser.mly"
+# 2768 "parsing/parser.mly"
                                                 ( [_3; _1] )
-# 27658 "parsing/parser.ml"
+# 27717 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27692,9 +27751,9 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2749 "parsing/parser.mly"
+# 2769 "parsing/parser.mly"
                                                 ( expecting _loc__3_ "pattern" )
-# 27698 "parsing/parser.ml"
+# 27757 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27717,9 +27776,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = 
-# 2656 "parsing/parser.mly"
+# 2676 "parsing/parser.mly"
       ( _1 )
-# 27723 "parsing/parser.ml"
+# 27782 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27755,15 +27814,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 27761 "parsing/parser.ml"
+# 27820 "parsing/parser.ml"
               
             in
             
-# 2659 "parsing/parser.mly"
+# 2679 "parsing/parser.mly"
         ( Ppat_construct(_1, Some _2) )
-# 27767 "parsing/parser.ml"
+# 27826 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_ in
@@ -27771,15 +27830,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27777 "parsing/parser.ml"
+# 27836 "parsing/parser.ml"
           
         in
         
-# 2662 "parsing/parser.mly"
+# 2682 "parsing/parser.mly"
       ( _1 )
-# 27783 "parsing/parser.ml"
+# 27842 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27810,24 +27869,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2661 "parsing/parser.mly"
+# 2681 "parsing/parser.mly"
         ( Ppat_variant(_1, Some _2) )
-# 27816 "parsing/parser.ml"
+# 27875 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 27825 "parsing/parser.ml"
+# 27884 "parsing/parser.ml"
           
         in
         
-# 2662 "parsing/parser.mly"
+# 2682 "parsing/parser.mly"
       ( _1 )
-# 27831 "parsing/parser.ml"
+# 27890 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27875,24 +27934,24 @@ module Tables = struct
           let _2 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 27881 "parsing/parser.ml"
+# 27940 "parsing/parser.ml"
             
           in
           
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 27887 "parsing/parser.ml"
+# 27946 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__3_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2664 "parsing/parser.mly"
+# 2684 "parsing/parser.mly"
       ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2)
-# 27896 "parsing/parser.ml"
+# 27955 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27934,15 +27993,15 @@ module Tables = struct
           let _loc__2_ = (_startpos__2_, _endpos__2_) in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2633 "parsing/parser.mly"
+# 2653 "parsing/parser.mly"
       ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) )
-# 27940 "parsing/parser.ml"
+# 27999 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 27946 "parsing/parser.ml"
+# 28005 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -27972,14 +28031,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.pattern) = let _1 = 
-# 2635 "parsing/parser.mly"
+# 2655 "parsing/parser.mly"
       ( Pat.attr _1 _2 )
-# 27978 "parsing/parser.ml"
+# 28037 "parsing/parser.ml"
          in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 27983 "parsing/parser.ml"
+# 28042 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28002,14 +28061,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 = 
-# 2637 "parsing/parser.mly"
+# 2657 "parsing/parser.mly"
       ( _1 )
-# 28008 "parsing/parser.ml"
+# 28067 "parsing/parser.ml"
          in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28013 "parsing/parser.ml"
+# 28072 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28054,15 +28113,15 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 28060 "parsing/parser.ml"
+# 28119 "parsing/parser.ml"
                 
               in
               
-# 2640 "parsing/parser.mly"
+# 2660 "parsing/parser.mly"
         ( Ppat_alias(_1, _3) )
-# 28066 "parsing/parser.ml"
+# 28125 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__1_inlined1_ in
@@ -28070,21 +28129,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28076 "parsing/parser.ml"
+# 28135 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 28082 "parsing/parser.ml"
+# 28141 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28088 "parsing/parser.ml"
+# 28147 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28125,9 +28184,9 @@ module Tables = struct
             let _1 =
               let _loc__3_ = (_startpos__3_, _endpos__3_) in
               
-# 2642 "parsing/parser.mly"
+# 2662 "parsing/parser.mly"
         ( expecting _loc__3_ "identifier" )
-# 28131 "parsing/parser.ml"
+# 28190 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__3_ in
@@ -28135,21 +28194,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28141 "parsing/parser.ml"
+# 28200 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 28147 "parsing/parser.ml"
+# 28206 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28153 "parsing/parser.ml"
+# 28212 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28174,29 +28233,29 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _1 = 
-# 2644 "parsing/parser.mly"
+# 2664 "parsing/parser.mly"
         ( Ppat_tuple(List.rev _1) )
-# 28180 "parsing/parser.ml"
+# 28239 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28188 "parsing/parser.ml"
+# 28247 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 28194 "parsing/parser.ml"
+# 28253 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28200 "parsing/parser.ml"
+# 28259 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28237,9 +28296,9 @@ module Tables = struct
             let _1 =
               let _loc__3_ = (_startpos__3_, _endpos__3_) in
               
-# 2646 "parsing/parser.mly"
+# 2666 "parsing/parser.mly"
         ( expecting _loc__3_ "pattern" )
-# 28243 "parsing/parser.ml"
+# 28302 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__3_ in
@@ -28247,21 +28306,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28253 "parsing/parser.ml"
+# 28312 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 28259 "parsing/parser.ml"
+# 28318 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28265 "parsing/parser.ml"
+# 28324 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28300,30 +28359,30 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _1 = 
-# 2648 "parsing/parser.mly"
+# 2668 "parsing/parser.mly"
         ( Ppat_or(_1, _3) )
-# 28306 "parsing/parser.ml"
+# 28365 "parsing/parser.ml"
              in
             let _endpos__1_ = _endpos__3_ in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28315 "parsing/parser.ml"
+# 28374 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 28321 "parsing/parser.ml"
+# 28380 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28327 "parsing/parser.ml"
+# 28386 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28364,9 +28423,9 @@ module Tables = struct
             let _1 =
               let _loc__3_ = (_startpos__3_, _endpos__3_) in
               
-# 2650 "parsing/parser.mly"
+# 2670 "parsing/parser.mly"
         ( expecting _loc__3_ "pattern" )
-# 28370 "parsing/parser.ml"
+# 28429 "parsing/parser.ml"
               
             in
             let _endpos__1_ = _endpos__3_ in
@@ -28374,21 +28433,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28380 "parsing/parser.ml"
+# 28439 "parsing/parser.ml"
             
           in
           
-# 2651 "parsing/parser.mly"
+# 2671 "parsing/parser.mly"
     ( _1 )
-# 28386 "parsing/parser.ml"
+# 28445 "parsing/parser.ml"
           
         in
         
-# 2628 "parsing/parser.mly"
+# 2648 "parsing/parser.mly"
       ( _1 )
-# 28392 "parsing/parser.ml"
+# 28451 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28407,9 +28466,9 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 28413 "parsing/parser.ml"
+# 28472 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -28421,30 +28480,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 28427 "parsing/parser.ml"
+# 28486 "parsing/parser.ml"
               
             in
             
-# 2110 "parsing/parser.mly"
+# 2124 "parsing/parser.mly"
                         ( Ppat_var _1 )
-# 28433 "parsing/parser.ml"
+# 28492 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28442 "parsing/parser.ml"
+# 28501 "parsing/parser.ml"
           
         in
         
-# 2112 "parsing/parser.mly"
+# 2126 "parsing/parser.mly"
     ( _1 )
-# 28448 "parsing/parser.ml"
+# 28507 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28468,23 +28527,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2111 "parsing/parser.mly"
+# 2125 "parsing/parser.mly"
                         ( Ppat_any )
-# 28474 "parsing/parser.ml"
+# 28533 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 28482 "parsing/parser.ml"
+# 28541 "parsing/parser.ml"
           
         in
         
-# 2112 "parsing/parser.mly"
+# 2126 "parsing/parser.mly"
     ( _1 )
-# 28488 "parsing/parser.ml"
+# 28547 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28507,9 +28566,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.payload) = 
-# 3771 "parsing/parser.mly"
+# 3799 "parsing/parser.mly"
               ( PStr _1 )
-# 28513 "parsing/parser.ml"
+# 28572 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28539,9 +28598,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.payload) = 
-# 3772 "parsing/parser.mly"
+# 3800 "parsing/parser.mly"
                     ( PSig _2 )
-# 28545 "parsing/parser.ml"
+# 28604 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28571,9 +28630,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.payload) = 
-# 3773 "parsing/parser.mly"
+# 3801 "parsing/parser.mly"
                     ( PTyp _2 )
-# 28577 "parsing/parser.ml"
+# 28636 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28603,9 +28662,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.payload) = 
-# 3774 "parsing/parser.mly"
+# 3802 "parsing/parser.mly"
                      ( PPat (_2, None) )
-# 28609 "parsing/parser.ml"
+# 28668 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28649,9 +28708,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.payload) = 
-# 3775 "parsing/parser.mly"
+# 3803 "parsing/parser.mly"
                                    ( PPat (_2, Some _4) )
-# 28655 "parsing/parser.ml"
+# 28714 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28674,9 +28733,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = 
-# 3174 "parsing/parser.mly"
+# 3194 "parsing/parser.mly"
     ( _1 )
-# 28680 "parsing/parser.ml"
+# 28739 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28719,24 +28778,24 @@ module Tables = struct
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 28723 "parsing/parser.ml"
+# 28782 "parsing/parser.ml"
                  in
                 
-# 919 "parsing/parser.mly"
+# 927 "parsing/parser.mly"
     ( xs )
-# 28728 "parsing/parser.ml"
+# 28787 "parsing/parser.ml"
                 
               in
               
-# 3166 "parsing/parser.mly"
+# 3186 "parsing/parser.mly"
     ( _1 )
-# 28734 "parsing/parser.ml"
+# 28793 "parsing/parser.ml"
               
             in
             
-# 3170 "parsing/parser.mly"
+# 3190 "parsing/parser.mly"
     ( Ptyp_poly(_1, _3) )
-# 28740 "parsing/parser.ml"
+# 28799 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in
@@ -28744,15 +28803,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 28750 "parsing/parser.ml"
+# 28809 "parsing/parser.ml"
           
         in
         
-# 3176 "parsing/parser.mly"
+# 3196 "parsing/parser.mly"
     ( _1 )
-# 28756 "parsing/parser.ml"
+# 28815 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28775,14 +28834,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = let _1 = 
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 28781 "parsing/parser.ml"
+# 28840 "parsing/parser.ml"
          in
         
-# 3174 "parsing/parser.mly"
+# 3194 "parsing/parser.mly"
     ( _1 )
-# 28786 "parsing/parser.ml"
+# 28845 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28821,33 +28880,33 @@ module Tables = struct
         let _v : (Parsetree.core_type) = let _1 =
           let _1 =
             let _3 = 
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 28827 "parsing/parser.ml"
+# 28886 "parsing/parser.ml"
              in
             let _1 =
               let _1 =
                 let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 28834 "parsing/parser.ml"
+# 28893 "parsing/parser.ml"
                  in
                 
-# 919 "parsing/parser.mly"
+# 927 "parsing/parser.mly"
     ( xs )
-# 28839 "parsing/parser.ml"
+# 28898 "parsing/parser.ml"
                 
               in
               
-# 3166 "parsing/parser.mly"
+# 3186 "parsing/parser.mly"
     ( _1 )
-# 28845 "parsing/parser.ml"
+# 28904 "parsing/parser.ml"
               
             in
             
-# 3170 "parsing/parser.mly"
+# 3190 "parsing/parser.mly"
     ( Ptyp_poly(_1, _3) )
-# 28851 "parsing/parser.ml"
+# 28910 "parsing/parser.ml"
             
           in
           let _startpos__1_ = _startpos_xs_ in
@@ -28855,15 +28914,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 28861 "parsing/parser.ml"
+# 28920 "parsing/parser.ml"
           
         in
         
-# 3176 "parsing/parser.mly"
+# 3196 "parsing/parser.mly"
     ( _1 )
-# 28867 "parsing/parser.ml"
+# 28926 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28910,9 +28969,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3734 "parsing/parser.mly"
+# 3762 "parsing/parser.mly"
     ( Attr.mk ~loc:(make_loc _sloc) _2 _3 )
-# 28916 "parsing/parser.ml"
+# 28975 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -28993,9 +29052,9 @@ module Tables = struct
         let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 28999 "parsing/parser.ml"
+# 29058 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -29005,30 +29064,30 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 29011 "parsing/parser.ml"
+# 29070 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 29019 "parsing/parser.ml"
+# 29078 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2811 "parsing/parser.mly"
+# 2831 "parsing/parser.mly"
     ( let attrs = attrs1 @ attrs2 in
       let loc = make_loc _sloc in
       let docs = symbol_docs _sloc in
       Val.mk id ty ~prim ~attrs ~loc ~docs,
       ext )
-# 29032 "parsing/parser.ml"
+# 29091 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29044,14 +29103,14 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.private_flag) = let _1 = 
-# 3602 "parsing/parser.mly"
+# 3630 "parsing/parser.mly"
                                                 ( Public )
-# 29050 "parsing/parser.ml"
+# 29109 "parsing/parser.ml"
          in
         
-# 3599 "parsing/parser.mly"
+# 3627 "parsing/parser.mly"
     ( _1 )
-# 29055 "parsing/parser.ml"
+# 29114 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29074,14 +29133,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.private_flag) = let _1 = 
-# 3603 "parsing/parser.mly"
+# 3631 "parsing/parser.mly"
                                                 ( Private )
-# 29080 "parsing/parser.ml"
+# 29139 "parsing/parser.ml"
          in
         
-# 3599 "parsing/parser.mly"
+# 3627 "parsing/parser.mly"
     ( _1 )
-# 29085 "parsing/parser.ml"
+# 29144 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29097,9 +29156,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = 
-# 3625 "parsing/parser.mly"
+# 3653 "parsing/parser.mly"
                  ( Public, Concrete )
-# 29103 "parsing/parser.ml"
+# 29162 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29122,9 +29181,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = 
-# 3626 "parsing/parser.mly"
+# 3654 "parsing/parser.mly"
             ( Private, Concrete )
-# 29128 "parsing/parser.ml"
+# 29187 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29147,9 +29206,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = 
-# 3627 "parsing/parser.mly"
+# 3655 "parsing/parser.mly"
             ( Public, Virtual )
-# 29153 "parsing/parser.ml"
+# 29212 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29179,9 +29238,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = 
-# 3628 "parsing/parser.mly"
+# 3656 "parsing/parser.mly"
                     ( Private, Virtual )
-# 29185 "parsing/parser.ml"
+# 29244 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29211,9 +29270,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = 
-# 3629 "parsing/parser.mly"
+# 3657 "parsing/parser.mly"
                     ( Private, Virtual )
-# 29217 "parsing/parser.ml"
+# 29276 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29229,9 +29288,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.rec_flag) = 
-# 3582 "parsing/parser.mly"
+# 3610 "parsing/parser.mly"
                                                 ( Nonrecursive )
-# 29235 "parsing/parser.ml"
+# 29294 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29254,9 +29313,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.rec_flag) = 
-# 3583 "parsing/parser.mly"
+# 3611 "parsing/parser.mly"
                                                 ( Recursive )
-# 29260 "parsing/parser.ml"
+# 29319 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29282,12 +29341,12 @@ module Tables = struct
   (Longident.t Asttypes.loc * Parsetree.expression) list) = let eo = 
 # 124 "<standard.mly>"
     ( None )
-# 29286 "parsing/parser.ml"
+# 29345 "parsing/parser.ml"
          in
         
-# 2553 "parsing/parser.mly"
+# 2573 "parsing/parser.mly"
     ( eo, fields )
-# 29291 "parsing/parser.ml"
+# 29350 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29328,18 +29387,18 @@ module Tables = struct
           let x = 
 # 191 "<standard.mly>"
     ( x )
-# 29332 "parsing/parser.ml"
+# 29391 "parsing/parser.ml"
            in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 29337 "parsing/parser.ml"
+# 29396 "parsing/parser.ml"
           
         in
         
-# 2553 "parsing/parser.mly"
+# 2573 "parsing/parser.mly"
     ( eo, fields )
-# 29343 "parsing/parser.ml"
+# 29402 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29364,17 +29423,17 @@ module Tables = struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.constructor_declaration list) = let x = 
-# 2996 "parsing/parser.mly"
+# 3016 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Type.constructor cid ~args ?res ~attrs ~loc ~info
     )
-# 29373 "parsing/parser.ml"
+# 29432 "parsing/parser.ml"
          in
         
-# 1029 "parsing/parser.mly"
+# 1037 "parsing/parser.mly"
       ( [x] )
-# 29378 "parsing/parser.ml"
+# 29437 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29399,17 +29458,17 @@ module Tables = struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.constructor_declaration list) = let x = 
-# 2996 "parsing/parser.mly"
+# 3016 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Type.constructor cid ~args ?res ~attrs ~loc ~info
     )
-# 29408 "parsing/parser.ml"
+# 29467 "parsing/parser.ml"
          in
         
-# 1032 "parsing/parser.mly"
+# 1040 "parsing/parser.mly"
       ( [x] )
-# 29413 "parsing/parser.ml"
+# 29472 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29441,17 +29500,17 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.constructor_declaration list) = let x = 
-# 2996 "parsing/parser.mly"
+# 3016 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Type.constructor cid ~args ?res ~attrs ~loc ~info
     )
-# 29450 "parsing/parser.ml"
+# 29509 "parsing/parser.ml"
          in
         
-# 1036 "parsing/parser.mly"
+# 1044 "parsing/parser.mly"
       ( x :: xs )
-# 29455 "parsing/parser.ml"
+# 29514 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29477,23 +29536,23 @@ module Tables = struct
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.extension_constructor list) = let x =
           let _1 = 
-# 3108 "parsing/parser.mly"
+# 3128 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Te.decl cid ~args ?res ~attrs ~loc ~info
     )
-# 29486 "parsing/parser.ml"
+# 29545 "parsing/parser.ml"
            in
           
-# 3102 "parsing/parser.mly"
+# 3122 "parsing/parser.mly"
       ( _1 )
-# 29491 "parsing/parser.ml"
+# 29550 "parsing/parser.ml"
           
         in
         
-# 1029 "parsing/parser.mly"
+# 1037 "parsing/parser.mly"
       ( [x] )
-# 29497 "parsing/parser.ml"
+# 29556 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29516,14 +29575,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.extension_constructor list) = let x = 
-# 3104 "parsing/parser.mly"
+# 3124 "parsing/parser.mly"
       ( _1 )
-# 29522 "parsing/parser.ml"
+# 29581 "parsing/parser.ml"
          in
         
-# 1029 "parsing/parser.mly"
+# 1037 "parsing/parser.mly"
       ( [x] )
-# 29527 "parsing/parser.ml"
+# 29586 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29549,23 +29608,23 @@ module Tables = struct
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.extension_constructor list) = let x =
           let _1 = 
-# 3108 "parsing/parser.mly"
+# 3128 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Te.decl cid ~args ?res ~attrs ~loc ~info
     )
-# 29558 "parsing/parser.ml"
+# 29617 "parsing/parser.ml"
            in
           
-# 3102 "parsing/parser.mly"
+# 3122 "parsing/parser.mly"
       ( _1 )
-# 29563 "parsing/parser.ml"
+# 29622 "parsing/parser.ml"
           
         in
         
-# 1032 "parsing/parser.mly"
+# 1040 "parsing/parser.mly"
       ( [x] )
-# 29569 "parsing/parser.ml"
+# 29628 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29588,14 +29647,14 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.extension_constructor list) = let x = 
-# 3104 "parsing/parser.mly"
+# 3124 "parsing/parser.mly"
       ( _1 )
-# 29594 "parsing/parser.ml"
+# 29653 "parsing/parser.ml"
          in
         
-# 1032 "parsing/parser.mly"
+# 1040 "parsing/parser.mly"
       ( [x] )
-# 29599 "parsing/parser.ml"
+# 29658 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29628,23 +29687,23 @@ module Tables = struct
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.extension_constructor list) = let x =
           let _1 = 
-# 3108 "parsing/parser.mly"
+# 3128 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Te.decl cid ~args ?res ~attrs ~loc ~info
     )
-# 29637 "parsing/parser.ml"
+# 29696 "parsing/parser.ml"
            in
           
-# 3102 "parsing/parser.mly"
+# 3122 "parsing/parser.mly"
       ( _1 )
-# 29642 "parsing/parser.ml"
+# 29701 "parsing/parser.ml"
           
         in
         
-# 1036 "parsing/parser.mly"
+# 1044 "parsing/parser.mly"
       ( x :: xs )
-# 29648 "parsing/parser.ml"
+# 29707 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29674,14 +29733,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.extension_constructor list) = let x = 
-# 3104 "parsing/parser.mly"
+# 3124 "parsing/parser.mly"
       ( _1 )
-# 29680 "parsing/parser.ml"
+# 29739 "parsing/parser.ml"
          in
         
-# 1036 "parsing/parser.mly"
+# 1044 "parsing/parser.mly"
       ( x :: xs )
-# 29685 "parsing/parser.ml"
+# 29744 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29706,17 +29765,17 @@ module Tables = struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.extension_constructor list) = let x = 
-# 3108 "parsing/parser.mly"
+# 3128 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Te.decl cid ~args ?res ~attrs ~loc ~info
     )
-# 29715 "parsing/parser.ml"
+# 29774 "parsing/parser.ml"
          in
         
-# 1029 "parsing/parser.mly"
+# 1037 "parsing/parser.mly"
       ( [x] )
-# 29720 "parsing/parser.ml"
+# 29779 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29741,17 +29800,17 @@ module Tables = struct
         let _startpos = _startpos_d_ in
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.extension_constructor list) = let x = 
-# 3108 "parsing/parser.mly"
+# 3128 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Te.decl cid ~args ?res ~attrs ~loc ~info
     )
-# 29750 "parsing/parser.ml"
+# 29809 "parsing/parser.ml"
          in
         
-# 1032 "parsing/parser.mly"
+# 1040 "parsing/parser.mly"
       ( [x] )
-# 29755 "parsing/parser.ml"
+# 29814 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29783,17 +29842,17 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_d_ in
         let _v : (Parsetree.extension_constructor list) = let x = 
-# 3108 "parsing/parser.mly"
+# 3128 "parsing/parser.mly"
     (
       let cid, args, res, attrs, loc, info = d in
       Te.decl cid ~args ?res ~attrs ~loc ~info
     )
-# 29792 "parsing/parser.ml"
+# 29851 "parsing/parser.ml"
          in
         
-# 1036 "parsing/parser.mly"
+# 1044 "parsing/parser.mly"
       ( x :: xs )
-# 29797 "parsing/parser.ml"
+# 29856 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29809,9 +29868,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = 
-# 895 "parsing/parser.mly"
+# 903 "parsing/parser.mly"
     ( [] )
-# 29815 "parsing/parser.ml"
+# 29874 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29868,21 +29927,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 1990 "parsing/parser.mly"
+# 1998 "parsing/parser.mly"
     ( _1, _3, make_loc _sloc )
-# 29874 "parsing/parser.ml"
+# 29933 "parsing/parser.ml"
             
           in
           
 # 183 "<standard.mly>"
     ( x )
-# 29880 "parsing/parser.ml"
+# 29939 "parsing/parser.ml"
           
         in
         
-# 897 "parsing/parser.mly"
+# 905 "parsing/parser.mly"
     ( x :: xs )
-# 29886 "parsing/parser.ml"
+# 29945 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29905,9 +29964,9 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : ((Lexing.position * Parsetree.functor_parameter) list) = 
-# 909 "parsing/parser.mly"
+# 917 "parsing/parser.mly"
     ( [ x ] )
-# 29911 "parsing/parser.ml"
+# 29970 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29937,9 +29996,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : ((Lexing.position * Parsetree.functor_parameter) list) = 
-# 911 "parsing/parser.mly"
+# 919 "parsing/parser.mly"
     ( x :: xs )
-# 29943 "parsing/parser.ml"
+# 30002 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29962,9 +30021,9 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : ((Asttypes.arg_label * Parsetree.expression) list) = 
-# 909 "parsing/parser.mly"
+# 917 "parsing/parser.mly"
     ( [ x ] )
-# 29968 "parsing/parser.ml"
+# 30027 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -29994,9 +30053,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : ((Asttypes.arg_label * Parsetree.expression) list) = 
-# 911 "parsing/parser.mly"
+# 919 "parsing/parser.mly"
     ( x :: xs )
-# 30000 "parsing/parser.ml"
+# 30059 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30019,9 +30078,9 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : (Asttypes.label list) = 
-# 909 "parsing/parser.mly"
+# 917 "parsing/parser.mly"
     ( [ x ] )
-# 30025 "parsing/parser.ml"
+# 30084 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30051,9 +30110,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Asttypes.label list) = 
-# 911 "parsing/parser.mly"
+# 919 "parsing/parser.mly"
     ( x :: xs )
-# 30057 "parsing/parser.ml"
+# 30116 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30089,21 +30148,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 30095 "parsing/parser.ml"
+# 30154 "parsing/parser.ml"
             
           in
           
-# 3162 "parsing/parser.mly"
+# 3182 "parsing/parser.mly"
     ( _2 )
-# 30101 "parsing/parser.ml"
+# 30160 "parsing/parser.ml"
           
         in
         
-# 909 "parsing/parser.mly"
+# 917 "parsing/parser.mly"
     ( [ x ] )
-# 30107 "parsing/parser.ml"
+# 30166 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30146,21 +30205,21 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 30152 "parsing/parser.ml"
+# 30211 "parsing/parser.ml"
             
           in
           
-# 3162 "parsing/parser.mly"
+# 3182 "parsing/parser.mly"
     ( _2 )
-# 30158 "parsing/parser.ml"
+# 30217 "parsing/parser.ml"
           
         in
         
-# 911 "parsing/parser.mly"
+# 919 "parsing/parser.mly"
     ( x :: xs )
-# 30164 "parsing/parser.ml"
+# 30223 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30185,12 +30244,12 @@ module Tables = struct
         let _v : (Parsetree.case list) = let _1 = 
 # 124 "<standard.mly>"
     ( None )
-# 30189 "parsing/parser.ml"
+# 30248 "parsing/parser.ml"
          in
         
-# 1000 "parsing/parser.mly"
+# 1008 "parsing/parser.mly"
     ( [x] )
-# 30194 "parsing/parser.ml"
+# 30253 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30224,13 +30283,13 @@ module Tables = struct
           
 # 126 "<standard.mly>"
     ( Some x )
-# 30228 "parsing/parser.ml"
+# 30287 "parsing/parser.ml"
           
         in
         
-# 1000 "parsing/parser.mly"
+# 1008 "parsing/parser.mly"
     ( [x] )
-# 30234 "parsing/parser.ml"
+# 30293 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30267,9 +30326,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.case list) = 
-# 1004 "parsing/parser.mly"
+# 1012 "parsing/parser.mly"
     ( x :: xs )
-# 30273 "parsing/parser.ml"
+# 30332 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30293,20 +30352,20 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type list) = let xs =
           let x = 
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 30299 "parsing/parser.ml"
+# 30358 "parsing/parser.ml"
            in
           
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 30304 "parsing/parser.ml"
+# 30363 "parsing/parser.ml"
           
         in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30310 "parsing/parser.ml"
+# 30369 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30344,20 +30403,20 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type list) = let xs =
           let x = 
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 30350 "parsing/parser.ml"
+# 30409 "parsing/parser.ml"
            in
           
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 30355 "parsing/parser.ml"
+# 30414 "parsing/parser.ml"
           
         in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30361 "parsing/parser.ml"
+# 30420 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30380,14 +30439,14 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.with_constraint list) = let xs = 
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 30386 "parsing/parser.ml"
+# 30445 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30391 "parsing/parser.ml"
+# 30450 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30424,14 +30483,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.with_constraint list) = let xs = 
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 30430 "parsing/parser.ml"
+# 30489 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30435 "parsing/parser.ml"
+# 30494 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30454,14 +30513,14 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.row_field list) = let xs = 
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 30460 "parsing/parser.ml"
+# 30519 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30465 "parsing/parser.ml"
+# 30524 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30498,14 +30557,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.row_field list) = let xs = 
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 30504 "parsing/parser.ml"
+# 30563 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30509 "parsing/parser.ml"
+# 30568 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30528,14 +30587,14 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.core_type list) = let xs = 
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 30534 "parsing/parser.ml"
+# 30593 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30539 "parsing/parser.ml"
+# 30598 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30572,14 +30631,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.core_type list) = let xs = 
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 30578 "parsing/parser.ml"
+# 30637 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30583 "parsing/parser.ml"
+# 30642 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30602,14 +30661,14 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = 
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 30608 "parsing/parser.ml"
+# 30667 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30613 "parsing/parser.ml"
+# 30672 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30646,14 +30705,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = 
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 30652 "parsing/parser.ml"
+# 30711 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30657 "parsing/parser.ml"
+# 30716 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30676,14 +30735,14 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.core_type list) = let xs = 
-# 935 "parsing/parser.mly"
+# 943 "parsing/parser.mly"
     ( [ x ] )
-# 30682 "parsing/parser.ml"
+# 30741 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30687 "parsing/parser.ml"
+# 30746 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30720,14 +30779,14 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.core_type list) = let xs = 
-# 939 "parsing/parser.mly"
+# 947 "parsing/parser.mly"
     ( x :: xs )
-# 30726 "parsing/parser.ml"
+# 30785 "parsing/parser.ml"
          in
         
-# 943 "parsing/parser.mly"
+# 951 "parsing/parser.mly"
     ( xs )
-# 30731 "parsing/parser.ml"
+# 30790 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30764,9 +30823,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.core_type list) = 
-# 966 "parsing/parser.mly"
+# 974 "parsing/parser.mly"
     ( x :: xs )
-# 30770 "parsing/parser.ml"
+# 30829 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30803,9 +30862,9 @@ module Tables = struct
         let _startpos = _startpos_x1_ in
         let _endpos = _endpos_x2_ in
         let _v : (Parsetree.core_type list) = 
-# 970 "parsing/parser.mly"
+# 978 "parsing/parser.mly"
     ( [ x2; x1 ] )
-# 30809 "parsing/parser.ml"
+# 30868 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30842,9 +30901,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.expression list) = 
-# 966 "parsing/parser.mly"
+# 974 "parsing/parser.mly"
     ( x :: xs )
-# 30848 "parsing/parser.ml"
+# 30907 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30881,9 +30940,9 @@ module Tables = struct
         let _startpos = _startpos_x1_ in
         let _endpos = _endpos_x2_ in
         let _v : (Parsetree.expression list) = 
-# 970 "parsing/parser.mly"
+# 978 "parsing/parser.mly"
     ( [ x2; x1 ] )
-# 30887 "parsing/parser.ml"
+# 30946 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30920,9 +30979,9 @@ module Tables = struct
         let _startpos = _startpos_xs_ in
         let _endpos = _endpos_x_ in
         let _v : (Parsetree.core_type list) = 
-# 966 "parsing/parser.mly"
+# 974 "parsing/parser.mly"
     ( x :: xs )
-# 30926 "parsing/parser.ml"
+# 30985 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30959,9 +31018,9 @@ module Tables = struct
         let _startpos = _startpos_x1_ in
         let _endpos = _endpos_x2_ in
         let _v : (Parsetree.core_type list) = 
-# 970 "parsing/parser.mly"
+# 978 "parsing/parser.mly"
     ( [ x2; x1 ] )
-# 30965 "parsing/parser.ml"
+# 31024 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -30984,9 +31043,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.row_field) = 
-# 3345 "parsing/parser.mly"
+# 3365 "parsing/parser.mly"
       ( _1 )
-# 30990 "parsing/parser.ml"
+# 31049 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31012,9 +31071,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3347 "parsing/parser.mly"
+# 3367 "parsing/parser.mly"
       ( Rf.inherit_ ~loc:(make_loc _sloc) _1 )
-# 31018 "parsing/parser.ml"
+# 31077 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31039,12 +31098,12 @@ module Tables = struct
         let _v : (Parsetree.expression list) = let _2 = 
 # 124 "<standard.mly>"
     ( None )
-# 31043 "parsing/parser.ml"
+# 31102 "parsing/parser.ml"
          in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31048 "parsing/parser.ml"
+# 31107 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31078,13 +31137,13 @@ module Tables = struct
           
 # 126 "<standard.mly>"
     ( Some x )
-# 31082 "parsing/parser.ml"
+# 31141 "parsing/parser.ml"
           
         in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31088 "parsing/parser.ml"
+# 31147 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31121,9 +31180,9 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_xs_ in
         let _v : (Parsetree.expression list) = 
-# 991 "parsing/parser.mly"
+# 999 "parsing/parser.mly"
     ( x :: xs )
-# 31127 "parsing/parser.ml"
+# 31186 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31149,9 +31208,9 @@ module Tables = struct
         } = _menhir_stack in
         let oe : (Parsetree.expression option) = Obj.magic oe in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 31155 "parsing/parser.ml"
+# 31214 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -31159,22 +31218,22 @@ module Tables = struct
         let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = 
 # 124 "<standard.mly>"
     ( None )
-# 31163 "parsing/parser.ml"
+# 31222 "parsing/parser.ml"
          in
         let x =
           let label =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 31170 "parsing/parser.ml"
+# 31229 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31178 "parsing/parser.ml"
+# 31237 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -31182,7 +31241,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2576 "parsing/parser.mly"
+# 2596 "parsing/parser.mly"
       ( let e =
           match oe with
           | None ->
@@ -31192,13 +31251,13 @@ module Tables = struct
               e
         in
         label, e )
-# 31196 "parsing/parser.ml"
+# 31255 "parsing/parser.ml"
           
         in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31202 "parsing/parser.ml"
+# 31261 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31231,9 +31290,9 @@ module Tables = struct
         let x : unit = Obj.magic x in
         let oe : (Parsetree.expression option) = Obj.magic oe in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 31237 "parsing/parser.ml"
+# 31296 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -31241,22 +31300,22 @@ module Tables = struct
         let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = 
 # 126 "<standard.mly>"
     ( Some x )
-# 31245 "parsing/parser.ml"
+# 31304 "parsing/parser.ml"
          in
         let x =
           let label =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 31252 "parsing/parser.ml"
+# 31311 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31260 "parsing/parser.ml"
+# 31319 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -31264,7 +31323,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2576 "parsing/parser.mly"
+# 2596 "parsing/parser.mly"
       ( let e =
           match oe with
           | None ->
@@ -31274,13 +31333,13 @@ module Tables = struct
               e
         in
         label, e )
-# 31278 "parsing/parser.ml"
+# 31337 "parsing/parser.ml"
           
         in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31284 "parsing/parser.ml"
+# 31343 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31320,9 +31379,9 @@ module Tables = struct
         let _2 : unit = Obj.magic _2 in
         let oe : (Parsetree.expression option) = Obj.magic oe in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 31326 "parsing/parser.ml"
+# 31385 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -31330,17 +31389,17 @@ module Tables = struct
         let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let x =
           let label =
             let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 31336 "parsing/parser.ml"
+# 31395 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31344 "parsing/parser.ml"
+# 31403 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -31348,7 +31407,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2576 "parsing/parser.mly"
+# 2596 "parsing/parser.mly"
       ( let e =
           match oe with
           | None ->
@@ -31358,13 +31417,13 @@ module Tables = struct
               e
         in
         label, e )
-# 31362 "parsing/parser.ml"
+# 31421 "parsing/parser.ml"
           
         in
         
-# 991 "parsing/parser.mly"
+# 999 "parsing/parser.mly"
     ( x :: xs )
-# 31368 "parsing/parser.ml"
+# 31427 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31389,12 +31448,12 @@ module Tables = struct
         let _v : (Parsetree.pattern list) = let _2 = 
 # 124 "<standard.mly>"
     ( None )
-# 31393 "parsing/parser.ml"
+# 31452 "parsing/parser.ml"
          in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31398 "parsing/parser.ml"
+# 31457 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31428,13 +31487,13 @@ module Tables = struct
           
 # 126 "<standard.mly>"
     ( Some x )
-# 31432 "parsing/parser.ml"
+# 31491 "parsing/parser.ml"
           
         in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31438 "parsing/parser.ml"
+# 31497 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31471,9 +31530,9 @@ module Tables = struct
         let _startpos = _startpos_x_ in
         let _endpos = _endpos_xs_ in
         let _v : (Parsetree.pattern list) = 
-# 991 "parsing/parser.mly"
+# 999 "parsing/parser.mly"
     ( x :: xs )
-# 31477 "parsing/parser.ml"
+# 31536 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31512,7 +31571,7 @@ module Tables = struct
         let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = 
 # 124 "<standard.mly>"
     ( None )
-# 31516 "parsing/parser.ml"
+# 31575 "parsing/parser.ml"
          in
         let x =
           let label =
@@ -31520,9 +31579,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31526 "parsing/parser.ml"
+# 31585 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -31530,7 +31589,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2559 "parsing/parser.mly"
+# 2579 "parsing/parser.mly"
       ( let e =
           match eo with
           | None ->
@@ -31540,13 +31599,13 @@ module Tables = struct
               e
         in
         label, mkexp_opt_constraint ~loc:_sloc e c )
-# 31544 "parsing/parser.ml"
+# 31603 "parsing/parser.ml"
           
         in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31550 "parsing/parser.ml"
+# 31609 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31592,7 +31651,7 @@ module Tables = struct
         let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = 
 # 126 "<standard.mly>"
     ( Some x )
-# 31596 "parsing/parser.ml"
+# 31655 "parsing/parser.ml"
          in
         let x =
           let label =
@@ -31600,9 +31659,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31606 "parsing/parser.ml"
+# 31665 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -31610,7 +31669,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2559 "parsing/parser.mly"
+# 2579 "parsing/parser.mly"
       ( let e =
           match eo with
           | None ->
@@ -31620,13 +31679,13 @@ module Tables = struct
               e
         in
         label, mkexp_opt_constraint ~loc:_sloc e c )
-# 31624 "parsing/parser.ml"
+# 31683 "parsing/parser.ml"
           
         in
         
-# 987 "parsing/parser.mly"
+# 995 "parsing/parser.mly"
     ( [x] )
-# 31630 "parsing/parser.ml"
+# 31689 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31682,9 +31741,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31688 "parsing/parser.ml"
+# 31747 "parsing/parser.ml"
             
           in
           let _startpos_label_ = _startpos__1_ in
@@ -31692,7 +31751,7 @@ module Tables = struct
           let _symbolstartpos = _startpos_label_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2559 "parsing/parser.mly"
+# 2579 "parsing/parser.mly"
       ( let e =
           match eo with
           | None ->
@@ -31702,13 +31761,13 @@ module Tables = struct
               e
         in
         label, mkexp_opt_constraint ~loc:_sloc e c )
-# 31706 "parsing/parser.ml"
+# 31765 "parsing/parser.ml"
           
         in
         
-# 991 "parsing/parser.mly"
+# 999 "parsing/parser.mly"
     ( x :: xs )
-# 31712 "parsing/parser.ml"
+# 31771 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31731,9 +31790,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = 
-# 2079 "parsing/parser.mly"
+# 2087 "parsing/parser.mly"
                                   ( _1 )
-# 31737 "parsing/parser.ml"
+# 31796 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31762,10 +31821,13 @@ module Tables = struct
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
-        let _v : (Parsetree.expression) = 
-# 2080 "parsing/parser.mly"
-                                  ( _1 )
-# 31769 "parsing/parser.ml"
+        let _v : (Parsetree.expression) = let _loc__2_ = (_startpos__2_, _endpos__2_) in
+        
+# 2088 "parsing/parser.mly"
+                                  ( if language_level < 3
+                                    then expert_exp ~loc:_loc__2_ "sequence"
+                                    else _1 )
+# 31831 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31802,25 +31864,30 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.expression) = let _1 =
-          let _1 = 
-# 2082 "parsing/parser.mly"
-    ( Pexp_sequence(_1, _3) )
-# 31809 "parsing/parser.ml"
-           in
+          let _1 =
+            let _loc__2_ = (_startpos__2_, _endpos__2_) in
+            
+# 2092 "parsing/parser.mly"
+    ( if language_level < 3
+      then expert_exp ~loc:_loc__2_ "sequence" else
+      Pexp_sequence(_1, _3) )
+# 31875 "parsing/parser.ml"
+            
+          in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 31818 "parsing/parser.ml"
+# 31885 "parsing/parser.ml"
           
         in
         
-# 2083 "parsing/parser.mly"
+# 2095 "parsing/parser.mly"
     ( _1 )
-# 31824 "parsing/parser.ml"
+# 31891 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31872,13 +31939,16 @@ module Tables = struct
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
+        let _loc__2_ = (_startpos__2_, _endpos__2_) in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2085 "parsing/parser.mly"
-    ( let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in
+# 2097 "parsing/parser.mly"
+    ( if language_level < 3
+      then expert_exp ~loc:_loc__2_ "sequence" else
+      let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in
       let payload = PStr [mkstrexp seq []] in
       mkexp ~loc:_sloc (Pexp_extension (_4, payload)) )
-# 31882 "parsing/parser.ml"
+# 31952 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -31945,18 +32015,18 @@ module Tables = struct
         let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs =
           let _1 = _1_inlined4 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 31951 "parsing/parser.ml"
+# 32021 "parsing/parser.ml"
           
         in
         let _endpos_attrs_ = _endpos__1_inlined4_ in
         let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 31960 "parsing/parser.ml"
+# 32030 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -31966,17 +32036,17 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 31972 "parsing/parser.ml"
+# 32042 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 31980 "parsing/parser.ml"
+# 32050 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs_ in
@@ -31984,14 +32054,14 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3026 "parsing/parser.mly"
+# 3046 "parsing/parser.mly"
     ( let args, res = args_res in
       let loc = make_loc (_startpos, _endpos_attrs2_) in
       let docs = symbol_docs _sloc in
       Te.mk_exception ~attrs
         (Te.decl id ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs)
       , ext )
-# 31995 "parsing/parser.ml"
+# 32065 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32017,21 +32087,21 @@ module Tables = struct
           let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 32021 "parsing/parser.ml"
+# 32091 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 810 "parsing/parser.mly"
+# 818 "parsing/parser.mly"
                               ( extra_sig _startpos _endpos _1 )
-# 32029 "parsing/parser.ml"
+# 32099 "parsing/parser.ml"
           
         in
         
-# 1547 "parsing/parser.mly"
+# 1555 "parsing/parser.mly"
     ( _1 )
-# 32035 "parsing/parser.ml"
+# 32105 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32063,9 +32133,9 @@ module Tables = struct
         let _v : (Parsetree.signature_item) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 32069 "parsing/parser.ml"
+# 32139 "parsing/parser.ml"
           
         in
         let _endpos__2_ = _endpos__1_inlined1_ in
@@ -32073,10 +32143,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1562 "parsing/parser.mly"
+# 1570 "parsing/parser.mly"
       ( let docs = symbol_docs _sloc in
         mksig ~loc:_sloc (Psig_extension (_1, (add_docs_attrs docs _2))) )
-# 32080 "parsing/parser.ml"
+# 32150 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32100,23 +32170,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1566 "parsing/parser.mly"
+# 1574 "parsing/parser.mly"
         ( Psig_attribute _1 )
-# 32106 "parsing/parser.ml"
+# 32176 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 858 "parsing/parser.mly"
+# 866 "parsing/parser.mly"
     ( mksig ~loc:_sloc _1 )
-# 32114 "parsing/parser.ml"
+# 32184 "parsing/parser.ml"
           
         in
         
-# 1568 "parsing/parser.mly"
+# 1576 "parsing/parser.mly"
     ( _1 )
-# 32120 "parsing/parser.ml"
+# 32190 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32140,23 +32210,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1571 "parsing/parser.mly"
+# 1579 "parsing/parser.mly"
         ( psig_value _1 )
-# 32146 "parsing/parser.ml"
+# 32216 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32154 "parsing/parser.ml"
+# 32224 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32160 "parsing/parser.ml"
+# 32230 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32180,23 +32250,93 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1573 "parsing/parser.mly"
+# 1581 "parsing/parser.mly"
         ( psig_value _1 )
-# 32186 "parsing/parser.ml"
+# 32256 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32194 "parsing/parser.ml"
+# 32264 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
+    ( _1 )
+# 32270 "parsing/parser.ml"
+         in
+        {
+          MenhirLib.EngineTypes.state = _menhir_s;
+          MenhirLib.EngineTypes.semv = Obj.repr _v;
+          MenhirLib.EngineTypes.startp = _startpos;
+          MenhirLib.EngineTypes.endp = _endpos;
+          MenhirLib.EngineTypes.next = _menhir_stack;
+        });
+      (fun _menhir_env ->
+        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
+        let {
+          MenhirLib.EngineTypes.state = _;
+          MenhirLib.EngineTypes.semv = bs;
+          MenhirLib.EngineTypes.startp = _startpos_bs_;
+          MenhirLib.EngineTypes.endp = _endpos_bs_;
+          MenhirLib.EngineTypes.next = {
+            MenhirLib.EngineTypes.state = _menhir_s;
+            MenhirLib.EngineTypes.semv = a;
+            MenhirLib.EngineTypes.startp = _startpos_a_;
+            MenhirLib.EngineTypes.endp = _endpos_a_;
+            MenhirLib.EngineTypes.next = _menhir_stack;
+          };
+        } = _menhir_stack in
+        let bs : (Parsetree.type_declaration list) = Obj.magic bs in
+        let a : ((Asttypes.rec_flag * string Asttypes.loc option) *
+  Parsetree.type_declaration) = Obj.magic a in
+        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
+        let _startpos = _startpos_a_ in
+        let _endpos = _endpos_bs_ in
+        let _v : (Parsetree.signature_item) = let _1 =
+          let _1 =
+            let _1 =
+              let _1 =
+                let _1 = 
+# 1056 "parsing/parser.mly"
+    ( let (x, b) = a in x, b :: bs )
+# 32307 "parsing/parser.ml"
+                 in
+                
+# 2867 "parsing/parser.mly"
+  ( _1 )
+# 32312 "parsing/parser.ml"
+                
+              in
+              
+# 2850 "parsing/parser.mly"
+    ( _1 )
+# 32318 "parsing/parser.ml"
+              
+            in
+            
+# 1583 "parsing/parser.mly"
+        ( psig_type _1 )
+# 32324 "parsing/parser.ml"
+            
+          in
+          let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in
+          let _endpos = _endpos__1_ in
+          let _symbolstartpos = _startpos__1_ in
+          let _sloc = (_symbolstartpos, _endpos) in
+          
+# 883 "parsing/parser.mly"
+    ( wrap_mksig_ext ~loc:_sloc _1 )
+# 32334 "parsing/parser.ml"
+          
+        in
+        
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32200 "parsing/parser.ml"
+# 32340 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32231,96 +32371,26 @@ module Tables = struct
             let _1 =
               let _1 =
                 let _1 = 
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 32237 "parsing/parser.ml"
+# 32377 "parsing/parser.ml"
                  in
                 
-# 2847 "parsing/parser.mly"
+# 2867 "parsing/parser.mly"
   ( _1 )
-# 32242 "parsing/parser.ml"
+# 32382 "parsing/parser.ml"
                 
               in
               
-# 2830 "parsing/parser.mly"
+# 2855 "parsing/parser.mly"
     ( _1 )
-# 32248 "parsing/parser.ml"
+# 32388 "parsing/parser.ml"
               
             in
             
-# 1575 "parsing/parser.mly"
-        ( psig_type _1 )
-# 32254 "parsing/parser.ml"
-            
-          in
-          let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in
-          let _endpos = _endpos__1_ in
-          let _symbolstartpos = _startpos__1_ in
-          let _sloc = (_symbolstartpos, _endpos) in
-          
-# 875 "parsing/parser.mly"
-    ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32264 "parsing/parser.ml"
-          
-        in
-        
-# 1601 "parsing/parser.mly"
-    ( _1 )
-# 32270 "parsing/parser.ml"
-         in
-        {
-          MenhirLib.EngineTypes.state = _menhir_s;
-          MenhirLib.EngineTypes.semv = Obj.repr _v;
-          MenhirLib.EngineTypes.startp = _startpos;
-          MenhirLib.EngineTypes.endp = _endpos;
-          MenhirLib.EngineTypes.next = _menhir_stack;
-        });
-      (fun _menhir_env ->
-        let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in
-        let {
-          MenhirLib.EngineTypes.state = _;
-          MenhirLib.EngineTypes.semv = bs;
-          MenhirLib.EngineTypes.startp = _startpos_bs_;
-          MenhirLib.EngineTypes.endp = _endpos_bs_;
-          MenhirLib.EngineTypes.next = {
-            MenhirLib.EngineTypes.state = _menhir_s;
-            MenhirLib.EngineTypes.semv = a;
-            MenhirLib.EngineTypes.startp = _startpos_a_;
-            MenhirLib.EngineTypes.endp = _endpos_a_;
-            MenhirLib.EngineTypes.next = _menhir_stack;
-          };
-        } = _menhir_stack in
-        let bs : (Parsetree.type_declaration list) = Obj.magic bs in
-        let a : ((Asttypes.rec_flag * string Asttypes.loc option) *
-  Parsetree.type_declaration) = Obj.magic a in
-        let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
-        let _startpos = _startpos_a_ in
-        let _endpos = _endpos_bs_ in
-        let _v : (Parsetree.signature_item) = let _1 =
-          let _1 =
-            let _1 =
-              let _1 =
-                let _1 = 
-# 1048 "parsing/parser.mly"
-    ( let (x, b) = a in x, b :: bs )
-# 32307 "parsing/parser.ml"
-                 in
-                
-# 2847 "parsing/parser.mly"
-  ( _1 )
-# 32312 "parsing/parser.ml"
-                
-              in
-              
-# 2835 "parsing/parser.mly"
-    ( _1 )
-# 32318 "parsing/parser.ml"
-              
-            in
-            
-# 1577 "parsing/parser.mly"
+# 1585 "parsing/parser.mly"
         ( psig_typesubst _1 )
-# 32324 "parsing/parser.ml"
+# 32394 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in
@@ -32328,15 +32398,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32334 "parsing/parser.ml"
+# 32404 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32340 "parsing/parser.ml"
+# 32410 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32421,16 +32491,16 @@ module Tables = struct
                 let attrs2 =
                   let _1 = _1_inlined3 in
                   
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 32427 "parsing/parser.ml"
+# 32497 "parsing/parser.ml"
                   
                 in
                 let _endpos_attrs2_ = _endpos__1_inlined3_ in
                 let cs = 
-# 1040 "parsing/parser.mly"
+# 1048 "parsing/parser.mly"
     ( List.rev xs )
-# 32434 "parsing/parser.ml"
+# 32504 "parsing/parser.ml"
                  in
                 let tid =
                   let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
@@ -32438,46 +32508,46 @@ module Tables = struct
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 32444 "parsing/parser.ml"
+# 32514 "parsing/parser.ml"
                   
                 in
                 let _4 = 
-# 3590 "parsing/parser.mly"
+# 3618 "parsing/parser.mly"
                 ( Recursive )
-# 32450 "parsing/parser.ml"
+# 32520 "parsing/parser.ml"
                  in
                 let attrs1 =
                   let _1 = _1_inlined1 in
                   
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 32457 "parsing/parser.ml"
+# 32527 "parsing/parser.ml"
                   
                 in
                 let _endpos = _endpos_attrs2_ in
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 3095 "parsing/parser.mly"
+# 3115 "parsing/parser.mly"
     ( let docs = symbol_docs _sloc in
       let attrs = attrs1 @ attrs2 in
       Te.mk tid cs ~params ~priv ~attrs ~docs,
       ext )
-# 32469 "parsing/parser.ml"
+# 32539 "parsing/parser.ml"
                 
               in
               
-# 3082 "parsing/parser.mly"
+# 3102 "parsing/parser.mly"
     ( _1 )
-# 32475 "parsing/parser.ml"
+# 32545 "parsing/parser.ml"
               
             in
             
-# 1579 "parsing/parser.mly"
+# 1587 "parsing/parser.mly"
         ( psig_typext _1 )
-# 32481 "parsing/parser.ml"
+# 32551 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined3_ in
@@ -32485,15 +32555,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32491 "parsing/parser.ml"
+# 32561 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32497 "parsing/parser.ml"
+# 32567 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32585,16 +32655,16 @@ module Tables = struct
                 let attrs2 =
                   let _1 = _1_inlined4 in
                   
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 32591 "parsing/parser.ml"
+# 32661 "parsing/parser.ml"
                   
                 in
                 let _endpos_attrs2_ = _endpos__1_inlined4_ in
                 let cs = 
-# 1040 "parsing/parser.mly"
+# 1048 "parsing/parser.mly"
     ( List.rev xs )
-# 32598 "parsing/parser.ml"
+# 32668 "parsing/parser.ml"
                  in
                 let tid =
                   let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in
@@ -32602,9 +32672,9 @@ module Tables = struct
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 32608 "parsing/parser.ml"
+# 32678 "parsing/parser.ml"
                   
                 in
                 let _4 =
@@ -32613,41 +32683,41 @@ module Tables = struct
                   let _startpos = _startpos__1_ in
                   let _loc = (_startpos, _endpos) in
                   
-# 3591 "parsing/parser.mly"
+# 3619 "parsing/parser.mly"
                 ( not_expecting _loc "nonrec flag" )
-# 32619 "parsing/parser.ml"
+# 32689 "parsing/parser.ml"
                   
                 in
                 let attrs1 =
                   let _1 = _1_inlined1 in
                   
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 32627 "parsing/parser.ml"
+# 32697 "parsing/parser.ml"
                   
                 in
                 let _endpos = _endpos_attrs2_ in
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 3095 "parsing/parser.mly"
+# 3115 "parsing/parser.mly"
     ( let docs = symbol_docs _sloc in
       let attrs = attrs1 @ attrs2 in
       Te.mk tid cs ~params ~priv ~attrs ~docs,
       ext )
-# 32639 "parsing/parser.ml"
+# 32709 "parsing/parser.ml"
                 
               in
               
-# 3082 "parsing/parser.mly"
+# 3102 "parsing/parser.mly"
     ( _1 )
-# 32645 "parsing/parser.ml"
+# 32715 "parsing/parser.ml"
               
             in
             
-# 1579 "parsing/parser.mly"
+# 1587 "parsing/parser.mly"
         ( psig_typext _1 )
-# 32651 "parsing/parser.ml"
+# 32721 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined4_ in
@@ -32655,15 +32725,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32661 "parsing/parser.ml"
+# 32731 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32667 "parsing/parser.ml"
+# 32737 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32687,23 +32757,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1581 "parsing/parser.mly"
+# 1589 "parsing/parser.mly"
         ( psig_exception _1 )
-# 32693 "parsing/parser.ml"
+# 32763 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32701 "parsing/parser.ml"
+# 32771 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32707 "parsing/parser.ml"
+# 32777 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32766,9 +32836,9 @@ module Tables = struct
               let attrs2 =
                 let _1 = _1_inlined3 in
                 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 32772 "parsing/parser.ml"
+# 32842 "parsing/parser.ml"
                 
               in
               let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -32778,37 +32848,37 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 32784 "parsing/parser.ml"
+# 32854 "parsing/parser.ml"
                 
               in
               let attrs1 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 32792 "parsing/parser.ml"
+# 32862 "parsing/parser.ml"
                 
               in
               let _endpos = _endpos_attrs2_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 1610 "parsing/parser.mly"
+# 1618 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Md.mk name body ~attrs ~loc ~docs, ext
   )
-# 32806 "parsing/parser.ml"
+# 32876 "parsing/parser.ml"
               
             in
             
-# 1583 "parsing/parser.mly"
+# 1591 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Psig_module body, ext) )
-# 32812 "parsing/parser.ml"
+# 32882 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined3_ in
@@ -32816,15 +32886,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32822 "parsing/parser.ml"
+# 32892 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32828 "parsing/parser.ml"
+# 32898 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32894,9 +32964,9 @@ module Tables = struct
               let attrs2 =
                 let _1 = _1_inlined4 in
                 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 32900 "parsing/parser.ml"
+# 32970 "parsing/parser.ml"
                 
               in
               let _endpos_attrs2_ = _endpos__1_inlined4_ in
@@ -32907,9 +32977,9 @@ module Tables = struct
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 32913 "parsing/parser.ml"
+# 32983 "parsing/parser.ml"
                   
                 in
                 let (_endpos_id_, _startpos_id_) = (_endpos__1_, _startpos__1_) in
@@ -32917,9 +32987,9 @@ module Tables = struct
                 let _symbolstartpos = _startpos_id_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 1647 "parsing/parser.mly"
+# 1655 "parsing/parser.mly"
     ( Mty.alias ~loc:(make_loc _sloc) id )
-# 32923 "parsing/parser.ml"
+# 32993 "parsing/parser.ml"
                 
               in
               let name =
@@ -32928,37 +32998,37 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 32934 "parsing/parser.ml"
+# 33004 "parsing/parser.ml"
                 
               in
               let attrs1 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 32942 "parsing/parser.ml"
+# 33012 "parsing/parser.ml"
                 
               in
               let _endpos = _endpos_attrs2_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 1638 "parsing/parser.mly"
+# 1646 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Md.mk name body ~attrs ~loc ~docs, ext
   )
-# 32956 "parsing/parser.ml"
+# 33026 "parsing/parser.ml"
               
             in
             
-# 1585 "parsing/parser.mly"
+# 1593 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Psig_module body, ext) )
-# 32962 "parsing/parser.ml"
+# 33032 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined4_ in
@@ -32966,15 +33036,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 32972 "parsing/parser.ml"
+# 33042 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 32978 "parsing/parser.ml"
+# 33048 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -32998,23 +33068,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1587 "parsing/parser.mly"
+# 1595 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Psig_modsubst body, ext) )
-# 33004 "parsing/parser.ml"
+# 33074 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33012 "parsing/parser.ml"
+# 33082 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33018 "parsing/parser.ml"
+# 33088 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33100,9 +33170,9 @@ module Tables = struct
                   let attrs2 =
                     let _1 = _1_inlined3 in
                     
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 33106 "parsing/parser.ml"
+# 33176 "parsing/parser.ml"
                     
                   in
                   let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -33112,49 +33182,49 @@ module Tables = struct
                     let _symbolstartpos = _startpos__1_ in
                     let _sloc = (_symbolstartpos, _endpos) in
                     
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 33118 "parsing/parser.ml"
+# 33188 "parsing/parser.ml"
                     
                   in
                   let attrs1 =
                     let _1 = _1_inlined1 in
                     
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 33126 "parsing/parser.ml"
+# 33196 "parsing/parser.ml"
                     
                   in
                   let _endpos = _endpos_attrs2_ in
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 1681 "parsing/parser.mly"
+# 1689 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     ext, Md.mk name mty ~attrs ~loc ~docs
   )
-# 33140 "parsing/parser.ml"
+# 33210 "parsing/parser.ml"
                   
                 in
                 
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 33146 "parsing/parser.ml"
+# 33216 "parsing/parser.ml"
                 
               in
               
-# 1670 "parsing/parser.mly"
+# 1678 "parsing/parser.mly"
     ( _1 )
-# 33152 "parsing/parser.ml"
+# 33222 "parsing/parser.ml"
               
             in
             
-# 1589 "parsing/parser.mly"
+# 1597 "parsing/parser.mly"
         ( let (ext, l) = _1 in (Psig_recmodule l, ext) )
-# 33158 "parsing/parser.ml"
+# 33228 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_bs_ in
@@ -33162,15 +33232,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33168 "parsing/parser.ml"
+# 33238 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33174 "parsing/parser.ml"
+# 33244 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33194,23 +33264,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1591 "parsing/parser.mly"
+# 1599 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Psig_modtype body, ext) )
-# 33200 "parsing/parser.ml"
+# 33270 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33208 "parsing/parser.ml"
+# 33278 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33214 "parsing/parser.ml"
+# 33284 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33234,23 +33304,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1593 "parsing/parser.mly"
+# 1601 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Psig_open body, ext) )
-# 33240 "parsing/parser.ml"
+# 33310 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33248 "parsing/parser.ml"
+# 33318 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33254 "parsing/parser.ml"
+# 33324 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33306,38 +33376,38 @@ module Tables = struct
               let attrs2 =
                 let _1 = _1_inlined2 in
                 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 33312 "parsing/parser.ml"
+# 33382 "parsing/parser.ml"
                 
               in
               let _endpos_attrs2_ = _endpos__1_inlined2_ in
               let attrs1 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 33321 "parsing/parser.ml"
+# 33391 "parsing/parser.ml"
                 
               in
               let _endpos = _endpos_attrs2_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 1439 "parsing/parser.mly"
+# 1447 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Incl.mk thing ~attrs ~loc ~docs, ext
   )
-# 33335 "parsing/parser.ml"
+# 33405 "parsing/parser.ml"
               
             in
             
-# 1595 "parsing/parser.mly"
+# 1603 "parsing/parser.mly"
         ( psig_include _1 )
-# 33341 "parsing/parser.ml"
+# 33411 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined2_ in
@@ -33345,15 +33415,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33351 "parsing/parser.ml"
+# 33421 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33357 "parsing/parser.ml"
+# 33427 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33430,9 +33500,9 @@ module Tables = struct
         let cty : (Parsetree.class_type) = Obj.magic cty in
         let _7 : unit = Obj.magic _7 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 33436 "parsing/parser.ml"
+# 33506 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let virt : (Asttypes.virtual_flag) = Obj.magic virt in
@@ -33450,9 +33520,9 @@ module Tables = struct
                   let attrs2 =
                     let _1 = _1_inlined3 in
                     
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 33456 "parsing/parser.ml"
+# 33526 "parsing/parser.ml"
                     
                   in
                   let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -33462,24 +33532,24 @@ module Tables = struct
                     let _symbolstartpos = _startpos__1_ in
                     let _sloc = (_symbolstartpos, _endpos) in
                     
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 33468 "parsing/parser.ml"
+# 33538 "parsing/parser.ml"
                     
                   in
                   let attrs1 =
                     let _1 = _1_inlined1 in
                     
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 33476 "parsing/parser.ml"
+# 33546 "parsing/parser.ml"
                     
                   in
                   let _endpos = _endpos_attrs2_ in
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 2011 "parsing/parser.mly"
+# 2019 "parsing/parser.mly"
     (
       let attrs = attrs1 @ attrs2 in
       let loc = make_loc _sloc in
@@ -33487,25 +33557,25 @@ module Tables = struct
       ext,
       Ci.mk id cty ~virt ~params ~attrs ~loc ~docs
     )
-# 33491 "parsing/parser.ml"
+# 33561 "parsing/parser.ml"
                   
                 in
                 
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 33497 "parsing/parser.ml"
+# 33567 "parsing/parser.ml"
                 
               in
               
-# 1999 "parsing/parser.mly"
+# 2007 "parsing/parser.mly"
     ( _1 )
-# 33503 "parsing/parser.ml"
+# 33573 "parsing/parser.ml"
               
             in
             
-# 1597 "parsing/parser.mly"
+# 1605 "parsing/parser.mly"
         ( let (ext, l) = _1 in (Psig_class l, ext) )
-# 33509 "parsing/parser.ml"
+# 33579 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_bs_ in
@@ -33513,15 +33583,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33519 "parsing/parser.ml"
+# 33589 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33525 "parsing/parser.ml"
+# 33595 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33545,23 +33615,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.signature_item) = let _1 =
           let _1 = 
-# 1599 "parsing/parser.mly"
+# 1607 "parsing/parser.mly"
         ( let (ext, l) = _1 in (Psig_class_type l, ext) )
-# 33551 "parsing/parser.ml"
+# 33621 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 875 "parsing/parser.mly"
+# 883 "parsing/parser.mly"
     ( wrap_mksig_ext ~loc:_sloc _1 )
-# 33559 "parsing/parser.ml"
+# 33629 "parsing/parser.ml"
           
         in
         
-# 1601 "parsing/parser.mly"
+# 1609 "parsing/parser.mly"
     ( _1 )
-# 33565 "parsing/parser.ml"
+# 33635 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33584,9 +33654,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.constant) = 
-# 3421 "parsing/parser.mly"
+# 3441 "parsing/parser.mly"
                  ( _1 )
-# 33590 "parsing/parser.ml"
+# 33660 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33611,18 +33681,18 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _2 : (
-# 637 "parsing/parser.mly"
+# 645 "parsing/parser.mly"
        (string * char option)
-# 33617 "parsing/parser.ml"
+# 33687 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.constant) = 
-# 3422 "parsing/parser.mly"
+# 3442 "parsing/parser.mly"
                  ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) )
-# 33626 "parsing/parser.ml"
+# 33696 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33647,18 +33717,18 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _2 : (
-# 616 "parsing/parser.mly"
+# 624 "parsing/parser.mly"
        (string * char option)
-# 33653 "parsing/parser.ml"
+# 33723 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.constant) = 
-# 3423 "parsing/parser.mly"
+# 3443 "parsing/parser.mly"
                  ( let (f, m) = _2 in Pconst_float("-" ^ f, m) )
-# 33662 "parsing/parser.ml"
+# 33732 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33683,18 +33753,18 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _2 : (
-# 637 "parsing/parser.mly"
+# 645 "parsing/parser.mly"
        (string * char option)
-# 33689 "parsing/parser.ml"
+# 33759 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.constant) = 
-# 3424 "parsing/parser.mly"
+# 3444 "parsing/parser.mly"
                  ( let (n, m) = _2 in Pconst_integer (n, m) )
-# 33698 "parsing/parser.ml"
+# 33768 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33719,18 +33789,18 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _2 : (
-# 616 "parsing/parser.mly"
+# 624 "parsing/parser.mly"
        (string * char option)
-# 33725 "parsing/parser.ml"
+# 33795 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : unit = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.constant) = 
-# 3425 "parsing/parser.mly"
+# 3445 "parsing/parser.mly"
                  ( let (f, m) = _2 in Pconst_float(f, m) )
-# 33734 "parsing/parser.ml"
+# 33804 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33771,18 +33841,18 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 2759 "parsing/parser.mly"
+# 2779 "parsing/parser.mly"
     ( let fields, closed = _1 in
       let closed = match closed with Some () -> Open | None -> Closed in
       fields, closed )
-# 33779 "parsing/parser.ml"
+# 33849 "parsing/parser.ml"
               
             in
             
-# 2730 "parsing/parser.mly"
+# 2750 "parsing/parser.mly"
       ( let (fields, closed) = _2 in
         Ppat_record(fields, closed) )
-# 33786 "parsing/parser.ml"
+# 33856 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -33790,15 +33860,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 33796 "parsing/parser.ml"
+# 33866 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 33802 "parsing/parser.ml"
+# 33872 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33839,19 +33909,19 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 2759 "parsing/parser.mly"
+# 2779 "parsing/parser.mly"
     ( let fields, closed = _1 in
       let closed = match closed with Some () -> Open | None -> Closed in
       fields, closed )
-# 33847 "parsing/parser.ml"
+# 33917 "parsing/parser.ml"
               
             in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2733 "parsing/parser.mly"
+# 2753 "parsing/parser.mly"
       ( unclosed "{" _loc__1_ "}" _loc__3_ )
-# 33855 "parsing/parser.ml"
+# 33925 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -33859,15 +33929,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 33865 "parsing/parser.ml"
+# 33935 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 33871 "parsing/parser.ml"
+# 33941 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33906,15 +33976,15 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _2 = 
-# 2753 "parsing/parser.mly"
+# 2773 "parsing/parser.mly"
     ( ps )
-# 33912 "parsing/parser.ml"
+# 33982 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2735 "parsing/parser.mly"
+# 2755 "parsing/parser.mly"
       ( fst (mktailpat _loc__3_ _2) )
-# 33918 "parsing/parser.ml"
+# 33988 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -33922,15 +33992,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 33928 "parsing/parser.ml"
+# 33998 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 33934 "parsing/parser.ml"
+# 34004 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -33969,16 +34039,16 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _2 = 
-# 2753 "parsing/parser.mly"
+# 2773 "parsing/parser.mly"
     ( ps )
-# 33975 "parsing/parser.ml"
+# 34045 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2737 "parsing/parser.mly"
+# 2757 "parsing/parser.mly"
       ( unclosed "[" _loc__1_ "]" _loc__3_ )
-# 33982 "parsing/parser.ml"
+# 34052 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -33986,15 +34056,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 33992 "parsing/parser.ml"
+# 34062 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 33998 "parsing/parser.ml"
+# 34068 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34033,14 +34103,14 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _2 = 
-# 2753 "parsing/parser.mly"
+# 2773 "parsing/parser.mly"
     ( ps )
-# 34039 "parsing/parser.ml"
+# 34109 "parsing/parser.ml"
              in
             
-# 2739 "parsing/parser.mly"
+# 2759 "parsing/parser.mly"
       ( Ppat_array _2 )
-# 34044 "parsing/parser.ml"
+# 34114 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -34048,15 +34118,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 34054 "parsing/parser.ml"
+# 34124 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 34060 "parsing/parser.ml"
+# 34130 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34087,24 +34157,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2741 "parsing/parser.mly"
+# 2761 "parsing/parser.mly"
       ( Ppat_array [] )
-# 34093 "parsing/parser.ml"
+# 34163 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 34102 "parsing/parser.ml"
+# 34172 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 34108 "parsing/parser.ml"
+# 34178 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34143,16 +34213,16 @@ module Tables = struct
         let _v : (Parsetree.pattern) = let _1 =
           let _1 =
             let _2 = 
-# 2753 "parsing/parser.mly"
+# 2773 "parsing/parser.mly"
     ( ps )
-# 34149 "parsing/parser.ml"
+# 34219 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2743 "parsing/parser.mly"
+# 2763 "parsing/parser.mly"
       ( unclosed "[|" _loc__1_ "|]" _loc__3_ )
-# 34156 "parsing/parser.ml"
+# 34226 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -34160,15 +34230,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 34166 "parsing/parser.ml"
+# 34236 "parsing/parser.ml"
           
         in
         
-# 2744 "parsing/parser.mly"
+# 2764 "parsing/parser.mly"
     ( _1 )
-# 34172 "parsing/parser.ml"
+# 34242 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34208,9 +34278,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2246 "parsing/parser.mly"
+# 2266 "parsing/parser.mly"
       ( reloc_exp ~loc:_sloc _2 )
-# 34214 "parsing/parser.ml"
+# 34284 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34249,9 +34319,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 2248 "parsing/parser.mly"
+# 2268 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__3_ )
-# 34255 "parsing/parser.ml"
+# 34325 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34298,9 +34368,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2250 "parsing/parser.mly"
+# 2270 "parsing/parser.mly"
       ( mkexp_constraint ~loc:_sloc _2 _3 )
-# 34304 "parsing/parser.ml"
+# 34374 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34354,9 +34424,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2252 "parsing/parser.mly"
+# 2272 "parsing/parser.mly"
       ( array_get ~loc:_sloc _1 _4 )
-# 34360 "parsing/parser.ml"
+# 34430 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34409,9 +34479,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2254 "parsing/parser.mly"
+# 2274 "parsing/parser.mly"
       ( unclosed "(" _loc__3_ ")" _loc__5_ )
-# 34415 "parsing/parser.ml"
+# 34485 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34465,9 +34535,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2256 "parsing/parser.mly"
+# 2276 "parsing/parser.mly"
       ( string_get ~loc:_sloc _1 _4 )
-# 34471 "parsing/parser.ml"
+# 34541 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34520,9 +34590,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2258 "parsing/parser.mly"
+# 2278 "parsing/parser.mly"
       ( unclosed "[" _loc__3_ "]" _loc__5_ )
-# 34526 "parsing/parser.ml"
+# 34596 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34568,26 +34638,26 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34574 "parsing/parser.ml"
+# 34644 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 34583 "parsing/parser.ml"
+# 34653 "parsing/parser.ml"
          in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2260 "parsing/parser.mly"
+# 2280 "parsing/parser.mly"
       ( dotop_get ~loc:_sloc lident bracket _2 _1 _4 )
-# 34591 "parsing/parser.ml"
+# 34661 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34633,25 +34703,25 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34639 "parsing/parser.ml"
+# 34709 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 34648 "parsing/parser.ml"
+# 34718 "parsing/parser.ml"
          in
         let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2262 "parsing/parser.mly"
+# 2282 "parsing/parser.mly"
       ( unclosed "[" _loc__3_ "]" _loc__5_ )
-# 34655 "parsing/parser.ml"
+# 34725 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34697,26 +34767,26 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34703 "parsing/parser.ml"
+# 34773 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 34712 "parsing/parser.ml"
+# 34782 "parsing/parser.ml"
          in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2264 "parsing/parser.mly"
+# 2284 "parsing/parser.mly"
       ( dotop_get ~loc:_sloc lident paren _2 _1 _4  )
-# 34720 "parsing/parser.ml"
+# 34790 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34762,25 +34832,25 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34768 "parsing/parser.ml"
+# 34838 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 34777 "parsing/parser.ml"
+# 34847 "parsing/parser.ml"
          in
         let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2266 "parsing/parser.mly"
+# 2286 "parsing/parser.mly"
       ( unclosed "(" _loc__3_ ")" _loc__5_ )
-# 34784 "parsing/parser.ml"
+# 34854 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34826,26 +34896,26 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34832 "parsing/parser.ml"
+# 34902 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 34841 "parsing/parser.ml"
+# 34911 "parsing/parser.ml"
          in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2268 "parsing/parser.mly"
+# 2288 "parsing/parser.mly"
       ( dotop_get ~loc:_sloc lident brace _2 _1 _4 )
-# 34849 "parsing/parser.ml"
+# 34919 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34891,9 +34961,9 @@ module Tables = struct
         let _4 : (Parsetree.expression) = Obj.magic _4 in
         let _3 : unit = Obj.magic _3 in
         let _2 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34897 "parsing/parser.ml"
+# 34967 "parsing/parser.ml"
         ) = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -34902,9 +34972,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2270 "parsing/parser.mly"
+# 2290 "parsing/parser.mly"
       ( unclosed "{" _loc__3_ "}" _loc__5_ )
-# 34908 "parsing/parser.ml"
+# 34978 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -34962,9 +35032,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 34968 "parsing/parser.ml"
+# 35038 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -34973,17 +35043,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 34979 "parsing/parser.ml"
+# 35049 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2272 "parsing/parser.mly"
+# 2292 "parsing/parser.mly"
       ( dotop_get ~loc:_sloc (ldot _3) bracket _4 _1 _6  )
-# 34987 "parsing/parser.ml"
+# 35057 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35041,9 +35111,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 35047 "parsing/parser.ml"
+# 35117 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -35052,16 +35122,16 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 35058 "parsing/parser.ml"
+# 35128 "parsing/parser.ml"
          in
         let _loc__7_ = (_startpos__7_, _endpos__7_) in
         let _loc__5_ = (_startpos__5_, _endpos__5_) in
         
-# 2275 "parsing/parser.mly"
+# 2295 "parsing/parser.mly"
       ( unclosed "[" _loc__5_ "]" _loc__7_ )
-# 35065 "parsing/parser.ml"
+# 35135 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35119,9 +35189,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 35125 "parsing/parser.ml"
+# 35195 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -35130,17 +35200,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 35136 "parsing/parser.ml"
+# 35206 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2277 "parsing/parser.mly"
+# 2297 "parsing/parser.mly"
       ( dotop_get ~loc:_sloc (ldot _3) paren _4 _1 _6 )
-# 35144 "parsing/parser.ml"
+# 35214 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35198,9 +35268,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 35204 "parsing/parser.ml"
+# 35274 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -35209,16 +35279,16 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 35215 "parsing/parser.ml"
+# 35285 "parsing/parser.ml"
          in
         let _loc__7_ = (_startpos__7_, _endpos__7_) in
         let _loc__5_ = (_startpos__5_, _endpos__5_) in
         
-# 2280 "parsing/parser.mly"
+# 2300 "parsing/parser.mly"
       ( unclosed "(" _loc__5_ ")" _loc__7_ )
-# 35222 "parsing/parser.ml"
+# 35292 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35276,9 +35346,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 35282 "parsing/parser.ml"
+# 35352 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -35287,17 +35357,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 35293 "parsing/parser.ml"
+# 35363 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2282 "parsing/parser.mly"
+# 2302 "parsing/parser.mly"
       ( dotop_get ~loc:_sloc (ldot _3) brace _4 _1 _6  )
-# 35301 "parsing/parser.ml"
+# 35371 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35355,9 +35425,9 @@ module Tables = struct
         let es : (Parsetree.expression list) = Obj.magic es in
         let _5 : unit = Obj.magic _5 in
         let _4 : (
-# 632 "parsing/parser.mly"
+# 640 "parsing/parser.mly"
        (string)
-# 35361 "parsing/parser.ml"
+# 35431 "parsing/parser.ml"
         ) = Obj.magic _4 in
         let _3 : (Longident.t) = Obj.magic _3 in
         let _2 : unit = Obj.magic _2 in
@@ -35366,16 +35436,16 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__7_ in
         let _v : (Parsetree.expression) = let _6 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 35372 "parsing/parser.ml"
+# 35442 "parsing/parser.ml"
          in
         let _loc__7_ = (_startpos__7_, _endpos__7_) in
         let _loc__5_ = (_startpos__5_, _endpos__5_) in
         
-# 2285 "parsing/parser.mly"
+# 2305 "parsing/parser.mly"
       ( unclosed "{" _loc__5_ "}" _loc__7_ )
-# 35379 "parsing/parser.ml"
+# 35449 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35429,9 +35499,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2287 "parsing/parser.mly"
+# 2307 "parsing/parser.mly"
       ( bigarray_get ~loc:_sloc _1 _4 )
-# 35435 "parsing/parser.ml"
+# 35505 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35484,9 +35554,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in
         let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 2289 "parsing/parser.mly"
+# 2309 "parsing/parser.mly"
       ( unclosed "{" _loc__3_ "}" _loc__5_ )
-# 35490 "parsing/parser.ml"
+# 35560 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35540,15 +35610,15 @@ module Tables = struct
           let attrs =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 35546 "parsing/parser.ml"
+# 35616 "parsing/parser.ml"
             
           in
           
-# 2298 "parsing/parser.mly"
+# 2318 "parsing/parser.mly"
       ( e.pexp_desc, (ext, attrs @ e.pexp_attributes) )
-# 35552 "parsing/parser.ml"
+# 35622 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__5_ in
@@ -35556,10 +35626,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 35563 "parsing/parser.ml"
+# 35633 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35608,24 +35678,24 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 35614 "parsing/parser.ml"
+# 35684 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 35620 "parsing/parser.ml"
+# 35690 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__3_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2300 "parsing/parser.mly"
+# 2320 "parsing/parser.mly"
       ( Pexp_construct (mkloc (Lident "()") (make_loc _sloc), None), _2 )
-# 35629 "parsing/parser.ml"
+# 35699 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__3_ in
@@ -35633,10 +35703,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 35640 "parsing/parser.ml"
+# 35710 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35692,23 +35762,23 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 35698 "parsing/parser.ml"
+# 35768 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 35704 "parsing/parser.ml"
+# 35774 "parsing/parser.ml"
             
           in
           let _loc__4_ = (_startpos__4_, _endpos__4_) in
           let _loc__1_ = (_startpos__1_, _endpos__1_) in
           
-# 2302 "parsing/parser.mly"
+# 2322 "parsing/parser.mly"
       ( unclosed "begin" _loc__1_ "end" _loc__4_ )
-# 35712 "parsing/parser.ml"
+# 35782 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__4_ in
@@ -35716,10 +35786,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 35723 "parsing/parser.ml"
+# 35793 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35769,9 +35839,9 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 35775 "parsing/parser.ml"
+# 35845 "parsing/parser.ml"
             
           in
           let _2 =
@@ -35779,21 +35849,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 35785 "parsing/parser.ml"
+# 35855 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 35791 "parsing/parser.ml"
+# 35861 "parsing/parser.ml"
             
           in
           
-# 2304 "parsing/parser.mly"
+# 2324 "parsing/parser.mly"
       ( Pexp_new(_3), _2 )
-# 35797 "parsing/parser.ml"
+# 35867 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__1_inlined3_ in
@@ -35801,10 +35871,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 35808 "parsing/parser.ml"
+# 35878 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35867,21 +35937,21 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 35873 "parsing/parser.ml"
+# 35943 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 35879 "parsing/parser.ml"
+# 35949 "parsing/parser.ml"
             
           in
           
-# 2306 "parsing/parser.mly"
+# 2326 "parsing/parser.mly"
       ( Pexp_pack _4, _3 )
-# 35885 "parsing/parser.ml"
+# 35955 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__5_ in
@@ -35889,10 +35959,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 35896 "parsing/parser.ml"
+# 35966 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -35970,11 +36040,11 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 35978 "parsing/parser.ml"
+# 36048 "parsing/parser.ml"
             
           in
           let _3 =
@@ -35982,24 +36052,24 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 35988 "parsing/parser.ml"
+# 36058 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 35994 "parsing/parser.ml"
+# 36064 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__7_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 2308 "parsing/parser.mly"
+# 2328 "parsing/parser.mly"
       ( Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _4), _6), _3 )
-# 36003 "parsing/parser.ml"
+# 36073 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__7_ in
@@ -36007,10 +36077,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 36014 "parsing/parser.ml"
+# 36084 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36080,23 +36150,23 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 36086 "parsing/parser.ml"
+# 36156 "parsing/parser.ml"
               
             in
             
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 36092 "parsing/parser.ml"
+# 36162 "parsing/parser.ml"
             
           in
           let _loc__6_ = (_startpos__6_, _endpos__6_) in
           let _loc__1_ = (_startpos__1_, _endpos__1_) in
           
-# 2310 "parsing/parser.mly"
+# 2330 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__6_ )
-# 36100 "parsing/parser.ml"
+# 36170 "parsing/parser.ml"
           
         in
         let _endpos__1_ = _endpos__6_ in
@@ -36104,10 +36174,10 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2291 "parsing/parser.mly"
+# 2311 "parsing/parser.mly"
     ( let desc, attrs = _1 in
       mkexp_attrs ~loc:_sloc desc attrs )
-# 36111 "parsing/parser.ml"
+# 36181 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36136,30 +36206,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 36142 "parsing/parser.ml"
+# 36212 "parsing/parser.ml"
               
             in
             
-# 2314 "parsing/parser.mly"
+# 2334 "parsing/parser.mly"
       ( Pexp_ident (_1) )
-# 36148 "parsing/parser.ml"
+# 36218 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36157 "parsing/parser.ml"
+# 36227 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36163 "parsing/parser.ml"
+# 36233 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36183,23 +36253,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2316 "parsing/parser.mly"
+# 2336 "parsing/parser.mly"
       ( Pexp_constant _1 )
-# 36189 "parsing/parser.ml"
+# 36259 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36197 "parsing/parser.ml"
+# 36267 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36203 "parsing/parser.ml"
+# 36273 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36228,30 +36298,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 36234 "parsing/parser.ml"
+# 36304 "parsing/parser.ml"
               
             in
             
-# 2318 "parsing/parser.mly"
+# 2338 "parsing/parser.mly"
       ( Pexp_construct(_1, None) )
-# 36240 "parsing/parser.ml"
+# 36310 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36249 "parsing/parser.ml"
+# 36319 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36255 "parsing/parser.ml"
+# 36325 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36275,23 +36345,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2320 "parsing/parser.mly"
+# 2340 "parsing/parser.mly"
       ( Pexp_variant(_1, None) )
-# 36281 "parsing/parser.ml"
+# 36351 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36289 "parsing/parser.ml"
+# 36359 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36295 "parsing/parser.ml"
+# 36365 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36317,9 +36387,9 @@ module Tables = struct
         } = _menhir_stack in
         let _2 : (Parsetree.expression) = Obj.magic _2 in
         let _1 : (
-# 675 "parsing/parser.mly"
+# 683 "parsing/parser.mly"
        (string)
-# 36323 "parsing/parser.ml"
+# 36393 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
@@ -36331,15 +36401,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 36337 "parsing/parser.ml"
+# 36407 "parsing/parser.ml"
               
             in
             
-# 2322 "parsing/parser.mly"
+# 2342 "parsing/parser.mly"
       ( Pexp_apply(_1, [Nolabel,_2]) )
-# 36343 "parsing/parser.ml"
+# 36413 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_ in
@@ -36347,15 +36417,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36353 "parsing/parser.ml"
+# 36423 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36359 "parsing/parser.ml"
+# 36429 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36388,23 +36458,23 @@ module Tables = struct
           let _1 =
             let _1 =
               let _1 = 
-# 2323 "parsing/parser.mly"
+# 2343 "parsing/parser.mly"
             ("!")
-# 36394 "parsing/parser.ml"
+# 36464 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 36402 "parsing/parser.ml"
+# 36472 "parsing/parser.ml"
               
             in
             
-# 2324 "parsing/parser.mly"
+# 2344 "parsing/parser.mly"
       ( Pexp_apply(_1, [Nolabel,_2]) )
-# 36408 "parsing/parser.ml"
+# 36478 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_ in
@@ -36412,15 +36482,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36418 "parsing/parser.ml"
+# 36488 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36424 "parsing/parser.ml"
+# 36494 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36459,14 +36529,14 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _2 = 
-# 2571 "parsing/parser.mly"
+# 2591 "parsing/parser.mly"
     ( xs )
-# 36465 "parsing/parser.ml"
+# 36535 "parsing/parser.ml"
              in
             
-# 2326 "parsing/parser.mly"
+# 2346 "parsing/parser.mly"
       ( Pexp_override _2 )
-# 36470 "parsing/parser.ml"
+# 36540 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -36474,15 +36544,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36480 "parsing/parser.ml"
+# 36550 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36486 "parsing/parser.ml"
+# 36556 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36521,16 +36591,16 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _2 = 
-# 2571 "parsing/parser.mly"
+# 2591 "parsing/parser.mly"
     ( xs )
-# 36527 "parsing/parser.ml"
+# 36597 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2328 "parsing/parser.mly"
+# 2348 "parsing/parser.mly"
       ( unclosed "{<" _loc__1_ ">}" _loc__3_ )
-# 36534 "parsing/parser.ml"
+# 36604 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -36538,15 +36608,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36544 "parsing/parser.ml"
+# 36614 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36550 "parsing/parser.ml"
+# 36620 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36577,24 +36647,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2330 "parsing/parser.mly"
+# 2350 "parsing/parser.mly"
       ( Pexp_override [] )
-# 36583 "parsing/parser.ml"
+# 36653 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36592 "parsing/parser.ml"
+# 36662 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36598 "parsing/parser.ml"
+# 36668 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36638,15 +36708,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 36644 "parsing/parser.ml"
+# 36714 "parsing/parser.ml"
               
             in
             
-# 2332 "parsing/parser.mly"
+# 2352 "parsing/parser.mly"
       ( Pexp_field(_1, _3) )
-# 36650 "parsing/parser.ml"
+# 36720 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -36654,15 +36724,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36660 "parsing/parser.ml"
+# 36730 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36666 "parsing/parser.ml"
+# 36736 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36720,24 +36790,24 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 36726 "parsing/parser.ml"
+# 36796 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 36735 "parsing/parser.ml"
+# 36805 "parsing/parser.ml"
               
             in
             
-# 2334 "parsing/parser.mly"
+# 2354 "parsing/parser.mly"
       ( Pexp_open(od, _4) )
-# 36741 "parsing/parser.ml"
+# 36811 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -36745,15 +36815,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36751 "parsing/parser.ml"
+# 36821 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36757 "parsing/parser.ml"
+# 36827 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36806,9 +36876,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _4 = 
-# 2571 "parsing/parser.mly"
+# 2591 "parsing/parser.mly"
     ( xs )
-# 36812 "parsing/parser.ml"
+# 36882 "parsing/parser.ml"
              in
             let od =
               let _1 =
@@ -36816,18 +36886,18 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 36822 "parsing/parser.ml"
+# 36892 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 36831 "parsing/parser.ml"
+# 36901 "parsing/parser.ml"
               
             in
             let _startpos_od_ = _startpos__1_ in
@@ -36835,10 +36905,10 @@ module Tables = struct
             let _symbolstartpos = _startpos_od_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 2336 "parsing/parser.mly"
+# 2356 "parsing/parser.mly"
       ( (* TODO: review the location of Pexp_override *)
         Pexp_open(od, mkexp ~loc:_sloc (Pexp_override _4)) )
-# 36842 "parsing/parser.ml"
+# 36912 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -36846,15 +36916,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36852 "parsing/parser.ml"
+# 36922 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36858 "parsing/parser.ml"
+# 36928 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36907,16 +36977,16 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _4 = 
-# 2571 "parsing/parser.mly"
+# 2591 "parsing/parser.mly"
     ( xs )
-# 36913 "parsing/parser.ml"
+# 36983 "parsing/parser.ml"
              in
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2339 "parsing/parser.mly"
+# 2359 "parsing/parser.mly"
       ( unclosed "{<" _loc__3_ ">}" _loc__5_ )
-# 36920 "parsing/parser.ml"
+# 36990 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -36924,15 +36994,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 36930 "parsing/parser.ml"
+# 37000 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 36936 "parsing/parser.ml"
+# 37006 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -36963,9 +37033,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 36969 "parsing/parser.ml"
+# 37039 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _2 : unit = Obj.magic _2 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
@@ -36977,23 +37047,23 @@ module Tables = struct
             let _3 =
               let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
               let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 36983 "parsing/parser.ml"
+# 37053 "parsing/parser.ml"
                in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 36991 "parsing/parser.ml"
+# 37061 "parsing/parser.ml"
               
             in
             
-# 2341 "parsing/parser.mly"
+# 2361 "parsing/parser.mly"
       ( Pexp_send(_1, _3) )
-# 36997 "parsing/parser.ml"
+# 37067 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -37001,15 +37071,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37007 "parsing/parser.ml"
+# 37077 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37013 "parsing/parser.ml"
+# 37083 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37041,9 +37111,9 @@ module Tables = struct
         } = _menhir_stack in
         let _3 : (Parsetree.expression) = Obj.magic _3 in
         let _1_inlined1 : (
-# 686 "parsing/parser.mly"
+# 694 "parsing/parser.mly"
        (string)
-# 37047 "parsing/parser.ml"
+# 37117 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _1 : (Parsetree.expression) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
@@ -37057,15 +37127,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 844 "parsing/parser.mly"
+# 852 "parsing/parser.mly"
    ( mkoperator ~loc:_sloc _1 )
-# 37063 "parsing/parser.ml"
+# 37133 "parsing/parser.ml"
               
             in
             
-# 2343 "parsing/parser.mly"
+# 2363 "parsing/parser.mly"
       ( mkinfix _1 _2 _3 )
-# 37069 "parsing/parser.ml"
+# 37139 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -37073,15 +37143,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37079 "parsing/parser.ml"
+# 37149 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37085 "parsing/parser.ml"
+# 37155 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37105,23 +37175,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2345 "parsing/parser.mly"
+# 2365 "parsing/parser.mly"
       ( Pexp_extension _1 )
-# 37111 "parsing/parser.ml"
+# 37181 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37119 "parsing/parser.ml"
+# 37189 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37125 "parsing/parser.ml"
+# 37195 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37169,18 +37239,18 @@ module Tables = struct
             let _3 =
               let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in
               let _1 = 
-# 2346 "parsing/parser.mly"
+# 2366 "parsing/parser.mly"
                                                     (Lident "()")
-# 37175 "parsing/parser.ml"
+# 37245 "parsing/parser.ml"
                in
               let _endpos__1_ = _endpos__2_ in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 37184 "parsing/parser.ml"
+# 37254 "parsing/parser.ml"
               
             in
             let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in
@@ -37190,25 +37260,25 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 37196 "parsing/parser.ml"
+# 37266 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 37205 "parsing/parser.ml"
+# 37275 "parsing/parser.ml"
               
             in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2347 "parsing/parser.mly"
+# 2367 "parsing/parser.mly"
       ( Pexp_open(od, mkexp ~loc:(_loc__3_) (Pexp_construct(_3, None))) )
-# 37212 "parsing/parser.ml"
+# 37282 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_inlined1_ in
@@ -37216,15 +37286,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37222 "parsing/parser.ml"
+# 37292 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37228 "parsing/parser.ml"
+# 37298 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37279,9 +37349,9 @@ module Tables = struct
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2349 "parsing/parser.mly"
+# 2369 "parsing/parser.mly"
       ( unclosed "(" _loc__3_ ")" _loc__5_ )
-# 37285 "parsing/parser.ml"
+# 37355 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -37289,15 +37359,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37295 "parsing/parser.ml"
+# 37365 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37301 "parsing/parser.ml"
+# 37371 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37336,25 +37406,25 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2351 "parsing/parser.mly"
+# 2371 "parsing/parser.mly"
       ( let (exten, fields) = _2 in
         Pexp_record(fields, exten) )
-# 37343 "parsing/parser.ml"
+# 37413 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37352 "parsing/parser.ml"
+# 37422 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37358 "parsing/parser.ml"
+# 37428 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37396,9 +37466,9 @@ module Tables = struct
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2354 "parsing/parser.mly"
+# 2374 "parsing/parser.mly"
       ( unclosed "{" _loc__1_ "}" _loc__3_ )
-# 37402 "parsing/parser.ml"
+# 37472 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -37406,15 +37476,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37412 "parsing/parser.ml"
+# 37482 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37418 "parsing/parser.ml"
+# 37488 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37473,27 +37543,27 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 37479 "parsing/parser.ml"
+# 37549 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 37488 "parsing/parser.ml"
+# 37558 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__5_ in
             
-# 2356 "parsing/parser.mly"
+# 2376 "parsing/parser.mly"
       ( let (exten, fields) = _4 in
         Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos)
                         (Pexp_record(fields, exten))) )
-# 37497 "parsing/parser.ml"
+# 37567 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -37501,15 +37571,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37507 "parsing/parser.ml"
+# 37577 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37513 "parsing/parser.ml"
+# 37583 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37565,9 +37635,9 @@ module Tables = struct
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2360 "parsing/parser.mly"
+# 2380 "parsing/parser.mly"
       ( unclosed "{" _loc__3_ "}" _loc__5_ )
-# 37571 "parsing/parser.ml"
+# 37641 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -37575,15 +37645,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37581 "parsing/parser.ml"
+# 37651 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37587 "parsing/parser.ml"
+# 37657 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37622,14 +37692,14 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _2 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 37628 "parsing/parser.ml"
+# 37698 "parsing/parser.ml"
              in
             
-# 2362 "parsing/parser.mly"
+# 2382 "parsing/parser.mly"
       ( Pexp_array(_2) )
-# 37633 "parsing/parser.ml"
+# 37703 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -37637,15 +37707,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37643 "parsing/parser.ml"
+# 37713 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37649 "parsing/parser.ml"
+# 37719 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37684,16 +37754,16 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _2 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 37690 "parsing/parser.ml"
+# 37760 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2364 "parsing/parser.mly"
+# 2384 "parsing/parser.mly"
       ( unclosed "[|" _loc__1_ "|]" _loc__3_ )
-# 37697 "parsing/parser.ml"
+# 37767 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -37701,15 +37771,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37707 "parsing/parser.ml"
+# 37777 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37713 "parsing/parser.ml"
+# 37783 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37740,24 +37810,24 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.expression) = let _1 =
           let _1 = 
-# 2366 "parsing/parser.mly"
+# 2386 "parsing/parser.mly"
       ( Pexp_array [] )
-# 37746 "parsing/parser.ml"
+# 37816 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__2_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37755 "parsing/parser.ml"
+# 37825 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37761 "parsing/parser.ml"
+# 37831 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37810,9 +37880,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 37816 "parsing/parser.ml"
+# 37886 "parsing/parser.ml"
              in
             let od =
               let _1 =
@@ -37820,25 +37890,25 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 37826 "parsing/parser.ml"
+# 37896 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 37835 "parsing/parser.ml"
+# 37905 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__5_ in
             
-# 2368 "parsing/parser.mly"
+# 2388 "parsing/parser.mly"
       ( Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array(_4))) )
-# 37842 "parsing/parser.ml"
+# 37912 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -37846,15 +37916,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37852 "parsing/parser.ml"
+# 37922 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37858 "parsing/parser.ml"
+# 37928 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37905,26 +37975,26 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 37911 "parsing/parser.ml"
+# 37981 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 37920 "parsing/parser.ml"
+# 37990 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__4_ in
             
-# 2370 "parsing/parser.mly"
+# 2390 "parsing/parser.mly"
       ( (* TODO: review the location of Pexp_array *)
         Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array [])) )
-# 37928 "parsing/parser.ml"
+# 37998 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -37932,15 +38002,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 37938 "parsing/parser.ml"
+# 38008 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 37944 "parsing/parser.ml"
+# 38014 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -37993,16 +38063,16 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 37999 "parsing/parser.ml"
+# 38069 "parsing/parser.ml"
              in
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2374 "parsing/parser.mly"
+# 2394 "parsing/parser.mly"
       ( unclosed "[|" _loc__3_ "|]" _loc__5_ )
-# 38006 "parsing/parser.ml"
+# 38076 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -38010,15 +38080,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38016 "parsing/parser.ml"
+# 38086 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38022 "parsing/parser.ml"
+# 38092 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38057,15 +38127,15 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _2 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 38063 "parsing/parser.ml"
+# 38133 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2376 "parsing/parser.mly"
+# 2396 "parsing/parser.mly"
       ( fst (mktailexp _loc__3_ _2) )
-# 38069 "parsing/parser.ml"
+# 38139 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -38073,15 +38143,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38079 "parsing/parser.ml"
+# 38149 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38085 "parsing/parser.ml"
+# 38155 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38120,16 +38190,16 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _2 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 38126 "parsing/parser.ml"
+# 38196 "parsing/parser.ml"
              in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2378 "parsing/parser.mly"
+# 2398 "parsing/parser.mly"
       ( unclosed "[" _loc__1_ "]" _loc__3_ )
-# 38133 "parsing/parser.ml"
+# 38203 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -38137,15 +38207,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38143 "parsing/parser.ml"
+# 38213 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38149 "parsing/parser.ml"
+# 38219 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38198,9 +38268,9 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 38204 "parsing/parser.ml"
+# 38274 "parsing/parser.ml"
              in
             let od =
               let _1 =
@@ -38208,30 +38278,30 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 38214 "parsing/parser.ml"
+# 38284 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 38223 "parsing/parser.ml"
+# 38293 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__5_ in
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             
-# 2380 "parsing/parser.mly"
+# 2400 "parsing/parser.mly"
       ( let list_exp =
           (* TODO: review the location of list_exp *)
           let tail_exp, _tail_loc = mktailexp _loc__5_ _4 in
           mkexp ~loc:(_startpos__3_, _endpos) tail_exp in
         Pexp_open(od, list_exp) )
-# 38235 "parsing/parser.ml"
+# 38305 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -38239,15 +38309,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38245 "parsing/parser.ml"
+# 38315 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38251 "parsing/parser.ml"
+# 38321 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38295,18 +38365,18 @@ module Tables = struct
             let _3 =
               let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in
               let _1 = 
-# 2385 "parsing/parser.mly"
+# 2405 "parsing/parser.mly"
                                                         (Lident "[]")
-# 38301 "parsing/parser.ml"
+# 38371 "parsing/parser.ml"
                in
               let _endpos__1_ = _endpos__2_ in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 38310 "parsing/parser.ml"
+# 38380 "parsing/parser.ml"
               
             in
             let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in
@@ -38316,25 +38386,25 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 38322 "parsing/parser.ml"
+# 38392 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 38331 "parsing/parser.ml"
+# 38401 "parsing/parser.ml"
               
             in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2386 "parsing/parser.mly"
+# 2406 "parsing/parser.mly"
       ( Pexp_open(od, mkexp ~loc:_loc__3_ (Pexp_construct(_3, None))) )
-# 38338 "parsing/parser.ml"
+# 38408 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_inlined1_ in
@@ -38342,15 +38412,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38348 "parsing/parser.ml"
+# 38418 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38354 "parsing/parser.ml"
+# 38424 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38403,16 +38473,16 @@ module Tables = struct
         let _v : (Parsetree.expression) = let _1 =
           let _1 =
             let _4 = 
-# 2588 "parsing/parser.mly"
+# 2608 "parsing/parser.mly"
     ( es )
-# 38409 "parsing/parser.ml"
+# 38479 "parsing/parser.ml"
              in
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2389 "parsing/parser.mly"
+# 2409 "parsing/parser.mly"
       ( unclosed "[" _loc__3_ "]" _loc__5_ )
-# 38416 "parsing/parser.ml"
+# 38486 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -38420,15 +38490,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38426 "parsing/parser.ml"
+# 38496 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38432 "parsing/parser.ml"
+# 38502 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38521,11 +38591,11 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 38529 "parsing/parser.ml"
+# 38599 "parsing/parser.ml"
               
             in
             let _5 =
@@ -38533,15 +38603,15 @@ module Tables = struct
               let _2 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 38539 "parsing/parser.ml"
+# 38609 "parsing/parser.ml"
                 
               in
               
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 38545 "parsing/parser.ml"
+# 38615 "parsing/parser.ml"
               
             in
             let od =
@@ -38550,18 +38620,18 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 38556 "parsing/parser.ml"
+# 38626 "parsing/parser.ml"
                 
               in
               let _loc__1_ = (_startpos__1_, _endpos__1_) in
               
-# 1498 "parsing/parser.mly"
+# 1506 "parsing/parser.mly"
   ( let loc = make_loc _loc__1_ in
     let me = Mod.ident ~loc _1 in
     Opn.mk ~loc me )
-# 38565 "parsing/parser.ml"
+# 38635 "parsing/parser.ml"
               
             in
             let _startpos_od_ = _startpos__1_ in
@@ -38569,12 +38639,12 @@ module Tables = struct
             let _symbolstartpos = _startpos_od_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 2392 "parsing/parser.mly"
+# 2412 "parsing/parser.mly"
       ( let modexp =
           mkexp_attrs ~loc:(_startpos__3_, _endpos)
             (Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _6), _8)) _5 in
         Pexp_open(od, modexp) )
-# 38578 "parsing/parser.ml"
+# 38648 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__9_ in
@@ -38582,15 +38652,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38588 "parsing/parser.ml"
+# 38658 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38594 "parsing/parser.ml"
+# 38664 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38675,23 +38745,23 @@ module Tables = struct
               let _2 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 38681 "parsing/parser.ml"
+# 38751 "parsing/parser.ml"
                 
               in
               
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 38687 "parsing/parser.ml"
+# 38757 "parsing/parser.ml"
               
             in
             let _loc__8_ = (_startpos__8_, _endpos__8_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2398 "parsing/parser.mly"
+# 2418 "parsing/parser.mly"
       ( unclosed "(" _loc__3_ ")" _loc__8_ )
-# 38695 "parsing/parser.ml"
+# 38765 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__8_ in
@@ -38699,15 +38769,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 850 "parsing/parser.mly"
+# 858 "parsing/parser.mly"
     ( mkexp ~loc:_sloc _1 )
-# 38705 "parsing/parser.ml"
+# 38775 "parsing/parser.ml"
           
         in
         
-# 2294 "parsing/parser.mly"
+# 2314 "parsing/parser.mly"
       ( _1 )
-# 38711 "parsing/parser.ml"
+# 38781 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38736,30 +38806,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 38742 "parsing/parser.ml"
+# 38812 "parsing/parser.ml"
               
             in
             
-# 2668 "parsing/parser.mly"
+# 2688 "parsing/parser.mly"
       ( Ppat_var (_1) )
-# 38748 "parsing/parser.ml"
+# 38818 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 38757 "parsing/parser.ml"
+# 38827 "parsing/parser.ml"
           
         in
         
-# 2669 "parsing/parser.mly"
+# 2689 "parsing/parser.mly"
       ( _1 )
-# 38763 "parsing/parser.ml"
+# 38833 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38782,9 +38852,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = 
-# 2670 "parsing/parser.mly"
+# 2690 "parsing/parser.mly"
                              ( _1 )
-# 38788 "parsing/parser.ml"
+# 38858 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38824,9 +38894,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2675 "parsing/parser.mly"
+# 2695 "parsing/parser.mly"
       ( reloc_pat ~loc:_sloc _2 )
-# 38830 "parsing/parser.ml"
+# 38900 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38849,9 +38919,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = 
-# 2677 "parsing/parser.mly"
+# 2697 "parsing/parser.mly"
       ( _1 )
-# 38855 "parsing/parser.ml"
+# 38925 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -38914,9 +38984,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 38920 "parsing/parser.ml"
+# 38990 "parsing/parser.ml"
           
         in
         let _3 =
@@ -38924,24 +38994,24 @@ module Tables = struct
           let _2 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 38930 "parsing/parser.ml"
+# 39000 "parsing/parser.ml"
             
           in
           
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 38936 "parsing/parser.ml"
+# 39006 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2679 "parsing/parser.mly"
+# 2699 "parsing/parser.mly"
       ( mkpat_attrs ~loc:_sloc (Ppat_unpack _4) _3 )
-# 38945 "parsing/parser.ml"
+# 39015 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39018,11 +39088,11 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 39026 "parsing/parser.ml"
+# 39096 "parsing/parser.ml"
           
         in
         let _4 =
@@ -39031,9 +39101,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39037 "parsing/parser.ml"
+# 39107 "parsing/parser.ml"
           
         in
         let (_endpos__4_, _startpos__4_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in
@@ -39042,15 +39112,15 @@ module Tables = struct
           let _2 =
             let _1 = _1_inlined1 in
             
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 39048 "parsing/parser.ml"
+# 39118 "parsing/parser.ml"
             
           in
           
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 39054 "parsing/parser.ml"
+# 39124 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__7_ in
@@ -39058,11 +39128,11 @@ module Tables = struct
         let _loc__4_ = (_startpos__4_, _endpos__4_) in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2681 "parsing/parser.mly"
+# 2701 "parsing/parser.mly"
       ( mkpat_attrs ~loc:_sloc
           (Ppat_constraint(mkpat ~loc:_loc__4_ (Ppat_unpack _4), _6))
           _3 )
-# 39066 "parsing/parser.ml"
+# 39136 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39086,23 +39156,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2689 "parsing/parser.mly"
+# 2709 "parsing/parser.mly"
       ( Ppat_any )
-# 39092 "parsing/parser.ml"
+# 39162 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39100 "parsing/parser.ml"
+# 39170 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39106 "parsing/parser.ml"
+# 39176 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39126,23 +39196,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2691 "parsing/parser.mly"
+# 2711 "parsing/parser.mly"
       ( Ppat_constant _1 )
-# 39132 "parsing/parser.ml"
+# 39202 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39140 "parsing/parser.ml"
+# 39210 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39146 "parsing/parser.ml"
+# 39216 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39180,24 +39250,24 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2693 "parsing/parser.mly"
+# 2713 "parsing/parser.mly"
       ( Ppat_interval (_1, _3) )
-# 39186 "parsing/parser.ml"
+# 39256 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__3_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39195 "parsing/parser.ml"
+# 39265 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39201 "parsing/parser.ml"
+# 39271 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39226,30 +39296,30 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39232 "parsing/parser.ml"
+# 39302 "parsing/parser.ml"
               
             in
             
-# 2695 "parsing/parser.mly"
+# 2715 "parsing/parser.mly"
       ( Ppat_construct(_1, None) )
-# 39238 "parsing/parser.ml"
+# 39308 "parsing/parser.ml"
             
           in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39247 "parsing/parser.ml"
+# 39317 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39253 "parsing/parser.ml"
+# 39323 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39273,23 +39343,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2697 "parsing/parser.mly"
+# 2717 "parsing/parser.mly"
       ( Ppat_variant(_1, None) )
-# 39279 "parsing/parser.ml"
+# 39349 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39287 "parsing/parser.ml"
+# 39357 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39293 "parsing/parser.ml"
+# 39363 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39326,15 +39396,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39332 "parsing/parser.ml"
+# 39402 "parsing/parser.ml"
               
             in
             
-# 2699 "parsing/parser.mly"
+# 2719 "parsing/parser.mly"
       ( Ppat_type (_2) )
-# 39338 "parsing/parser.ml"
+# 39408 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -39342,15 +39412,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39348 "parsing/parser.ml"
+# 39418 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39354 "parsing/parser.ml"
+# 39424 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39393,15 +39463,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39399 "parsing/parser.ml"
+# 39469 "parsing/parser.ml"
               
             in
             
-# 2701 "parsing/parser.mly"
+# 2721 "parsing/parser.mly"
       ( Ppat_open(_1, _3) )
-# 39405 "parsing/parser.ml"
+# 39475 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -39409,15 +39479,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39415 "parsing/parser.ml"
+# 39485 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39421 "parsing/parser.ml"
+# 39491 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39465,18 +39535,18 @@ module Tables = struct
             let _3 =
               let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in
               let _1 = 
-# 2702 "parsing/parser.mly"
+# 2722 "parsing/parser.mly"
                                                      (Lident "[]")
-# 39471 "parsing/parser.ml"
+# 39541 "parsing/parser.ml"
                in
               let _endpos__1_ = _endpos__2_ in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39480 "parsing/parser.ml"
+# 39550 "parsing/parser.ml"
               
             in
             let _endpos__3_ = _endpos__2_inlined1_ in
@@ -39485,18 +39555,18 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39491 "parsing/parser.ml"
+# 39561 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__3_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 2703 "parsing/parser.mly"
+# 2723 "parsing/parser.mly"
     ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) )
-# 39500 "parsing/parser.ml"
+# 39570 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_inlined1_ in
@@ -39504,15 +39574,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39510 "parsing/parser.ml"
+# 39580 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39516 "parsing/parser.ml"
+# 39586 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39560,18 +39630,18 @@ module Tables = struct
             let _3 =
               let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in
               let _1 = 
-# 2704 "parsing/parser.mly"
+# 2724 "parsing/parser.mly"
                                                  (Lident "()")
-# 39566 "parsing/parser.ml"
+# 39636 "parsing/parser.ml"
                in
               let _endpos__1_ = _endpos__2_ in
               let _endpos = _endpos__1_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39575 "parsing/parser.ml"
+# 39645 "parsing/parser.ml"
               
             in
             let _endpos__3_ = _endpos__2_inlined1_ in
@@ -39580,18 +39650,18 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39586 "parsing/parser.ml"
+# 39656 "parsing/parser.ml"
               
             in
             let _endpos = _endpos__3_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 2705 "parsing/parser.mly"
+# 2725 "parsing/parser.mly"
     ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) )
-# 39595 "parsing/parser.ml"
+# 39665 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__2_inlined1_ in
@@ -39599,15 +39669,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39605 "parsing/parser.ml"
+# 39675 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39611 "parsing/parser.ml"
+# 39681 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39664,15 +39734,15 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 39670 "parsing/parser.ml"
+# 39740 "parsing/parser.ml"
               
             in
             
-# 2707 "parsing/parser.mly"
+# 2727 "parsing/parser.mly"
       ( Ppat_open (_1, _4) )
-# 39676 "parsing/parser.ml"
+# 39746 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -39680,15 +39750,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39686 "parsing/parser.ml"
+# 39756 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39692 "parsing/parser.ml"
+# 39762 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39743,9 +39813,9 @@ module Tables = struct
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             
-# 2709 "parsing/parser.mly"
+# 2729 "parsing/parser.mly"
       ( unclosed "(" _loc__3_ ")" _loc__5_  )
-# 39749 "parsing/parser.ml"
+# 39819 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -39753,15 +39823,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39759 "parsing/parser.ml"
+# 39829 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39765 "parsing/parser.ml"
+# 39835 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39808,9 +39878,9 @@ module Tables = struct
           let _1 =
             let _loc__4_ = (_startpos__4_, _endpos__4_) in
             
-# 2711 "parsing/parser.mly"
+# 2731 "parsing/parser.mly"
       ( expecting _loc__4_ "pattern" )
-# 39814 "parsing/parser.ml"
+# 39884 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -39818,15 +39888,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39824 "parsing/parser.ml"
+# 39894 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39830 "parsing/parser.ml"
+# 39900 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39867,9 +39937,9 @@ module Tables = struct
             let _loc__3_ = (_startpos__3_, _endpos__3_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2713 "parsing/parser.mly"
+# 2733 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__3_ )
-# 39873 "parsing/parser.ml"
+# 39943 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__3_ in
@@ -39877,15 +39947,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39883 "parsing/parser.ml"
+# 39953 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39889 "parsing/parser.ml"
+# 39959 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -39937,24 +40007,24 @@ module Tables = struct
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2715 "parsing/parser.mly"
+# 2735 "parsing/parser.mly"
       ( Ppat_constraint(_2, _4) )
-# 39943 "parsing/parser.ml"
+# 40013 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos__5_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 39952 "parsing/parser.ml"
+# 40022 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 39958 "parsing/parser.ml"
+# 40028 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40009,9 +40079,9 @@ module Tables = struct
             let _loc__5_ = (_startpos__5_, _endpos__5_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2717 "parsing/parser.mly"
+# 2737 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__5_ )
-# 40015 "parsing/parser.ml"
+# 40085 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__5_ in
@@ -40019,15 +40089,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 40025 "parsing/parser.ml"
+# 40095 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 40031 "parsing/parser.ml"
+# 40101 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40074,9 +40144,9 @@ module Tables = struct
           let _1 =
             let _loc__4_ = (_startpos__4_, _endpos__4_) in
             
-# 2719 "parsing/parser.mly"
+# 2739 "parsing/parser.mly"
       ( expecting _loc__4_ "type" )
-# 40080 "parsing/parser.ml"
+# 40150 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__4_ in
@@ -40084,15 +40154,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 40090 "parsing/parser.ml"
+# 40160 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 40096 "parsing/parser.ml"
+# 40166 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40171,11 +40241,11 @@ module Tables = struct
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 3335 "parsing/parser.mly"
+# 3355 "parsing/parser.mly"
       ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in
         let descr = Ptyp_package (lid, cstrs) in
         mktyp ~loc:_sloc ~attrs descr )
-# 40179 "parsing/parser.ml"
+# 40249 "parsing/parser.ml"
               
             in
             let _3 =
@@ -40183,23 +40253,23 @@ module Tables = struct
               let _2 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 40189 "parsing/parser.ml"
+# 40259 "parsing/parser.ml"
                 
               in
               
-# 3758 "parsing/parser.mly"
+# 3786 "parsing/parser.mly"
                     ( _1, _2 )
-# 40195 "parsing/parser.ml"
+# 40265 "parsing/parser.ml"
               
             in
             let _loc__7_ = (_startpos__7_, _endpos__7_) in
             let _loc__1_ = (_startpos__1_, _endpos__1_) in
             
-# 2722 "parsing/parser.mly"
+# 2742 "parsing/parser.mly"
       ( unclosed "(" _loc__1_ ")" _loc__7_ )
-# 40203 "parsing/parser.ml"
+# 40273 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__7_ in
@@ -40207,15 +40277,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 40213 "parsing/parser.ml"
+# 40283 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 40219 "parsing/parser.ml"
+# 40289 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40239,23 +40309,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.pattern) = let _1 =
           let _1 = 
-# 2724 "parsing/parser.mly"
+# 2744 "parsing/parser.mly"
       ( Ppat_extension _1 )
-# 40245 "parsing/parser.ml"
+# 40315 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 852 "parsing/parser.mly"
+# 860 "parsing/parser.mly"
     ( mkpat ~loc:_sloc _1 )
-# 40253 "parsing/parser.ml"
+# 40323 "parsing/parser.ml"
           
         in
         
-# 2685 "parsing/parser.mly"
+# 2705 "parsing/parser.mly"
       ( _1 )
-# 40259 "parsing/parser.ml"
+# 40329 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40274,17 +40344,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 40280 "parsing/parser.ml"
+# 40350 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3668 "parsing/parser.mly"
+# 3696 "parsing/parser.mly"
            ( _1 )
-# 40288 "parsing/parser.ml"
+# 40358 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40303,17 +40373,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 701 "parsing/parser.mly"
+# 709 "parsing/parser.mly"
        (string)
-# 40309 "parsing/parser.ml"
+# 40379 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3669 "parsing/parser.mly"
+# 3697 "parsing/parser.mly"
            ( _1 )
-# 40317 "parsing/parser.ml"
+# 40387 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40336,9 +40406,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3670 "parsing/parser.mly"
+# 3698 "parsing/parser.mly"
         ( "and" )
-# 40342 "parsing/parser.ml"
+# 40412 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40361,9 +40431,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3671 "parsing/parser.mly"
+# 3699 "parsing/parser.mly"
        ( "as" )
-# 40367 "parsing/parser.ml"
+# 40437 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40386,9 +40456,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3672 "parsing/parser.mly"
+# 3700 "parsing/parser.mly"
            ( "assert" )
-# 40392 "parsing/parser.ml"
+# 40462 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40411,9 +40481,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3673 "parsing/parser.mly"
+# 3701 "parsing/parser.mly"
           ( "begin" )
-# 40417 "parsing/parser.ml"
+# 40487 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40436,9 +40506,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3674 "parsing/parser.mly"
+# 3702 "parsing/parser.mly"
           ( "class" )
-# 40442 "parsing/parser.ml"
+# 40512 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40461,9 +40531,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3675 "parsing/parser.mly"
+# 3703 "parsing/parser.mly"
                ( "constraint" )
-# 40467 "parsing/parser.ml"
+# 40537 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40486,9 +40556,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3676 "parsing/parser.mly"
+# 3704 "parsing/parser.mly"
        ( "do" )
-# 40492 "parsing/parser.ml"
+# 40562 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40511,9 +40581,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3677 "parsing/parser.mly"
+# 3705 "parsing/parser.mly"
          ( "done" )
-# 40517 "parsing/parser.ml"
+# 40587 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40536,9 +40606,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3678 "parsing/parser.mly"
+# 3706 "parsing/parser.mly"
            ( "downto" )
-# 40542 "parsing/parser.ml"
+# 40612 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40561,9 +40631,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3679 "parsing/parser.mly"
+# 3707 "parsing/parser.mly"
          ( "else" )
-# 40567 "parsing/parser.ml"
+# 40637 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40586,9 +40656,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3680 "parsing/parser.mly"
+# 3708 "parsing/parser.mly"
         ( "end" )
-# 40592 "parsing/parser.ml"
+# 40662 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40611,9 +40681,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3681 "parsing/parser.mly"
+# 3709 "parsing/parser.mly"
               ( "exception" )
-# 40617 "parsing/parser.ml"
+# 40687 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40636,9 +40706,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3682 "parsing/parser.mly"
+# 3710 "parsing/parser.mly"
              ( "external" )
-# 40642 "parsing/parser.ml"
+# 40712 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40661,9 +40731,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3683 "parsing/parser.mly"
+# 3711 "parsing/parser.mly"
           ( "false" )
-# 40667 "parsing/parser.ml"
+# 40737 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40686,9 +40756,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3684 "parsing/parser.mly"
+# 3712 "parsing/parser.mly"
         ( "for" )
-# 40692 "parsing/parser.ml"
+# 40762 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40711,9 +40781,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3685 "parsing/parser.mly"
+# 3713 "parsing/parser.mly"
         ( "fun" )
-# 40717 "parsing/parser.ml"
+# 40787 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40736,9 +40806,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3686 "parsing/parser.mly"
+# 3714 "parsing/parser.mly"
              ( "function" )
-# 40742 "parsing/parser.ml"
+# 40812 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40761,9 +40831,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3687 "parsing/parser.mly"
+# 3715 "parsing/parser.mly"
             ( "functor" )
-# 40767 "parsing/parser.ml"
+# 40837 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40786,9 +40856,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3688 "parsing/parser.mly"
+# 3716 "parsing/parser.mly"
        ( "if" )
-# 40792 "parsing/parser.ml"
+# 40862 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40811,9 +40881,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3689 "parsing/parser.mly"
+# 3717 "parsing/parser.mly"
        ( "in" )
-# 40817 "parsing/parser.ml"
+# 40887 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40836,9 +40906,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3690 "parsing/parser.mly"
+# 3718 "parsing/parser.mly"
             ( "include" )
-# 40842 "parsing/parser.ml"
+# 40912 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40861,9 +40931,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3691 "parsing/parser.mly"
+# 3719 "parsing/parser.mly"
             ( "inherit" )
-# 40867 "parsing/parser.ml"
+# 40937 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40886,9 +40956,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3692 "parsing/parser.mly"
+# 3720 "parsing/parser.mly"
                 ( "initializer" )
-# 40892 "parsing/parser.ml"
+# 40962 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40911,9 +40981,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3693 "parsing/parser.mly"
+# 3721 "parsing/parser.mly"
          ( "lazy" )
-# 40917 "parsing/parser.ml"
+# 40987 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40936,9 +41006,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3694 "parsing/parser.mly"
+# 3722 "parsing/parser.mly"
         ( "let" )
-# 40942 "parsing/parser.ml"
+# 41012 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40961,9 +41031,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3695 "parsing/parser.mly"
+# 3723 "parsing/parser.mly"
           ( "match" )
-# 40967 "parsing/parser.ml"
+# 41037 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -40986,9 +41056,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3696 "parsing/parser.mly"
+# 3724 "parsing/parser.mly"
            ( "method" )
-# 40992 "parsing/parser.ml"
+# 41062 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41011,9 +41081,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3697 "parsing/parser.mly"
+# 3725 "parsing/parser.mly"
            ( "module" )
-# 41017 "parsing/parser.ml"
+# 41087 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41036,9 +41106,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3698 "parsing/parser.mly"
+# 3726 "parsing/parser.mly"
             ( "mutable" )
-# 41042 "parsing/parser.ml"
+# 41112 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41061,9 +41131,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3699 "parsing/parser.mly"
+# 3727 "parsing/parser.mly"
         ( "new" )
-# 41067 "parsing/parser.ml"
+# 41137 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41086,9 +41156,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3700 "parsing/parser.mly"
+# 3728 "parsing/parser.mly"
            ( "nonrec" )
-# 41092 "parsing/parser.ml"
+# 41162 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41111,9 +41181,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3701 "parsing/parser.mly"
+# 3729 "parsing/parser.mly"
            ( "object" )
-# 41117 "parsing/parser.ml"
+# 41187 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41136,9 +41206,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3702 "parsing/parser.mly"
+# 3730 "parsing/parser.mly"
        ( "of" )
-# 41142 "parsing/parser.ml"
+# 41212 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41161,9 +41231,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3703 "parsing/parser.mly"
+# 3731 "parsing/parser.mly"
          ( "open" )
-# 41167 "parsing/parser.ml"
+# 41237 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41186,9 +41256,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3704 "parsing/parser.mly"
+# 3732 "parsing/parser.mly"
        ( "or" )
-# 41192 "parsing/parser.ml"
+# 41262 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41211,9 +41281,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3705 "parsing/parser.mly"
+# 3733 "parsing/parser.mly"
             ( "private" )
-# 41217 "parsing/parser.ml"
+# 41287 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41236,9 +41306,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3706 "parsing/parser.mly"
+# 3734 "parsing/parser.mly"
         ( "rec" )
-# 41242 "parsing/parser.ml"
+# 41312 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41261,9 +41331,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3707 "parsing/parser.mly"
+# 3735 "parsing/parser.mly"
         ( "sig" )
-# 41267 "parsing/parser.ml"
+# 41337 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41286,9 +41356,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3708 "parsing/parser.mly"
+# 3736 "parsing/parser.mly"
            ( "struct" )
-# 41292 "parsing/parser.ml"
+# 41362 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41311,9 +41381,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3709 "parsing/parser.mly"
+# 3737 "parsing/parser.mly"
          ( "then" )
-# 41317 "parsing/parser.ml"
+# 41387 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41336,9 +41406,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3710 "parsing/parser.mly"
+# 3738 "parsing/parser.mly"
        ( "to" )
-# 41342 "parsing/parser.ml"
+# 41412 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41361,9 +41431,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3711 "parsing/parser.mly"
+# 3739 "parsing/parser.mly"
          ( "true" )
-# 41367 "parsing/parser.ml"
+# 41437 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41386,9 +41456,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3712 "parsing/parser.mly"
+# 3740 "parsing/parser.mly"
         ( "try" )
-# 41392 "parsing/parser.ml"
+# 41462 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41411,9 +41481,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3713 "parsing/parser.mly"
+# 3741 "parsing/parser.mly"
          ( "type" )
-# 41417 "parsing/parser.ml"
+# 41487 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41436,9 +41506,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3714 "parsing/parser.mly"
+# 3742 "parsing/parser.mly"
         ( "val" )
-# 41442 "parsing/parser.ml"
+# 41512 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41461,9 +41531,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3715 "parsing/parser.mly"
+# 3743 "parsing/parser.mly"
             ( "virtual" )
-# 41467 "parsing/parser.ml"
+# 41537 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41486,9 +41556,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3716 "parsing/parser.mly"
+# 3744 "parsing/parser.mly"
          ( "when" )
-# 41492 "parsing/parser.ml"
+# 41562 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41511,9 +41581,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3717 "parsing/parser.mly"
+# 3745 "parsing/parser.mly"
           ( "while" )
-# 41517 "parsing/parser.ml"
+# 41587 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41536,9 +41606,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3718 "parsing/parser.mly"
+# 3746 "parsing/parser.mly"
          ( "with" )
-# 41542 "parsing/parser.ml"
+# 41612 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41561,9 +41631,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.type_exception * string Asttypes.loc option) = 
-# 3003 "parsing/parser.mly"
+# 3023 "parsing/parser.mly"
     ( _1 )
-# 41567 "parsing/parser.ml"
+# 41637 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41637,18 +41707,18 @@ module Tables = struct
         let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs =
           let _1 = _1_inlined5 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 41643 "parsing/parser.ml"
+# 41713 "parsing/parser.ml"
           
         in
         let _endpos_attrs_ = _endpos__1_inlined5_ in
         let attrs2 =
           let _1 = _1_inlined4 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 41652 "parsing/parser.ml"
+# 41722 "parsing/parser.ml"
           
         in
         let lid =
@@ -41657,9 +41727,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 41663 "parsing/parser.ml"
+# 41733 "parsing/parser.ml"
           
         in
         let id =
@@ -41668,30 +41738,30 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 41674 "parsing/parser.ml"
+# 41744 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 41682 "parsing/parser.ml"
+# 41752 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3012 "parsing/parser.mly"
+# 3032 "parsing/parser.mly"
   ( let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Te.mk_exception ~attrs
       (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs)
     , ext )
-# 41695 "parsing/parser.ml"
+# 41765 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41721,9 +41791,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.expression) = 
-# 2513 "parsing/parser.mly"
+# 2533 "parsing/parser.mly"
       ( _2 )
-# 41727 "parsing/parser.ml"
+# 41797 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41756,9 +41826,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2515 "parsing/parser.mly"
+# 2535 "parsing/parser.mly"
       ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) )
-# 41762 "parsing/parser.ml"
+# 41832 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41809,17 +41879,17 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__5_ in
         let _v : (Parsetree.expression) = let _3 = 
-# 2416 "parsing/parser.mly"
+# 2436 "parsing/parser.mly"
     ( xs )
-# 41815 "parsing/parser.ml"
+# 41885 "parsing/parser.ml"
          in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2517 "parsing/parser.mly"
+# 2537 "parsing/parser.mly"
       ( mk_newtypes ~loc:_sloc _3 _5 )
-# 41823 "parsing/parser.ml"
+# 41893 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41846,39 +41916,39 @@ module Tables = struct
             let ys = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 41850 "parsing/parser.ml"
+# 41920 "parsing/parser.ml"
              in
             let xs =
               let items = 
-# 887 "parsing/parser.mly"
+# 895 "parsing/parser.mly"
     ( [] )
-# 41856 "parsing/parser.ml"
+# 41926 "parsing/parser.ml"
                in
               
-# 1301 "parsing/parser.mly"
+# 1309 "parsing/parser.mly"
     ( items )
-# 41861 "parsing/parser.ml"
+# 41931 "parsing/parser.ml"
               
             in
             
 # 267 "<standard.mly>"
     ( xs @ ys )
-# 41867 "parsing/parser.ml"
+# 41937 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 809 "parsing/parser.mly"
+# 817 "parsing/parser.mly"
                               ( extra_str _startpos _endpos _1 )
-# 41876 "parsing/parser.ml"
+# 41946 "parsing/parser.ml"
           
         in
         
-# 1294 "parsing/parser.mly"
+# 1302 "parsing/parser.mly"
   ( _1 )
-# 41882 "parsing/parser.ml"
+# 41952 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -41919,7 +41989,7 @@ module Tables = struct
             let ys = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 41923 "parsing/parser.ml"
+# 41993 "parsing/parser.ml"
              in
             let xs =
               let items =
@@ -41927,65 +41997,65 @@ module Tables = struct
                   let _1 =
                     let _1 =
                       let attrs = 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 41933 "parsing/parser.ml"
+# 42003 "parsing/parser.ml"
                        in
                       
-# 1308 "parsing/parser.mly"
+# 1316 "parsing/parser.mly"
     ( mkstrexp e attrs )
-# 41938 "parsing/parser.ml"
+# 42008 "parsing/parser.ml"
                       
                     in
                     let _startpos__1_ = _startpos_e_ in
                     let _startpos = _startpos__1_ in
                     
-# 821 "parsing/parser.mly"
+# 829 "parsing/parser.mly"
   ( text_str _startpos @ [_1] )
-# 41946 "parsing/parser.ml"
+# 42016 "parsing/parser.ml"
                     
                   in
                   let _startpos__1_ = _startpos_e_ in
                   let _endpos = _endpos__1_ in
                   let _startpos = _startpos__1_ in
                   
-# 840 "parsing/parser.mly"
+# 848 "parsing/parser.mly"
   ( mark_rhs_docs _startpos _endpos;
     _1 )
-# 41956 "parsing/parser.ml"
+# 42026 "parsing/parser.ml"
                   
                 in
                 
-# 889 "parsing/parser.mly"
+# 897 "parsing/parser.mly"
     ( x )
-# 41962 "parsing/parser.ml"
+# 42032 "parsing/parser.ml"
                 
               in
               
-# 1301 "parsing/parser.mly"
+# 1309 "parsing/parser.mly"
     ( items )
-# 41968 "parsing/parser.ml"
+# 42038 "parsing/parser.ml"
               
             in
             
 # 267 "<standard.mly>"
     ( xs @ ys )
-# 41974 "parsing/parser.ml"
+# 42044 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 809 "parsing/parser.mly"
+# 817 "parsing/parser.mly"
                               ( extra_str _startpos _endpos _1 )
-# 41983 "parsing/parser.ml"
+# 42053 "parsing/parser.ml"
           
         in
         
-# 1294 "parsing/parser.mly"
+# 1302 "parsing/parser.mly"
   ( _1 )
-# 41989 "parsing/parser.ml"
+# 42059 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42011,9 +42081,9 @@ module Tables = struct
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1323 "parsing/parser.mly"
+# 1331 "parsing/parser.mly"
       ( val_of_let_bindings ~loc:_sloc _1 )
-# 42017 "parsing/parser.ml"
+# 42087 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42047,9 +42117,9 @@ module Tables = struct
             let _2 =
               let _1 = _1_inlined1 in
               
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 42053 "parsing/parser.ml"
+# 42123 "parsing/parser.ml"
               
             in
             let _endpos__2_ = _endpos__1_inlined1_ in
@@ -42057,10 +42127,10 @@ module Tables = struct
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 1326 "parsing/parser.mly"
+# 1334 "parsing/parser.mly"
         ( let docs = symbol_docs _sloc in
           Pstr_extension (_1, add_docs_attrs docs _2) )
-# 42064 "parsing/parser.ml"
+# 42134 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined1_ in
@@ -42068,15 +42138,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 856 "parsing/parser.mly"
+# 864 "parsing/parser.mly"
     ( mkstr ~loc:_sloc _1 )
-# 42074 "parsing/parser.ml"
+# 42144 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42080 "parsing/parser.ml"
+# 42150 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42100,23 +42170,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1329 "parsing/parser.mly"
+# 1337 "parsing/parser.mly"
         ( Pstr_attribute _1 )
-# 42106 "parsing/parser.ml"
+# 42176 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 856 "parsing/parser.mly"
+# 864 "parsing/parser.mly"
     ( mkstr ~loc:_sloc _1 )
-# 42114 "parsing/parser.ml"
+# 42184 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42120 "parsing/parser.ml"
+# 42190 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42140,23 +42210,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1333 "parsing/parser.mly"
+# 1341 "parsing/parser.mly"
         ( pstr_primitive _1 )
-# 42146 "parsing/parser.ml"
+# 42216 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42154 "parsing/parser.ml"
+# 42224 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42160 "parsing/parser.ml"
+# 42230 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42180,23 +42250,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1335 "parsing/parser.mly"
+# 1343 "parsing/parser.mly"
         ( pstr_primitive _1 )
-# 42186 "parsing/parser.ml"
+# 42256 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42194 "parsing/parser.ml"
+# 42264 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42200 "parsing/parser.ml"
+# 42270 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42231,26 +42301,26 @@ module Tables = struct
             let _1 =
               let _1 =
                 let _1 = 
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 42237 "parsing/parser.ml"
+# 42307 "parsing/parser.ml"
                  in
                 
-# 2847 "parsing/parser.mly"
+# 2867 "parsing/parser.mly"
   ( _1 )
-# 42242 "parsing/parser.ml"
+# 42312 "parsing/parser.ml"
                 
               in
               
-# 2830 "parsing/parser.mly"
+# 2850 "parsing/parser.mly"
     ( _1 )
-# 42248 "parsing/parser.ml"
+# 42318 "parsing/parser.ml"
               
             in
             
-# 1337 "parsing/parser.mly"
+# 1345 "parsing/parser.mly"
         ( pstr_type _1 )
-# 42254 "parsing/parser.ml"
+# 42324 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in
@@ -42258,15 +42328,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42264 "parsing/parser.ml"
+# 42334 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42270 "parsing/parser.ml"
+# 42340 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42351,16 +42421,16 @@ module Tables = struct
                 let attrs2 =
                   let _1 = _1_inlined3 in
                   
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 42357 "parsing/parser.ml"
+# 42427 "parsing/parser.ml"
                   
                 in
                 let _endpos_attrs2_ = _endpos__1_inlined3_ in
                 let cs = 
-# 1040 "parsing/parser.mly"
+# 1048 "parsing/parser.mly"
     ( List.rev xs )
-# 42364 "parsing/parser.ml"
+# 42434 "parsing/parser.ml"
                  in
                 let tid =
                   let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
@@ -42368,46 +42438,46 @@ module Tables = struct
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 42374 "parsing/parser.ml"
+# 42444 "parsing/parser.ml"
                   
                 in
                 let _4 = 
-# 3590 "parsing/parser.mly"
+# 3618 "parsing/parser.mly"
                 ( Recursive )
-# 42380 "parsing/parser.ml"
+# 42450 "parsing/parser.ml"
                  in
                 let attrs1 =
                   let _1 = _1_inlined1 in
                   
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 42387 "parsing/parser.ml"
+# 42457 "parsing/parser.ml"
                   
                 in
                 let _endpos = _endpos_attrs2_ in
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 3095 "parsing/parser.mly"
+# 3115 "parsing/parser.mly"
     ( let docs = symbol_docs _sloc in
       let attrs = attrs1 @ attrs2 in
       Te.mk tid cs ~params ~priv ~attrs ~docs,
       ext )
-# 42399 "parsing/parser.ml"
+# 42469 "parsing/parser.ml"
                 
               in
               
-# 3078 "parsing/parser.mly"
+# 3098 "parsing/parser.mly"
     ( _1 )
-# 42405 "parsing/parser.ml"
+# 42475 "parsing/parser.ml"
               
             in
             
-# 1339 "parsing/parser.mly"
+# 1347 "parsing/parser.mly"
         ( pstr_typext _1 )
-# 42411 "parsing/parser.ml"
+# 42481 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined3_ in
@@ -42415,15 +42485,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42421 "parsing/parser.ml"
+# 42491 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42427 "parsing/parser.ml"
+# 42497 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42515,16 +42585,16 @@ module Tables = struct
                 let attrs2 =
                   let _1 = _1_inlined4 in
                   
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 42521 "parsing/parser.ml"
+# 42591 "parsing/parser.ml"
                   
                 in
                 let _endpos_attrs2_ = _endpos__1_inlined4_ in
                 let cs = 
-# 1040 "parsing/parser.mly"
+# 1048 "parsing/parser.mly"
     ( List.rev xs )
-# 42528 "parsing/parser.ml"
+# 42598 "parsing/parser.ml"
                  in
                 let tid =
                   let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in
@@ -42532,9 +42602,9 @@ module Tables = struct
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 42538 "parsing/parser.ml"
+# 42608 "parsing/parser.ml"
                   
                 in
                 let _4 =
@@ -42543,41 +42613,41 @@ module Tables = struct
                   let _startpos = _startpos__1_ in
                   let _loc = (_startpos, _endpos) in
                   
-# 3591 "parsing/parser.mly"
+# 3619 "parsing/parser.mly"
                 ( not_expecting _loc "nonrec flag" )
-# 42549 "parsing/parser.ml"
+# 42619 "parsing/parser.ml"
                   
                 in
                 let attrs1 =
                   let _1 = _1_inlined1 in
                   
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 42557 "parsing/parser.ml"
+# 42627 "parsing/parser.ml"
                   
                 in
                 let _endpos = _endpos_attrs2_ in
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 3095 "parsing/parser.mly"
+# 3115 "parsing/parser.mly"
     ( let docs = symbol_docs _sloc in
       let attrs = attrs1 @ attrs2 in
       Te.mk tid cs ~params ~priv ~attrs ~docs,
       ext )
-# 42569 "parsing/parser.ml"
+# 42639 "parsing/parser.ml"
                 
               in
               
-# 3078 "parsing/parser.mly"
+# 3098 "parsing/parser.mly"
     ( _1 )
-# 42575 "parsing/parser.ml"
+# 42645 "parsing/parser.ml"
               
             in
             
-# 1339 "parsing/parser.mly"
+# 1347 "parsing/parser.mly"
         ( pstr_typext _1 )
-# 42581 "parsing/parser.ml"
+# 42651 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined4_ in
@@ -42585,15 +42655,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42591 "parsing/parser.ml"
+# 42661 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42597 "parsing/parser.ml"
+# 42667 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42617,23 +42687,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1341 "parsing/parser.mly"
+# 1349 "parsing/parser.mly"
         ( pstr_exception _1 )
-# 42623 "parsing/parser.ml"
+# 42693 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42631 "parsing/parser.ml"
+# 42701 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42637 "parsing/parser.ml"
+# 42707 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42696,9 +42766,9 @@ module Tables = struct
               let attrs2 =
                 let _1 = _1_inlined3 in
                 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 42702 "parsing/parser.ml"
+# 42772 "parsing/parser.ml"
                 
               in
               let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -42708,36 +42778,36 @@ module Tables = struct
                 let _symbolstartpos = _startpos__1_ in
                 let _sloc = (_symbolstartpos, _endpos) in
                 
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 42714 "parsing/parser.ml"
+# 42784 "parsing/parser.ml"
                 
               in
               let attrs1 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 42722 "parsing/parser.ml"
+# 42792 "parsing/parser.ml"
                 
               in
               let _endpos = _endpos_attrs2_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 1367 "parsing/parser.mly"
+# 1375 "parsing/parser.mly"
     ( let docs = symbol_docs _sloc in
       let loc = make_loc _sloc in
       let attrs = attrs1 @ attrs2 in
       let body = Mb.mk name body ~attrs ~loc ~docs in
       Pstr_module body, ext )
-# 42735 "parsing/parser.ml"
+# 42805 "parsing/parser.ml"
               
             in
             
-# 1343 "parsing/parser.mly"
+# 1351 "parsing/parser.mly"
         ( _1 )
-# 42741 "parsing/parser.ml"
+# 42811 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined3_ in
@@ -42745,15 +42815,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42751 "parsing/parser.ml"
+# 42821 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42757 "parsing/parser.ml"
+# 42827 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42832,9 +42902,9 @@ module Tables = struct
                   let attrs2 =
                     let _1 = _1_inlined3 in
                     
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 42838 "parsing/parser.ml"
+# 42908 "parsing/parser.ml"
                     
                   in
                   let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -42844,24 +42914,24 @@ module Tables = struct
                     let _symbolstartpos = _startpos__1_ in
                     let _sloc = (_symbolstartpos, _endpos) in
                     
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 42850 "parsing/parser.ml"
+# 42920 "parsing/parser.ml"
                     
                   in
                   let attrs1 =
                     let _1 = _1_inlined1 in
                     
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 42858 "parsing/parser.ml"
+# 42928 "parsing/parser.ml"
                     
                   in
                   let _endpos = _endpos_attrs2_ in
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 1402 "parsing/parser.mly"
+# 1410 "parsing/parser.mly"
   (
     let loc = make_loc _sloc in
     let attrs = attrs1 @ attrs2 in
@@ -42869,25 +42939,25 @@ module Tables = struct
     ext,
     Mb.mk name body ~attrs ~loc ~docs
   )
-# 42873 "parsing/parser.ml"
+# 42943 "parsing/parser.ml"
                   
                 in
                 
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 42879 "parsing/parser.ml"
+# 42949 "parsing/parser.ml"
                 
               in
               
-# 1390 "parsing/parser.mly"
+# 1398 "parsing/parser.mly"
     ( _1 )
-# 42885 "parsing/parser.ml"
+# 42955 "parsing/parser.ml"
               
             in
             
-# 1345 "parsing/parser.mly"
+# 1353 "parsing/parser.mly"
         ( pstr_recmodule _1 )
-# 42891 "parsing/parser.ml"
+# 42961 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_bs_ in
@@ -42895,15 +42965,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42901 "parsing/parser.ml"
+# 42971 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42907 "parsing/parser.ml"
+# 42977 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42927,23 +42997,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1347 "parsing/parser.mly"
+# 1355 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Pstr_modtype body, ext) )
-# 42933 "parsing/parser.ml"
+# 43003 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42941 "parsing/parser.ml"
+# 43011 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42947 "parsing/parser.ml"
+# 43017 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -42967,23 +43037,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1349 "parsing/parser.mly"
+# 1357 "parsing/parser.mly"
         ( let (body, ext) = _1 in (Pstr_open body, ext) )
-# 42973 "parsing/parser.ml"
+# 43043 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 42981 "parsing/parser.ml"
+# 43051 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 42987 "parsing/parser.ml"
+# 43057 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43053,9 +43123,9 @@ module Tables = struct
         let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in
         let body : (Parsetree.class_expr) = Obj.magic body in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 43059 "parsing/parser.ml"
+# 43129 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in
         let virt : (Asttypes.virtual_flag) = Obj.magic virt in
@@ -43073,9 +43143,9 @@ module Tables = struct
                   let attrs2 =
                     let _1 = _1_inlined3 in
                     
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 43079 "parsing/parser.ml"
+# 43149 "parsing/parser.ml"
                     
                   in
                   let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -43085,24 +43155,24 @@ module Tables = struct
                     let _symbolstartpos = _startpos__1_ in
                     let _sloc = (_symbolstartpos, _endpos) in
                     
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43091 "parsing/parser.ml"
+# 43161 "parsing/parser.ml"
                     
                   in
                   let attrs1 =
                     let _1 = _1_inlined1 in
                     
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 43099 "parsing/parser.ml"
+# 43169 "parsing/parser.ml"
                     
                   in
                   let _endpos = _endpos_attrs2_ in
                   let _symbolstartpos = _startpos__1_ in
                   let _sloc = (_symbolstartpos, _endpos) in
                   
-# 1721 "parsing/parser.mly"
+# 1729 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
@@ -43110,25 +43180,25 @@ module Tables = struct
     ext,
     Ci.mk id body ~virt ~params ~attrs ~loc ~docs
   )
-# 43114 "parsing/parser.ml"
+# 43184 "parsing/parser.ml"
                   
                 in
                 
-# 1048 "parsing/parser.mly"
+# 1056 "parsing/parser.mly"
     ( let (x, b) = a in x, b :: bs )
-# 43120 "parsing/parser.ml"
+# 43190 "parsing/parser.ml"
                 
               in
               
-# 1710 "parsing/parser.mly"
+# 1718 "parsing/parser.mly"
     ( _1 )
-# 43126 "parsing/parser.ml"
+# 43196 "parsing/parser.ml"
               
             in
             
-# 1351 "parsing/parser.mly"
+# 1359 "parsing/parser.mly"
         ( let (ext, l) = _1 in (Pstr_class l, ext) )
-# 43132 "parsing/parser.ml"
+# 43202 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos_bs_ in
@@ -43136,15 +43206,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 43142 "parsing/parser.ml"
+# 43212 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 43148 "parsing/parser.ml"
+# 43218 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43168,23 +43238,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.structure_item) = let _1 =
           let _1 = 
-# 1353 "parsing/parser.mly"
+# 1361 "parsing/parser.mly"
         ( let (ext, l) = _1 in (Pstr_class_type l, ext) )
-# 43174 "parsing/parser.ml"
+# 43244 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 43182 "parsing/parser.ml"
+# 43252 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 43188 "parsing/parser.ml"
+# 43258 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43240,38 +43310,38 @@ module Tables = struct
               let attrs2 =
                 let _1 = _1_inlined2 in
                 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 43246 "parsing/parser.ml"
+# 43316 "parsing/parser.ml"
                 
               in
               let _endpos_attrs2_ = _endpos__1_inlined2_ in
               let attrs1 =
                 let _1 = _1_inlined1 in
                 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 43255 "parsing/parser.ml"
+# 43325 "parsing/parser.ml"
                 
               in
               let _endpos = _endpos_attrs2_ in
               let _symbolstartpos = _startpos__1_ in
               let _sloc = (_symbolstartpos, _endpos) in
               
-# 1439 "parsing/parser.mly"
+# 1447 "parsing/parser.mly"
   (
     let attrs = attrs1 @ attrs2 in
     let loc = make_loc _sloc in
     let docs = symbol_docs _sloc in
     Incl.mk thing ~attrs ~loc ~docs, ext
   )
-# 43269 "parsing/parser.ml"
+# 43339 "parsing/parser.ml"
               
             in
             
-# 1355 "parsing/parser.mly"
+# 1363 "parsing/parser.mly"
         ( pstr_include _1 )
-# 43275 "parsing/parser.ml"
+# 43345 "parsing/parser.ml"
             
           in
           let _endpos__1_ = _endpos__1_inlined2_ in
@@ -43279,15 +43349,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 873 "parsing/parser.mly"
+# 881 "parsing/parser.mly"
     ( wrap_mkstr_ext ~loc:_sloc _1 )
-# 43285 "parsing/parser.ml"
+# 43355 "parsing/parser.ml"
           
         in
         
-# 1357 "parsing/parser.mly"
+# 1365 "parsing/parser.mly"
     ( _1 )
-# 43291 "parsing/parser.ml"
+# 43361 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43310,9 +43380,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3653 "parsing/parser.mly"
+# 3681 "parsing/parser.mly"
                                                 ( "-" )
-# 43316 "parsing/parser.ml"
+# 43386 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43335,9 +43405,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (string) = 
-# 3654 "parsing/parser.mly"
+# 3682 "parsing/parser.mly"
                                                 ( "-." )
-# 43341 "parsing/parser.ml"
+# 43411 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43390,9 +43460,9 @@ module Tables = struct
         let _v : (Parsetree.row_field) = let _5 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 43396 "parsing/parser.ml"
+# 43466 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined1_ in
@@ -43401,18 +43471,18 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 43405 "parsing/parser.ml"
+# 43475 "parsing/parser.ml"
              in
             
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 43410 "parsing/parser.ml"
+# 43480 "parsing/parser.ml"
             
           in
           
-# 3365 "parsing/parser.mly"
+# 3385 "parsing/parser.mly"
     ( _1 )
-# 43416 "parsing/parser.ml"
+# 43486 "parsing/parser.ml"
           
         in
         let _1 =
@@ -43420,20 +43490,20 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43426 "parsing/parser.ml"
+# 43496 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3351 "parsing/parser.mly"
+# 3371 "parsing/parser.mly"
       ( let info = symbol_info _endpos in
         let attrs = add_info_attrs info _5 in
         Rf.tag ~loc:(make_loc _sloc) ~attrs _1 _3 _4 )
-# 43437 "parsing/parser.ml"
+# 43507 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43465,9 +43535,9 @@ module Tables = struct
         let _v : (Parsetree.row_field) = let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 43471 "parsing/parser.ml"
+# 43541 "parsing/parser.ml"
           
         in
         let _endpos__2_ = _endpos__1_inlined1_ in
@@ -43476,20 +43546,20 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43482 "parsing/parser.ml"
+# 43552 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3355 "parsing/parser.mly"
+# 3375 "parsing/parser.mly"
       ( let info = symbol_info _endpos in
         let attrs = add_info_attrs info _2 in
         Rf.tag ~loc:(make_loc _sloc) ~attrs _1 true [] )
-# 43493 "parsing/parser.ml"
+# 43563 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43521,7 +43591,7 @@ module Tables = struct
         let _v : (Parsetree.toplevel_phrase) = let arg = 
 # 124 "<standard.mly>"
     ( None )
-# 43525 "parsing/parser.ml"
+# 43595 "parsing/parser.ml"
          in
         let _endpos_arg_ = _endpos__1_inlined1_ in
         let dir =
@@ -43530,18 +43600,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43536 "parsing/parser.ml"
+# 43606 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 43545 "parsing/parser.ml"
+# 43615 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43572,9 +43642,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _1_inlined2 : (
-# 689 "parsing/parser.mly"
+# 697 "parsing/parser.mly"
        (string * Location.t * string option)
-# 43578 "parsing/parser.ml"
+# 43648 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in
         let _1 : unit = Obj.magic _1 in
@@ -43585,23 +43655,23 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let x =
             let _1 = 
-# 3557 "parsing/parser.mly"
+# 3585 "parsing/parser.mly"
                   ( let (s, _, _) = _1 in Pdir_string s )
-# 43591 "parsing/parser.ml"
+# 43661 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 878 "parsing/parser.mly"
+# 886 "parsing/parser.mly"
     ( mk_directive_arg ~loc:_sloc _1 )
-# 43599 "parsing/parser.ml"
+# 43669 "parsing/parser.ml"
             
           in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 43605 "parsing/parser.ml"
+# 43675 "parsing/parser.ml"
           
         in
         let _endpos_arg_ = _endpos__1_inlined2_ in
@@ -43611,18 +43681,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43617 "parsing/parser.ml"
+# 43687 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 43626 "parsing/parser.ml"
+# 43696 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43653,9 +43723,9 @@ module Tables = struct
           };
         } = _menhir_stack in
         let _1_inlined2 : (
-# 637 "parsing/parser.mly"
+# 645 "parsing/parser.mly"
        (string * char option)
-# 43659 "parsing/parser.ml"
+# 43729 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in
         let _1 : unit = Obj.magic _1 in
@@ -43666,23 +43736,23 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let x =
             let _1 = 
-# 3558 "parsing/parser.mly"
+# 3586 "parsing/parser.mly"
                   ( let (n, m) = _1 in Pdir_int (n ,m) )
-# 43672 "parsing/parser.ml"
+# 43742 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 878 "parsing/parser.mly"
+# 886 "parsing/parser.mly"
     ( mk_directive_arg ~loc:_sloc _1 )
-# 43680 "parsing/parser.ml"
+# 43750 "parsing/parser.ml"
             
           in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 43686 "parsing/parser.ml"
+# 43756 "parsing/parser.ml"
           
         in
         let _endpos_arg_ = _endpos__1_inlined2_ in
@@ -43692,18 +43762,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43698 "parsing/parser.ml"
+# 43768 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 43707 "parsing/parser.ml"
+# 43777 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43743,23 +43813,23 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let x =
             let _1 = 
-# 3559 "parsing/parser.mly"
+# 3587 "parsing/parser.mly"
                   ( Pdir_ident _1 )
-# 43749 "parsing/parser.ml"
+# 43819 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 878 "parsing/parser.mly"
+# 886 "parsing/parser.mly"
     ( mk_directive_arg ~loc:_sloc _1 )
-# 43757 "parsing/parser.ml"
+# 43827 "parsing/parser.ml"
             
           in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 43763 "parsing/parser.ml"
+# 43833 "parsing/parser.ml"
           
         in
         let _endpos_arg_ = _endpos__1_inlined2_ in
@@ -43769,18 +43839,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43775 "parsing/parser.ml"
+# 43845 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 43784 "parsing/parser.ml"
+# 43854 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43820,23 +43890,23 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let x =
             let _1 = 
-# 3560 "parsing/parser.mly"
+# 3588 "parsing/parser.mly"
                   ( Pdir_ident _1 )
-# 43826 "parsing/parser.ml"
+# 43896 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 878 "parsing/parser.mly"
+# 886 "parsing/parser.mly"
     ( mk_directive_arg ~loc:_sloc _1 )
-# 43834 "parsing/parser.ml"
+# 43904 "parsing/parser.ml"
             
           in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 43840 "parsing/parser.ml"
+# 43910 "parsing/parser.ml"
           
         in
         let _endpos_arg_ = _endpos__1_inlined2_ in
@@ -43846,18 +43916,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43852 "parsing/parser.ml"
+# 43922 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 43861 "parsing/parser.ml"
+# 43931 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43897,23 +43967,23 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let x =
             let _1 = 
-# 3561 "parsing/parser.mly"
+# 3589 "parsing/parser.mly"
                   ( Pdir_bool false )
-# 43903 "parsing/parser.ml"
+# 43973 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 878 "parsing/parser.mly"
+# 886 "parsing/parser.mly"
     ( mk_directive_arg ~loc:_sloc _1 )
-# 43911 "parsing/parser.ml"
+# 43981 "parsing/parser.ml"
             
           in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 43917 "parsing/parser.ml"
+# 43987 "parsing/parser.ml"
           
         in
         let _endpos_arg_ = _endpos__1_inlined2_ in
@@ -43923,18 +43993,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 43929 "parsing/parser.ml"
+# 43999 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 43938 "parsing/parser.ml"
+# 44008 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -43974,23 +44044,23 @@ module Tables = struct
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let x =
             let _1 = 
-# 3562 "parsing/parser.mly"
+# 3590 "parsing/parser.mly"
                   ( Pdir_bool true )
-# 43980 "parsing/parser.ml"
+# 44050 "parsing/parser.ml"
              in
             let _endpos = _endpos__1_ in
             let _symbolstartpos = _startpos__1_ in
             let _sloc = (_symbolstartpos, _endpos) in
             
-# 878 "parsing/parser.mly"
+# 886 "parsing/parser.mly"
     ( mk_directive_arg ~loc:_sloc _1 )
-# 43988 "parsing/parser.ml"
+# 44058 "parsing/parser.ml"
             
           in
           
 # 126 "<standard.mly>"
     ( Some x )
-# 43994 "parsing/parser.ml"
+# 44064 "parsing/parser.ml"
           
         in
         let _endpos_arg_ = _endpos__1_inlined2_ in
@@ -44000,18 +44070,18 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 44006 "parsing/parser.ml"
+# 44076 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_arg_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3553 "parsing/parser.mly"
+# 3581 "parsing/parser.mly"
     ( mk_directive ~loc:_sloc dir arg )
-# 44015 "parsing/parser.ml"
+# 44085 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44048,44 +44118,44 @@ module Tables = struct
         let _startpos = _startpos_e_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 785 "parsing/parser.mly"
+# 793 "parsing/parser.mly"
       (Parsetree.toplevel_phrase)
-# 44054 "parsing/parser.ml"
+# 44124 "parsing/parser.ml"
         ) = let _1 =
           let _1 =
             let _1 =
               let attrs = 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 44061 "parsing/parser.ml"
+# 44131 "parsing/parser.ml"
                in
               
-# 1308 "parsing/parser.mly"
+# 1316 "parsing/parser.mly"
     ( mkstrexp e attrs )
-# 44066 "parsing/parser.ml"
+# 44136 "parsing/parser.ml"
               
             in
             let _startpos__1_ = _startpos_e_ in
             let _startpos = _startpos__1_ in
             
-# 821 "parsing/parser.mly"
+# 829 "parsing/parser.mly"
   ( text_str _startpos @ [_1] )
-# 44074 "parsing/parser.ml"
+# 44144 "parsing/parser.ml"
             
           in
           let _startpos__1_ = _startpos_e_ in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 809 "parsing/parser.mly"
+# 817 "parsing/parser.mly"
                               ( extra_str _startpos _endpos _1 )
-# 44083 "parsing/parser.ml"
+# 44153 "parsing/parser.ml"
           
         in
         
-# 1086 "parsing/parser.mly"
+# 1094 "parsing/parser.mly"
     ( Ptop_def _1 )
-# 44089 "parsing/parser.ml"
+# 44159 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44115,28 +44185,28 @@ module Tables = struct
         let _startpos = _startpos_xss_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 785 "parsing/parser.mly"
+# 793 "parsing/parser.mly"
       (Parsetree.toplevel_phrase)
-# 44121 "parsing/parser.ml"
+# 44191 "parsing/parser.ml"
         ) = let _1 =
           let _1 = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 44126 "parsing/parser.ml"
+# 44196 "parsing/parser.ml"
            in
           let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 809 "parsing/parser.mly"
+# 817 "parsing/parser.mly"
                               ( extra_str _startpos _endpos _1 )
-# 44134 "parsing/parser.ml"
+# 44204 "parsing/parser.ml"
           
         in
         
-# 1090 "parsing/parser.mly"
+# 1098 "parsing/parser.mly"
     ( Ptop_def _1 )
-# 44140 "parsing/parser.ml"
+# 44210 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44166,13 +44236,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 785 "parsing/parser.mly"
+# 793 "parsing/parser.mly"
       (Parsetree.toplevel_phrase)
-# 44172 "parsing/parser.ml"
+# 44242 "parsing/parser.ml"
         ) = 
-# 1094 "parsing/parser.mly"
+# 1102 "parsing/parser.mly"
     ( _1 )
-# 44176 "parsing/parser.ml"
+# 44246 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44195,13 +44265,13 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (
-# 785 "parsing/parser.mly"
+# 793 "parsing/parser.mly"
       (Parsetree.toplevel_phrase)
-# 44201 "parsing/parser.ml"
+# 44271 "parsing/parser.ml"
         ) = 
-# 1097 "parsing/parser.mly"
+# 1105 "parsing/parser.mly"
     ( raise End_of_file )
-# 44205 "parsing/parser.ml"
+# 44275 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44224,9 +44294,9 @@ module Tables = struct
         let _startpos = _startpos_ty_ in
         let _endpos = _endpos_ty_ in
         let _v : (Parsetree.core_type) = 
-# 3257 "parsing/parser.mly"
+# 3277 "parsing/parser.mly"
       ( ty )
-# 44230 "parsing/parser.ml"
+# 44300 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44254,18 +44324,18 @@ module Tables = struct
               let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 44258 "parsing/parser.ml"
+# 44328 "parsing/parser.ml"
                in
               
-# 979 "parsing/parser.mly"
+# 987 "parsing/parser.mly"
     ( xs )
-# 44263 "parsing/parser.ml"
+# 44333 "parsing/parser.ml"
               
             in
             
-# 3260 "parsing/parser.mly"
+# 3280 "parsing/parser.mly"
         ( Ptyp_tuple tys )
-# 44269 "parsing/parser.ml"
+# 44339 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in
@@ -44273,15 +44343,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 44279 "parsing/parser.ml"
+# 44349 "parsing/parser.ml"
           
         in
         
-# 3262 "parsing/parser.mly"
+# 3282 "parsing/parser.mly"
     ( _1 )
-# 44285 "parsing/parser.ml"
+# 44355 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44311,9 +44381,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type option * Parsetree.core_type option) = 
-# 2591 "parsing/parser.mly"
+# 2611 "parsing/parser.mly"
                                                 ( (Some _2, None) )
-# 44317 "parsing/parser.ml"
+# 44387 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44357,9 +44427,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__4_ in
         let _v : (Parsetree.core_type option * Parsetree.core_type option) = 
-# 2592 "parsing/parser.mly"
+# 2612 "parsing/parser.mly"
                                                 ( (Some _2, Some _4) )
-# 44363 "parsing/parser.ml"
+# 44433 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44389,9 +44459,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type option * Parsetree.core_type option) = 
-# 2593 "parsing/parser.mly"
+# 2613 "parsing/parser.mly"
                                                 ( (None, Some _2) )
-# 44395 "parsing/parser.ml"
+# 44465 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44421,9 +44491,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type option * Parsetree.core_type option) = 
-# 2594 "parsing/parser.mly"
+# 2614 "parsing/parser.mly"
                                                 ( syntax_error() )
-# 44427 "parsing/parser.ml"
+# 44497 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44453,9 +44523,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type option * Parsetree.core_type option) = 
-# 2595 "parsing/parser.mly"
+# 2615 "parsing/parser.mly"
                                                 ( syntax_error() )
-# 44459 "parsing/parser.ml"
+# 44529 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44471,9 +44541,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = 
-# 2921 "parsing/parser.mly"
+# 2941 "parsing/parser.mly"
       ( (Ptype_abstract, Public, None) )
-# 44477 "parsing/parser.ml"
+# 44547 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44503,9 +44573,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = 
-# 2923 "parsing/parser.mly"
+# 2943 "parsing/parser.mly"
       ( _2 )
-# 44509 "parsing/parser.ml"
+# 44579 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44528,9 +44598,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3516 "parsing/parser.mly"
+# 3544 "parsing/parser.mly"
                                              ( _1 )
-# 44534 "parsing/parser.ml"
+# 44604 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44560,9 +44630,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) = 
-# 2938 "parsing/parser.mly"
+# 2958 "parsing/parser.mly"
                                        ( _2, _1 )
-# 44566 "parsing/parser.ml"
+# 44636 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44578,9 +44648,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = 
-# 2931 "parsing/parser.mly"
+# 2951 "parsing/parser.mly"
       ( [] )
-# 44584 "parsing/parser.ml"
+# 44654 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44603,9 +44673,9 @@ module Tables = struct
         let _startpos = _startpos_p_ in
         let _endpos = _endpos_p_ in
         let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = 
-# 2933 "parsing/parser.mly"
+# 2953 "parsing/parser.mly"
       ( [p] )
-# 44609 "parsing/parser.ml"
+# 44679 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44645,18 +44715,18 @@ module Tables = struct
           let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 44649 "parsing/parser.ml"
+# 44719 "parsing/parser.ml"
            in
           
-# 951 "parsing/parser.mly"
+# 959 "parsing/parser.mly"
     ( xs )
-# 44654 "parsing/parser.ml"
+# 44724 "parsing/parser.ml"
           
         in
         
-# 2935 "parsing/parser.mly"
+# 2955 "parsing/parser.mly"
       ( ps )
-# 44660 "parsing/parser.ml"
+# 44730 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44687,24 +44757,24 @@ module Tables = struct
         let _endpos = _endpos_tyvar_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 2943 "parsing/parser.mly"
+# 2963 "parsing/parser.mly"
       ( Ptyp_var tyvar )
-# 44693 "parsing/parser.ml"
+# 44763 "parsing/parser.ml"
            in
           let _endpos__1_ = _endpos_tyvar_ in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 44702 "parsing/parser.ml"
+# 44772 "parsing/parser.ml"
           
         in
         
-# 2946 "parsing/parser.mly"
+# 2966 "parsing/parser.mly"
     ( _1 )
-# 44708 "parsing/parser.ml"
+# 44778 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44728,23 +44798,23 @@ module Tables = struct
         let _endpos = _endpos__1_ in
         let _v : (Parsetree.core_type) = let _1 =
           let _1 = 
-# 2945 "parsing/parser.mly"
+# 2965 "parsing/parser.mly"
       ( Ptyp_any )
-# 44734 "parsing/parser.ml"
+# 44804 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 854 "parsing/parser.mly"
+# 862 "parsing/parser.mly"
     ( mktyp ~loc:_sloc _1 )
-# 44742 "parsing/parser.ml"
+# 44812 "parsing/parser.ml"
           
         in
         
-# 2946 "parsing/parser.mly"
+# 2966 "parsing/parser.mly"
     ( _1 )
-# 44748 "parsing/parser.ml"
+# 44818 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44760,9 +44830,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2950 "parsing/parser.mly"
+# 2970 "parsing/parser.mly"
                                             ( NoVariance, NoInjectivity )
-# 44766 "parsing/parser.ml"
+# 44836 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44785,9 +44855,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2951 "parsing/parser.mly"
+# 2971 "parsing/parser.mly"
                                             ( Covariant, NoInjectivity )
-# 44791 "parsing/parser.ml"
+# 44861 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44810,9 +44880,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2952 "parsing/parser.mly"
+# 2972 "parsing/parser.mly"
                                             ( Contravariant, NoInjectivity )
-# 44816 "parsing/parser.ml"
+# 44886 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44835,9 +44905,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2953 "parsing/parser.mly"
+# 2973 "parsing/parser.mly"
                                             ( NoVariance, Injective )
-# 44841 "parsing/parser.ml"
+# 44911 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44867,9 +44937,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2954 "parsing/parser.mly"
+# 2974 "parsing/parser.mly"
                                             ( Covariant, Injective )
-# 44873 "parsing/parser.ml"
+# 44943 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44899,9 +44969,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2954 "parsing/parser.mly"
+# 2974 "parsing/parser.mly"
                                             ( Covariant, Injective )
-# 44905 "parsing/parser.ml"
+# 44975 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44931,9 +45001,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2955 "parsing/parser.mly"
+# 2975 "parsing/parser.mly"
                                             ( Contravariant, Injective )
-# 44937 "parsing/parser.ml"
+# 45007 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44963,9 +45033,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = 
-# 2955 "parsing/parser.mly"
+# 2975 "parsing/parser.mly"
                                             ( Contravariant, Injective )
-# 44969 "parsing/parser.ml"
+# 45039 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -44984,20 +45054,20 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 629 "parsing/parser.mly"
+# 637 "parsing/parser.mly"
        (string)
-# 44990 "parsing/parser.ml"
+# 45060 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 2957 "parsing/parser.mly"
+# 2977 "parsing/parser.mly"
       ( if _1 = "+!" then Covariant, Injective else
         if _1 = "-!" then Contravariant, Injective else
         expecting _loc__1_ "type_variance" )
-# 45001 "parsing/parser.ml"
+# 45071 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45016,20 +45086,20 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 675 "parsing/parser.mly"
+# 683 "parsing/parser.mly"
        (string)
-# 45022 "parsing/parser.ml"
+# 45092 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 2961 "parsing/parser.mly"
+# 2981 "parsing/parser.mly"
       ( if _1 = "!+" then Covariant, Injective else
         if _1 = "!-" then Contravariant, Injective else
         expecting _loc__1_ "type_variance" )
-# 45033 "parsing/parser.ml"
+# 45103 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45059,47 +45129,47 @@ module Tables = struct
         let _startpos = _startpos_xss_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 787 "parsing/parser.mly"
+# 795 "parsing/parser.mly"
       (Parsetree.toplevel_phrase list)
-# 45065 "parsing/parser.ml"
+# 45135 "parsing/parser.ml"
         ) = let _1 =
           let _1 =
             let ys = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 45071 "parsing/parser.ml"
+# 45141 "parsing/parser.ml"
              in
             let xs =
               let _1 = 
-# 887 "parsing/parser.mly"
+# 895 "parsing/parser.mly"
     ( [] )
-# 45077 "parsing/parser.ml"
+# 45147 "parsing/parser.ml"
                in
               
-# 1117 "parsing/parser.mly"
+# 1125 "parsing/parser.mly"
     ( _1 )
-# 45082 "parsing/parser.ml"
+# 45152 "parsing/parser.ml"
               
             in
             
 # 267 "<standard.mly>"
     ( xs @ ys )
-# 45088 "parsing/parser.ml"
+# 45158 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 813 "parsing/parser.mly"
+# 821 "parsing/parser.mly"
                               ( extra_def _startpos _endpos _1 )
-# 45097 "parsing/parser.ml"
+# 45167 "parsing/parser.ml"
           
         in
         
-# 1110 "parsing/parser.mly"
+# 1118 "parsing/parser.mly"
     ( _1 )
-# 45103 "parsing/parser.ml"
+# 45173 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45143,15 +45213,15 @@ module Tables = struct
         let _startpos = _startpos_e_ in
         let _endpos = _endpos__2_ in
         let _v : (
-# 787 "parsing/parser.mly"
+# 795 "parsing/parser.mly"
       (Parsetree.toplevel_phrase list)
-# 45149 "parsing/parser.ml"
+# 45219 "parsing/parser.ml"
         ) = let _1 =
           let _1 =
             let ys = 
 # 260 "<standard.mly>"
     ( List.flatten xss )
-# 45155 "parsing/parser.ml"
+# 45225 "parsing/parser.ml"
              in
             let xs =
               let _1 =
@@ -45159,61 +45229,61 @@ module Tables = struct
                   let _1 =
                     let _1 =
                       let attrs = 
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 45165 "parsing/parser.ml"
+# 45235 "parsing/parser.ml"
                        in
                       
-# 1308 "parsing/parser.mly"
+# 1316 "parsing/parser.mly"
     ( mkstrexp e attrs )
-# 45170 "parsing/parser.ml"
+# 45240 "parsing/parser.ml"
                       
                     in
                     
-# 831 "parsing/parser.mly"
+# 839 "parsing/parser.mly"
   ( Ptop_def [_1] )
-# 45176 "parsing/parser.ml"
+# 45246 "parsing/parser.ml"
                     
                   in
                   let _startpos__1_ = _startpos_e_ in
                   let _startpos = _startpos__1_ in
                   
-# 829 "parsing/parser.mly"
+# 837 "parsing/parser.mly"
   ( text_def _startpos @ [_1] )
-# 45184 "parsing/parser.ml"
+# 45254 "parsing/parser.ml"
                   
                 in
                 
-# 889 "parsing/parser.mly"
+# 897 "parsing/parser.mly"
     ( x )
-# 45190 "parsing/parser.ml"
+# 45260 "parsing/parser.ml"
                 
               in
               
-# 1117 "parsing/parser.mly"
+# 1125 "parsing/parser.mly"
     ( _1 )
-# 45196 "parsing/parser.ml"
+# 45266 "parsing/parser.ml"
               
             in
             
 # 267 "<standard.mly>"
     ( xs @ ys )
-# 45202 "parsing/parser.ml"
+# 45272 "parsing/parser.ml"
             
           in
           let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in
           let _endpos = _endpos__1_ in
           let _startpos = _startpos__1_ in
           
-# 813 "parsing/parser.mly"
+# 821 "parsing/parser.mly"
                               ( extra_def _startpos _endpos _1 )
-# 45211 "parsing/parser.ml"
+# 45281 "parsing/parser.ml"
           
         in
         
-# 1110 "parsing/parser.mly"
+# 1118 "parsing/parser.mly"
     ( _1 )
-# 45217 "parsing/parser.ml"
+# 45287 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45250,9 +45320,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__3_ in
         let _v : (Asttypes.label) = 
-# 3435 "parsing/parser.mly"
+# 3455 "parsing/parser.mly"
                               ( _2 )
-# 45256 "parsing/parser.ml"
+# 45326 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45291,9 +45361,9 @@ module Tables = struct
         let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         let _loc__1_ = (_startpos__1_, _endpos__1_) in
         
-# 3436 "parsing/parser.mly"
+# 3456 "parsing/parser.mly"
                               ( unclosed "(" _loc__1_ ")" _loc__3_ )
-# 45297 "parsing/parser.ml"
+# 45367 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45324,9 +45394,9 @@ module Tables = struct
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.label) = let _loc__2_ = (_startpos__2_, _endpos__2_) in
         
-# 3437 "parsing/parser.mly"
+# 3457 "parsing/parser.mly"
                               ( expecting _loc__2_ "operator" )
-# 45330 "parsing/parser.ml"
+# 45400 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45364,9 +45434,9 @@ module Tables = struct
         let _endpos = _endpos__3_ in
         let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in
         
-# 3438 "parsing/parser.mly"
+# 3458 "parsing/parser.mly"
                               ( expecting _loc__3_ "module-expr" )
-# 45370 "parsing/parser.ml"
+# 45440 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45385,17 +45455,17 @@ module Tables = struct
           MenhirLib.EngineTypes.next = _menhir_stack;
         } = _menhir_stack in
         let _1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 45391 "parsing/parser.ml"
+# 45461 "parsing/parser.ml"
         ) = Obj.magic _1 in
         let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3441 "parsing/parser.mly"
+# 3461 "parsing/parser.mly"
                               ( _1 )
-# 45399 "parsing/parser.ml"
+# 45469 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45418,9 +45488,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.label) = 
-# 3442 "parsing/parser.mly"
+# 3462 "parsing/parser.mly"
                               ( _1 )
-# 45424 "parsing/parser.ml"
+# 45494 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45443,9 +45513,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Longident.t) = 
-# 3510 "parsing/parser.mly"
+# 3538 "parsing/parser.mly"
                                            ( _1 )
-# 45449 "parsing/parser.ml"
+# 45519 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45490,9 +45560,9 @@ module Tables = struct
         let ty : (Parsetree.core_type) = Obj.magic ty in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 45496 "parsing/parser.ml"
+# 45566 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let mutable_ : (Asttypes.mutable_flag) = Obj.magic mutable_ in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -45504,33 +45574,33 @@ module Tables = struct
   Parsetree.attributes) = let label =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 45510 "parsing/parser.ml"
+# 45580 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 45518 "parsing/parser.ml"
+# 45588 "parsing/parser.ml"
           
         in
         let attrs = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 45524 "parsing/parser.ml"
+# 45594 "parsing/parser.ml"
          in
         let _1 = 
-# 3646 "parsing/parser.mly"
+# 3674 "parsing/parser.mly"
                                                 ( Fresh )
-# 45529 "parsing/parser.ml"
+# 45599 "parsing/parser.ml"
          in
         
-# 1861 "parsing/parser.mly"
+# 1869 "parsing/parser.mly"
       ( (label, mutable_, Cfk_virtual ty), attrs )
-# 45534 "parsing/parser.ml"
+# 45604 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45575,9 +45645,9 @@ module Tables = struct
         let _6 : (Parsetree.expression) = Obj.magic _6 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 45581 "parsing/parser.ml"
+# 45651 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -45589,33 +45659,33 @@ module Tables = struct
   Parsetree.attributes) = let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 45595 "parsing/parser.ml"
+# 45665 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 45603 "parsing/parser.ml"
+# 45673 "parsing/parser.ml"
           
         in
         let _2 = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 45609 "parsing/parser.ml"
+# 45679 "parsing/parser.ml"
          in
         let _1 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 45614 "parsing/parser.ml"
+# 45684 "parsing/parser.ml"
          in
         
-# 1863 "parsing/parser.mly"
+# 1871 "parsing/parser.mly"
       ( (_4, _3, Cfk_concrete (_1, _6)), _2 )
-# 45619 "parsing/parser.ml"
+# 45689 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45666,9 +45736,9 @@ module Tables = struct
         let _6 : (Parsetree.expression) = Obj.magic _6 in
         let _5 : unit = Obj.magic _5 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 45672 "parsing/parser.ml"
+# 45742 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -45681,36 +45751,36 @@ module Tables = struct
   Parsetree.attributes) = let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 45687 "parsing/parser.ml"
+# 45757 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 45695 "parsing/parser.ml"
+# 45765 "parsing/parser.ml"
           
         in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 45703 "parsing/parser.ml"
+# 45773 "parsing/parser.ml"
           
         in
         let _1 = 
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 45709 "parsing/parser.ml"
+# 45779 "parsing/parser.ml"
          in
         
-# 1863 "parsing/parser.mly"
+# 1871 "parsing/parser.mly"
       ( (_4, _3, Cfk_concrete (_1, _6)), _2 )
-# 45714 "parsing/parser.ml"
+# 45784 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45762,9 +45832,9 @@ module Tables = struct
         let _6 : unit = Obj.magic _6 in
         let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in
         let _1_inlined1 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 45768 "parsing/parser.ml"
+# 45838 "parsing/parser.ml"
         ) = Obj.magic _1_inlined1 in
         let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in
         let _1 : (Parsetree.attributes) = Obj.magic _1 in
@@ -45776,30 +45846,30 @@ module Tables = struct
   Parsetree.attributes) = let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 45782 "parsing/parser.ml"
+# 45852 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 45790 "parsing/parser.ml"
+# 45860 "parsing/parser.ml"
           
         in
         let _startpos__4_ = _startpos__1_inlined1_ in
         let _2 = 
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 45797 "parsing/parser.ml"
+# 45867 "parsing/parser.ml"
          in
         let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in
         let _1 = 
-# 3649 "parsing/parser.mly"
+# 3677 "parsing/parser.mly"
                                                 ( Fresh )
-# 45803 "parsing/parser.ml"
+# 45873 "parsing/parser.ml"
          in
         let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in
         let _endpos = _endpos__7_ in
@@ -45815,11 +45885,11 @@ module Tables = struct
               _startpos__4_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1866 "parsing/parser.mly"
+# 1874 "parsing/parser.mly"
       ( let e = mkexp_constraint ~loc:_sloc _7 _5 in
         (_4, _3, Cfk_concrete (_1, e)), _2
       )
-# 45823 "parsing/parser.ml"
+# 45893 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -45877,9 +45947,9 @@ module Tables = struct
         let _6 : unit = Obj.magic _6 in
         let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in
         let _1_inlined2 : (
-# 651 "parsing/parser.mly"
+# 659 "parsing/parser.mly"
        (string)
-# 45883 "parsing/parser.ml"
+# 45953 "parsing/parser.ml"
         ) = Obj.magic _1_inlined2 in
         let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in
         let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in
@@ -45892,33 +45962,33 @@ module Tables = struct
   Parsetree.attributes) = let _4 =
           let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in
           let _1 = 
-# 3409 "parsing/parser.mly"
+# 3429 "parsing/parser.mly"
                                                 ( _1 )
-# 45898 "parsing/parser.ml"
+# 45968 "parsing/parser.ml"
            in
           let _endpos = _endpos__1_ in
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 45906 "parsing/parser.ml"
+# 45976 "parsing/parser.ml"
           
         in
         let _startpos__4_ = _startpos__1_inlined2_ in
         let _2 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 45915 "parsing/parser.ml"
+# 45985 "parsing/parser.ml"
           
         in
         let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in
         let _1 = 
-# 3650 "parsing/parser.mly"
+# 3678 "parsing/parser.mly"
                                                 ( Override )
-# 45922 "parsing/parser.ml"
+# 45992 "parsing/parser.ml"
          in
         let _endpos = _endpos__7_ in
         let _symbolstartpos = if _startpos__1_ != _endpos__1_ then
@@ -45933,11 +46003,11 @@ module Tables = struct
               _startpos__4_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 1866 "parsing/parser.mly"
+# 1874 "parsing/parser.mly"
       ( let e = mkexp_constraint ~loc:_sloc _7 _5 in
         (_4, _3, Cfk_concrete (_1, e)), _2
       )
-# 45941 "parsing/parser.ml"
+# 46011 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46004,9 +46074,9 @@ module Tables = struct
         let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 =
           let _1 = _1_inlined3 in
           
-# 3743 "parsing/parser.mly"
+# 3771 "parsing/parser.mly"
     ( _1 )
-# 46010 "parsing/parser.ml"
+# 46080 "parsing/parser.ml"
           
         in
         let _endpos_attrs2_ = _endpos__1_inlined3_ in
@@ -46016,30 +46086,30 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46022 "parsing/parser.ml"
+# 46092 "parsing/parser.ml"
           
         in
         let attrs1 =
           let _1 = _1_inlined1 in
           
-# 3747 "parsing/parser.mly"
+# 3775 "parsing/parser.mly"
     ( _1 )
-# 46030 "parsing/parser.ml"
+# 46100 "parsing/parser.ml"
           
         in
         let _endpos = _endpos_attrs2_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 2792 "parsing/parser.mly"
+# 2812 "parsing/parser.mly"
     ( let attrs = attrs1 @ attrs2 in
       let loc = make_loc _sloc in
       let docs = symbol_docs _sloc in
       Val.mk id ty ~attrs ~loc ~docs,
       ext )
-# 46043 "parsing/parser.ml"
+# 46113 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46055,9 +46125,9 @@ module Tables = struct
         let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in
         let _endpos = _startpos in
         let _v : (Asttypes.virtual_flag) = 
-# 3610 "parsing/parser.mly"
+# 3638 "parsing/parser.mly"
                                                 ( Concrete )
-# 46061 "parsing/parser.ml"
+# 46131 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46080,9 +46150,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.virtual_flag) = 
-# 3611 "parsing/parser.mly"
+# 3639 "parsing/parser.mly"
                                                 ( Virtual )
-# 46086 "parsing/parser.ml"
+# 46156 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46105,9 +46175,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.mutable_flag) = 
-# 3634 "parsing/parser.mly"
+# 3662 "parsing/parser.mly"
             ( Immutable )
-# 46111 "parsing/parser.ml"
+# 46181 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46137,9 +46207,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.mutable_flag) = 
-# 3635 "parsing/parser.mly"
+# 3663 "parsing/parser.mly"
                     ( Mutable )
-# 46143 "parsing/parser.ml"
+# 46213 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46169,9 +46239,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.mutable_flag) = 
-# 3636 "parsing/parser.mly"
+# 3664 "parsing/parser.mly"
                     ( Mutable )
-# 46175 "parsing/parser.ml"
+# 46245 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46194,9 +46264,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.private_flag) = 
-# 3641 "parsing/parser.mly"
+# 3669 "parsing/parser.mly"
             ( Public )
-# 46200 "parsing/parser.ml"
+# 46270 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46226,9 +46296,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.private_flag) = 
-# 3642 "parsing/parser.mly"
+# 3670 "parsing/parser.mly"
                     ( Private )
-# 46232 "parsing/parser.ml"
+# 46302 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46258,9 +46328,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.private_flag) = 
-# 3643 "parsing/parser.mly"
+# 3671 "parsing/parser.mly"
                     ( Private )
-# 46264 "parsing/parser.ml"
+# 46334 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46322,27 +46392,27 @@ module Tables = struct
             let xs = 
 # 253 "<standard.mly>"
     ( List.rev xs )
-# 46326 "parsing/parser.ml"
+# 46396 "parsing/parser.ml"
              in
             
-# 901 "parsing/parser.mly"
+# 909 "parsing/parser.mly"
     ( xs )
-# 46331 "parsing/parser.ml"
+# 46401 "parsing/parser.ml"
             
           in
           
-# 2892 "parsing/parser.mly"
+# 2912 "parsing/parser.mly"
     ( _1 )
-# 46337 "parsing/parser.ml"
+# 46407 "parsing/parser.ml"
           
         in
         let _endpos__6_ = _endpos_xs_ in
         let _5 =
           let _1 = _1_inlined2 in
           
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 46346 "parsing/parser.ml"
+# 46416 "parsing/parser.ml"
           
         in
         let _3 =
@@ -46351,16 +46421,16 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46357 "parsing/parser.ml"
+# 46427 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__6_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3128 "parsing/parser.mly"
+# 3148 "parsing/parser.mly"
       ( let lident = loc_last _3 in
         Pwith_type
           (_3,
@@ -46370,7 +46440,7 @@ module Tables = struct
               ~manifest:_5
               ~priv:_4
               ~loc:(make_loc _sloc))) )
-# 46374 "parsing/parser.ml"
+# 46444 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46423,9 +46493,9 @@ module Tables = struct
         let _v : (Parsetree.with_constraint) = let _5 =
           let _1 = _1_inlined2 in
           
-# 3205 "parsing/parser.mly"
+# 3225 "parsing/parser.mly"
     ( _1 )
-# 46429 "parsing/parser.ml"
+# 46499 "parsing/parser.ml"
           
         in
         let _endpos__5_ = _endpos__1_inlined2_ in
@@ -46435,16 +46505,16 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46441 "parsing/parser.ml"
+# 46511 "parsing/parser.ml"
           
         in
         let _endpos = _endpos__5_ in
         let _symbolstartpos = _startpos__1_ in
         let _sloc = (_symbolstartpos, _endpos) in
         
-# 3141 "parsing/parser.mly"
+# 3161 "parsing/parser.mly"
       ( let lident = loc_last _3 in
         Pwith_typesubst
          (_3,
@@ -46452,7 +46522,7 @@ module Tables = struct
               ~params:_2
               ~manifest:_5
               ~loc:(make_loc _sloc))) )
-# 46456 "parsing/parser.ml"
+# 46526 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46501,9 +46571,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46507 "parsing/parser.ml"
+# 46577 "parsing/parser.ml"
           
         in
         let _2 =
@@ -46512,15 +46582,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46518 "parsing/parser.ml"
+# 46588 "parsing/parser.ml"
           
         in
         
-# 3149 "parsing/parser.mly"
+# 3169 "parsing/parser.mly"
       ( Pwith_module (_2, _4) )
-# 46524 "parsing/parser.ml"
+# 46594 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46569,9 +46639,9 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46575 "parsing/parser.ml"
+# 46645 "parsing/parser.ml"
           
         in
         let _2 =
@@ -46580,15 +46650,15 @@ module Tables = struct
           let _symbolstartpos = _startpos__1_ in
           let _sloc = (_symbolstartpos, _endpos) in
           
-# 817 "parsing/parser.mly"
+# 825 "parsing/parser.mly"
     ( mkrhs _1 _sloc )
-# 46586 "parsing/parser.ml"
+# 46656 "parsing/parser.ml"
           
         in
         
-# 3151 "parsing/parser.mly"
+# 3171 "parsing/parser.mly"
       ( Pwith_modsubst (_2, _4) )
-# 46592 "parsing/parser.ml"
+# 46662 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46611,9 +46681,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__1_ in
         let _v : (Asttypes.private_flag) = 
-# 3154 "parsing/parser.mly"
+# 3174 "parsing/parser.mly"
                    ( Public )
-# 46617 "parsing/parser.ml"
+# 46687 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46643,9 +46713,9 @@ module Tables = struct
         let _startpos = _startpos__1_ in
         let _endpos = _endpos__2_ in
         let _v : (Asttypes.private_flag) = 
-# 3155 "parsing/parser.mly"
+# 3175 "parsing/parser.mly"
                    ( Private )
-# 46649 "parsing/parser.ml"
+# 46719 "parsing/parser.ml"
          in
         {
           MenhirLib.EngineTypes.state = _menhir_s;
@@ -46674,105 +46744,105 @@ end
 let use_file =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1809 lexer lexbuf) : (
-# 787 "parsing/parser.mly"
+# 795 "parsing/parser.mly"
       (Parsetree.toplevel_phrase list)
-# 46680 "parsing/parser.ml"
+# 46750 "parsing/parser.ml"
     ))
 
 and toplevel_phrase =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1789 lexer lexbuf) : (
-# 785 "parsing/parser.mly"
+# 793 "parsing/parser.mly"
       (Parsetree.toplevel_phrase)
-# 46688 "parsing/parser.ml"
+# 46758 "parsing/parser.ml"
     ))
 
 and parse_val_longident =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1783 lexer lexbuf) : (
-# 797 "parsing/parser.mly"
+# 805 "parsing/parser.mly"
       (Longident.t)
-# 46696 "parsing/parser.ml"
+# 46766 "parsing/parser.ml"
     ))
 
 and parse_pattern =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1779 lexer lexbuf) : (
-# 793 "parsing/parser.mly"
+# 801 "parsing/parser.mly"
       (Parsetree.pattern)
-# 46704 "parsing/parser.ml"
+# 46774 "parsing/parser.ml"
     ))
 
 and parse_mty_longident =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1775 lexer lexbuf) : (
-# 799 "parsing/parser.mly"
+# 807 "parsing/parser.mly"
       (Longident.t)
-# 46712 "parsing/parser.ml"
+# 46782 "parsing/parser.ml"
     ))
 
 and parse_mod_longident =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1771 lexer lexbuf) : (
-# 803 "parsing/parser.mly"
+# 811 "parsing/parser.mly"
       (Longident.t)
-# 46720 "parsing/parser.ml"
+# 46790 "parsing/parser.ml"
     ))
 
 and parse_mod_ext_longident =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1767 lexer lexbuf) : (
-# 801 "parsing/parser.mly"
+# 809 "parsing/parser.mly"
       (Longident.t)
-# 46728 "parsing/parser.ml"
+# 46798 "parsing/parser.ml"
     ))
 
 and parse_expression =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1763 lexer lexbuf) : (
-# 791 "parsing/parser.mly"
+# 799 "parsing/parser.mly"
       (Parsetree.expression)
-# 46736 "parsing/parser.ml"
+# 46806 "parsing/parser.ml"
     ))
 
 and parse_core_type =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1759 lexer lexbuf) : (
-# 789 "parsing/parser.mly"
+# 797 "parsing/parser.mly"
       (Parsetree.core_type)
-# 46744 "parsing/parser.ml"
+# 46814 "parsing/parser.ml"
     ))
 
 and parse_constr_longident =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1755 lexer lexbuf) : (
-# 795 "parsing/parser.mly"
+# 803 "parsing/parser.mly"
       (Longident.t)
-# 46752 "parsing/parser.ml"
+# 46822 "parsing/parser.ml"
     ))
 
 and parse_any_longident =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1737 lexer lexbuf) : (
-# 805 "parsing/parser.mly"
+# 813 "parsing/parser.mly"
       (Longident.t)
-# 46760 "parsing/parser.ml"
+# 46830 "parsing/parser.ml"
     ))
 
 and interface =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 1733 lexer lexbuf) : (
-# 783 "parsing/parser.mly"
+# 791 "parsing/parser.mly"
       (Parsetree.signature)
-# 46768 "parsing/parser.ml"
+# 46838 "parsing/parser.ml"
     ))
 
 and implementation =
   fun lexer lexbuf ->
     (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : (
-# 781 "parsing/parser.mly"
+# 789 "parsing/parser.mly"
       (Parsetree.structure)
-# 46776 "parsing/parser.ml"
+# 46846 "parsing/parser.ml"
     ))
 
 module Incremental = struct
@@ -46780,115 +46850,115 @@ module Incremental = struct
   let use_file =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1809 initial_position) : (
-# 787 "parsing/parser.mly"
+# 795 "parsing/parser.mly"
       (Parsetree.toplevel_phrase list)
-# 46786 "parsing/parser.ml"
+# 46856 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and toplevel_phrase =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1789 initial_position) : (
-# 785 "parsing/parser.mly"
+# 793 "parsing/parser.mly"
       (Parsetree.toplevel_phrase)
-# 46794 "parsing/parser.ml"
+# 46864 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_val_longident =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1783 initial_position) : (
-# 797 "parsing/parser.mly"
+# 805 "parsing/parser.mly"
       (Longident.t)
-# 46802 "parsing/parser.ml"
+# 46872 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_pattern =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1779 initial_position) : (
-# 793 "parsing/parser.mly"
+# 801 "parsing/parser.mly"
       (Parsetree.pattern)
-# 46810 "parsing/parser.ml"
+# 46880 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_mty_longident =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1775 initial_position) : (
-# 799 "parsing/parser.mly"
+# 807 "parsing/parser.mly"
       (Longident.t)
-# 46818 "parsing/parser.ml"
+# 46888 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_mod_longident =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1771 initial_position) : (
-# 803 "parsing/parser.mly"
+# 811 "parsing/parser.mly"
       (Longident.t)
-# 46826 "parsing/parser.ml"
+# 46896 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_mod_ext_longident =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1767 initial_position) : (
-# 801 "parsing/parser.mly"
+# 809 "parsing/parser.mly"
       (Longident.t)
-# 46834 "parsing/parser.ml"
+# 46904 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_expression =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1763 initial_position) : (
-# 791 "parsing/parser.mly"
+# 799 "parsing/parser.mly"
       (Parsetree.expression)
-# 46842 "parsing/parser.ml"
+# 46912 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_core_type =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1759 initial_position) : (
-# 789 "parsing/parser.mly"
+# 797 "parsing/parser.mly"
       (Parsetree.core_type)
-# 46850 "parsing/parser.ml"
+# 46920 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_constr_longident =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1755 initial_position) : (
-# 795 "parsing/parser.mly"
+# 803 "parsing/parser.mly"
       (Longident.t)
-# 46858 "parsing/parser.ml"
+# 46928 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and parse_any_longident =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1737 initial_position) : (
-# 805 "parsing/parser.mly"
+# 813 "parsing/parser.mly"
       (Longident.t)
-# 46866 "parsing/parser.ml"
+# 46936 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and interface =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 1733 initial_position) : (
-# 783 "parsing/parser.mly"
+# 791 "parsing/parser.mly"
       (Parsetree.signature)
-# 46874 "parsing/parser.ml"
+# 46944 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
   and implementation =
     fun initial_position ->
       (Obj.magic (MenhirInterpreter.start 0 initial_position) : (
-# 781 "parsing/parser.mly"
+# 789 "parsing/parser.mly"
       (Parsetree.structure)
-# 46882 "parsing/parser.ml"
+# 46952 "parsing/parser.ml"
       ) MenhirInterpreter.checkpoint)
   
 end
 
-# 3777 "parsing/parser.mly"
+# 3805 "parsing/parser.mly"
   
 
-# 46890 "parsing/parser.ml"
+# 46960 "parsing/parser.ml"
 
 # 269 "<standard.mly>"
   
 
-# 46895 "parsing/parser.ml"
+# 46965 "parsing/parser.ml"
diff --git a/compilerlibs/Makefile.compilerlibs b/compilerlibs/Makefile.compilerlibs
index 315add7..8a3e923 100644
--- a/compilerlibs/Makefile.compilerlibs
+++ b/compilerlibs/Makefile.compilerlibs
@@ -64,7 +64,8 @@ TYPING=typing/ident.cmo typing/path.cmo \
   typing/typedecl_separability.cmo \
   typing/typedecl.cmo typing/typeopt.cmo \
   typing/rec_check.cmo typing/typecore.cmo typing/typeclass.cmo \
-  typing/typemod.cmo
+  typing/typemod.cmo typing/debug_core.cmo typing/debug_message.cmo \
+  typing/debug_slice.cmo typing/debug_main.cmo
 TYPING_CMI=\
   typing/annot.cmi \
   typing/outcometree.cmi
diff --git a/driver/compile_common.ml b/driver/compile_common.ml
index 95442af..67de963 100644
--- a/driver/compile_common.ml
+++ b/driver/compile_common.ml
@@ -107,14 +107,31 @@ let typecheck_impl i parsetree =
   |> print_if i.ppf_dump Clflags.dump_typedtree
     Printtyped.implementation_with_coercion
 
+(* input structure to be compiled (for type debugger) *)
+let structure = ref []
+
+(* copied from utils/misc.ml (for type debugger) *)
+let my_try_finally ?(exceptionally=(fun _ -> ())) work =
+  match work () with
+    | result -> result
+    | exception work_exn ->
+      let work_bt = Printexc.get_raw_backtrace () in
+      begin
+        exceptionally work_exn;
+        Printexc.raise_with_backtrace work_exn work_bt
+      end
+
 let implementation info ~backend =
   Profile.record_call info.source_file @@ fun () ->
-  let exceptionally () =
+  let exceptionally x =
     let sufs = if info.native then [ cmx; obj ] else [ cmo ] in
     List.iter (fun suf -> remove_file (suf info)) sufs;
+    Debug_main.launch x !structure Compmisc.initial_env; (* for type debugger *)
+    exit 2
   in
-  Misc.try_finally ?always:None ~exceptionally (fun () ->
+  my_try_finally ~exceptionally (fun () ->
     let parsed = parse_impl info in
+    structure := parsed; (* for type debugger *)
     if Clflags.(should_stop_after Compiler_pass.Parsing) then () else begin
       let typed = typecheck_impl info parsed in
       if Clflags.(should_stop_after Compiler_pass.Typing) then () else begin
diff --git a/parsing/parse.ml b/parsing/parse.ml
index b0cee44..d072c3f 100644
--- a/parsing/parse.ml
+++ b/parsing/parse.ml
@@ -134,6 +134,10 @@ let type_ident = wrap_menhir Parser.Incremental.parse_mty_longident
 
 let prepare_error err =
   let open Syntaxerr in
+  let errorf ?(loc = Location.none) en ja = match language with
+      English -> Location.errorf ~loc en
+    | Japanese -> Location.errorf ~loc ja
+  in
   match err with
   | Unclosed(opening_loc, opening, closing_loc, closing) ->
       Location.errorf
@@ -157,6 +161,41 @@ let prepare_error err =
         "In this scoped type, variable %a \
          is reserved for the local type %s."
         Pprintast.tyvar var var
+  (* language levels *)
+  | Expert_exp (str, level, loc) ->
+      begin match str with
+        "if" ->
+          errorf ~loc
+            "L%dError1: did you forget the else part?"
+            "L%dError1: else 部分を忘れていませんか？"
+            level
+      | "for" ->
+          errorf ~loc
+            "L%dError2: for not allowed at this language level"
+            "L%dError2: この言語レベルでは for 文を使うことはできません"
+            level
+      | "while" ->
+          errorf ~loc
+            "L%dError3: while not allowed at this language level"
+            "L%dError3: この言語レベルでは while 文を使うことはできません"
+            level
+      | "sequence" ->
+          errorf ~loc
+            "L%dError4: sequential execution not allowed at this language level"
+            "L%dError4: この言語レベルでは逐次実行文を使うことはできません"
+            level
+      | "assign" ->
+          errorf ~loc
+            "L%dError5: assignments not allowed at this language level"
+            "L%dError5: この言語レベルでは代入文を使うことはできません"
+            level
+      | _ -> Location.error ~loc ("Unsupported Expert_exp error: " ^ str)
+      end
+  | InfixOP0 (str, level, loc) ->
+      errorf ~loc
+        "L%dError6: use %s."
+        "L%dError6: %s を使いましょう"
+        level str
   | Other loc ->
       Location.errorf ~loc "Syntax error"
   | Ill_formed_ast (loc, s) ->
diff --git a/parsing/parser.mly b/parsing/parser.mly
index 1fe25c8..4e7c63d 100644
--- a/parsing/parser.mly
+++ b/parsing/parser.mly
@@ -24,6 +24,8 @@ open Ast_helper
 open Docstrings
 open Docstrings.WithMenhir
 
+let language_level = Syntaxerr.language_level
+
 let mkloc = Location.mkloc
 let mknoloc = Location.mknoloc
 
@@ -578,6 +580,12 @@ let mk_directive ~loc name arg =
       pdir_loc = make_loc loc;
     }
 
+let expert_exp ~loc str =
+  raise Syntaxerr.(Error(Expert_exp(str, language_level, make_loc loc)))
+
+let infixop0 ~loc str =
+  raise Syntaxerr.(Error(InfixOP0(str, language_level, make_loc loc)))
+
 %}
 
 /* Tokens */
@@ -2077,12 +2085,18 @@ class_type_declarations:
 
 seq_expr:
   | expr        %prec below_SEMI  { $1 }
-  | expr SEMI                     { $1 }
+  | expr SEMI                     { if language_level < 3
+                                    then expert_exp ~loc:$loc($2) "sequence"
+                                    else $1 }
   | mkexp(expr SEMI seq_expr
-    { Pexp_sequence($1, $3) })
+    { if language_level < 3
+      then expert_exp ~loc:$loc($2) "sequence" else
+      Pexp_sequence($1, $3) })
     { $1 }
   | expr SEMI PERCENT attr_id seq_expr
-    { let seq = mkexp ~loc:$sloc (Pexp_sequence ($1, $5)) in
+    { if language_level < 3
+      then expert_exp ~loc:$loc($2) "sequence" else
+      let seq = mkexp ~loc:$sloc (Pexp_sequence ($1, $5)) in
       let payload = PStr [mkstrexp seq []] in
       mkexp ~loc:$sloc (Pexp_extension ($4, payload)) }
 ;
@@ -2209,12 +2223,18 @@ expr:
   | IF ext_attributes seq_expr THEN expr ELSE expr
       { Pexp_ifthenelse($3, $5, Some $7), $2 }
   | IF ext_attributes seq_expr THEN expr
-      { Pexp_ifthenelse($3, $5, None), $2 }
+      { if language_level < 3
+        then expert_exp ~loc:$loc "if"
+        else Pexp_ifthenelse($3, $5, None), $2 }
   | WHILE ext_attributes seq_expr DO seq_expr DONE
-      { Pexp_while($3, $5), $2 }
+      { if language_level < 4
+        then expert_exp ~loc:$loc "while"
+        else Pexp_while($3, $5), $2 }
   | FOR ext_attributes pattern EQUAL seq_expr direction_flag seq_expr DO
     seq_expr DONE
-      { Pexp_for($3, $5, $7, $6, $9), $2 }
+      { if language_level < 4
+        then expert_exp ~loc:$loc "for"
+        else Pexp_for($3, $5, $7, $6, $9), $2 }
   | ASSERT ext_attributes simple_expr %prec below_HASH
       { Pexp_assert $3, $2 }
   | LAZY ext_attributes simple_expr %prec below_HASH
@@ -3456,7 +3476,13 @@ operator:
   | infix_operator                              { $1 }
 ;
 %inline infix_operator:
-  | op = INFIXOP0 { op }
+  | op = INFIXOP0 { if language_level < 4
+                    then begin match op with
+                             "==" -> infixop0 ~loc:$loc "="
+                           | "!=" -> infixop0 ~loc:$loc "<>"
+                           | _ -> op
+                         end
+                    else op }
   | op = INFIXOP1 { op }
   | op = INFIXOP2 { op }
   | op = INFIXOP3 { op }
@@ -3475,7 +3501,9 @@ operator:
   | BARBAR        {"||"}
   | AMPERSAND      {"&"}
   | AMPERAMPER    {"&&"}
-  | COLONEQUAL    {":="}
+  | COLONEQUAL    { if language_level < 3
+                    then expert_exp ~loc:$loc "assign"
+                    else ":=" }
 ;
 index_mod:
 | { "" }
diff --git a/parsing/syntaxerr.ml b/parsing/syntaxerr.ml
index 49372b9..5f66ee8 100644
--- a/parsing/syntaxerr.ml
+++ b/parsing/syntaxerr.ml
@@ -13,6 +13,27 @@
 (*                                                                        *)
 (**************************************************************************)
 
+(* language levels *)
+
+type language_t = English | Japanese
+
+let language = try
+  let lang = Sys.getenv "LANG" in
+  if String.sub lang 0 (min 5 (String.length lang)) = "ja_JP"
+  then Japanese
+  else English
+with Not_found -> English
+
+let language_level = try
+  let lang = Sys.getenv "OCAML_LANGUAGE_LEVEL" in
+  match lang with
+    "1" -> 1
+  | "2" -> 2
+  | "3" -> 3
+  | "4" -> 4
+  | _ -> 4
+  with Not_found -> 4
+
 (* Auxiliary type for reporting syntax errors *)
 
 type error =
@@ -21,6 +42,8 @@ type error =
   | Not_expecting of Location.t * string
   | Applicative_path of Location.t
   | Variable_in_scope of Location.t * string
+  | Expert_exp of string * int * Location.t
+  | InfixOP0 of string * int * Location.t
   | Other of Location.t
   | Ill_formed_ast of Location.t * string
   | Invalid_package_type of Location.t * string
@@ -32,6 +55,8 @@ let location_of_error = function
   | Unclosed(l,_,_,_)
   | Applicative_path l
   | Variable_in_scope(l,_)
+  | Expert_exp (_, _, l)
+  | InfixOP0 (_, _, l)
   | Other l
   | Not_expecting (l, _)
   | Ill_formed_ast (l, _)
diff --git a/parsing/syntaxerr.mli b/parsing/syntaxerr.mli
index 26ba712..6d44470 100644
--- a/parsing/syntaxerr.mli
+++ b/parsing/syntaxerr.mli
@@ -13,6 +13,12 @@
 (*                                                                        *)
 (**************************************************************************)
 
+(* language levels *)
+
+type language_t = English | Japanese
+val language : language_t
+val language_level : int
+
 (** Auxiliary type for reporting syntax errors
 
   {b Warning:} this module is unstable and part of
@@ -26,6 +32,8 @@ type error =
   | Not_expecting of Location.t * string
   | Applicative_path of Location.t
   | Variable_in_scope of Location.t * string
+  | Expert_exp of string * int * Location.t
+  | InfixOP0 of string * int * Location.t
   | Other of Location.t
   | Ill_formed_ast of Location.t * string
   | Invalid_package_type of Location.t * string
diff --git a/toplevel/toploop.ml b/toplevel/toploop.ml
index 6f0c12b..2178564 100644
--- a/toplevel/toploop.ml
+++ b/toplevel/toploop.ml
@@ -265,6 +265,26 @@ let add_directive name dir_fun dir_info =
   Hashtbl.add directive_table name dir_fun;
   Hashtbl.add directive_info_table name dir_info
 
+(* for type debugger *)
+
+(* structures input so far in the reverse order *)
+let rev_structures = ref []
+
+(* the last input phrase *)
+let last_phrase = ref (Ptop_def [])
+
+let structure_of_phrase phr = match phr with
+    Ptop_dir ({pdir_name = {txt = str}}) -> (print_string str; assert false)
+  | Ptop_def (str) -> str
+
+let rec rev_flatten structures acc = match structures with
+    [] -> acc
+  | structure :: rest -> rev_flatten rest (structure @ acc)
+
+(* cons_structure : structure -> structure list -> structure *)
+let cons_structure structure rev_structures =
+  rev_flatten (structure :: rev_structures) []
+
 (* Execute a toplevel phrase *)
 
 let execute_phrase print_outcome ppf phr =
@@ -315,6 +335,7 @@ let execute_phrase print_outcome ppf phr =
               Ophr_exception (exn, outv)
         in
         !print_out_phrase ppf out_phr;
+        rev_structures := sstr :: !rev_structures; (* for type debugger *)
         if Printexc.backtrace_status ()
         then begin
           match !backtrace with
@@ -374,7 +395,12 @@ let execute_phrase print_outcome ppf phr =
   try execute_phrase print_outcome ppf phr
   with exn ->
     Warnings.reset_fatal ();
-    raise exn
+    (* for type debugger *)
+    let last_str = structure_of_phrase !last_phrase in
+    let structure = cons_structure last_str !rev_structures in
+    Debug_main.launch exn structure Compmisc.initial_env;
+    false
+    (* raise exn *)
 
 (* Read and execute commands from a file, or from stdin if [name] is "". *)
 
@@ -407,6 +433,7 @@ let use_channel ppf ~wrap_in_module ic name filename =
       List.iter
         (fun ph ->
           let ph = preprocess_phrase ppf ph in
+          last_phrase := ph; (* for type debugger *)
           if not (execute_phrase !use_print_results ppf ph) then raise Exit)
         (if wrap_in_module then
            parse_mod_use_file name lb
@@ -611,6 +638,7 @@ let loop ppf =
       first_line := true;
       let phr = try !parse_toplevel_phrase lb with Exit -> raise PPerror in
       let phr = preprocess_phrase ppf phr  in
+      last_phrase := phr; (* for type debugger *)
       Env.reset_cache_toplevel ();
       ignore(execute_phrase true ppf phr)
     with
diff --git a/typing/debug_core.ml b/typing/debug_core.ml
new file mode 100644
index 0000000..41d32cb
--- /dev/null
+++ b/typing/debug_core.ml
@@ -0,0 +1,2999 @@
+open Asttypes
+module Ast = Ast_helper
+
+open Types
+open Typedtree
+open Parsetree
+
+(* コンテキストの定義 *)
+type expr_context =
+  Empty
+| Lambda of pattern * expr_context
+| Let of rec_flag * value_binding list * expr_context
+type 'a context_t =
+  ('a * expr_context) * Env.t * (structure_item * Env.t) list
+
+(* ---------------------------------------------------------- *)
+
+(* ppf *)
+let ppf = Format.std_formatter
+
+let print_node_count =
+  false (* ノード数をカウントするときには true にする *)
+(* true にすると型デバッグはできなくなる *)
+
+let print_asked_expr =
+  false (* カウントされた質問を表示するときには true にする *)
+(* スライス表示用変数 (debug_slice.ml) *)
+
+let print_slice =
+  not print_node_count && (* ノード数カウント中はスライスを表示しない *)
+  false (* スライス結果を表示するときに true にする *)
+
+(* OCaml のエラーメッセージ Errors.report_error 制御用変数
+   (toplevel/toploop.ml, driver/compile.ml) *)
+
+let print_ocaml_error =
+  not print_node_count && (* ノード数カウント中は表示しない *)
+  true  (* OCaml のエラーメッセージを消すときに false にする *)
+
+(* スライスをするかどうかを制御する変数
+   (debug_slice.ml, debug_main.ml) *)     
+let on_exp_slice =
+  print_node_count || (* ノード数カウント中はスライスを行う *)
+  true (* スライスをしないときには false を代入する *)
+
+let on_pat_slice =
+  ref false (* パターンのスライスをしないときには false を代入する *)
+
+let on_file_output =
+  false (* 各種情報をログに出力する時には true にする *)
+
+(* ---------------------------------------------------------- *)
+(* デバッガ、スライサ共通の定義 *)
+open Ast
+
+module Attr = struct
+
+  (* ここから、ocamldoc/odoc_print.mli とほぼ同じ内容 *)
+  let (type_fmt, flush_type_fmt) =
+    let buf = Buffer.create 512 in
+    let fmt = Format.formatter_of_buffer buf in
+    let flush () =
+      Format.pp_print_flush fmt ();
+      let s = Buffer.contents buf in
+      Buffer.reset buf ;
+      s
+    in
+    (fmt, flush)
+  let string_of_type_expr t =
+    Printtyp.mark_loops t;
+    Printtyp.type_scheme_max ~b_reset_names: false type_fmt t;
+    flush_type_fmt ()
+  (* ここまで、ocamldoc/odoc_print.mli とほぼ同じ内容 *)
+
+  (* 式の attribute *)
+  (* of_expr : expression -> attribute *)
+  let of_expr ({pexp_loc = loc} as e) =
+    {attr_name = mkloc "exp" loc;
+     attr_payload = PStr [Str.eval ~loc e];
+     attr_loc = Location.none}
+
+  (* サイズの attribute *)
+  (* of_size : int -> attribute *)
+  let of_size n =
+    {attr_name = mknoloc "size";
+     attr_payload = PPat (Pat.constant (Const.int n), None);
+     attr_loc = Location.none}
+
+  (* 型の attribute *)
+  (* of_type : string -> Types.type_expr -> attribute *)
+  let of_type st te =
+    let open Lexing in
+    let lex = from_string (string_of_type_expr te) in
+    let open Parse in
+    {attr_name = mknoloc st;
+     attr_payload = PTyp (core_type lex);
+     attr_loc = Location.none}
+
+  let to_size {attr_name = {txt}; attr_payload = payload} = match payload with
+      PPat ({ppat_desc = Ppat_constant (Pconst_integer (n, None))}, None)
+         when txt = "size" -> int_of_string n
+    | _ -> failwith "Attr: mismatch"
+
+end
+
+(* ホール *)
+module Hole = struct
+  (* □の種類 *)
+  (* Exp : 式の□ *)
+  (* Pat : パターンの□ *)
+  (* Hole : 抽象化の必要がない *)
+  type t = Exp of attribute
+         | Pat of attribute
+         | Hole
+  (* □を求める関数 *)
+  (* Hole.hole' : ?exp:expression -> ?pat:pattern -> unit -> Hole.t *)
+  let rec hole' ?(exp = dummy_assertfalse ()) ?(pat = dummy_any ()) () =
+    match (exp, pat) with
+    | ({pexp_loc = loc; pexp_attributes = []}, _) when
+           exp <> dummy_assertfalse ~loc () && pat = dummy_any () ->
+       Exp ({attr_name = {txt = "exp"; loc};
+             attr_payload = PPat (pat, Some (exp));
+             attr_loc = Location.none}) (* 式の□ *)
+    | (_, {ppat_loc = loc; ppat_attributes = []}) when
+           exp = dummy_assertfalse () && pat <> dummy_any ~loc () ->
+       Pat ({attr_name = {txt = "pat"; loc};
+             attr_payload = PPat (pat, None);
+             attr_loc = Location.none}) (* パターンの□ *)
+    | _ -> Hole (* 既に抽象化されている *)
+
+  (* 式の抽象化 *)
+  (* Abst.expression : expression -> expression *)
+  and expression exp = match hole' ~exp () with
+    | Exp attr -> Exp.attr (dummy_assertfalse ~loc:exp.pexp_loc ()) attr
+    | _ -> exp
+
+  (* パターンの抽象化 *)
+  (* Abst.pattern : pattern -> pattern *)
+  and pattern pat = match hole' ~pat () with
+    | Pat attr -> Pat.attr (dummy_any ~loc:pat.ppat_loc ()) attr
+    | _ -> pat
+
+  (* ダミーの作成 *)
+  (* dummy_any : ~loc:loc -> unit -> pattern *)
+  (* その他 : ~loc:loc -> unit -> expression *)
+  and dummy_any ?(loc = Location.none) () =
+    Pat.any ~loc ()
+  and dummy_false ?(loc = Location.none) () =
+    Exp.construct ~loc (mknoloc (Longident.Lident "false")) None
+  (* and dummy_true ?(loc = Location.none) () =
+    Exp.construct ~loc (mknoloc (Longident.Lident "true")) None *)
+  and dummy_assertfalse ?(loc = Location.none) () =
+    Exp.assert_ ~loc (dummy_false ())
+  and dummy_int0 ?(loc = Location.none) () =
+    Exp.constant ~loc (Const.int 0)
+  and dummy_fun ?(loc = Location.none) () =
+    Exp.fun_ ~loc Nolabel None (dummy_any ()) (dummy_assertfalse ())
+
+  (* 変数として□を呼び出す用：lidになっている *)
+  let skeleton = mknoloc (Longident.Lident "□")
+                 (* was: (Longident.parse "□") *)
+
+  (* □ を定義する structure_item *)
+  let item =
+    (* let □ = assert false *)
+    let p = Pat.var (mknoloc "□") in
+    let e = dummy_assertfalse () in
+    let vs = [Vb.mk p e] in
+    Str.value Nonrecursive vs
+
+  let of_exp'' loc attrs =
+    Exp.ident ~loc ~attrs skeleton
+
+  let rec of_exp' attrs e = match attrs with
+    | [] ->
+       let attrs = (Attr.of_expr e) :: attrs in
+       of_exp'' e.pexp_loc attrs
+    | {attr_name = {txt; loc}; attr_payload; attr_loc} :: rest ->
+       if txt = "exp" then
+         e
+       else if txt = "dummy" then
+         of_exp'' e.pexp_loc ({attr_name = {txt = "exp"; loc};
+                               attr_payload; attr_loc} :: rest)
+       else
+         of_exp' rest e
+
+  let of_exp e =
+    of_exp' e.pexp_attributes e
+
+  let of_pat ({ppat_loc = loc; ppat_attributes = attrs} as p) =
+    if List.exists (fun {attr_name = {txt = name}} -> name = "pat") attrs then p
+    else
+      let attrs = {attr_name = mkloc "pat" loc;
+                   attr_payload = PPat (p, None);
+                   attr_loc = Location.none} :: attrs in
+      Pat.any ~loc ~attrs ()
+
+
+  (* スケルトンのチェック *)
+  let check_loc expr slice = expr.pexp_loc = slice.pexp_loc
+  let check_skeleton expr = check_loc (Exp.ident skeleton) expr
+
+  (* 式の抽象化 *)
+  (* to_exp : expression -> expression *)
+  let rec to_exp exp = match exp.pexp_attributes with
+      [] -> raise Not_found
+    | {attr_name = {txt = "exp"};
+       attr_payload = PStr [{pstr_desc = Pstr_eval (exp', _)}]} :: _ -> exp'
+    | _ :: rest -> to_exp {exp with pexp_attributes = rest}
+
+  (* 位置情報のない□ *)
+  let exp = Exp.ident skeleton
+
+end
+
+let rec get_type_name typ = match typ.desc with
+  | Tconstr (path, _, _) ->
+     (* 定義名とモジュール名のリストを返す *)
+     let lst =
+       (* was: (Longident.flatten (Longident.parse (Path.name path))) *)
+       match Path.flatten path with
+         `Ok (id, acc) -> Ident.name id :: acc
+       | _ -> failwith "error in get_type_name" in
+     List.fold_left (
+         fun (type_name, mod_names) s ->
+         (s, if type_name = "" then mod_names
+             else type_name :: mod_names)
+       ) ("", []) lst
+  | Tsubst (t) -> get_type_name t
+  | Tlink (t) -> get_type_name t
+  | _ -> assert false
+
+let rec get_type_decl (type_name, mod_names) prefix = match prefix with
+    [] -> failwith "this type was not find."
+  | ({pstr_desc = d}, _) :: rest ->
+     match d with
+     | Pstr_module ({pmb_name = {txt = Some (name)};
+                     pmb_expr = {pmod_desc =
+                                   Pmod_structure (mod_str)}}) ->
+        (* モジュールの定義 *)
+        (* name が mod_names にある場合は mod_str も再帰に含める *)
+        get_type_decl
+          (type_name, mod_names)
+          (if List.exists (
+                  fun mod_name -> mod_name = name) mod_names
+           then List.fold_left (
+                    fun rest' s -> (s, Env.empty) :: rest'
+                  ) rest mod_str else rest)
+     | Pstr_type (_, tds) ->
+        (* 型の定義 *)
+        (* 名前が一致した場合に type_declaration を返す *)
+        begin
+          try
+            let td =
+              List.find (fun {ptype_name = {txt = name}} ->
+                          name = type_name) tds in
+            if print_slice then
+              Format.fprintf ppf "@[  find type_declaration. @]@.";
+            td
+          with _ -> get_type_decl (type_name, mod_names) rest
+        end
+     | _ -> get_type_decl (type_name, mod_names) rest
+
+(* decode_labels : type_expr -> prefix -> label_declaration list *)
+let decode_labels typ prefix =
+  match get_type_decl (get_type_name typ) prefix with
+  | {ptype_kind = Ptype_record (lds)} -> lds
+  | _ -> failwith "This type is not record."
+
+(* 矢印の分離 *)
+(* split_arrow : type_expr -> (type_expr * type_expr) option *)
+let rec split_arrow typ = match typ.desc with
+    Tarrow (_, t1, t2, _) -> Some (t1, t2)
+  | Tlink (typ') -> split_arrow typ'
+  | _ -> None
+
+(* タプルの分離 *)
+(* decode_tuple : type_expr -> type_expr option *)
+let rec decode_tuple typ = match typ.desc with
+    Ttuple (typs) -> Some (typs)
+  | Tlink (typ') -> decode_tuple typ'
+  | _ -> None
+
+(* pattern_variables : pattern -> string list *)
+(* collect all the pattern variables in a pattern *)
+let rec pattern_variables pat = match pat.ppat_desc with
+    Ppat_any -> []
+  | Ppat_var ({txt = st}) -> [st]
+  | Ppat_alias (p, {txt = st}) -> st :: pattern_variables p
+  | Ppat_constant (_) -> []
+  | Ppat_interval (_, _) -> []
+  | Ppat_tuple (ps) -> List.flatten (List.map pattern_variables ps)
+  | Ppat_construct (_, None) -> []
+  | Ppat_construct (_, Some (p)) -> pattern_variables p
+  | Ppat_variant (_, None) -> []
+  | Ppat_variant (_, Some (p)) -> pattern_variables p
+  | Ppat_record (lps, _) ->
+      List.flatten (List.map (fun (_, p) -> pattern_variables p) lps)
+  | Ppat_array (ps) -> List.flatten (List.map pattern_variables ps)
+  | Ppat_or (p1, p2) -> pattern_variables p1 @ pattern_variables p2
+  | Ppat_constraint (p, _) -> pattern_variables p
+  | Ppat_type (_) -> []
+  | Ppat_lazy (p) -> pattern_variables p
+  | Ppat_unpack ({txt = Some (st)}) -> [st]
+  | Ppat_unpack ({txt = None}) -> []
+  | Ppat_exception (p) -> pattern_variables p
+  | Ppat_extension (_) -> []
+  | Ppat_open (_, p) -> pattern_variables p
+
+let rec plug_expr expr cxt = match cxt with
+  | Empty -> expr
+  | Lambda (pat, c) ->
+     (* パターン変数を全て集め *)
+     let vars = pattern_variables pat in
+     (* 変数名から変数の expression を作る *)
+     let varexp x = Exp.ident (mknoloc (Longident.Lident x)) in
+     (* expr と組にして body に入れる。これでパターン変数の型を知る *)
+     (* ダミーの 0 を入れるのは、tuple 長が 2 以上でないとエラーになるため *)
+     let body = Exp.tuple (expr :: Hole.dummy_int0 () :: List.map varexp vars) in
+     let exp = Exp.fun_ Nolabel None pat body in
+     plug_expr exp c
+  | Let (flg, bindings, c) ->
+     let exp = Exp.let_ flg bindings expr in
+     plug_expr exp c
+
+(* plug_str : (expression * expr_context) -> structure *)
+let plug_str (expr, cxt) = [Str.eval (plug_expr expr cxt)]
+
+(* collect_one : (string context_t * type_expr) context_t -> string list ->
+                 type_expr -> yes_no_list * type_expr *)
+let collect_one ((vartyps, cxt'), env, prefix) vars typ =
+  match decode_tuple typ with
+      Some (exp_typ :: _ :: typs) -> (* _ は dummy_int0 の型 *)
+        (List.map2 (fun v t -> (((v, cxt'), env, prefix), t)) vars typs
+         @ vartyps,
+         exp_typ)
+    | Some ([_]) | Some ([]) | None ->
+        Format.fprintf ppf "type:@.%a@." Printtyp.type_expr typ;
+        failwith "TypeDebugger: Error in collect_one"
+
+(* collect : expression context_t -> type_expr -> yes_no_list * type_expr *)
+let rec collect ((expr, cxt), env, prefix) t = match cxt with
+    Empty -> ([], t)
+  | Let (_, _, cxt') -> collect ((expr, cxt'), env, prefix) t
+  | Lambda (pat, cxt') ->
+      (* There and back again [Danvy&Goldberg ICFP'02] *)
+      let (vartyps, t') = collect ((expr, cxt'), env, prefix) t in
+      let vars = pattern_variables pat in
+      match split_arrow t' with
+          Some ((*t1*)_, t2) ->
+            collect_one ((vartyps, cxt'), env, prefix) vars t2
+        | None -> (* Can't happen *)
+            failwith "TypeDebugger: Error in collect"
+
+(* judge : expression context_t -> yes_no_list * type_expr *)
+let judge ((expr, cxt), env, prefix) =
+  let structure = plug_str (expr, cxt) in
+  let (structure', _, _, _) = Typemod.type_structure env structure in
+  match structure'.str_items with
+    {str_desc = Tstr_eval ({ exp_type = typ }, _)} :: [] ->
+      collect ((expr, cxt), env, prefix) typ
+  | _ -> failwith "TypeDebugger: Error in judge"
+
+(* map 関数の集合 *)
+module Map = struct
+
+  type 'a map2 = (pattern -> expression -> expression)
+                 -> (pattern -> expression -> pattern)
+                 -> 'a -> 'a
+  type 'a map1 = (expression -> expression) -> (pattern -> pattern)
+                 -> 'a -> 'a
+
+  let x1to2 x2 fe fp x = x2 (fun _ e -> fe e) (fun p _ -> fp p) x
+
+  (* 2引数 *)
+  let v2 fe2 fp2 ({pvb_pat = p; pvb_expr = e} as v) =
+    {v with pvb_pat = fp2 p e; pvb_expr = fe2 p e}
+  let c2 fe2 fp2 ({pc_lhs = p; pc_rhs = e} as c) =
+    {c with pc_lhs = fp2 p e; pc_rhs = fe2 p e}
+
+  (* 1引数 *)
+  let v1 fe fp v = x1to2 v2 fe fp v
+  let c1 fe fp c = x1to2 c2 fe fp c
+  let e1 fe _ e = fe e
+  let p1 _ fp p = fp p
+  let le fe _ (l, e) = (l, fe e)
+  let lp _ fp (l, p) = (l, fp p)
+  let id = fun x -> x
+
+  (* 差し替え *)
+  let set_exp x1 x e = x1 (fun _ -> e) id x
+  let set_pat x1 x p = x1 id (fun _ -> p) x
+
+  (* 式の抜き出し *)
+  let e_in_v v = v.pvb_expr
+  let e_in_c c = c.pc_rhs
+
+end
+
+
+let skeleton' = Ast.Exp.ident Hole.skeleton
+
+let hole_str = Hole.item
+let hole_of_exp exp = Hole.of_exp exp
+let hole_of_pat pat = Hole.of_pat pat
+
+module Desc = struct
+
+  (* desc 生成関数の型 *)
+  type 'a make_exp_desc =
+    'a list -> expression -> expression_desc
+  type make_exp_desc2 =
+    expression -> expression -> expression option -> expression_desc
+
+  type 'b make_pat_desc = 'b list -> pattern -> pattern_desc
+  
+  (* open Abst *)
+  let wildcard = Ast.Pat.any ()
+
+  (* pattern : pattern_desc -> pattern -> pattern *)
+  let pattern ppat_desc pat = {pat with ppat_desc}
+  
+  (* expression : expression_desc -> expression -> expression *)
+  let expression pexp_desc expr = {expr with pexp_desc}
+
+  (* to_pat :
+      ('a list -> pattern -> pattern_desc)
+     -> 'a list -> pattern -> pattern -> pattern *)
+  let to_pat fd ys p pat = pattern (fd ys p) pat
+
+  (* to_exp :
+      ('a list -> expression -> expression_desc)
+    -> 'a list -> expression -> expression -> expression *)
+  let to_exp fd xs e expr = expression (fd xs e) expr
+  let to_exp2 fd e1 e2 eop expr = expression (fd e1 e2 eop) expr
+
+  
+  (* ppat_desc の生成 *)
+  let p_alias str _ p = Ppat_alias (p, str)
+  let p_tuple ps _ = Ppat_tuple (ps)
+  let p_construct lid ps p =
+    if ps = [] then Ppat_construct (lid, Some p)
+    else if p = wildcard then Ppat_construct (lid, None)
+    else Ppat_construct (lid, Some (to_pat p_tuple ps p p))
+  let p_variant l _ p = Ppat_variant (l, Some p)
+  let p_record flg lps _ = Ppat_record (lps, flg)
+  let p_array ps _ = Ppat_array (ps)
+  let p_or p1 p2 = Ppat_or (p1, p2)
+  let p_constraint ct _ p = Ppat_constraint (p, ct)
+  
+  (* pexp_desc の生成 *)
+  let e_let flg vs e = Pexp_let (flg, vs, e)
+  let e_function cs _ = Pexp_function (cs) (*
+  let e_fun l eop p e = Pexp_fun (l, eop, p, e)
+  let e_apply les e = Pexp_apply (e, les) *)
+  let e_match cs e = Pexp_match (e, cs)
+  let e_try cs e = Pexp_try (e, cs)
+  let e_tuple es _ = Pexp_tuple (es)
+  let e_construct lid es e =
+    if es = [] then Pexp_construct (lid, Some e)
+    else if e = skeleton' then Pexp_construct (lid, None)
+    else Pexp_construct (lid, Some (to_exp e_tuple es e e))
+  (*  let e_variant l _ e = Pexp_variant (l, Some e) *)
+  (* let e_record les e =
+    if e = skeleton' then Pexp_record (les, None)
+    else Pexp_record (les, Some e)
+  let e_field lid _ e = Pexp_field (e, lid)
+  let e_setfield lid e1 e2 = Pexp_setfield (e1, lid, e2)
+  let e_array es _ = Pexp_array (es)
+  let e_constraint ct _ e = Pexp_constraint (e, ct)
+  let e_ifthenelse e1 e2 eop = Pexp_ifthenelse (e1, e2, eop)
+  let e_sequence e1 e2 = Pexp_sequence (e1, e2)
+  *)
+  (* こっちを使う *)
+  let enop e = if Hole.check_skeleton e then None else Some e
+  let deop eop = match eop with None -> skeleton' | Some e -> e
+
+  (* make_exp_desc *)
+  let pexp_let flg vs e = Pexp_let (flg, vs, e)
+  let pexp_function cs _ = Pexp_function (cs)
+  let pexp_fun l eop p _ e = Pexp_fun (l, eop, p, e)
+  let pexp_apply les e = Pexp_apply (e, les)
+  let pexp_match cs e = Pexp_match (e, cs)
+  let pexp_try cs e = Pexp_try (e, cs)
+  let pexp_tuple es _ = Pexp_tuple (es)
+  let pexp_construct lid _ e = Pexp_construct (lid, enop e)
+  let pexp_variant l _ e = Pexp_variant (l, enop e)
+  let pexp_record les e = Pexp_record (les, enop e)
+  let pexp_field lid _ e = Pexp_field (e, lid)
+  let pexp_array es _ = Pexp_array (es)
+  let pexp_constraint ct _ e = Pexp_constraint (e, ct)
+  let pexp_assert _ e = Pexp_assert (e)
+  (* make_exp_desc2 *)
+  let pexp_setfield lid e1 e2 _ = Pexp_setfield (e1, lid, e2)
+  let pexp_ifthenelse e1 e2 eop = Pexp_ifthenelse (e1, e2, eop)
+  let pexp_sequence e1 e2 _ = Pexp_sequence (e1, e2)
+
+  let flat f prefix env cxt x = f ((x, cxt), env, prefix)
+
+  module type Typ =
+    sig
+      type t
+      val internal : t -> t -> bool
+      val leaf : t -> bool
+      val comp : ?mode:bool -> t -> t -> int
+      val map : (t -> t) -> t -> t
+      val map_all : (t -> t) -> t -> t
+      val fold : ('a -> t -> 'a) -> 'a -> t -> 'a
+      val fold_all : ('a -> t -> 'a) -> 'a -> t -> 'a
+      val replace : t -> t -> t
+    end
+
+  let internal root node =
+    let open Location in
+    match (root, node) with
+      ({loc_start = root_s; loc_end = root_e},
+       {loc_start = node_s; loc_end = node_e}) ->
+        root_s <= node_s && node_e <= root_e
+
+  (* pattern *)
+  module Pat = struct
+    type t = pattern
+    let internal p0 p1 = internal p0.ppat_loc p1.ppat_loc
+
+    let node b {ppat_desc} = match ppat_desc with
+      | Ppat_any | Ppat_var _ | Ppat_constant _ -> b (* leaf : yes *)
+      | Ppat_construct (_, None) | Ppat_variant (_, None) -> b (* leaf : yes *)
+      | _ -> not b (* leaf : no *)
+
+    let leaf e = node true e
+
+    let comp ?(mode = false) p1 p2 =
+      (* true : 位置情報の比較 *)
+      (* 1 : e1 のほうが後 *)
+      (* 0 : 内包 *)
+      (* -1 : e2 のほうが後 *)
+      if mode then
+        let open Location in
+        if p2.ppat_loc.loc_end < p1.ppat_loc.loc_start then 1
+        else if p1.ppat_loc.loc_end < p2.ppat_loc.loc_start then -1
+        else 0
+      else
+        (* false : e1 と e2 の一致度 *)
+        (* 1 : 完全一致 *)
+        (* 0 : 部分一致 *)
+        (* -1 : 不一致 *)
+        if p1 = p2 then 1
+        else if p1.ppat_loc = p2.ppat_loc then 0
+        else -1
+
+    let check_loc patt slice = patt.ppat_loc = slice.ppat_loc
+    let check patt = check_loc wildcard patt
+
+    let enop p = if check p then None else Some p
+    let deop pop = match pop with None -> wildcard | Some p -> p
+
+    let map f patt =
+
+      let f1 map1 fd xs p =
+        {patt with
+          ppat_desc =
+            fd (List.map (map1 f Map.id) xs)
+               (if check p then p else f p)}
+
+      and f2 fd p1 p2 pop =
+        {patt with
+          ppat_desc =
+            fd (f p1) (f p2)
+               (if pop = None then None else enop (f (deop pop)))} in
+
+      if leaf patt then patt
+      else
+        match patt.ppat_desc with
+        | Ppat_alias (p, str) ->
+           f1 Map.p1 (p_alias str) [] p
+        | Ppat_tuple (ps) ->
+           f1 Map.p1 p_tuple ps wildcard
+        | Ppat_construct (lid, Some p) ->
+           f1 Map.p1 (p_construct lid) [] p
+        | Ppat_variant (l, Some p) ->
+           f1 Map.p1 (p_variant l) [] p
+        | Ppat_record (ls, flg) ->
+           f1 Map.lp (p_record flg) ls wildcard
+        | Ppat_array (ps) ->
+           f1 Map.p1 p_array ps wildcard
+        | Ppat_or (p1, p2) ->
+           f2 (fun p1 p2 _ -> p_or p1 p2) p1 p2 None
+        | Ppat_constraint (p, ct) ->
+           f1 Map.p1 (p_constraint ct) [] p
+        | _ -> failwith "not supported."
+
+    let rec map_all f patt =
+      if leaf patt then f patt
+      else f (map (map_all f) patt)
+
+    let fold f init patt =
+      let f0 p =
+        if check p then init else f init p in
+      let f1 p_in_x xs p = 
+        List.fold_left f (f0 p) (List.map p_in_x xs)
+      and f2 p1 p2 pop = f (f (f0 (deop pop)) p2) p1 in
+
+      match patt.ppat_desc with
+      | Ppat_alias (p, _) -> f0 p
+      | Ppat_tuple (ps) -> f1 Map.id ps wildcard
+      | Ppat_construct (_, Some p) -> f0 p
+      | Ppat_variant (_, Some p) -> f0 p
+      | Ppat_record (ls, _) -> f1 snd ls wildcard
+      | Ppat_array (ps) -> f1 Map.id ps wildcard
+      | Ppat_or (p1, p2) -> f2 p1 p2 None
+      | Ppat_constraint (p, _) -> f0 p
+      | _ -> init
+
+    let rec fold_all f init patt =
+      if leaf patt then f init patt
+      else f (fold (fold_all f) init patt) patt
+
+    let replace patt p =
+      if patt.ppat_loc = p.ppat_loc then patt else p
+
+    let find' name pat = match pat.ppat_desc with
+        Ppat_var {txt} -> txt = name
+      | Ppat_alias (_, {txt}) -> txt = name
+      | Ppat_unpack {txt = Some (txt)} -> txt = name
+      | _ -> false
+
+    let rec find name pat =
+      if find' name pat then pat
+      else if leaf pat then wildcard
+      else
+        fold (
+          fun pat' p ->
+            if pat' = wildcard then
+              find name p
+            else
+              pat'
+        ) wildcard pat
+
+    let complete ((pat, cxt), env, prefix) =
+      if print_slice then
+        Format.fprintf ppf "@[Pat.complete : %a@]@."
+             Pprintast.pattern pat;
+
+      match pat.ppat_desc with
+      | Ppat_record (lps, flg) ->
+          (* レコード *)
+          (* 足りないフィールドを補う *)
+          (* あるいは、型の情報を記録 *)
+          let (pat, lps') =
+            try
+(*
+type 'a context_t =
+  ('a * expr_context) * Env.t * (structure_item * Env.t) list
+*)
+              let dummy_record =
+                Exp.record
+                  (List.map (fun (l, _) -> (l, skeleton')) lps) (Some skeleton') in
+
+              if print_slice then
+                Format.fprintf ppf "@[dummy_record : %a@]@."
+                  Pprintast.expression dummy_record;
+
+              let (_, exp_typ) = judge ((dummy_record, cxt), env, prefix) in
+
+              if print_slice then
+                Format.fprintf ppf "@[  make dummy labels: type %a @]@."
+                  Printtyp.type_expr exp_typ;
+
+              let dummy_lps =
+                List.map (
+                  fun {pld_name = {txt = t; loc = l}} ->
+                    ({txt = Longident.Lident t; loc = l}, wildcard)
+                    (* asai: Lident was parse *)
+                ) (decode_labels exp_typ prefix) in
+
+
+              (Ast_helper.Pat.attr pat (Attr.of_type "type" exp_typ),
+              List.fold_left (
+                fun lst (ln, pn) ->
+                  List.map (
+                    fun (lm, pm) ->
+                      if Longident.last lm.txt = Longident.last ln.txt
+                      then (ln, pn) else (lm, pm)) lst
+              ) dummy_lps lps)
+            with
+              _ -> (pat, lps) in
+
+          pattern (p_record flg lps' wildcard) pat
+
+    | _ -> pat (* その他はそのまま *)
+  end
+
+  (* expression *)
+  module Exp = struct
+    type t = expression
+    let internal e0 e1 = internal e0.pexp_loc e1.pexp_loc
+
+    let node b {pexp_desc} = match pexp_desc with
+      | Pexp_ident _ | Pexp_constant _ -> b (* leaf : yes *)
+      | Pexp_construct (_, None) | Pexp_variant (_, None) -> b (* leaf : yes *)
+      | _ -> not b (* leaf : no *)
+
+    let leaf e = node true e
+
+    let comp ?(mode = false) e1 e2 =
+      if mode then
+        (* true : 位置情報の比較 *)
+        (* 1 : e1 のほうが後 *)
+        (* 0 : 内包 *)
+        (* -1 : e2 のほうが後 *)
+        let open Location in
+        if e2.pexp_loc.loc_end < e1.pexp_loc.loc_start then 1
+        else if e1.pexp_loc.loc_end < e2.pexp_loc.loc_start then -1
+        else 0
+      else
+        (* false : e1 と e2 の一致度 *)
+        (* 1 : 完全一致 *)
+        (* 0 : 部分一致 *)
+        (* -1 : 不一致 *)
+        if e1 = e2 then 1
+        else if e1.pexp_loc = e2.pexp_loc then 0
+        else -1
+
+    let map f expr =
+
+      let f1 map1 fd xs e =
+        {expr with
+          pexp_desc =
+            fd (List.map (map1 f Map.id) xs)
+               (if Hole.check_skeleton e then e else f e)}
+
+      and f2 fd e1 e2 eop =
+        {expr with
+          pexp_desc =
+            fd (f e1) (f e2)
+               (if eop = None then None else enop (f (deop eop)))} in
+
+      if leaf expr then expr
+      else
+        match expr.pexp_desc with
+        | Pexp_let (flg, vs, e) ->
+           f1 Map.v1 (pexp_let flg) vs e
+        | Pexp_function (cs) ->
+           f1 Map.c1 pexp_function cs skeleton'
+        | Pexp_fun (l, eop, p, e) ->
+           f1 Map.e1 (pexp_fun l eop p) [] e
+        | Pexp_apply (e, les) ->
+           f1 Map.le pexp_apply les e
+        | Pexp_match (e, cs) ->
+           f1 Map.c1 pexp_match cs e
+        | Pexp_try (e, cs) ->
+           f1 Map.c1 pexp_try cs e
+        | Pexp_tuple (es) ->
+            f1 Map.e1 pexp_tuple es skeleton'
+        | Pexp_construct (lid, Some e) ->
+           f1 Map.e1 (pexp_construct lid) [] e
+        | Pexp_variant (l, Some e) ->
+           f1 Map.e1 (pexp_variant l) [] e
+        | Pexp_record (ls, eop) ->
+           f1 Map.le pexp_record ls (deop eop)
+        | Pexp_field (e, lid) ->
+           f1 Map.e1 (pexp_field lid) [] e
+        | Pexp_setfield (e1, lid, e2) ->
+           f2 (pexp_setfield lid) e1 e2 None
+        | Pexp_array (es) ->
+           f1 Map.e1 pexp_array es skeleton'
+        | Pexp_ifthenelse (e1, e2, eop) ->
+           f2 pexp_ifthenelse e1 e2 eop
+        | Pexp_sequence (e1, e2) ->
+           f2 pexp_sequence e1 e2 None
+        | Pexp_constraint (e, ct) ->
+           f1 Map.e1 (pexp_constraint ct) [] e
+        | Pexp_assert (e) ->
+           f1 Map.e1 pexp_assert [] e
+        | Pexp_send _ -> failwith "#use"
+        | _ -> failwith "not supported."
+
+    let rec map_all f expr =
+      if leaf expr then f expr
+      else f (map (map_all f) expr)
+
+    let fold f init expr =
+      let f0 e =
+        if Hole.check_skeleton e then init else f init e in
+      let f1 e_in_x xs e = 
+        List.fold_left f (f0 e) (List.map e_in_x xs)
+      and f2 e1 e2 eop = f (f (f0 (deop eop)) e2) e1 in
+
+      match expr.pexp_desc with
+      | Pexp_let (_, vs, e) -> f1 Map.e_in_v vs e
+      | Pexp_function (cs) -> f1 Map.e_in_c cs skeleton'
+      | Pexp_fun (_, _, _, e) -> f0 e
+      | Pexp_apply (e, ls) -> f1 snd ls e
+      | Pexp_match (e, cs) -> f1 Map.e_in_c cs e
+      | Pexp_try (e, cs) -> f1 Map.e_in_c cs e
+      | Pexp_tuple (es) -> f1 Map.id es skeleton'
+      | Pexp_construct (_, Some e) -> f0 e
+      | Pexp_variant (_, Some e) -> f0 e
+      | Pexp_record (ls, eop) ->
+         f1 snd ls (deop eop)
+      | Pexp_field (e, _) -> f0 e
+      | Pexp_setfield (e1, _, e2) -> f2 e1 e2 None
+      | Pexp_array (es) -> f1 Map.id es skeleton'
+      | Pexp_ifthenelse (e1, e2, eop) -> f2 e1 e2 eop
+      | Pexp_sequence (e1, e2) -> f2 e1 e2 None
+      | Pexp_constraint (e, _) -> f0 e
+      | Pexp_assert (e) -> f0 e
+      | _ -> init
+
+    let rec fold_all f init expr =
+      if leaf expr then f init expr
+      else f (fold (fold_all f) init expr) expr
+
+    let replace e expr =
+      if e.pexp_loc = expr.pexp_loc then e else expr
+
+    let restore les expr = match expr.pexp_desc with
+      | Pexp_tuple _ ->
+          {expr with pexp_desc = Pexp_tuple (List.map snd les)}
+      | Pexp_array _ ->
+          {expr with pexp_desc = Pexp_array (List.map snd les)}
+      | Pexp_construct (lid, Some e) ->
+          let e' = match les with
+              (_, e_) :: [] -> e_
+            | _ ->
+                {e with pexp_desc = Pexp_tuple (List.map snd les)} in
+          {expr with pexp_desc = Pexp_construct (lid, Some e')}
+      | Pexp_ifthenelse _ ->
+          let (e_if, e_then, e_else) = match les with
+            | (_, e_if') :: (_, e_then') :: (_, e_else') :: [] ->
+                (e_if', e_then', Some e_else')
+            | (_, e_if') :: (_, e_then') :: [] ->
+                (e_if', e_then', None)
+            | _ -> raise Not_found in
+          {expr with pexp_desc = Pexp_ifthenelse (e_if, e_then, e_else)}
+      | _ -> raise Not_found
+
+    let rec value_bindings ((vs, cxt), env, prefix) = match vs with
+      | [] -> []
+      | vn :: rest ->
+          (* let v1 fe fp v *)
+          let vn' =
+            Map.v1 Map.id
+              (flat Pat.complete prefix env cxt) vn in
+          let vn' =
+            try
+              let (_, tp) = judge ((
+                  Ast_helper.Exp.let_ Nonrecursive
+                    [{vn' with pvb_pat = Ast_helper.Pat.var (mknoloc "◆")}]
+                    (Ast_helper.Exp.ident
+                       {txt = (Longident.Lident "◆"); loc = Location.none}
+                       ), cxt), env, prefix) in
+              if print_slice then
+                Format.fprintf ppf "@[Vb.complete : %a@]@."
+                  Printtyp.type_expr tp;
+              {vn' with pvb_pat = {vn'.pvb_pat with ppat_attributes = [Attr.of_type "vb" tp]}}
+            with
+              _ -> vn' in
+
+          (* vn のみで定義した関数がエラーになるかどうかをチェック *)
+          let rest' = value_bindings ((rest, cxt), env, prefix) in
+          try
+            ignore (
+              Typemod.type_structure
+                env [Ast_helper.Str.value Recursive [vn']]);
+            (* エラーにならない *)
+            vn' :: rest'
+          with
+          | _ ->
+              (* エラーになる *)
+              rest' @ [vn']
+
+    let cases ((cs, cxt), env, prefix) =
+
+      (* case の pattern に型を与える *)
+      List.map (
+        Map.c1 Map.id
+          (flat Pat.complete prefix env cxt)
+      ) cs
+
+    let complete ((expr, cxt), env, prefix) =
+      if print_slice then
+        Format.fprintf ppf "@[Exp.complete : %a@]@."
+             Pprintast.expression expr;
+      let flat' f x =
+        f ((x, cxt), env, prefix) in
+      let pat' p =
+        flat' Pat.complete p in
+      let set fd fx ?(e = Hole.exp) xs =
+        to_exp fd (fx xs) e expr in
+
+      match expr.pexp_desc with
+      | Pexp_fun (l, eop, p, e) ->
+          let desc = pexp_fun l eop (pat' p) [] e in
+          expression desc expr
+
+      | Pexp_let (flg, vs, e) ->
+          (* let文 *)
+          set (e_let flg) (flat' (value_bindings)) ~e vs
+
+      | Pexp_function cs ->
+          (* function | P1 -> E1 | ... *)
+          (* csに含まれるパターン全てに対して同じように処理する *)
+          set e_function (flat' cases) cs
+
+      | Pexp_match (e, cs) ->
+          (* match E0 with P1 -> E1 | ... *)
+          (* csに含まれるパターン全てに対して同じように処理する *)
+          set e_match (flat' cases) ~e cs
+
+      | Pexp_try (e, cs) ->
+          (* try E0 with P1 -> E1 | ... *)
+          (* csに含まれるパターン全てに対して同じように処理する *)
+          set e_try (flat' cases) ~e cs
+
+      | Pexp_construct (lid, Some (e)) ->
+          set (e_construct lid) Map.id ~e []
+
+      | _ -> expr
+
+    let origin e = match List.find (
+        fun {attr_name = {txt}} -> txt = "dummy"
+      ) e.pexp_attributes with
+    | {attr_payload = PStr ({pstr_desc = Pstr_eval (slice, _)} :: _)} -> slice
+    | _ -> raise Not_found
+
+    let rec clear expr = match expr.pexp_desc with
+      | Pexp_apply (e, les) ->
+          let expr' =
+            try
+              restore les (origin e)
+            with _ -> expr in
+          clear' expr'
+      | _ -> clear' expr
+
+    and clear' expr = {(map clear expr) with pexp_attributes = []}
+
+  end
+
+  module Str = struct
+    let clear' item = match item.pstr_desc with
+      | Pstr_eval (slice, attr) ->
+          {item with
+           pstr_desc =
+             Pstr_eval
+               (Exp.clear slice, attr)}
+      | Pstr_value (flg, vs) ->
+          {item with
+           pstr_desc =
+             Pstr_value
+               (flg, List.map (
+                   fun v ->
+                     {v with
+                      pvb_expr = Exp.clear v.pvb_expr}) vs)}
+      | _ -> item
+    let clear structure = List.map clear' structure
+
+    let output name structure =
+      let file = open_out name in
+      output_string file
+        (Pprintast.string_of_structure structure);
+      close_out file
+
+  end
+
+  module Vb = struct
+    let complete = Exp.value_bindings
+  end
+(*
+  let restore = Exp.restore
+  let origin = Exp.origin
+*)
+end
+
+module Size = struct
+
+  module type Typ =
+    sig
+      type t
+      val get : t -> int
+      val set : t -> t
+      val reset : int -> t -> t
+      val comp : ?e':t -> t -> int
+    end
+
+  module Exp = struct
+    type t = expression
+
+    let get' n {pexp_attributes = attrs} =
+      List.fold_left (
+          fun n attr ->
+          try
+            let m = Attr.to_size attr in
+            m + n
+          with
+            _ -> n
+        ) n attrs
+
+    (* get : expression -> int *)
+    (* expr の size を取得 *)
+    let get expr = get' 0 expr
+
+    let set' ?(sel = false) n ({pexp_attributes = attrs} as expr) =
+      let attrs' =
+        List.map (
+            fun attr ->
+            try
+              let m = Attr.to_size attr in
+              Attr.of_size (abs m |> if sel then (-) n else (+) n)
+            with
+              _ -> attr
+          ) attrs in
+      if attrs = attrs' then
+        Ast.Exp.attr expr (Attr.of_size n)
+      else
+        {expr with pexp_attributes = attrs'}
+
+    (* Size.Exp.set と f を同時に処理する *)
+    let rec set_and f expr =
+      if Desc.Exp.leaf expr then
+        set' 1 expr
+      else
+        let expr' = Desc.Exp.map (set_and f) (f expr) in
+        let n = Desc.Exp.fold get' 1 expr' in
+        set' n expr'
+
+    let rec set expr =
+      if Desc.Exp.leaf expr then
+        set' 1 expr
+      else
+        let expr' = Desc.Exp.map set expr in
+        let n = Desc.Exp.fold get' 1 expr' in
+        set' n expr'
+
+    let reset n expr =
+      {expr with
+        pexp_attributes =
+          List.map (
+              fun attr ->
+              try
+                let _ = Attr.to_size attr in
+                Attr.of_size n
+              with
+                _ -> attr
+            ) expr.pexp_attributes}
+
+    let comp ?(e' = skeleton') e =
+      let n' = if e' = skeleton' then 1 else get e' and n = get e in
+      compare n' n
+
+  end
+
+
+  (*  let set_size = true *)
+  let set_resize = true
+
+  (* size を求める関数 *)
+  let get' n (*_, payload*) attr =
+    try
+      let m = Attr.to_size attr in
+      m + n
+    with
+      _ -> n
+
+  (* get int ->  expression -> int *)
+  let get n {pexp_attributes = attrs} =
+    List.fold_left get' n attrs
+
+
+  (* 比較関数 *)
+  (* comp1 : e の size と 1 を比較 *)
+  let comp1 e = compare (get 0 e) 1
+(*
+  (* is1 : sizeが1でtrue *)
+  let is1 e = comp1 e = 0
+
+  (* fltr1 : size が2以上 *)
+  let fltr1 e = 1 = comp1 e
+*)
+  (* fltr0 : sizeが1以上でtrue *)
+  let fltr0 e = 0 <= comp1 e
+
+  (* comp2 : e1 と e2 の、m までの距離を比較 *)
+  let comp2 m e1 e2 =
+    if comp1 e1 < 0 then 1
+    else if comp1 e2 < 0 then -1
+    else
+      let get_dist e = abs (m - get 0 e) in
+      compare (get_dist e1) (get_dist e2)
+
+  let get_one e = get 0 e
+(*
+  (* ある式のサイズをセットする *)
+  let set' ?(sel = false) n ({pexp_attributes = attrs} as expr) =
+    let attrs' =
+      List.map (
+          fun attr ->
+          try
+            let m = Attr.to_size attr in
+            Attr.of_size (abs m |> if sel then (-) n else (+) n)
+          with
+            _ -> attr
+        ) attrs in
+    if attrs = attrs' then
+      (* 追加 *)
+      (* 【旧バージョン】 *)
+      (* Exp.attr expr (mknoloc "size", Size n) *)
+      (* 【新バージョン】 *)
+      Ast.Exp.attr expr (Attr.of_size n)
+    else
+      (* 上書き *)
+      {expr with pexp_attributes = attrs'}
+
+  (* size を set する *)
+  let rec set expr =
+    if Desc.Exp.leaf expr then
+      (* 子ノードなし *)
+      set' 1 expr
+    else
+      (* 子ノードあり *)
+      let expr' = Desc.Exp.map set expr in
+      let n = Desc.Exp.fold get 1 expr' in
+      set' n expr'
+      *)
+  (* reset' : expr の size を n にする *)
+  let reset' n expr =
+    {expr with
+      pexp_attributes =
+        List.map (
+            fun attr ->
+            try
+              let _ = Attr.to_size attr in
+              Attr.of_size n
+            with
+              _ -> attr
+          ) expr.pexp_attributes}
+
+  let reset expr = reset' 0 expr
+      (*
+  let reset1 x expr =
+    reset' (get (x 0 1) expr) expr
+
+  let rec resize expr =
+
+    if Desc.Exp.leaf expr then expr
+
+    else
+      (* 未確定の子ノード *)
+      let children =
+        Desc.Exp.fold
+          (fun es e -> if fltr0 e then e :: es else es) [] expr in
+      match children with
+        [] -> reset expr
+      | first :: rest ->
+         let map f = Desc.Exp.map f expr in
+         let (n, expr') =
+           if rest = [] then
+             let e' = resize first in
+             (get_one e', map (fun e -> if first = e then e' else e))
+           else
+             let expr'' =
+               map (fun e -> if List.mem e children then resize e else e) in
+             (Desc.Exp.fold get 1 expr'', expr'') in
+         reset' n expr'
+
+  (* 確定させる *)
+  let terminated expr = set' ~sel:true 0 expr
+
+  (* terminated check *)
+  (* すべての式が terminated であれば true *)
+  let check' init expr = init && not (fltr0 expr)
+  let check expr = Desc.Exp.fold_all check' true expr
+*)
+  (* 子ノード *)
+  let children expr =
+    (* expr の半分に近いノードから昇順にソート *)
+    let children' =
+      Desc.Exp.fold (
+          fun acc exp ->
+          acc @ if fltr0 exp then [exp] else []) [] expr in
+    let comp' = comp2 ((get 2 expr) / 2) in
+
+    (* ソート *)
+    List.sort comp' children'
+
+  (*  let term_hole e = terminated (hole_of_exp e) *)
+  let reset_hole e = reset (hole_of_exp e)
+
+(*
+  let get_childNoResize expr =
+
+    (* 式exprのサイズ *)
+    let n = get_one expr in
+
+    if n = 1 then
+      (expr, Map.id, term_hole)
+
+    else
+
+    (* 比較関数 *)
+    let comp_child exp' exp =
+      if fltr0 exp && comp2 (n / 2) exp' exp >= 0 then exp else exp' in
+
+    let expr_cxt_one e' =
+      Desc.Exp.map_all (
+          fun e ->
+          if e = e' then term_hole e
+          else if Hole.check_loc e e' then e'
+          else e
+        ) expr in
+
+
+    let rec get_childNoResize' expr_cxt_expect expr' =
+      let child = Desc.Exp.fold comp_child expr' expr' in
+      if child = expr' then
+        (expr', expr_cxt_expect, expr_cxt_one)
+      else
+        let expr_cxt_expect' e' =
+          expr_cxt_expect (
+              Desc.Exp.map (
+                  fun e ->
+                  if Hole.check_loc e e'
+                  then e'
+                  else if fltr0 e then term_hole e
+                  else e) expr') in
+        get_childNoResize' expr_cxt_expect' child in
+
+    get_childNoResize' Map.id expr
+
+  let reset_hole e = reset (hole_of_exp e)
+
+  let get_childWithResize expr =
+
+    let n = get_one expr in
+
+    if Desc.Exp.leaf expr then
+      (* 子ノードなし *)
+      (expr, reset_hole, reset_hole)
+
+    else
+      let comp_child exp' exp =
+        if 0 <= comp2 (n / 2) exp' exp && fltr0 exp then exp else exp' in
+      let rec get_childWithResize' expr_cxt_expect expr' =
+        let child = Desc.Exp.fold comp_child expr' expr' in
+        if child = expr' then
+          let expr_cxt_one e' =
+            let slice =
+              Desc.Exp.map_all (
+                  fun e ->
+                  if e = e' then reset_hole e
+                  else if Hole.check_loc e e' then e' else e
+                ) expr in
+            resize slice in
+          (expr', expr_cxt_one, expr_cxt_expect)
+        else
+          let expr_cxt_expect' e' =
+            let n = get_one e' in
+            let slice = match expr'.pexp_desc with
+              | Pexp_apply (e, les) when Hole.check_loc e e' && n = 1 ->
+                 let les' =
+                   List.map (
+                       fun (ln, en) ->
+                       (ln, if fltr0 en then reset_hole e else e)
+                     ) les in
+                 {expr' with pexp_desc = Pexp_apply (e', les')} |> reset
+              | _ ->
+                 Desc.Exp.map (
+                     fun e ->
+                      if Hole.check_loc e e' then e'
+                      else if fltr0 e then reset_hole e
+                      else e
+                   ) expr' |> reset' n in
+            expr_cxt_expect slice in
+
+          get_childWithResize' expr_cxt_expect' child in
+
+      get_childWithResize' Map.id expr
+
+  let expect expr' e' =
+    Desc.Exp.map (
+        fun e ->
+        if Hole.check_loc e e' then e'
+        else if fltr0 e then reset_hole e
+        else e) expr'
+
+  let getChild _ getChild' expr_cxt_expect expr =
+
+    if Desc.Exp.leaf expr then
+      (expr, reset, reset_hole)
+
+    else
+      (* 探索とresize を同時に行う *)
+      let expr_cxt_one e =
+        let open Location in
+        let rec expr_cxt_one' e' =
+          (* 式のサイズ *)
+          let n = ref 1 in
+          let expr' =
+            Desc.Exp.map (
+                fun e'' ->
+                if e = e'' then reset_hole e''
+                else
+                  let expr'' =
+                    if e.pexp_loc = e''.pexp_loc then e
+                    else if
+                      e.pexp_loc.loc_end < e''.pexp_loc.loc_start
+                      || e''.pexp_loc.loc_end < e.pexp_loc.loc_start then e''
+                    else
+                      expr_cxt_one' e'' in
+                  n := get !n expr''; expr''
+              ) e' in
+          if !n = 1 then n := 0;
+          reset' !n expr' in
+        expr_cxt_one' expr in
+
+      getChild' expr_cxt_expect expr_cxt_one expr
+*)
+  let rec getChildSet' fltr3 fltr2 fltr' (expr', abst') =
+
+    let return () =
+      (expr', fun sel expr_cxt e -> expr_cxt (abst' sel e)) in
+
+    if fltr' expr' then
+      return ()
+    else
+      let comp e' e =
+        if fltr3 expr' e' e then
+          if fltr0 e then e else e'
+        else
+          if fltr2 e' e then e else e' in
+      let child = Desc.Exp.fold comp expr' expr' in
+      if child = expr' then
+        return ()
+      else
+        match expr'.pexp_desc with
+
+        | Pexp_construct (lid, Some ({pexp_desc = Pexp_tuple es} as en)) ->
+           let child'' = List.fold_left comp skeleton' es in
+           if child'' = skeleton' then
+             return ()
+           else
+             let abst sel e =
+               let m = ref 1 in
+               let set' e' = m := get !m e'; e' in
+
+               let expr'' =
+                 let sr sel' e' = if sel' then set' e' else reset_hole e' in
+                 let en' =
+                   Desc.Exp.map (
+                       fun e' ->
+                       match Desc.Exp.comp e e' with
+                       | 0 -> set' e
+                       | 1 -> sr sel e'
+                       | _ ->
+                          if Desc.Exp.comp ~mode:true e e' = 0 then set' e'
+                          else sr (not sel) e'
+                     ) en in
+
+                 if !m = 1 then m := 0;
+                 {expr' with
+                   pexp_desc =
+                     Pexp_construct (lid, Some (reset' !m en'))} in
+               if 0 < !m then m := !m + 1;
+               abst' sel (reset' !m expr'') in
+             getChildSet' fltr3 fltr2 fltr' (child'', abst)
+ 
+        | _ ->
+           (* construct の場合分けを追加する *)
+           let abst sel e =
+             let m = ref 1 in
+             let set' e' = m := get !m e'; e' in
+             let sr sel' e' = if sel' then set' e' else reset_hole e' in
+             let expr'' =
+               Desc.Exp.map (
+                   fun e' ->
+                   match Desc.Exp.comp e e' with
+                   | 1 -> sr sel e'
+                   | 0 -> set' e
+                   | _ ->
+                      if Desc.Exp.comp ~mode:true e e' = 0 then set' e'
+                      else sr (not sel) e'
+                 ) expr' in
+             if !m = 1 then m := 0;
+             abst' sel (reset' !m expr'') in
+           getChildSet' fltr3 fltr2 fltr' (child, abst)
+
+  let getChildSet expr =
+
+    let n = get_one expr / 2 in
+    let fltr3 expr' e' _ = expr' = e'
+    and fltr2 e' e = get_one e' < get_one e
+    and fltr' expr' = get_one expr' < n in
+    getChildSet' fltr3 fltr2 fltr' (expr, fun _ e -> e)
+
+  let getChildSet2 expr =
+    let n = get_one expr / 2 in
+    let fltr3 _ e' e = 0 <= comp2 n e' e
+    and fltr2 _ _ = false
+    and fltr' _ = false in
+    getChildSet' fltr3 fltr2 fltr' (expr, fun _ e -> e)
+(*
+  (* resize あり *)
+  let getChild2 expr =
+
+    let n = get_one expr in
+    let comp_child exp' exp =
+      if 0 <= comp2 (n / 2) exp' exp && fltr0 exp then exp else exp' in
+
+    let rec getChild' expr_cxt_expect expr_cxt_one expr' =
+      
+      let child = Desc.Exp.fold comp_child expr' expr' in
+
+      if child = expr' then
+        (expr', expr_cxt_expect, expr_cxt_one)
+
+      else
+        match expr'.pexp_desc with
+
+        | Pexp_construct (lid, Some {pexp_desc = Pexp_tuple es}) ->
+
+           let child' =
+             List.fold_left comp_child (reset child) es in
+           if child' = reset child then
+             (expr', expr_cxt_expect, expr_cxt_one)
+
+           else
+             let expr_cxt_expect' e' =
+               {expr' with
+                 pexp_desc =
+                   Pexp_construct (lid, Some (expect child e'))
+               } |> expr_cxt_expect |> reset' (get_one e') in
+             getChild' expr_cxt_expect' expr_cxt_one child'
+
+        | _ ->
+           let expr_cxt_expect' e' =
+             expect expr' e' |> expr_cxt_expect |> reset' (get_one e') in
+           getChild' expr_cxt_expect' expr_cxt_one child in
+
+    getChild true getChild' resize expr
+
+  let getChild3 expr =
+
+    let n = get_one expr in
+
+    let rec resize expr =
+
+      if Desc.Exp.leaf expr || get 0 expr = 0 then expr
+
+      else if fltr0 expr then
+        let expr' = Desc.Exp.map resize expr in
+        reset' (Desc.Exp.fold get 1 expr') expr'
+
+      else
+        let children =
+          Desc.Exp.fold (
+              fun acc e ->
+              if hole_of_exp e = e then acc else e :: acc
+            ) [] expr in
+
+        match expr.pexp_desc with
+
+        | Pexp_apply (e, les) when children = [] ->
+
+           reset_hole
+             {expr with
+               pexp_desc =
+                 Pexp_apply
+                   (Hole.to_exp e,
+                    List.map (
+                        fun (l', e') -> (l', Hole.to_exp e')
+                      ) les)}
+
+         | _ ->
+            reset expr in
+
+    let expect' expr_cxt_expect expr' e' =
+      expect expr' e' |> expr_cxt_expect in
+
+    let comp_child exp' exp =
+      if 0 <= comp2 (n / 2) exp' exp && fltr0 exp then exp else exp'
+
+    and expr_cxt_one e' =
+      let slice =
+        Desc.Exp.map_all (
+            fun e ->
+            if e = e' then reset_hole e
+            else if Hole.check_loc e e' then e' else e
+          ) expr in
+      resize slice in
+
+    let rec getChild' expr_cxt_expect expr' =
+
+      let child = Desc.Exp.fold comp_child expr' expr' in
+
+      if child = expr' then
+        (expr', expr_cxt_expect, expr_cxt_one)
+
+      else
+        match expr'.pexp_desc with
+
+        | Pexp_fun _ when (
+          match child.pexp_desc with
+          | Pexp_fun _ -> true
+          | _ -> false) ->
+           (* fun文 *)
+           (child, expect' expr_cxt_expect expr', expr_cxt_one)
+
+        | Pexp_let (_, vs, _) when (
+          match child.pexp_desc with
+          | Pexp_fun _ -> List.exists (fun {pvb_expr} -> pvb_expr = child) vs
+          | _ -> false) ->
+           (* let文 *)
+           (child, expect' expr_cxt_expect expr', expr_cxt_one)
+
+        | Pexp_construct (lid, Some {pexp_desc = Pexp_tuple es}) ->
+           (* construct *)
+
+           let child' =
+             List.fold_left comp_child child es in
+           if child' = child then
+             (expr', expr_cxt_expect, expr_cxt_one)
+           else
+             let expr_cxt_expect' e' =
+               {expr' with
+                 pexp_desc =
+                   Pexp_construct (lid, Some (expect child e'))
+               } |> expr_cxt_expect in
+             getChild' expr_cxt_expect' child'
+
+        | _ ->
+           getChild' (expect' expr_cxt_expect expr') child in
+
+    getChild' resize expr
+
+
+  (* get_child : expression -> expression * (expression -> expression) *)
+  (* 式 expr のサイズ n の半分に最も近い子ノードを探す *)
+  let get_child =
+    if set_resize then get_childWithResize else get_childNoResize
+
+
+  (* size を与える関数 *)
+  (* set_one : ?n:int -> expression -> expression *)
+  let set_one ?(n = 1) slice =
+    if set_size then
+      (* Exp.attr slice (mknoloc "size", Size n) *)
+      let open Ast in
+      Exp.attr slice (mknoloc "size", PPat (Pat.constant (Const.int n), None))
+    else slice
+
+  (* set_all : ('a list -> 'a list -> expression ->
+                 ('a list -> expression -> expression_desc) -> expression)
+                -> ('a list -> expression -> expression_desc)
+                -> ('a -> expression) -> 'a list -> expression
+                -> expression *)
+  let set_all fp fd fx acc s_all =
+    if set_size then
+      let n = List.fold_left
+                (fun n x -> get n (fx x))
+                (get 1 s_all) acc in
+      set_one ~n (fp acc [] s_all fd)
+    else (fp acc [] s_all fd)
+
+  let compare_size m e1 e2 =
+    compare (abs (m - get 0 e1)) (abs (m - get 0 e2))
+
+  (* 親ノードのサイズを取得して、子ノードの式を半分に近い順に並び替える *)
+  let node_sort expr =
+
+    let m = (get 2 expr) / 2 in (* 親のサイズの半分 *)
+    let sort_size es = List.stable_sort (compare_size m) es in
+
+    match expr.pexp_desc with
+    | Pexp_ident _ | Pexp_constant _ -> sort_size [expr]
+
+    | Pexp_let (_, vs, e) ->
+       sort_size (e :: List.map (fun v -> v.pvb_expr) vs)
+    | Pexp_function (cs) ->
+       sort_size (List.map (fun c -> c.pc_rhs) cs)
+    | Pexp_fun (_, eop, _, e) ->
+       sort_size (match eop with None -> [e] | Some e' ->[e; e'])
+    | Pexp_apply (e, les) ->
+       sort_size (e :: List.map snd les)
+    | Pexp_match (e, cs) ->
+       sort_size (e :: List.map (fun c -> c.pc_rhs) cs)
+    | Pexp_try (e, cs) ->
+       sort_size (e :: List.map (fun c -> c.pc_rhs) cs)
+    | Pexp_tuple (es) -> sort_size es
+    | Pexp_construct (_, Some {pexp_desc = Pexp_tuple es}) -> sort_size es
+    | Pexp_construct (_, Some e) -> [e]
+    | Pexp_variant (_, Some e) -> [e]
+    | Pexp_record (les, eop) ->
+       sort_size ((List.map snd les)
+                  @ match eop with None -> [] | Some e -> [e])
+    | Pexp_field (e, _) -> [e]
+    | Pexp_setfield (e1, _, e2) -> sort_size [e1; e2]
+    | Pexp_array (es) -> sort_size es
+    | Pexp_ifthenelse (e1, e2, eop) ->
+       sort_size (e1 :: e2
+                  :: match eop with None -> [] | Some e3 -> [e3])
+    | Pexp_sequence (e1, e2) -> sort_size [e1; e2]
+    | Pexp_constraint (e, _) -> [e]
+    | Pexp_send (e, _) -> [e] 
+    | _ -> []
+*)
+end
+
+(*
+module Abst = struct
+  (* 抽象化 *)
+  module type Typ =
+    sig
+      type t
+      val hole : t -> t
+    end
+
+  module Exp = struct
+    type t = expression
+    let hole = Hole.of_exp
+  end
+
+(*
+
+  let rec slice_of_exp' expr =
+    let open Location in
+    let (filename', start_line', start_char') =
+      get_pos_info expr.pexp_loc.loc_start
+    and (_, end_line', end_char') =
+      get_pos_info expr.pexp_loc.loc_end  in
+
+    Format.fprintf ppf "@[(%s, %d, %d, %d, %d) <- %a@]@."
+      filename' start_line' start_char' end_line' end_char'
+      Pprintast.expression expr;
+
+    (* 該当する情報を探す *)
+    let {ghost = ghost'} =
+      List.find (fun {start_line; start_char;
+                      end_line; end_char;
+                      filename; ghost} ->
+          start_line = start_line'
+          && start_char = start_char'
+          && end_line = end_line'
+          && end_char = end_char'
+          && filename = filename'
+          && expr.pexp_loc.loc_ghost = (ghost mod 2 = 1)) !log.slice in
+    
+    match expr.pexp_desc with
+    | Pexp_construct (lid, Some ({pexp_desc = Pexp_tuple es} as e))
+         when e.pexp_loc.loc_ghost ->
+       
+       if 1 < ghost' then
+         let les =
+           Format.fprintf ppf "@[make dummy : %a@]@."
+             Pprintast.expression expr;
+           List.map (fun e -> (Nolabel, slice_of_exp e)) es in
+         {expr with
+           pexp_desc =
+             Pexp_apply (hole_of_exp expr, les)}
+       else
+         let e' =
+           Format.fprintf ppf "@[slice : %a@]@."
+             Pprintast.expression expr;
+           {e with pexp_desc =
+                     Pexp_tuple (List.map slice_of_exp es)} in
+         {expr with
+           pexp_desc =
+             Pexp_construct (lid, Some e')}
+         
+    | _ ->
+       Format.fprintf ppf "@[slice : %a@]@."
+         Pprintast.expression expr;
+       (* そのまま *)
+       Desc.Exp.map slice_of_exp expr
+
+  and slice_of_exp expr =
+    try
+      slice_of_exp' expr
+    with
+      Not_found ->
+      Format.fprintf ppf "@[hole : %a@]@."
+        Pprintast.expression expr;
+      hole_of_exp expr
+
+*)
+
+  let hole_of_x map1 x = map1 hole_of_exp Map.id x
+
+  (* set_one : slice -> slice list *)
+  (* 部分的に抽象化 *)
+  let set_one exp =
+
+    let sn n en sel = if sel = n then hole_of_exp en else en in
+
+    (* リストが構文中にない場合 *)
+    (* e が □ でなければ exp の desc を置き換えた要素を abst に追加 *)
+    let set_some e ?(abst = []) desc =
+      
+      if e = hole_of_exp e then abst
+      else abst @ [Desc.expression desc exp] in
+
+    (* リストが構文中にある場合 *)
+    (* 再帰で要素をひとつひとつ抽象化 *)
+    let set_one' ?(es = []) ?(e = skeleton') map1 fd xs =
+     
+      let to_exp fd e xs = Desc.to_exp fd xs e exp in
+      let fde acc = List.map (to_exp fd e) (List.rev acc) in
+      let dummy_apply es =
+        Desc.e_apply (List.map (fun e -> (Nolabel, e)) es) skeleton' in
+      let rec set_some' acc forward backword = match backword with
+       | [] -> fde acc
+       | tar :: backword' ->
+          (* チェック済 *)
+          let forward' = forward @ [tar] in
+          (* tar を□で置き換えることを試みる *)
+          let dummy = hole_of_x map1  tar in
+          let acc' =
+            if tar = dummy then acc
+            else (forward @ (dummy :: backword')) :: acc in
+          set_some' acc' forward' backword' in
+
+      set_some
+        e ~abst:(set_some' [] [] xs)
+        (if es = [] then fd xs (hole_of_exp e) else dummy_apply es) in
+    
+    (* abst_one のメイン部分 *)
+    match exp.pexp_desc with
+
+    | Pexp_let (flg, vs, e) ->
+       (* let 文 *)
+       (* let x = S1 in S2 => [let x = □ in S2; let x = S1 in □] *)
+       set_one' ~e Map.v1 (Desc.e_let flg) vs
+
+    | Pexp_apply (e, les) ->
+       (* 関数適用 *)
+       (* @ S1 .. Sn => [=@ S1..Sn; @ □..Sn; ...; @ S1..□]  *)
+       set_one' ~e Map.le Desc.e_apply les
+
+    | Pexp_function (cs) ->
+       (* function *)
+       (* function P1 -> S1 | ... | Pn -> Sn =>
+       [function P1 -> □ | ... ; function ... | Pn -> □] *)
+       set_one' Map.c1 Desc.e_function cs
+
+    | Pexp_fun (l, eop, p, e) ->
+       (* fun *)
+       (* λx.S => λx.□ *)
+      set_one' ~e Map.e1 (fun _ e -> Desc.e_fun l eop p e) []
+
+    | Pexp_match (e, cs) ->
+       (* match 文 *)
+       (* パターンする式と結果のみを対象にしている *)
+       (* match S0 with P1 -> S1 | ... | Pn -> Sn =>
+       [match □ with ...; ... with P1 -> □ | ...; ... with ... | Pn -> □] *)
+       set_one' ~e Map.c1 Desc.e_match cs
+                
+    | Pexp_try (e, cs) ->
+       (* try 文 *)
+       (* パターンする式と結果のみを対象にしている *)
+       (* try S0 with P1 -> S1 | ... | Pn -> Sn =>
+       [try □ with ...; ... with P1 -> □ | ...; ... with ... | Pn -> □] *)
+       set_one' ~e Map.c1 Desc.e_try cs
+                
+    | Pexp_tuple (es) ->
+       (* tuple *)
+       (* (S1, ... Sn) => [(□, ... Sn); ... ; (S1, ..., □); @= S1 ,..., Sn] *)
+       set_one' ~es Map.e1 Desc.e_tuple es
+                
+    | Pexp_construct (lid, Some (e)) ->
+       (* コンストラクタ *)
+       (* 引数が単数か複数かで分岐 *)
+       let es = match e.pexp_desc with
+           Pexp_tuple es -> es
+         | _ -> [] in
+       set_one' ~es ~e Map.e1 (Desc.e_construct lid) es
+                
+    | Pexp_record (les, eop) ->
+       (* record *)
+       (* 各フィールドを対象にしている *)
+       set_one'
+         ~e:(match eop with None -> skeleton' | Some e -> e)
+         Map.le Desc.e_record les
+         
+    | Pexp_field (e, lid) ->
+       set_one' ~e Map.e1 (Desc.e_field lid) []
+
+    | Pexp_setfield (e1, lid, e2) ->
+       let fd sel = Desc.e_setfield lid (sn 1 e1 sel) (sn 2 e2 sel) in
+       set_some ~abst:(set_some e1 (fd 1)) e2 (fd 2)
+
+    | Pexp_array (es) ->
+       (* array *)
+       set_one' ~es Map.e1 Desc.e_array es
+                
+    | Pexp_ifthenelse (e1, e2, eop) ->
+       (* ifthenelse *)
+       (* [if □ then e2 else e3;
+          if e1 then □ else e3;
+          if e1 then e2 else □] *)
+      let e3 = match eop with
+          Some e -> e | None -> skeleton' in
+      let fd sel = Desc.e_ifthenelse
+                     (sn 1 e1 sel) (sn 2 e2 sel)
+                     (if eop <> None && sel = 3
+                      then Some (hole_of_exp e3) else eop) in
+      set_some
+        ~abst:(set_some ~abst:(set_some e1 (fd 1)) e2 (fd 2)) e3 (fd 3)
+
+   | Pexp_sequence (e1, e2) ->
+      let fd sel = Desc.e_sequence (sn 1 e1 sel) (sn 2 e2 sel) in
+      set_some ~abst:(set_some e1 (fd 1)) e2 (fd 2)
+
+   | Pexp_constraint (e, c) ->
+      (* constraint *)
+      (* [(□ : c)] *)
+      set_one' ~e Map.e1 (Desc.e_constraint c) []
+
+   | _ -> if exp = hole_of_exp exp then [] else [hole_of_exp exp]
+
+  (* 部分式を全て抽象化 *)
+  let set_all exp =
+
+    let set_all' ?(e = skeleton') map1 fd xs =
+      Desc.to_exp fd (List.map (hole_of_x map1) xs) (hole_of_exp e) exp in
+    let set_all'' desc = Desc.expression desc exp in 
+
+    match exp.pexp_desc with
+
+    | Pexp_let (flg, vs, e) ->
+       set_all' ~e Map.v1 (Desc.e_let flg) vs
+
+    | Pexp_apply (e, les) ->
+       set_all' ~e Map.le Desc.e_apply les
+
+    | Pexp_function (cs) ->
+       set_all' Map.c1 Desc.e_function cs
+
+    | Pexp_fun (l, eop, p, e) ->
+       set_all'' (Desc.e_fun l eop p (hole_of_exp e))
+
+    | Pexp_match (e, cs) ->
+       set_all' ~e Map.c1 Desc.e_match cs
+
+    | Pexp_try (e, cs) ->
+       set_all' ~e Map.c1 Desc.e_try cs
+
+    | Pexp_tuple (es) ->
+       set_all' Map.e1 Desc.e_tuple es
+
+    | Pexp_construct (lid, Some e) ->
+       let es = match e.pexp_desc with
+           Pexp_tuple es -> es | _ -> [] in
+       set_all' ~e Map.e1 (Desc.e_construct lid) es
+
+    | Pexp_record (les, eop) ->
+       set_all' ~e:(match eop with None -> skeleton' | Some e -> e)
+                Map.le Desc.e_record les
+
+    | Pexp_field (e, lid) ->
+       set_all' ~e Map.e1 (Desc.e_field lid) []
+
+    | Pexp_array (es) ->
+       set_all' Map.e1 Desc.e_array es
+
+    | Pexp_ifthenelse (e1, e2, eop) ->
+       set_all'' (
+           Desc.e_ifthenelse (hole_of_exp e1)
+                             (hole_of_exp e2)
+                             (match eop with Some e3 -> Some (hole_of_exp e3)
+                                           | None -> None))
+
+    | Pexp_sequence (e1, e2) ->
+       set_all'' (
+           Desc.e_sequence (hole_of_exp e1)
+                           (hole_of_exp e2))
+
+    | Pexp_constraint (e, ct) ->
+       set_all' ~e Map.e1 (Desc.e_constraint ct) []
+
+    | d -> set_all'' d
+
+  (* Abst.one, Abst.all *)
+
+  let one expr =
+    (* 既に確定している場合は抽象化しない *)
+    if Size.fltr0 expr then Size.terminated (hole_of_exp expr) else expr
+
+  let all expr = Size.terminated (Desc.Exp.map one expr)
+
+  let set slice expr =
+    if Hole.check_loc slice expr then slice else expr
+
+  let get' sel slice expr =
+
+    if Hole.check_loc slice expr = sel then
+      (* sel = true : loc = true *)
+      (* sel = false : loc = false *)
+      (* expr を抽象化 *)
+      one expr
+    else
+      set slice expr
+
+  (* Abst.get *)
+  let get expr sel slice =
+    (if Hole.check_skeleton slice then
+       if sel then Size.terminated else all
+     else
+       Desc.Exp.map (
+           (if Size.comp1 slice < 0 then set else get' sel)
+             slice)) expr
+
+
+  let exp e =
+    if Size.fltr0 e then
+      (hole_of_exp e)
+      |> (if Size.set_resize then Size.reset else Size.terminated)
+    else e;
+
+end
+*)
+
+(* デバッグ用 *)
+module Meta = struct
+  (* 型デバッガが訪れるノード数カウント用の変数 (debug_main.ml) *)
+  open Ast
+  let visible = false
+
+  let clean' name expr =
+    {expr with
+      pexp_attributes =
+        if name = "all" then [] (* 全部消す *)
+        else
+          List.filter (
+              fun {attr_name = {txt = name'}} ->
+              name <> name'
+            ) expr.pexp_attributes}
+
+  let clean name expr =
+    Desc.Exp.map_all (clean' name) expr
+
+
+  let rec attribute ppf (kind, attrs) = match attrs with
+      [] -> ()
+    | {attr_name = {txt = s};
+       attr_payload = PPat ({ppat_desc = Ppat_constant (Pconst_integer (n, None))}, None)} :: _
+         when s = kind ->
+       (* 【新バージョン】 *)
+       Format.fprintf ppf "(size : %s)" n
+
+    | {attr_name = {txt = s};
+       attr_payload = PStr [{pstr_desc = Pstr_eval (e, _)}]} :: _
+         when s = kind ->
+       (* 式のホール □ *)
+       if visible then Format.fprintf ppf "【%a】" Pprintast.expression e
+       else Format.fprintf ppf "□"
+    | {attr_name = {txt = s}; attr_payload = PPat (p, _)} :: _ when s = kind ->
+       (* パターンのホール ■ *)
+       if visible then Format.fprintf ppf "【%a】" Pprintast.pattern p
+       else Format.fprintf ppf "■"
+(*  | {attr_name = {txt = s}; attr_payload = Size n} :: _ when s = kind ->
+       (* サイズ *)
+       Format.fprintf ppf "(size : %d)" n *)
+    | _ :: rest-> attribute ppf (kind, rest)
+
+  (* 表示 *)
+  (* expression -> unit *)
+  and expression ppf ({pexp_desc = d; pexp_attributes = attrs} as exp) =
+    match d with
+    | Pexp_let (flg, vs, e) -> pexp_let ppf (flg, vs, Some (e))
+    | Pexp_fun (_, _, p, e) -> pexp_fun ppf (p, e)
+    | Pexp_apply (e, les) -> pexp_apply ppf (e, les)
+    | Pexp_match (e, cs) -> pexp_match ppf (e, cs)
+    | Pexp_try (e, cs) -> pexp_try ppf (e, cs)
+    | Pexp_tuple es -> pexp_tuple ppf es
+    | Pexp_construct (lid, Some (e)) -> pexp_construct ppf (lid, e)
+    | Pexp_record (les, _) -> pexp_record ppf les
+    | Pexp_array (es) -> pexp_array ppf es
+    | Pexp_ifthenelse (e1, e2, eop) -> pexp_ifthenelse ppf (e1, e2, eop)
+    | Pexp_sequence (e1, e2) -> pexp_sequence ppf (e1, e2)
+    | _ -> if exp = hole_of_exp exp then attribute ppf ("exp", attrs)
+           else Pprintast.expression ppf (Exp.mk d)
+
+  and value_binding ppf {pvb_pat = pn; pvb_expr = en} = match en.pexp_desc with
+    | Pexp_fun (_, _, p, e) ->
+       Format.fprintf ppf "%a %a"
+                      pattern pn
+                      value_binding (Vb.mk p e)
+    | _ ->
+       Format.fprintf ppf "%a = %a"
+                      pattern pn
+                      expression en
+
+
+  and cases ppf cs =
+    let case ppf {pc_lhs = pn; pc_guard = gn; pc_rhs = en} = match gn with
+      | None ->
+         Format.fprintf ppf "| %a -> %a"
+                        pattern pn
+                        expression en
+      | Some (e) ->
+         Format.fprintf ppf "| %a when %a -> %a"
+                        pattern pn
+                        expression e
+                        expression en in
+    List.iter (fun c -> Format.fprintf ppf "%a" case c) cs
+
+  and field_and_exp ppf (l, e) =
+    Format.fprintf ppf "%s = %a; "
+                   (Longident.last l.txt)
+                   expression e
+
+  and es_tl ppf (s, tl) =
+    List.iter (
+        fun en ->
+        Format.fprintf ppf "%s %a" s
+                       expression en) tl
+
+  and pexp_let ppf (flg, vs, eop) = match vs with
+      [] -> assert false
+    | first :: rest ->
+       let vb_hd ppf hd =
+         Format.fprintf ppf (if flg = Recursive
+                             then "let rec %a"
+                             else "let %a") value_binding hd in
+       let vb_tl ppf tl =
+         List.iter (
+             fun vn ->
+             Format.fprintf ppf " and %a" value_binding vn) tl in
+       match eop with
+       | None ->
+          Format.fprintf ppf "%a %a"
+                         vb_hd first
+                         vb_tl rest
+       | Some (e) ->
+          Format.fprintf ppf "%a %a in %a"
+                         vb_hd first
+                         vb_tl rest
+                         expression e
+
+  and pexp_fun ppf (p, e) =
+    Format.fprintf ppf "(fun %a -> %a)"
+                   pattern p
+                   expression e
+
+  and pexp_apply ppf (e, les) =
+    let args ppf les =
+      List.iter (fun (_, e) -> Format.fprintf ppf " %a" expression e) les in
+    Format.fprintf ppf "(%a%a)"
+                   expression e
+                   args les
+
+  and pexp_match ppf (e, cs) =
+    Format.fprintf ppf "match %a with %a"
+                   expression e
+                   cases cs
+
+  and pexp_try ppf (e, cs) =
+    Format.fprintf ppf "try %a with %a"
+                   expression e
+                   cases cs
+
+  and pexp_tuple ppf es = match es with
+      [] -> assert false
+    | first :: rest ->
+       Format.fprintf ppf "(%a%a)"
+                      expression first
+                      es_tl (",", rest)
+
+  and pexp_construct ppf (lid, e) = (* 要素ありのみ *)
+    Format.fprintf ppf "(%s %a)"
+                   (Longident.last lid.txt)
+                   expression e
+
+  and pexp_record ppf les =
+    Format.fprintf ppf "{%a}"
+                   (fun ppf les ->
+                     List.iter (field_and_exp ppf) les) les
+
+  and pexp_array ppf es = match es with
+      [] -> Format.fprintf ppf "[||]"
+    | first :: rest ->
+       Format.fprintf ppf "[|%a%a|]"
+                      expression first
+                      es_tl (";", rest)
+
+  and pexp_ifthenelse ppf (e1, e2, eop) = match eop with
+    | None ->
+       Format.fprintf ppf "@if %a then %a"
+                      expression e1
+                      expression e2
+    | Some (e3) ->
+       Format.fprintf ppf "if %a then %a else %a"
+                      expression e1
+                      expression e2
+                      expression e3
+
+  and pexp_sequence ppf (e1, e2) =
+    Format.fprintf ppf "(%a; %a)"
+                   expression e1
+                   expression e2
+    
+
+  and pattern ppf ({ppat_desc = d; ppat_attributes = attrs} as pat) =
+    match d with
+    | Ppat_tuple ps -> ppat_tuple ppf ps
+    | Ppat_construct (lid, Some (p)) -> ppat_construct ppf (lid, p)
+    | Ppat_record (lps, _) -> ppat_record ppf lps
+    | _ -> if pat = hole_of_pat pat then attribute ppf ("pat", attrs)
+           else Pprintast.pattern ppf pat
+
+  and ppat_tuple ppf ps = match ps with
+      [] -> assert false
+    | first :: rest ->
+       Format.fprintf
+         ppf "(%a%a)"
+         pattern first
+         (fun ppf ps ->
+           List.iter (Format.fprintf ppf ", %a" pattern) ps) rest
+
+  and ppat_construct ppf (lid, p) = (* 要素ありのみ *)
+    Format.fprintf ppf "(%s %a)"
+                   (Longident.last lid.txt)
+                   pattern p
+
+  and ppat_record ppf lps =
+    Format.fprintf ppf "{%a}"
+                   (fun ppf lps ->
+                     List.iter (field_and_pat ppf) lps) lps
+
+  and field_and_pat ppf (l, p) =
+    Format.fprintf ppf "%s = %a; "
+                   (Longident.last l.txt) pattern p
+
+  let rec structure ppf str = match str with
+    | [] -> ()
+    | ({pstr_desc = d} as first) :: rest ->
+       (* first の表示 *)
+       if first <> hole_str then
+         match d with
+         | Pstr_eval (e, _) ->
+            Format.fprintf ppf "@[%a@]@." expression e
+         | Pstr_value (flg, vs) ->
+            Format.fprintf ppf "@[%a@]@." pexp_let (flg, vs, None)
+         | _ ->
+            Format.fprintf ppf "@[%a@]@." Pprintast.structure [first]
+       else Format.fprintf ppf "@[(The mark '□' is a hole expression.)@]@.";
+       (* rest について再帰 *)
+       Format.fprintf ppf "@[%a@]@." structure rest
+
+  (* デバッグ用 expression の print *)
+  let print_deb_exp ppf exp =
+    Format.fprintf ppf "%a %a"
+                   expression exp
+                   attribute ("size", exp.pexp_attributes)
+  let print_deb_strs ppf strs = Format.fprintf ppf "%a"structure strs
+
+end
+
+(* 抽象：変数 *)
+let skeleton = Hole.dummy_assertfalse ()
+let wildcard = Hole.dummy_any ()
+let dummy_int0 = Hole.dummy_int0 ()
+let dummy_fun = Hole.dummy_fun ()
+(* 抽象化：関数 *)
+let dummy_assertfalse exp = Hole.expression exp
+let dummy_any pat = Hole.pattern pat
+
+(* デバッグ用：変数 *)
+(* スライスの切り替え *)
+let on_slice = on_exp_slice
+let on_pat_slice = on_pat_slice
+(* デバッグ用：関数 *)
+let print_deb_exp ppf exp = Meta.print_deb_exp ppf exp
+let print_deb_strs ppf strs = Meta.print_deb_strs ppf strs
+
+(* ---------------------------------------------------------- *)
+(* 構文の生成 *)
+
+(* 元の構文の desc を置き換える *)
+let desc_to_exp = Desc.expression
+let desc_to_pat = Desc.pattern
+
+(* ---------------------------------------------------------- *)
+
+
+(*
+module Library =
+  struct
+
+    module Locations = struct
+      module type Typ =
+        sig
+          type s
+          val internal : s -> s -> bool
+          val pos_start : s -> string * (int * int)
+          val pos_end : s -> string * (int * int)
+          val pos_ghost : s -> bool
+          val pos_all : s -> (string * ((int * int) * (int * int))) * bool
+        end
+
+      open Location
+
+      let internal to_loc root node =
+        let {loc_start = root_s; loc_end = root_e} = to_loc root
+        and {loc_start = node_s; loc_end = node_e} = to_loc node in
+
+        root_s <= node_s && node_e <= root_e
+
+      let pos_start to_loc a =
+        let loc = to_loc a in
+        let (filename, line, char) =
+          get_pos_info loc.loc_start in
+        (filename, (line, char))
+
+      let pos_end to_loc a =
+        let loc = to_loc a in
+        let (filename, line, char) =
+          get_pos_info loc.loc_end in
+        (filename, (line, char))
+
+      let pos_ghost to_loc a =
+        let loc = to_loc a in
+        loc.loc_ghost
+
+      let pos_all to_loc a =
+        let (filename, s_pair) = pos_start to_loc a
+        and (filename', e_pair) = pos_end to_loc a in
+
+        (* ファイル名は同じになる *)
+        assert (filename = filename');
+        ((filename, (s_pair, e_pair)), pos_ghost to_loc a)
+
+    end
+
+    module type Abst_t =
+      sig
+        type t
+        val skeleton : t
+        val terminate : t -> t
+
+        val of_desc : t -> t
+        val of_attr : t -> t
+        val to_loc : t -> Location.t
+      end
+
+    module type Modules =
+      sig
+        include Locations.Typ
+
+        val print : bool -> Format.formatter -> s -> unit
+
+        module Desc : Desc.Typ with type t = s
+
+
+        module Hole : sig
+          include Abst_t with type t = s
+          val root : s -> s
+          val node : s -> s
+        end
+
+      end
+
+    type 'a abst_t = (module Abst_t with type t = 'a)
+    type 'a desc_t = (module Desc.Typ with type t = 'a)
+
+    let make (type a) print (abst : a abst_t) (desc : a desc_t) =
+      let (module A) = abst in
+      let (module D) = desc in
+
+      (module
+         struct
+           type s = a
+
+           let print = print
+           let internal root node =
+             Locations.internal A.to_loc root node
+           let pos_start a = Locations.pos_start A.to_loc a
+           let pos_end a = Locations.pos_end A.to_loc a
+           let pos_ghost a = Locations.pos_ghost A.to_loc a
+           let pos_all a = Locations.pos_all A.to_loc a
+
+           module Desc = D
+           module Hole = struct
+             include A
+             let root e = of_desc e
+             let node e = of_attr (D.map of_desc e)
+           end
+         end : Modules with type s = a)
+
+    let expression =
+      make
+        (fun debug ->
+          if debug then
+            print_deb_exp
+          else
+            Pprintast.expression)
+        (module
+           struct
+             type t = expression
+             let skeleton = skeleton
+             let terminate e =
+               let attr =
+                 ({txt = "term"; loc = e.pexp_loc}, PPat (wildcard, None)) in
+               Exp.attr e attr
+
+             let of_desc e = hole_of_exp e
+             let of_attr e = {e with pexp_attributes = []}
+             let to_loc e = e.pexp_loc
+           end)
+        (module Desc.Exp)
+
+  end
+*)
+module Data = struct
+
+  let is_toplevel = Array.length Sys.argv < 2
+
+  let log_path =
+    try
+      Sys.getenv "DEBUGGER_LOG_PATH"
+    with
+      Not_found -> "."
+  let express_mode =
+    try
+      int_of_string (Sys.getenv "DEBUGGER_EXPRESS_MODE")
+    with
+      _ -> -1
+
+  let makeOpenOut path =
+    open_out_gen [Open_append; Open_creat] 420 path
+
+  module Loc = struct
+    open Location
+
+    type t = {filename : string;
+              s_line : int; s_char : int;
+              e_line : int; e_char : int; }
+
+    let to_filename name =
+      try
+        assert (name <> "//toplevel//" && log_path <> ".");
+        let ld_len = String.length log_path + 1 in
+        let fn_len = String.length name in
+
+        Format.sprintf "%s"
+          (String.sub name ld_len (fn_len - ld_len))
+      with
+        _ -> name
+
+    let of_location loc =
+      let (filename, s_line, s_char) = get_pos_info loc.loc_start
+      and (filename', e_line, e_char) = get_pos_info loc.loc_end in
+      assert (filename = filename');
+      {filename; s_line; s_char; e_line; e_char}
+
+    let flat_string loc =
+      (* filename,
+         loc_start.line, loc_start.char,
+         loc_end.start, loc_end.char *)
+      let (filename, s_line, s_char) = get_pos_info loc.loc_start
+      and (filename', e_line, e_char) = get_pos_info loc.loc_end in
+      assert (filename = filename');
+
+      Format.sprintf "%s,%d,%d,%d,%d"
+        (to_filename filename) s_line s_char e_line e_char
+
+    let dual_string loc1 loc2 =
+      let str1 = of_location loc1 and str2 = of_location loc2 in
+      assert (str1.filename = str2.filename);
+      Format.sprintf "%s,%s"
+        (flat_string loc1) (flat_string loc2)
+
+    let is_ghost loc = loc.loc_ghost
+
+    let printJSON ppf loc =
+      let open Location in
+      let (s_file, s_line, s_char) =
+        get_pos_info loc.loc_start
+      and (e_file, e_line, e_char) =
+        get_pos_info loc.loc_end in
+      Format.fprintf ppf
+        "{\"s\": {\"file\":\"%s\", \"line\":%d, \"char\":%d},\"e\": {\"file\":\"%s\", \"line\":%d, \"char\":%d}}"
+        (to_filename s_file) s_line s_char
+        (to_filename e_file) e_line e_char
+
+    let read line =
+
+      let n = String.index_from line 0 ',' in
+
+      let filename =
+        match String.sub line 0 n with
+        filename' -> 
+          assert (filename' <> "//toplevel//");
+          log_path ^ "/" ^ filename' in
+
+      let line = String.sub line (n + 1) (String.length line - n - 1) in
+
+      let n = String.index_from line 0 ',' in
+      let s_line = String.sub line 0 n |> int_of_string in
+
+      let line = String.sub line (n + 1) (String.length line - n - 1) in
+
+      let n = String.index_from line 0 ',' in
+      let s_char = String.sub line 0 n |> int_of_string in
+
+      let line = String.sub line (n + 1) (String.length line - n - 1) in
+
+      let n = String.index_from line 0 ',' in
+      let e_line = String.sub line 0 n |> int_of_string in
+
+      let line = String.sub line (n + 1) (String.length line - n - 1) in
+
+      let n = String.index_from line 0 ',' in
+      let e_char = String.sub line 0 n |> int_of_string in
+
+      {filename; s_line; s_char; e_line; e_char; },
+      (String.sub line (n + 1) (String.length line - n - 1))
+
+  end
+
+  type opt =
+    | Buffer of (string option * bool) list
+    | Slice of int
+
+  module Buffer = struct
+    let path = log_path ^ "/buffer.csv"
+
+    (* 読み込み *)
+    let read' loc (scope, ans) list = match list with
+      | (loc', Buffer ((scope', ans') :: rest')) :: rest
+        when loc = loc' (* 同じ式が対象 *) ->
+          (loc, Buffer ((scope, ans) :: (scope', ans') :: rest')) :: rest
+      | _ ->
+          (loc, Buffer [(scope, ans)]) :: list
+
+    let rec read file list =
+      try
+        let line = input_line file in
+
+        if print_slice then
+          Format.fprintf ppf "@[Buffer read : %s@]@." line;
+
+        let (loc, line) = Loc.read line in
+
+        let n = String.index_from line 0 ',' in
+        let ans = String.sub line 0 n = "y" in
+        let scope =
+          let name =
+            String.sub line (n + 1) (String.length line - n - 1) in
+          if name = "" then None else Some name in
+        read file (read' loc (scope, ans) list)
+      with End_of_file -> close_in file; list
+         | _ -> read file list
+
+    (* 書き込み *)
+    let write scope expr ans =
+     if on_file_output then begin
+      let line = Loc.flat_string expr.pexp_loc in
+      let file = makeOpenOut path in
+      (* 回答、スコープ、位置情報 *)
+      if Array.length Sys.argv = 8 then
+        Format.fprintf ppf "{\"location\":%a, \"scope\":%s}"
+          Loc.printJSON expr.pexp_loc (if scope = "" then "null" else ("\"" ^ scope ^ "\""));
+
+      if ans = "y" || ans = "n" then
+        output_string file
+          (Format.sprintf "%s,%s,%s\n"
+             line ans scope);
+      close_out file
+     end
+
+    let rec set'' name cxt = match cxt with
+      | Lambda (p, cxt') ->
+         let p' = Desc.Pat.find name p in
+         if p' = wildcard then set'' name cxt' else p'
+      | Let (_, vs, cxt') ->
+          let p' =
+            List.fold_left (
+              fun p'' {pvb_pat} ->
+                if p'' = wildcard then
+                  Desc.Pat.find name pvb_pat
+                else
+                  p''
+              ) wildcard vs in
+          if p' = wildcard then set'' name cxt' else p'
+      | _ -> wildcard
+
+    let set' cxt expr (scope, ans) =
+      let pat = match scope with
+          None -> wildcard
+        | Some name ->
+           if print_slice then
+             Format.fprintf ppf "@[scope: %s@]@." name;
+           set'' name cxt in
+      {attr_name = {txt = if ans then "yes" else "no"; loc = expr.pexp_loc};
+       attr_payload = PPat (pat, None);
+       attr_loc = Location.none}
+
+    let set cxt asks expr =
+      let cxt' =
+        match expr.pexp_desc with
+        | Pexp_fun (_, _, p, _) ->
+           if print_slice then
+             Format.fprintf ppf "@[lambda.%a@]@." Pprintast.pattern p;
+           Lambda (p, cxt)
+        | Pexp_let (flg, vs, _) ->
+           if print_slice then
+             Format.fprintf ppf "@[let%a@]@."
+               (fun ppf ->
+                 List.iter (fun vb ->
+                   Format.fprintf ppf ".%a"
+                     Pprintast.pattern vb.pvb_pat)) vs;
+           Let (flg, vs, cxt)
+        | _ -> cxt in
+      ({expr with pexp_attributes = List.map (set' cxt' expr) asks}, cxt')
+(*
+    open Location
+    let printJSON ppf loc =
+      let (s_file, s_line, s_char) =
+        get_pos_info loc.loc_start
+      and (e_file, e_line, e_char) =
+        get_pos_info loc.loc_end in
+      Format.fprintf ppf
+        "{\"s\": {\"file\":\"%s\", \"line\":%d, \"char\":%d},\"e\": {\"file\":\"%s\", \"line\":%d, \"char\":%d}}"
+        s_file s_line s_char e_file e_line e_char
+
+    let json ppf loc =
+      Format.fprintf ppf
+        "\"location\": %a"
+        printJSON loc
+*)
+  end
+  module Slice = struct
+
+    (* ファイルのパス *)
+    let path = log_path ^ "/slice.csv"
+
+    module Exp = struct
+
+      let slices = ref []
+      let lines = ref []
+
+      (* 読み込み *)
+      let rec read file list =
+        try
+          let line = input_line file in
+
+          let (loc, opt') = Loc.read line in
+
+          read file ((loc, Slice (int_of_string opt')) :: list)
+        with
+          End_of_file -> close_in file; list
+        | _ -> read file list
+
+      let outputs () =
+        let file = makeOpenOut path in
+        List.iter (output_string file) !lines
+
+      let rec set' expr es =
+        {expr with
+         pexp_desc =
+           Pexp_apply (hole_of_exp expr,
+                       List.map (fun e -> (Nolabel, e)) es)}
+
+      and set expr = match expr.pexp_desc with
+          Pexp_construct (_, Some {pexp_desc = Pexp_tuple es}) ->
+            set' expr es
+        | _ -> expr
+
+      let write' expr n =
+        (* 書き込み *)
+        if print_slice then
+          Format.fprintf ppf "@[write from: %a@]@." print_deb_exp expr;
+
+        let line =
+          Format.sprintf "%s,%d\n"
+            (Loc.flat_string expr.pexp_loc) n in
+
+        if print_slice then
+          Format.fprintf ppf "@[write to: %s@]@." line;
+
+        lines := !lines @ [line]
+
+      (* expr の位置情報を出力 *)
+      let write expr =
+        let ghost = Loc.is_ghost expr.pexp_loc in
+
+        match expr.pexp_desc with
+        | Pexp_apply (e, _) ->
+
+            if e = skeleton' then
+              (* nested apply *)
+              List.iter (
+                fun {attr_name = {txt}; attr_payload = payload} ->
+                  match payload with
+                    PStr structure when txt = "app" ->
+                      List.iter (
+                        fun item ->
+                          match item.pstr_desc with
+                            Pstr_eval (expr', _) ->
+                              if ghost then
+                                write' expr' 3
+                              else
+                                write' expr' 2
+                          | _ -> ()
+                      ) structure
+                  | _ -> ()
+              ) expr.pexp_attributes
+            else if ghost && expr.pexp_loc = e.pexp_loc then
+              (* dummy apply and ghost *)
+              write' expr 3
+            else if expr.pexp_loc = e.pexp_loc then
+              (* dummy apply *)
+              write' expr 2
+            else if ghost then
+              (* ghost *)
+              write' expr 1
+            else
+              (* others *)
+              write' expr 0
+
+        | _ ->
+            if ghost then
+              (* ghost *)
+              write' expr 1
+            else
+              (* others *)
+              write' expr 0
+
+      let clean ?(output = false) expr =
+        let cnt' = ref 0 in
+        let expr' =
+          Desc.Exp.map_all (
+            fun e ->
+              let e' = {e with pexp_attributes = []} in
+              if hole_of_exp e <> e then
+                (* hole 以外を追加 *)
+                if output then
+                  write e
+                else if output then
+                  cnt' := 1 + !cnt';
+              e'
+          ) expr in
+
+        (* 重複がなかった場合のみ追加 *)
+        if not (List.exists (fun (_, e) -> e = expr') !slices) then
+          slices := (!cnt', expr') :: !slices;
+        expr'
+
+    end
+
+  end
+
+  (* スライスを作るかどうか *)
+  let check_make_slice () =
+    (not (Sys.file_exists Slice.path))
+    && (not (Sys.file_exists Buffer.path))
+
+
+  (* 型推論の情報 *)
+  module Infer = struct
+    let path = log_path ^ "/infer.txt"
+
+    let root = ref Location.none
+    let cntItem = ref 0
+    let cntExpr = ref 0
+
+    (* 初期状態 *)
+    let init name =
+      if on_file_output && print_slice && check_make_slice () then
+        let file = makeOpenOut path in
+        output_string file
+          (Format.sprintf "(* %s slicer *)\n" name);
+        close_out file
+
+    (* root の位置情報を記録 *)
+    let read loc = root := loc
+
+    (* 外部ファイルへの書き込み *)
+    let write structure expr b =
+      if structure = [] && b then
+        let slice = Slice.Exp.clean ~output:(
+            check_make_slice ()
+          ) expr in
+        begin
+          if on_file_output && print_slice && check_make_slice () then
+            let file = makeOpenOut path in
+            Format.fprintf ppf "@[return: %a @]@."
+              print_deb_exp expr;
+            (* expression の出力 *)
+            output_string file
+              (Format.sprintf "\n(* infer %d.%d: end *)\n"
+                 !cntItem !cntExpr);
+            output_string file
+              (Format.sprintf "(* %s *)\n"
+                 (Pprintast.string_of_expression slice));
+            close_out file
+        end
+      else if structure = [] &&
+              (on_file_output && print_slice && check_make_slice ()) then
+        begin
+          let file = makeOpenOut path in
+          Format.fprintf ppf "@[origin: %a @]@."
+            print_deb_exp expr;
+          output_string file
+            (Format.sprintf "\n(* infer %d.%d: begin *)\n"
+               !cntItem !cntExpr);
+          output_string file
+            (Format.sprintf "(* %s *)\n"
+               (expr |> Pprintast.string_of_expression));
+        end
+      else if on_file_output && print_slice && check_make_slice () then
+        (* structure の出力 *)
+        begin
+          let file = makeOpenOut path in
+          match !Slice.Exp.slices with
+            [] -> ()
+          | (first, _) :: _ ->
+              Format.fprintf ppf "    @[%s(%d): %a @]@."
+                (if b then "welltyped" else "illtyped")
+                first
+                print_deb_exp expr;
+              let item =
+                List.find (
+                  fun item -> Desc.internal item.pstr_loc expr.pexp_loc
+                ) structure in
+              output_string file
+                (Format.sprintf "\n(* infer %d.%d: %s (%d) *)\n"
+                   !cntItem !cntExpr
+                   (if b then "welltyped" else "illtyped")
+                   first);
+              output_string file
+                (Format.sprintf "(* %s *)\n"
+                   (Slice.Exp.clean expr |> Pprintast.string_of_expression));
+              output_string file
+                (Format.sprintf "%s\n"
+                   ([item] |> Pprintast.string_of_structure))
+        end;
+
+      if structure = [] && b then
+        (cntExpr := 0; cntItem := !cntItem + 1)
+      else
+        cntExpr := !cntExpr + 1
+
+  end
+
+  (* 式の生成 *)
+  let rec init''' expr = match expr.pexp_desc with
+    | Pexp_apply (e, (_, {pexp_desc = Pexp_apply (e', les')}) :: les)
+      when e.pexp_desc = skeleton'.pexp_desc
+        && e'.pexp_desc = skeleton'.pexp_desc ->
+        if print_slice then
+          Format.fprintf ppf "@[nested : %a@]@."
+            print_deb_exp expr;
+        let les'' =
+          List.fold_left (
+            fun acc (l_, e_) ->
+              if e_ = hole_of_exp e_ then
+                acc
+              else
+                (acc @ [(l_, e_)])
+          ) [] (les' @ les) in
+        {expr with pexp_desc = Pexp_apply (skeleton', les'')}
+
+    | _ -> expr
+
+  and init'' kind cxt list opt expr =
+
+    let f c e = Desc.Exp.map (init' kind c list) e in
+
+    match opt with
+      Buffer asks ->
+        (* buffer の設定 *)
+        (* 複数ある可能性も考慮 *)
+        if print_slice then
+          Format.fprintf ppf "@[Buffer : %a@]@."
+            Pprintast.expression expr;
+        let (expr', cxt') = Buffer.set cxt asks expr in
+        init' kind cxt' (
+            List.filter (
+                fun (loc', opt') ->
+                loc' <> Loc.of_location expr.pexp_loc
+                || opt <> opt'
+              ) list) expr'
+    | Slice ghost ->
+        match expr.pexp_desc with
+        | Pexp_fun (_, _, p, _) ->
+            let cxt' = Lambda (p, cxt) in
+            f cxt' expr
+
+        | Pexp_let (flg, vs, e0) ->
+            let cxt' = Let (flg, vs, cxt) in
+            Desc.Exp.map (
+              fun e ->
+                if e = e0 then
+                  f cxt' e
+                else
+                  f cxt e
+            ) expr
+
+        | Pexp_tuple es
+          when 1 < ghost ->
+            if print_slice then
+              Format.fprintf ppf "@[Tuple : %a@]@."
+                Pprintast.expression expr;
+
+            let les =
+              List.fold_left (
+                fun acc e ->
+                  let e' = init' kind cxt list e in
+                  if e'.pexp_desc = skeleton'.pexp_desc then
+                    (* 抽象化されたので残さない *)
+                    acc
+                  else
+                    (acc @ [Nolabel, e'])
+              ) [] es in
+
+            init'''
+              {expr with
+               pexp_desc =
+                 Pexp_apply (skeleton', les)}
+
+        | Pexp_construct (_, Some {pexp_desc = Pexp_tuple es})
+          when 1 < ghost ->
+            if print_slice then
+              Format.fprintf ppf "@[Construct : %a@]@."
+                Pprintast.expression expr;
+
+            let les =
+              List.fold_left (
+                fun acc e ->
+                  let e' = init' kind cxt list e in
+                  if e'.pexp_desc = skeleton'.pexp_desc then
+                    (* 抽象化されたので残さない *)
+                    acc
+                  else
+                    (acc @ [Nolabel, e'])
+              ) [] es in
+
+            init'''
+              {expr with
+               pexp_desc =
+                 Pexp_apply (skeleton', les)}
+
+          | Pexp_construct (lid, Some ({pexp_desc = Pexp_tuple _} as e)) ->
+              (* コンストラクタ : タプル内の要素のみを処理 *)
+              {expr with
+               pexp_desc =
+                 Pexp_construct (lid, Some (f cxt (Slice.Exp.set e)))}
+
+          | Pexp_apply (_, les) when 1 < ghost ->
+              (* 関数適用 : 入れ子の判定に進む *)
+              if print_slice then
+                Format.fprintf ppf "@[Apply : %a@]@."
+                  Pprintast.expression expr;
+
+              let les' =
+                List.fold_left (
+                  fun acc (l, e) ->
+                    let e' = init' kind cxt list e in
+                    if e'.pexp_desc = skeleton'.pexp_desc then
+                      (* 抽象化されたので残さない *)
+                      acc
+                    else
+                      (acc @ [l, e'])
+                ) [] les in
+
+              init'''
+                {expr with
+                 pexp_desc =
+                   Pexp_apply (skeleton', les')}
+
+          | _ ->
+              (* その他 *)
+              if print_slice then
+                Format.fprintf ppf "@[Slice : %a@]@."
+                  Pprintast.expression expr;
+              if ghost < 2 then
+                f cxt (Slice.Exp.set expr)
+              else
+                init''' expr
+
+  and init' kind cxt list expr =
+    try
+      let (_, opt) =
+        List.find (
+            fun (loc, _) ->
+            loc = Loc.of_location expr.pexp_loc
+        ) list in
+      init'' kind cxt list opt expr
+    with
+      Not_found ->
+        if kind then
+          begin
+            if print_slice then
+              Format.fprintf ppf "@[hole : %a@]@."
+                print_deb_exp expr;
+            hole_of_exp expr
+          end
+        else if Desc.Exp.leaf expr then
+          expr
+        else
+          Desc.Exp.map (init' kind cxt list) expr
+
+  let init ((expr, cxt), env, prefix) =
+
+    if check_make_slice () || is_toplevel then
+      Size.Exp.set_and
+        (fun e -> Desc.Exp.complete ((e, cxt), env, prefix)) expr
+
+    else
+      let expr =
+        if Sys.file_exists Slice.path then
+          let file = open_in Slice.path in
+          init' true Empty (Slice.Exp.read file []) expr
+        else
+          expr in
+      let expr =
+        if Sys.file_exists Buffer.path then
+          let file = open_in Buffer.path in
+          init' false Empty (Buffer.read file []) expr
+        else
+          expr in
+      expr
+
+  let typed'' expr tp time =
+    let loc = !Infer.root in
+    if on_file_output && loc <> Location.none && check_make_slice () then
+      let file =
+        makeOpenOut (log_path ^ "/data.csv") in
+      let line =
+        Format.sprintf "%s,%f,%d\n"
+          (Loc.dual_string !Infer.root expr.pexp_loc)
+          time tp in
+      output_string file line;
+      close_out file
+
+  let typed' env structure expr =
+    (* 型推論と所要時間の計測 *)
+    let time0 = Sys.time () in
+    let tp =
+      try
+
+        let _ = Typemod.type_structure env structure in
+        true
+      with _ -> false in
+    let time1 = Sys.time () in
+
+    if print_slice then
+      Infer.write structure expr tp
+    else
+      begin
+        Infer.read expr.pexp_loc;
+        typed'' expr (if tp then 1 else 0) (time1 -. time0);
+      end;
+    (* 戻り値は bool *)
+    tp
+
+  let typed env item_cxt expr_cxt expr =
+    try
+      let structure =
+        List.map (
+          fun item ->
+            if not (Desc.internal item.pstr_loc expr.pexp_loc) then
+              item
+            else
+              match item.pstr_desc with
+              | Pstr_eval (e, attrs) ->
+                  if Desc.internal
+                      e.pexp_loc expr.pexp_loc then
+                    {item with pstr_desc = Pstr_eval (Slice.Exp.clean e, attrs)}
+                  else
+                    item
+
+              | Pstr_value (flg, vs) ->
+                  {item with
+                   pstr_desc =
+                     Pstr_value (flg, List.map (
+                         fun vb ->
+                           if Desc.internal
+                               vb.pvb_expr.pexp_loc expr.pexp_loc then
+                             {vb with pvb_expr = Slice.Exp.clean vb.pvb_expr}
+                           else
+                             vb
+                       ) vs)}
+              | _ -> item
+        ) (item_cxt expr_cxt expr) in
+      (* 型推論 *)
+      typed' env structure expr
+    with _ ->
+      true (* 省略 *)
+
+  (* 終了処理: ファイルの出力 *)
+  let finally expr time =
+    Infer.read expr.pexp_loc;
+    if check_make_slice () then
+      typed'' expr (-1) time;
+    expr
+
+end
diff --git a/typing/debug_core.mli b/typing/debug_core.mli
new file mode 100644
index 0000000..f8b61dd
--- /dev/null
+++ b/typing/debug_core.mli
@@ -0,0 +1,453 @@
+open Asttypes
+open Types
+
+open Parsetree
+
+(* ppf *)
+val ppf : Format.formatter
+
+(* コンテキストの定義 *)
+type expr_context =
+  | Empty
+  | Lambda of pattern * expr_context
+  | Let of rec_flag * value_binding list * expr_context
+type 'a context_t =
+  ('a * expr_context) * Env.t * (structure_item * Env.t) list
+
+
+module Map : sig
+
+  type 'a map2 = (pattern -> expression -> expression)
+                 -> (pattern -> expression -> pattern)
+                 -> 'a -> 'a
+  type 'a map1 = (expression -> expression) -> (pattern -> pattern)
+                 -> 'a -> 'a
+
+  (* 与える関数が2引数 *)
+  val v2 : value_binding map2
+  val c2 : case map2
+
+  (* 与える関数が1引数 *)
+  val v1 : value_binding map1
+  val c1 : case map1
+  val e1 : expression map1
+  val p1 : pattern map1
+  val le : ('a * expression) map1
+  val lp : ('a * pattern) map1
+
+  (* exp / pat を差し替える *)
+  val set_exp : 'a map1 -> 'a -> expression -> 'a
+  val set_pat : 'a map1 -> 'a -> pattern -> 'a
+
+end
+
+module Hole : sig
+  val item : structure_item
+  val to_exp : expression -> expression
+  val exp : expression
+end
+
+(* module Desc *)
+module Desc : sig
+
+  (* 生成関数の型 *)
+  type 'a make_exp_desc =
+    'a list -> expression -> expression_desc
+  type make_exp_desc2 =
+    expression -> expression -> expression option -> expression_desc
+
+  type 'b make_pat_desc = 'b list -> pattern -> pattern_desc
+
+  (* 生成関数を使って exp / pat の desc を差し替える *)
+  val to_exp :
+    'a make_exp_desc
+    -> 'a list -> expression -> expression
+    -> expression
+  val to_exp2 :
+    make_exp_desc2
+    -> expression -> expression -> expression option -> expression
+    -> expression
+
+  val to_pat : 'b make_pat_desc -> 'b list
+               -> pattern -> pattern -> pattern
+
+  (* pexp_desc の生成 *)
+  (*
+  val e_let : rec_flag -> value_binding make_exp_desc
+  val e_function : case make_exp_desc
+  val e_fun : arg_label -> expression option
+              -> pattern -> expression -> expression_desc
+  val e_apply : (arg_label * expression) make_exp_desc
+  val e_match : case make_exp_desc
+  val e_try : case make_exp_desc
+  val e_tuple : expression make_exp_desc
+  val e_construct : Longident.t loc -> expression make_exp_desc
+  val e_variant : label -> expression make_exp_desc
+  val e_record : (Longident.t loc * expression) make_exp_desc
+  val e_field : Longident.t loc -> expression make_exp_desc
+  val e_setfield : Longident.t loc
+                   -> expression -> expression -> expression_desc
+  val e_array : expression make_exp_desc
+  val e_constraint : core_type -> expression make_exp_desc
+  val e_ifthenelse : expression -> expression
+                     -> expression option -> expression_desc
+  val e_sequence : expression -> expression -> expression_desc
+  *)
+
+  module type Typ =
+    sig
+      type t
+      val internal : t -> t -> bool
+      val leaf : t -> bool
+      val comp : ?mode:bool -> t -> t -> int
+      val map : (t -> t) -> t -> t
+      val map_all : (t -> t) -> t -> t
+      val fold : ('a -> t -> 'a) -> 'a -> t -> 'a
+      val fold_all : ('a -> t -> 'a) -> 'a -> t -> 'a
+      val replace : t -> t -> t
+    end
+
+  module Exp : Typ with type t = expression
+  module Pat : sig
+    include Typ with type t = pattern
+    val find : string -> t -> t
+  end
+  module Vb :
+  sig
+    val complete : (value_binding list) context_t -> (value_binding list)
+  end
+
+  module Str :
+  sig
+    val clear : structure -> structure
+    val output : string -> structure -> unit
+  end
+(*
+  (* ppat_desc の生成 *)
+  val p_alias : string loc -> pattern make_pat_desc
+  val p_tuple : pattern make_pat_desc
+  val p_construct : Longident.t loc -> pattern make_pat_desc
+  val p_variant : label -> pattern make_pat_desc
+  val p_record : closed_flag -> (Longident.t loc * pattern) make_pat_desc
+  val p_array : pattern make_pat_desc
+  val p_or : pattern -> pattern -> pattern_desc
+  val p_constraint : core_type -> pattern make_pat_desc
+
+  val restore : (arg_label * expression) list -> expression -> expression
+  val origin : expression -> expression
+*)
+end
+
+(* module Size  *)
+module Size : sig
+
+  val set_resize : bool
+
+  module type Typ =
+    sig
+      type t
+      val get : t -> int
+      val set : t -> t
+      val reset : int -> t -> t
+      val comp : ?e':t -> t -> int
+    end
+
+  module Exp : Typ with type t = expression
+
+(*
+  val get : int ->  expression -> int
+  val set : expression -> expression
+
+  val reset : expression -> expression
+  val reset1 : (int -> int -> int) -> expression -> expression
+
+  val resize : expression -> expression
+
+  val terminated : expression -> expression
+
+  val is1 : expression -> bool
+
+  val fltr1 : expression -> bool
+  val fltr0 : expression -> bool
+*)
+  val children : expression -> expression list
+(*
+  val get_child :
+    expression ->
+    expression * (expression -> expression) * (expression -> expression)
+
+  val getChild2 :
+    expression ->
+    expression * (expression -> expression) * (expression -> expression)
+  val getChild3 :
+    expression ->
+    expression * (expression -> expression) * (expression -> expression)
+*)
+  val getChildSet :
+    expression -> expression * (bool -> (expression -> expression) -> expression -> expression)
+  val getChildSet2 :
+    expression -> expression * (bool -> (expression -> expression) -> expression -> expression)
+(*
+  val check : expression -> bool
+
+  val get_one : expression -> int
+  val set_one : ?n:int -> expression -> expression
+  val set_all :
+    ('a list -> 'a list -> expression -> 'a Desc.make_exp_desc -> expression)
+    ->'a Desc.make_exp_desc -> ('a -> expression) -> 'a list -> expression
+    -> expression
+
+
+
+  val node_sort : expression -> expression list
+
+*)
+end
+
+(* module Abst *)
+(*
+module Abst : sig
+  module type Typ =
+    sig
+      type t
+      val hole : t -> t
+    end
+
+  module Exp : Typ with type t = expression
+
+  val set_one : expression -> expression list
+  val set_all : expression -> expression
+
+  val get : expression -> bool -> expression -> expression
+
+  val exp : expression -> expression
+
+end
+*)
+
+module Meta : sig
+
+  val clean : string -> expression -> expression
+
+end
+
+
+(* 型デバッガが訪れるノード数カウント用の変数 (debug_main.ml) *)
+
+val print_node_count : bool
+val print_asked_expr : bool
+
+(* スライス表示用変数 (debug_slice.ml) *)
+
+val print_slice : bool
+
+(* OCaml のエラーメッセージ Errors.report_error 制御用変数
+   (toplevel/toploop.ml, driver/compile.ml) *)
+
+val print_ocaml_error : bool
+
+(* スライスをするかどうかを制御する変数
+   (debug_slice.ml, debug_main.ml) *)
+
+val on_slice : bool
+val on_pat_slice : bool ref
+
+(* 各種情報をログに出力するかを制御する変数
+   (debug_core.ml, debug_slice.ml) *)
+val on_file_output : bool
+
+(* 表示用関数 *)
+val print_deb_exp : Format.formatter -> expression -> unit
+val print_deb_strs : Format.formatter -> structure -> unit
+
+(* 抽象化した構文
+   (debug_slice.ml, debug_main.ml) *)
+val dummy_int0 : expression
+val skeleton : expression
+val wildcard : pattern
+val dummy_fun : expression
+val dummy_assertfalse : expression -> expression
+val dummy_any : pattern -> pattern
+
+(* desc の置換を行う関数 *)
+val desc_to_exp : expression_desc -> expression -> expression
+val desc_to_pat : pattern_desc -> pattern -> pattern
+
+(* type_expr を扱う関数 *)
+val decode_labels : type_expr -> (structure_item * Env.t) list -> label_declaration list
+val split_arrow : type_expr -> (type_expr * type_expr) option
+
+val decode_tuple : type_expr -> type_expr list option
+
+(* デバッガの処理を行う関数
+   (debug_slice.ml, debug_main.ml) *)
+val pattern_variables : pattern -> string list
+val plug_expr : expression -> expr_context -> expression
+val plug_str : (expression * expr_context) -> structure
+
+val judge : expression context_t -> (string context_t * type_expr) list * type_expr 
+
+
+val skeleton' : expression
+val hole_str : structure_item
+
+val hole_of_exp : expression -> expression
+val hole_of_pat : pattern -> pattern
+
+module Data : sig
+  val log_path : string
+  val express_mode : int
+  (* DEBUGGER_EXPRESS_MODE
+     98 : スライスの出力
+     99 : コンパイラのエラーメッセージ出力
+     100 : デバッガと対話
+
+     終了番号
+     ~99 : DEBUGGER_EXPRESS_MODEによる停止
+     100 : デバッガの質問内容を出力
+     101~ : デバッガのエラーメッセージ出力（予定）
+  *)
+
+  module Loc : sig
+    val printJSON : Format.formatter -> Location.t -> unit
+  end
+
+  module Buffer : sig
+    val write : string -> expression -> string -> unit
+  end
+
+  module Slice : sig
+    module Exp :
+    sig
+      val write : expression -> unit
+      val outputs : unit -> unit
+    end
+  end
+
+  module Infer : sig
+    val init : string -> unit
+    val read : Location.t -> unit
+    val write : structure -> expression -> bool -> unit
+  end
+
+  val init : expression context_t -> expression
+
+  val typed : Env.t ->
+    ((expression -> expression) -> expression -> structure)
+    -> (expression -> expression) -> expression -> bool
+
+  val finally : expression -> float -> expression
+
+end
+
+(*
+module Library :
+sig
+
+  module type Abst_t =
+    sig
+      type t
+      val skeleton : t
+      val terminate : t -> t
+      val of_desc : t -> t
+      val of_attr : t -> t
+      val to_loc : t -> Location.t
+    end
+
+  module type Modules =
+    sig
+      type s
+      val internal : s -> s -> bool
+      val pos_start : s -> string * (int * int)
+      val pos_end : s -> string * (int * int)
+      val pos_ghost : s -> bool
+      val pos_all : s -> (string * ((int * int) * (int * int))) * bool
+
+      val print : bool -> Format.formatter -> s -> unit
+
+      module Desc : Desc.Typ with type t = s
+      module Hole : sig
+        include Abst_t with type t = s
+        val root : s -> s
+        val node : s -> s
+      end
+    end
+
+  val expression : (module Modules with type s = expression)
+end
+
+(*
+module Node :
+sig
+  type loc_t = {
+    line : int;
+    char : int;
+  }
+  type pos_t = {
+    filename : string;
+    s : loc_t;
+    e : loc_t;
+  }
+  type slice_t = {
+    pos : pos_t;
+    ghost : int;
+  }
+  type buffer_t = {
+    scope : string option;
+    typ : bool * pos_t;
+  }
+  type infer_t = {
+    section : (float * bool option) list;
+    total : float;
+    root : expression;
+  }
+
+  type t = {
+    userID : string option; (* ユーザID。node の実行に必要 *)
+    date : string option; (* 日時 *)
+    slice : slice_t list; (* 既存のスライス情報 *)
+    buffer : buffer_t list; (* ユーザの回答 *)
+    infer : infer_t list; (* 型推論の記録 *)
+  }
+
+  module Null :
+  sig
+    val loc : loc_t
+    val pos : pos_t
+    val slice : slice_t
+  end
+
+  (* flg の設定 *)
+  module Input :
+  sig
+    val err : exn -> unit
+    val node : expression -> int * int * type_expr option -> unit
+    val ask : ?scope:string -> expression -> type_expr -> unit
+    val expr : expression * type_expr -> unit
+    val result : int -> expression context_t -> unit
+  end
+
+  module Output :
+  sig
+    val f : unit -> unit
+    val buffer : buffer_t -> unit
+    val slicer : expression -> t -> int * (expression * expression) list -> unit
+  end
+
+  module Check :
+  sig
+    val slice : t -> bool
+    val json : unit -> bool (* node.js 用の出力の有無 *)
+  end
+
+  val init : unit -> t ref
+  val typed : t ref -> Env.t -> structure -> bool
+
+  val yes : expression -> attribute
+  val no : expression -> attribute
+
+  val of_exp : t -> expression -> expression
+end
+
+*)
+*)
diff --git a/typing/debug_main.ml b/typing/debug_main.ml
new file mode 100644
index 0000000..cf44383
--- /dev/null
+++ b/typing/debug_main.ml
@@ -0,0 +1,2983 @@
+open Asttypes
+open Ast_helper
+
+open Typedtree
+
+open Location
+open Parsetree
+
+open Debug_core
+open Debug_message
+
+let auto = false
+
+let skeleton = skeleton'
+
+type debugger_state_t =
+  | Null
+  | Evaluate of Location.error
+  | Interactive of Location.t * string option
+
+let debugger_state = ref Null
+
+let setCompileError exn = match error_of_exn exn with
+  | None -> true
+  | Some (`Ok (t)) -> debugger_state := Evaluate t; false
+  | Some (_) -> failwith "setCompilerError"
+(*
+let getCompileError () = match !debugger_state with
+  | Evaluate error -> error
+  | _ -> failwith "not set compile error"
+*)
+
+(* skeleton : expression *)
+(* dummy_assertfalse : expression -> expression *)
+
+(* ppf : Format.formatter *)
+let ppf = Format.std_formatter
+
+(* language_level : int *)
+let language_level = Syntaxerr.language_level
+
+(* debug : int *)
+let debug = try
+  int_of_string (Sys.getenv "TRACE_DEBUGGER")
+with _ -> 0
+(* 0 : no trace *)
+(* 1 : overall progress *)
+(* 2 : illtyped *)
+(* 4 : recursive env *)
+(* 8 : make message illtyped *)
+
+exception DebuggerQuit
+
+(* ブラウザ実行時は、逐次停止させる *)
+(*
+exception DebuggerPaused of string option * string * int * int * int * int * int
+ *)
+
+
+(* find_funtype_args : type_expr list -> int -> (int * type_expr) list *)
+(* int は 何番目の引数かを記憶 *)
+let rec find_funtype_args lst n = match lst with
+    [] -> []
+  | typ :: rest ->
+      begin match split_arrow typ with
+          None -> find_funtype_args rest (n + 1)
+        | Some (_, _) -> (n, typ) :: find_funtype_args rest (n + 1)
+      end
+
+(********** pat_appears **********)
+
+(* pattern_variables : pattern -> string list *)
+(* collect all the pattern variables in a pattern *)
+(*
+let rec pattern_variables pat = match pat.ppat_desc with
+    Ppat_any -> []
+  | Ppat_var ({txt = st}) -> [st]
+  | Ppat_alias (p, {txt = st}) -> st :: pattern_variables p
+  | Ppat_constant (_) -> []
+  | Ppat_interval (_, _) -> []
+  | Ppat_tuple (ps) -> List.flatten (List.map pattern_variables ps)
+  | Ppat_construct (_, None) -> []
+  | Ppat_construct (_, Some (p)) -> pattern_variables p
+  | Ppat_variant (_, None) -> []
+  | Ppat_variant (_, Some (p)) -> pattern_variables p
+  | Ppat_record (lps, _) ->
+      List.flatten (List.map (fun (_, p) -> pattern_variables p) lps)
+  | Ppat_array (ps) -> List.flatten (List.map pattern_variables ps)
+  | Ppat_or (p1, p2) -> pattern_variables p1 @ pattern_variables p2
+  | Ppat_constraint (p, _) -> pattern_variables p
+  | Ppat_type (_) -> []
+  | Ppat_lazy (p) -> pattern_variables p
+  | Ppat_unpack ({txt = st}) -> [st]
+  | Ppat_exception (p) -> pattern_variables p
+  | Ppat_extension (_) -> []
+  | Ppat_open (_, p) -> pattern_variables p
+ *)
+
+(* pat_appears : string -> pattern -> bool *)
+let pat_appears st pat = List.mem st (pattern_variables pat)
+
+(********** expr_context **********)
+(*
+type expr_context =
+    Empty
+  | Lambda of pattern * expr_context
+    (* TODO: incorporate labeled arguments, currently ignored *)
+  | Let of rec_flag * value_binding list * expr_context
+ *)
+
+(* type of prefix: reversed list of structure and environment *)
+(* type str_context = (structure_item * Env.t) list *)
+
+(* type of contexts *)
+(* type 'a context_t = ('a * expr_context) * Env.t * str_context *)
+
+(* expression context_t 型の値 ((exp, cxt), env, lst) の意味は以下 *)
+(* env は (exp, cxt) を実行する際の環境 *)
+(* lst は (structure, env) の逆順のリストで env は structure 実行前の環境 *)
+
+(********** plug **********)
+(*
+(* plug_expr : expression -> expr_context -> expression *)
+let rec plug_expr expr cxt = match cxt with
+  | Empty -> expr
+  | Lambda (pat, c) ->
+      (* パターン変数を全て集め *)
+      let vars = pattern_variables pat in
+      (* 変数名から変数の expression を作る *)
+      let varexp x = Exp.mk (Pexp_ident (mknoloc (Longident.Lident x))) in
+      (* expr と組にして body に入れる。これでパターン変数の型を知る *)
+      (* ダミーの 0 を入れるのは、tuple 長が 2 以上でないとエラーになるため *)
+      let body = Exp.mk (Pexp_tuple
+                          (expr :: dummy_int0 :: List.map varexp vars)) in
+      let exp = Exp.mk (Pexp_fun (Nolabel, None, pat, body)) in
+      plug_expr exp c
+  | Let (flag, bindings, c) ->
+      plug_expr { pexp_desc        = Pexp_let (flag, bindings, expr);
+                  pexp_loc         = Location.none;
+                  pexp_attributes  = [] }
+                c
+
+(* plug_str : expression * expr_context -> structure *)
+let plug_str (expr, cxt) =
+  [{ pstr_desc = Pstr_eval (plug_expr expr cxt, []);
+     pstr_loc  = Location.none }]
+ *)
+
+(********** is_well_typed **********)
+
+(* is_well_typed_structure : structure -> Env.t -> bool *)
+(* Error = Location * Env * error になったので引数に env を加えた *)
+let is_well_typed_structure structure env =
+  try
+    ignore (Typemod.type_structure env structure);
+    (* Format.fprintf ppf "@[:welltyped@]@."; *)
+    true
+  with Typecore.Error (_, _, Typecore.Expr_type_clash (_))
+     | Typecore.Error (_, _, Typecore.Pattern_type_clash (_))
+     | _ (* Unbound value *)
+     ->
+       (* Format.fprintf ppf "@[:illtyped@]@."; *)
+       false
+
+(* is_well_typed_expr : expression context_t -> bool *)
+let is_well_typed_expr ((expr, cxt), env, _) =
+  is_well_typed_structure (plug_str (expr, cxt)) env
+
+(********** get **********)
+
+(* get_var_from_prefix : string -> str_context -> expression context_t list *)
+(* returns [] if not found; otherwise [((e, cxt), env, prefix)] *)
+let rec get_var_from_prefix st prefix = match prefix with
+    [] -> [] (* This happens when no binding is found, such as for '+' *)
+  | ({ pstr_desc = Pstr_value (flg, bindings) }, env) :: rest ->
+      (* let 文のみ考慮 *)
+      let rec loop bindings' = match bindings' with
+          [] -> get_var_from_prefix st rest
+        | {pvb_pat = p; pvb_expr = e} :: rest' ->
+            if pat_appears st p then
+              if flg = Recursive
+              then (* 定義された全ての変数が見えている *)
+                let cxt' = List.fold_right
+                             (fun {pvb_pat = pat} c -> Lambda (pat, c))
+                             bindings Empty in
+                [((e, cxt'), env, prefix)]
+              else [((e, Empty), env, rest)]
+            else loop rest'
+      in loop bindings
+  | _ :: rest ->
+      get_var_from_prefix st rest
+
+(* get_var_from_context : string context_t -> expression context_t list *)
+(* returns [] if not found; otherwise [((e, cxt), env, prefix)] *)
+let rec get_var_from_context ((st, cxt), env, prefix) = match cxt with
+    Empty -> get_var_from_prefix st prefix
+  | Lambda (p, cxt') -> (* もし p に現れていたら、その変数の定義はない *)
+      if pat_appears st p then []
+      else get_var_from_context ((st, cxt'), env, prefix)
+  | Let (flg, bindings, cxt') ->
+      let rec loop bindings' = match bindings' with
+          [] -> get_var_from_context ((st, cxt'), env, prefix)
+        | {pvb_pat = p; pvb_expr = e} :: rest ->
+            if pat_appears st p then
+              if flg = Recursive
+              then (* 定義された全ての変数が見えている *)
+                let cxt'' = List.fold_right
+                              (fun {pvb_pat = pat} c -> Lambda (pat, c))
+                              bindings cxt in
+                [((e, cxt''), env, prefix)]
+              else [((e, cxt'), env, prefix)]
+            else loop rest
+      in loop bindings
+
+(* structure_to_prefix : structure -> Env.t -> str_context ->
+                         Env.t * str_context *)
+let rec structure_to_prefix structure env prefix = match structure with
+    [] -> (env, prefix)
+  | s :: rest ->
+      let (_, _, _, env') = Typemod.type_structure env [s] in
+      structure_to_prefix rest env' ((s, env) :: prefix)
+
+(* get_module_from_prefix : string -> Env.t -> str_context ->
+                            (Env.t * str_context) option *)
+let rec get_module_from_prefix st env prefix = match prefix with
+    [] -> None (* This happens when no binding is found, such as for 'List' *)
+  | ({ pstr_desc = Pstr_module ({pmb_name = {txt = Some (st')};
+                                 pmb_expr = {pmod_desc = Pmod_structure
+                                                           (structure)}}) },
+     env) :: rest ->
+      (* module A = struct ... end 文のみ考慮 *)
+      if st = st'
+      then Some (structure_to_prefix structure env prefix)
+      else get_module_from_prefix st env rest
+  | _ :: rest -> (* 他は無視。しかし recmodule は必要っぽい *)
+      get_module_from_prefix st env rest
+
+(* get_module : Longident.t context_t -> (Env.t * str_context) option *)
+let rec get_module ((longident, cxt), env, prefix) = match longident with
+    Longident.Lident (st) ->
+      get_module_from_prefix st env prefix
+  | Longident.Ldot (longident, st) ->
+      begin match get_module ((longident, cxt), env, prefix) with
+          None -> None
+        | Some (env', prefix') -> get_module_from_prefix st env' prefix'
+      end
+  | Longident.Lapply (_, _) ->
+      failwith "TypeDebugger: Longident.Lapply in get_module"
+
+(* get : Longident.t context_t -> expression context_t list *)
+let get ((longident, cxt), env, prefix) = match longident with
+    Longident.Lident (st) ->
+      get_var_from_context ((st, cxt), env, prefix)
+  | Longident.Ldot (longident, st) ->
+      begin match get_module ((longident, cxt), env, prefix) with
+          None -> []
+        | Some (_, prefix') -> get_var_from_prefix st prefix'
+      end
+  | Longident.Lapply (_, _) ->
+      failwith "TypeDebugger: Longident.Lapply in get"
+
+(********** pattern **********)
+
+(* wrap_exp : expression_desc -> pattern -> expression *)
+let wrap_exp desc {ppat_desc = _; ppat_loc = l; ppat_attributes = a} =
+  {pexp_desc = desc; pexp_loc = l; pexp_loc_stack = []; pexp_attributes = a}
+
+(* pat_to_exp : pattern -> expression *)
+let rec pat_to_exp pat = match pat.ppat_desc with
+  | Ppat_any ->
+      (* _ *)
+      skeleton
+  | Ppat_var ({txt = st; loc = loc'}) ->
+      (* Ppat_var of string loc *)
+      (* x *)
+      wrap_exp (Pexp_ident ({txt = Longident.Lident(st); loc = loc'})) pat
+  | Ppat_constant (c) ->
+      (* 1, 'a', "true", 1.0, 1l, 1L, 1n *)
+      wrap_exp (Pexp_constant (c)) pat
+  | Ppat_tuple (ps) ->
+      (* Ppat_tuple of pattern list *)
+      (* (P1, ..., Pn) Invariant: n >= 2 *)
+      wrap_exp (Pexp_tuple (List.map pat_to_exp ps)) pat
+  | Ppat_construct (lid, p) ->
+      (* Ppat_construct of Longident.t loc * pattern option *)
+      (* C                None
+         C P              Some P
+         C (P1, ..., Pn)  Some (Ppat_tuple [P1; ...; Pn]) *)
+      wrap_exp (Pexp_construct (lid, match p with
+                                         None -> None
+                                       | Some p' -> Some (pat_to_exp p')))
+               pat
+  | Ppat_record (lps, _) ->
+      (* Ppat_record of (Longident.t loc * pattern) list * closed_flag *)
+      (* { l1=P1; ...; ln=Pn }     (flag = Closed)
+         { l1=P1; ...; ln=Pn; _}   (flag = Open)
+         Invariant: n > 0 *)
+      (* パターンにフィールドが全部、書かれていないとエラーになる *)
+      (* 要対処 *)
+
+      wrap_exp (Pexp_record (List.map (fun (l, p) -> (l, pat_to_exp p)) lps,
+                             None))
+               pat
+  | Ppat_constraint (p, ct) ->
+      (* (P : T) *)
+      wrap_exp (Pexp_constraint (pat_to_exp p, ct)) pat
+  | _ -> skeleton
+
+(* wrap_pat : pattern_desc -> pattern -> pattern *)
+let wrap_pat desc {ppat_desc = _; ppat_loc = l; ppat_attributes = a} =
+  {ppat_desc = desc; ppat_loc = l; ppat_loc_stack = []; ppat_attributes = a}
+
+(* cons_unconstrained_pat : pattern -> expr_context -> expr_context *)
+(* pat を（型制約のない）変数の列のパターンに変換して cxt の上に積む *)
+let cons_unconstrained_pat pat cxt = match pattern_variables pat with
+  | [] -> cxt
+  | first :: [] ->
+      Lambda (wrap_pat (Ppat_var ({txt = first; loc = Location.none})) pat,
+              cxt)
+  | lst ->
+      let lst' = List.map (fun s -> wrap_pat (Ppat_var ({txt = s;
+                                                         loc = Location.none}))
+                                             pat)
+                          lst in
+      Lambda (wrap_pat (Ppat_tuple lst') pat, cxt)
+
+(* extract_pattern : expression -> pattern list *)
+let extract_pattern exp = match exp.pexp_desc with
+    Parsetree.Pexp_let (_, bindings, _) ->
+      List.map (fun {pvb_pat = pat} -> pat) bindings
+  | Parsetree.Pexp_function (cases) ->
+      List.map (fun {pc_lhs = pat} -> pat) cases
+  | Parsetree.Pexp_fun (_, _, pat, _) -> [pat]
+  | Parsetree.Pexp_match (_, cases) ->
+      List.map (fun {pc_lhs = pat} -> pat) cases
+  | Parsetree.Pexp_try (_, cases) ->
+      List.map (fun {pc_lhs = pat} -> pat) cases
+(*| Parsetree.Pexp_for (_, exp1, exp2, _, exp3) -> [] *)
+(*| Parsetree.Pexp_letmodule (_, _, exp) -> [] *)
+  | _ -> []
+
+(* decompose_pattern : pattern -> pattern list *)
+let decompose_pattern pat = match pat.ppat_desc with
+    Ppat_any -> []
+  | Ppat_var (_) -> []
+  | Ppat_alias (p, _) -> [p]
+  | Ppat_constant (_) -> []
+  | Ppat_interval (_, _) -> []
+  | Ppat_tuple (ps) -> ps
+  | Ppat_construct (_, None) -> []
+  | Ppat_construct (_, Some (p)) -> [p]
+  | Ppat_variant (_, None) -> []
+  | Ppat_variant (_, Some (p)) -> [p]
+  | Ppat_record (lps, _) -> List.map (fun (_, p) -> p) lps
+  | Ppat_array (ps) -> ps
+  | Ppat_or (p1, p2) -> [p1; p2]
+  | Ppat_constraint (p, _) -> [p]
+  | Ppat_type (_) -> []
+  | Ppat_lazy (p) -> [p]
+  | Ppat_unpack (_) -> []
+  | Ppat_exception (p) -> [p]
+  | Ppat_extension (_) -> []
+  | Ppat_open (_, p) -> [p]
+
+(********** decompose **********)
+
+(* two phases of decompose *)
+type decompose_phase_t =
+    Illtyped (* decompose する式には型がつかない *)
+  | Typed    (* decompose する式に型はついている *)
+
+(* decompose_case : case context_t -> expression context_t list *)
+let decompose_case ((case, cxt), env, prefix) = match case with
+  | {pc_lhs = pat; pc_guard = None; pc_rhs = exp} ->
+      let cxt' = cons_unconstrained_pat pat cxt in
+      [((exp, cxt'), env, prefix); ((pat_to_exp pat, cxt'), env, prefix)]
+  | {pc_lhs = pat; pc_guard = Some (g); pc_rhs = exp} ->
+      let cxt' = cons_unconstrained_pat pat cxt in
+      [((g, cxt), env, prefix);
+       ((pat_to_exp pat, cxt'), env, prefix);
+       ((exp, cxt'), env, prefix)]
+
+(* decompose_expr : expression context_t -> decompose_phase_t ->
+                    expression context_t list *)
+let decompose_expr ((exp, cxt), env, prefix) phase =
+  match exp.pexp_desc with
+     Parsetree.Pexp_ident ({txt = longident}) ->
+       begin match phase with
+           Illtyped -> []
+         | Typed -> get ((longident, cxt), env, prefix)
+       end
+   | Parsetree.Pexp_constant (_) -> []
+   | Parsetree.Pexp_let (rec_flg, bindings, exp) ->
+       (* let 文で定義された変数を含めたコンテキストを cxt' とする *)
+       let cxt' = List.fold_right (fun {pvb_pat = pat} c ->
+                                    cons_unconstrained_pat pat c)
+                                  bindings cxt in
+       begin match phase with
+(* ------------------------------------------------------------------------ *)
+(*
+  Illtyped ->
+    if rec_flg = Recursive
+    (* let rec ではパターンは書けないためパターンについては考慮不要 *)
+    then let bindings' = List.map (fun binding ->
+                                    {binding with pvb_expr = skeleton})
+                                  bindings in
+         List.fold_right
+           (fun {pvb_expr = exp} lst -> ((exp, cxt'), env, prefix) :: lst)
+           bindings [((exp, Let (rec_flg, bindings', cxt)), env, prefix)]
+(*       List.map (fun {pvb_expr = exp} -> ((exp, cxt'), env, prefix)) bindings
+         @ [((exp, Let (rec_flg, bindings', cxt)), env, prefix)] *)
+    (* let ではパターンを考慮 *)
+    (* （まだ考慮できていない） *)
+    else List.fold_right
+           (fun {pvb_pat = pat; pvb_expr = exp} lst ->
+             ((pat_to_exp pat, cxt), env, prefix) ::
+             ((exp, cxt), env, prefix) :: lst)
+           bindings [((exp, cxt'), env, prefix)]
+(*       List.map (fun {pvb_expr = exp} -> ((exp, cxt), env, prefix)) bindings
+         @ [((exp, cxt'), env, prefix)] *)
+| Typed -> [((exp, Let (rec_flg, bindings, cxt)), env, prefix)] (* cxt'? *)
+         (* exp 中から束縛された値が見える *)
+ *)
+(* ------------------------------------------------------------------------ *)
+  Illtyped ->
+    (* let 文で定義された変数を含めたコンテキストを cxt' とする *)
+(*    let cxt' = List.fold_right (fun {pvb_pat = pat} c -> Lambda (pat, c))
+                               bindings cxt in *)
+    if rec_flg = Recursive
+    then let bindings' = List.map (fun binding ->
+                                    {binding with pvb_expr = dummy_fun})
+                                  bindings in
+         List.map (fun {pvb_expr = exp} -> ((exp, cxt'), env, prefix)) bindings
+         @ [((exp, Let (rec_flg, bindings', cxt)), env, prefix)]
+    else let bindings' = List.map (fun binding ->
+                                    {binding with pvb_expr = skeleton})
+                                  bindings in
+         List.map (fun {pvb_expr = exp} -> ((exp, cxt), env, prefix)) bindings
+         @ [((exp, Let (rec_flg, bindings', cxt)), env, prefix)]
+(*
+| Typed_fv ->
+       (* let 文で定義された変数を含めたコンテキストを cxt' とする *)
+       let cxt' = List.fold_right (fun (pat, _) c -> expand_lambda pat c)
+                                  bindings cxt in
+       (if rec_flg = Recursive
+        then List.map (fun (_, exp) -> ((exp, cxt'), env, prefix)) bindings
+             (* 再帰関数なら、cxt' を使う *)
+        else List.map (fun (_, exp) -> ((exp, cxt), env, prefix)) bindings)
+       @ [((exp, Let (rec_flg, bindings, cxt)), env, prefix)]
+         (* exp 中から束縛された値が見える *)
+*)
+| Typed -> [((exp, Let (rec_flg, bindings, cxt)), env, prefix)]
+         (* exp 中から束縛された値が見える *)
+(* ------------------------------------------------------------------------ *)
+       end
+   | Parsetree.Pexp_function (cases) ->
+       List.flatten (List.map
+                      (fun case -> decompose_case ((case, cxt), env, prefix))
+                      cases)
+   | Parsetree.Pexp_fun (_, None, pat, exp) ->
+       let cxt' = cons_unconstrained_pat pat cxt in
+       let exp' = pat_to_exp pat in
+        ((exp', cxt'), env, prefix) :: [((exp, cxt'), env, prefix)]
+   | Parsetree.Pexp_fun (_, Some (exp1), pat, exp) ->
+      let cxt' = cons_unconstrained_pat pat cxt in
+      ((exp1, cxt), env, prefix) :: (
+        (pat_to_exp pat, cxt'), env, prefix) :: [((exp, cxt'), env, prefix)]
+   | Parsetree.Pexp_apply (exp, lexps) ->
+       ((exp, cxt), env, prefix) ::
+       List.map (fun (_, exp) -> ((exp, cxt), env, prefix)) lexps
+   | Parsetree.Pexp_match (exp, cases) ->
+       ((exp, cxt), env, prefix) ::
+       List.flatten (List.map
+                      (fun case -> decompose_case ((case, cxt), env, prefix))
+                      cases)
+   | Parsetree.Pexp_try (exp, cases) ->
+       ((exp, cxt), env, prefix) ::
+       List.flatten (List.map
+                      (fun case -> decompose_case ((case, cxt), env, prefix))
+                      cases)
+   | Parsetree.Pexp_tuple (exps) ->
+       List.map (fun exp -> ((exp, cxt), env, prefix)) exps
+   | Parsetree.Pexp_construct (_, None) -> []
+   | Parsetree.Pexp_construct (_, Some ({pexp_desc = Pexp_tuple (exps)})) ->
+       (* :: など infix の構成子だと組をハイライトできないため *)
+       List.map (fun exp -> ((exp, cxt), env, prefix)) exps
+   | Parsetree.Pexp_construct (_, Some (exp)) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_variant (_, None) -> []
+   | Parsetree.Pexp_variant (_, Some (exp)) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_record (lexps, None) ->
+       List.map (fun (_, exp) -> ((exp, cxt), env, prefix)) lexps
+   | Parsetree.Pexp_record (lexps, Some (exp)) ->
+       ((exp, cxt), env, prefix) ::
+       List.map (fun (_, exp) -> ((exp, cxt), env, prefix)) lexps
+   | Parsetree.Pexp_field (exp, _) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_setfield (exp1, _, exp2) ->
+       [((exp1, cxt), env, prefix); ((exp2, cxt), env, prefix)]
+   | Parsetree.Pexp_array (exps) ->
+       List.map (fun exp -> ((exp, cxt), env, prefix)) exps
+   | Parsetree.Pexp_ifthenelse (exp1, exp2, None) ->
+       [((exp1, cxt), env, prefix); ((exp2, cxt), env, prefix)]
+   | Parsetree.Pexp_ifthenelse (exp1, exp2, Some (exp3)) ->
+       [((exp1, cxt), env, prefix); ((exp2, cxt), env, prefix);
+        ((exp3, cxt), env, prefix)]
+   | Parsetree.Pexp_sequence (exp1, exp2) ->
+       [((exp1, cxt), env, prefix); ((exp2, cxt), env, prefix)]
+   | Parsetree.Pexp_while (exp1, exp2) ->
+       [((exp1, cxt), env, prefix); ((exp2, cxt), env, prefix)]
+   | Parsetree.Pexp_constraint (exp, _)
+       when exp = hole_of_exp exp ->
+       []
+   | Parsetree.Pexp_constraint (exp1, typ) ->
+       let exp' = { exp with
+                    pexp_desc = Pexp_constraint (hole_of_exp exp, typ) }
+       in [((exp', cxt), env, prefix);
+           ((exp1, cxt), env, prefix)]
+   | Parsetree.Pexp_send (exp, _) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_setinstvar (_, exp) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_assert (exp) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_lazy (exp) ->
+       [((exp, cxt), env, prefix)]
+   | Parsetree.Pexp_open (_, exp) ->
+       [((exp, cxt), env, prefix)]
+   | _ ->
+       Format.fprintf ppf
+         "default case of decompose:@ %a@." Pprintast.expression exp;
+       []
+
+(********** obtain type and environment of expr **********)
+
+(* type of elements of yes/no list *)
+(* type yes_no_list = (string context_t * type_expr) list *)
+(* yes_no_list という名前を使っているが、ここでは環境として使っている *)
+
+(* collect_one : (string context_t * type_expr) list context_t -> string list ->
+                 type_expr -> yes_no_list * type_expr *)
+let collect_one ((vartyps, cxt'), env, prefix) vars typ =
+  match decode_tuple typ with
+      Some (exp_typ :: _ :: typs) -> (* _ は dummy_int0 の型 *)
+        (List.map2 (fun v t -> (((v, cxt'), env, prefix), t)) vars typs
+         @ vartyps,
+         exp_typ)
+    | Some ([_]) | Some ([]) | None ->
+        Format.fprintf ppf "type:@.%a@." Printtyp.type_expr typ;
+        failwith "TypeDebugger: Error in collect_one"
+
+(* collect : expression context_t -> type_expr -> yes_no_list * type_expr *)
+let rec collect ((expr, cxt), env, prefix) t = match cxt with
+    Empty -> ([], t)
+  | Lambda (pat, cxt') ->
+      (* There and back again [Danvy&Goldberg ICFP'02] *)
+      let (vartyps, t') = collect ((expr, cxt'), env, prefix) t in
+      let vars = pattern_variables pat in
+      begin match split_arrow t' with
+          Some (_, t2) ->
+            collect_one ((vartyps, cxt'), env, prefix) vars t2
+        | None -> (* Can't happen *)
+            failwith "TypeDebugger: Error in collect"
+      end
+  | Let (_, _, cxt') -> collect ((expr, cxt'), env, prefix) t
+
+(* judge : expression context_t -> yes_no_list * type_expr *)
+let judge ((expr, cxt), env, prefix) =
+  let structure = plug_str (expr, cxt) in
+  let (structure', _, _, _) = Typemod.type_structure env structure in
+  match structure'.str_items with
+    {str_desc = Tstr_eval ({ exp_type = typ }, _)} :: [] ->
+      collect ((expr, cxt), env, prefix) typ
+  | _ -> failwith "TypeDebugger: Error in judge"
+
+(********** check whether the question was already answered **********)
+
+(* trace_answer : bool *)
+(* change this variable to true to show the answer trace *)
+let trace_answer = false
+
+(* answered_yes : string context_t -> type_expr -> yes_no_list -> Env.t ->
+                  bool *)
+let answered_yes (((st, _), _, _) as key) typ yes env = try
+  let t = List.assoc key yes in
+  let b = Ctype.moregeneral env false typ t in
+  if trace_answer then Format.fprintf ppf "answered_yes %s = %b@\n" st b;
+  b
+with Not_found -> false
+
+(* answered_no : string context_t -> type_expr -> yes_no_list -> Env.t ->
+                 bool *)
+let answered_no (((st, _), _, _) as key) typ no env = try
+  let t = List.assoc key no in
+  let b = Ctype.moregeneral env false t typ in
+  if trace_answer then Format.fprintf ppf "answered_no %s = %b@\n" st b;
+  b
+with Not_found -> false
+
+(********** the source of the type error identified; make messages **********)
+
+(* iter4 : ('a -> 'b -> 'c -> 'd -> unit) ->
+           'a list -> 'b list -> 'c list -> 'd list -> unit *)
+let rec iter4 f lst1 lst2 lst3 lst4 = match (lst1, lst2, lst3, lst4) with
+    ([], [], [], []) -> ()
+  | (f1 :: r1, f2 :: r2, f3 :: r3, f4 :: r4) ->
+      f f1 f2 f3 f4;
+      iter4 f r1 r2 r3 r4
+  | (_, _, _, _) ->
+      failwith "TypeDebugger: Error in iter4"
+
+(* make_message_pattern : pattern context_t -> unit *)
+let make_message_pattern ((pat, _), _, _) =
+  print_loc pat.ppat_loc;
+  print_identified ();
+  print_pattern ()
+
+(* make_message_recursive1 : value_binding context_t -> unit *)
+(* 長さが１の場合を特別扱い（長さ 1 の tuple が許されないため） *)
+let make_message_recursive1 ((binding, cxt), env, prefix) =
+  (* パターンを集めてくる *)
+  let pat = binding.pvb_pat in
+  (* その中の変数 *)
+  let vars = pattern_variables pat in
+  begin match vars with
+      [] -> (* Can't happen *)
+        failwith "TypeDebugger: Error in make_message_recursive1a"
+    | [var] ->
+        (* 変数名から変数の expression を作る関数 *)
+        let varexp x = Exp.mk (Pexp_ident (mknoloc (Longident.Lident x))) in
+        (* body を定義される変数にした再帰しない let 文 *)
+        let exp1 = Exp.mk (Pexp_let (Nonrecursive, [binding], varexp var)) in
+        (* それを単相の vars 用の fun 文で囲む *)
+        (* bindings = let rec f = e in ... なら *)
+        (* exp2 = fun f -> let f = e in f *)
+        (* fun f が used_typ を与え in f が inferred_typ を与える *)
+        let exp2 = Exp.mk (Pexp_fun (Nolabel, None, pat, exp1)) in
+        if debug land 4 = 4 then Format.fprintf ppf "exp2:@.%a@."
+                                   Pprintast.expression exp2;
+        (* その型を求める *)
+        let (_, typ) = judge ((exp2, cxt), env, prefix) in
+        begin match split_arrow typ with
+            None -> (* Can't happen *)
+              failwith "TypeDebugger: Error in make_message_recursive1b"
+          | Some (used_typ, inferred_typ) ->
+              print_loc binding.pvb_expr.pexp_loc;
+              print_identified ();
+              print_recursive inferred_typ var used_typ
+              (*
+              以下の場合分けは不要。then のケースは occur check に
+              引っかかったことを示す。let rec f x = f とか。
+              if Ctype.moregeneral env false used_typ inferred_typ
+              then print_recursive inferred_typ var used_typ
+              else print_recursive inferred_typ var used_typ
+              *)
+        end
+    | _ :: _ -> (* let rec で定義されるものが変数ではなくパターン *)
+        failwith "TypeDebugger: non-variable let rec not supported1."
+  end
+
+(* make_message_recursive_many : value_binding list context_t -> unit *)
+let make_message_recursive_many ((bindings, cxt), env, prefix) =
+  (* パターンを集めてくる *)
+  let pats = List.map (fun {pvb_pat = pat} -> pat) bindings in
+  (* その中の変数たち *)
+  let varss = List.map pattern_variables pats in
+  if List.exists (fun vars -> List.length vars <> 1) varss
+  then (* let rec で定義されるものが変数ではなくパターン *)
+    failwith "TypeDebugger: non-variable let rec not supported."
+  else
+    (* 定義される変数全て *)
+    let vars = List.flatten varss in
+    (* 変数名から変数の expression を作る関数 *)
+    let varexp x = Exp.mk (Pexp_ident (mknoloc (Longident.Lident x))) in
+    (* body を定義される変数の組にした再帰しない let 文 *)
+    let body = Exp.mk (Pexp_tuple (List.map varexp vars)) in
+    let exp1 = Exp.mk (Pexp_let (Nonrecursive, bindings, body)) in
+    (* それを単相の vars 用の fun 文で囲む *)
+    (* bindings = let rec f1 = e1 and f2 = e2 in ... なら *)
+    (* exp2 = fun (f1, f2) -> let f1 = e1 and f2 = e2 in (f1, f2) *)
+    let pat2 = Pat.mk (Ppat_tuple pats) in
+    let exp2 = Exp.mk (Pexp_fun (Nolabel, None, pat2, exp1)) in
+    (* その型を求める *)
+    let (_, typ) = judge ((exp2, cxt), env, prefix) in
+    begin match split_arrow typ with
+        None -> (* Can't happen *)
+          failwith "TypeDebugger: Error in make_message_recursive_many"
+      | Some (used_typ, inferred_typ) ->
+          begin match (decode_tuple used_typ, decode_tuple inferred_typ) with
+              (Some (used_typs), Some (inferred_typs)) ->
+                print_identified ();
+                iter4 (fun utyp ityp var binding ->
+                         if Ctype.moregeneral env false utyp ityp
+                         then ()
+                         else begin
+                           print_loc binding.pvb_expr.pexp_loc;
+                           print_recursive ityp var utyp
+                         end)
+                      used_typs inferred_typs vars bindings
+            | (_, _) ->
+                failwith "TypeDebugger: Error in make_message_recursive_many2"
+          end
+    end
+
+(* make_message_recursive : value_binding list context_t -> unit *)
+(* recursive なパターン pats = exps が型エラーの原因 *)
+(* 関数の定義と再帰呼び出し時の型がずれている *)
+let make_message_recursive ((bindings, cxt), env, prefix) = match bindings with
+    [] -> (* Can't happen *)
+      failwith "TypeDebugger: Error in make_message_recursive"
+  | [binding] ->
+      make_message_recursive1 ((binding, cxt), env, prefix)
+  | _ :: _ ->
+      make_message_recursive_many ((bindings, cxt), env, prefix)
+
+(* make_message_bindings : value_binding list context_t -> unit *)
+(* パターン pats = exps が型エラーの原因 *)
+(* binding は recursive ではない *)
+let make_message_bindings ((bindings, cxt), env, prefix) =
+  let rec loop bindings = match bindings with
+      [] -> failwith "TypeDebugger: Error in make_message_bindings"
+    | {pvb_pat = pat; pvb_expr = exp} as binding :: rest ->
+        let exp0 = { pexp_desc       = Pexp_let (Nonrecursive, [binding],
+                                                skeleton);
+                     pexp_loc        = Location.none;
+                     pexp_loc_stack  = [];
+                     pexp_attributes = [] } in
+        if is_well_typed_expr ((exp0, cxt), env, prefix)
+        then loop rest
+        else begin match pat with
+            { ppat_desc = Ppat_constant (_) } -> (* constant のとき *)
+              print_loc pat.ppat_loc;
+              print_identified ();
+              print_patexps2 ()
+          | _ -> (* それ以外のパターン *)
+              let (_, typ) = judge ((exp, cxt), env, prefix) in
+              print_loc exp.pexp_loc;
+              print_identified ();
+              print_patexps typ
+        end
+  in loop bindings
+
+(* とりあえず型チェック *)
+let make_message_case ((case, cxt), env, prefix) =
+  (* case の式を歩く関数 *)
+  let rec walk_in_case exp progs = match progs with
+    | [] ->
+       let (lhs, rhs) = (case.pc_lhs, case.pc_rhs) in
+       if exp = skeleton then
+         let progs' =
+           decompose_expr ((case.pc_rhs, cxt), env, prefix) Illtyped in
+         walk_in_case skeleton progs'
+       else
+         (* 変数を特定 *)
+         let loc =
+           let (lloc, rloc) = (lhs.ppat_loc, rhs.pexp_loc) in
+           {loc_start = lloc.loc_start;
+            loc_end = rloc.loc_end;
+            loc_ghost = rloc.loc_ghost;} in
+         (lhs, loc, exp)
+    | ((expr', _), env', _) :: rest ->
+       try
+         ignore(Typecore.type_expression env' expr');
+         walk_in_case exp rest
+       with
+       | _ ->
+          (* expr' がエラーになる式だった *)
+          let rest' =
+            decompose_expr ((expr', cxt), env, prefix) Illtyped in
+          walk_in_case expr' rest' in
+  (* 実行結果 *)
+  let (_, loc, exp) = walk_in_case skeleton [] in
+  print_loc loc;
+  print_identified ();
+  print_illtyped_case exp
+
+(* bool_typ : core_type *)
+let bool_typ = Typ.mk (Ptyp_constr (mknoloc (Longident.Lident "bool"), []))
+                          
+(* unit_typ : core_type *)
+let unit_typ = Typ.mk (Ptyp_constr (mknoloc (Longident.Lident "unit"), []))
+
+(* is_bool_expr : expression context_t -> bool *)
+let is_bool_expr ((exp, cxt), env, prefix) =
+  (* exp with bool annotation *)
+  let exp' = { exp with pexp_desc = Pexp_constraint (exp, bool_typ) } in
+  is_well_typed_expr ((exp', cxt), env, prefix)
+
+(* is_unit_expr : expression context_t -> bool *)
+let is_unit_expr ((exp, cxt), env, prefix) =
+  (* exp with unit annotation *)
+  let exp' = { exp with pexp_desc = Pexp_constraint (exp, unit_typ) } in
+  is_well_typed_expr ((exp', cxt), env, prefix)
+(*
+(* make_message_illtyped : expression context_t -> unit *)
+let make_message_illtyped ((expr, cxt), env, prefix) (* yes no *) =
+  match expr.pexp_desc with
+    Parsetree.Pexp_ident (_) ->
+      print_loc expr.pexp_loc;
+      print_identified ();
+      print_illtyped_var_undefined ()
+  | Parsetree.Pexp_ifthenelse (exp1, exp2, None) ->
+      if not (is_bool_expr ((exp1, cxt), env, prefix)) then
+        (* predicate 部分が bool 型でない *)
+        let (_, typ1) = judge ((exp1, cxt), env, prefix) in begin
+          print_loc exp1.pexp_loc;
+          print_identified ();
+          print_illtyped_if_predicate typ1
+        end
+      else if not (is_unit_expr ((exp2, cxt), env, prefix)) then
+        (* then 部分が unit 型でない *)
+        let (_, typ2) = judge ((exp2, cxt), env, prefix) in begin
+          print_loc exp2.pexp_loc;
+          print_identified ();
+          print_illtyped_if_then typ2
+        end
+      else begin (* both are well_typed; conflicts in environment *)
+        print_loc expr.pexp_loc;
+        print_identified ();
+        print_illtyped_if_fv ()
+      end
+
+  | Parsetree.Pexp_ifthenelse (exp1, exp2, Some (exp3)) ->
+      if not (is_bool_expr ((exp1, cxt), env, prefix)) then
+        (* predicate 部分が bool 型でない *)
+        let (_, typ1) = judge ((exp1, cxt), env, prefix) in begin
+          print_loc exp1.pexp_loc;
+          print_identified ();
+          print_illtyped_if_predicate typ1
+        end
+      else (* [exp2; exp3] を同じリストに入れる *)
+        let mtloc = mknoloc (Longident.Lident "[]") in
+        let mt = Exp.mk (Pexp_construct (mtloc, None)) in
+        let consloc = mknoloc (Longident.Lident "::") in
+        let cons e1 e2 =
+          let e = Exp.mk (Pexp_tuple [e1; e2]) in
+          Exp.mk (Pexp_construct (consloc, Some e)) in
+        let exp' = cons exp2 (cons exp3 mt) in
+        if not (is_well_typed_expr ((exp', cxt), env, prefix)) then
+          (* then 部分と else 部分が同じ型でない *)
+          (* または then 部分と else 部分で環境の衝突が起きた *)
+          let (_, typ2) = judge ((exp2, cxt), env, prefix) in
+          let (_, typ3) = judge ((exp3, cxt), env, prefix) in begin
+            print_loc expr.pexp_loc;
+            print_identified ();
+            print_illtyped_if_then_else typ2 typ3
+          end
+        else begin (* if 文全体で環境の衝突が起きている *)
+          print_loc expr.pexp_loc;
+          print_identified ();
+          print_illtyped_if_fv ()
+        end
+
+  | Parsetree.Pexp_apply (exp, lexps) ->
+      let (_, exp_typ) = judge ((exp, cxt), env, prefix) in (* 関数の型 *)
+      let typs = List.map (fun (_, e) -> snd (judge ((e, cxt), env, prefix)))
+                          lexps in (* 引数の型 *)
+      let exps = List.map (fun (_, e) -> e) lexps in
+      if split_arrow exp_typ = None then begin
+        (* 関数部分が関数型になっていない *)
+        print_loc expr.pexp_loc;
+        print_identified ();
+        print_illtyped_apply_not_function exp_typ
+      end else
+        (* 型エラーを起こすことなく渡せる引数列と
+         * 型エラーを起こす最初の引数のペアを返す *)
+        let rec well_typed_args wargs lexps = match lexps with
+            [] ->
+              failwith "TypeDebugger: Error: apply in make_message_illtyped."
+          | first :: rest ->
+              let wargs' = wargs @ [first] in
+              let exp' = Exp.mk (Pexp_apply (exp, wargs')) in
+              if is_well_typed_expr ((exp', cxt), env, prefix)
+              then well_typed_args wargs' rest
+              else (wargs, first) in
+        let (wargs, (_, arg)) = well_typed_args [] lexps in
+        (* 何番目の引数が型エラーを引き起こすか *)
+        let n = List.length wargs + 1 in
+        (* 型エラーになる直前までの型 *)
+        let typ = if n = 1 then exp_typ
+                  else let wexp = Exp.mk (Pexp_apply (exp, wargs)) in
+                       snd (judge ((wexp, cxt), env, prefix)) in
+                       (* wargs = [] だと judge が syntax error を起こす *)
+        begin match split_arrow typ with
+            None -> (* typ が関数型でなかった：引数が多かった場合 *)
+              print_loc expr.pexp_loc;
+              print_identified ();
+              print_illtyped_too_much_args n exp_typ typs exp
+          | Some (t1, _) -> (* n 番目の引数が型エラー *)
+              print_loc expr.pexp_loc;
+              print_identified ();
+              if language_level < 2
+              then (* language_level < 2 では関数引数は不可 *)
+                let (_, n_typ) = judge ((arg, cxt), env, prefix) in
+                (* 型エラーの原因となっている引数の型 *)
+                let funtypes = find_funtype_args typs 1 in
+                (* 関数型になっている引数 *)
+                begin match funtypes with
+                    [] -> (* 関数型になっている引数なし *)
+                      print_illtyped_apply_beginning2 n exp exp_typ n_typ
+                  | _ -> (* 関数型になっている引数あり *)
+                      print_illtyped_apply_beginning n exp exp_typ typs funtypes
+                end
+              (* language_level >= 2 は関数引数可 *)
+              else
+                print_illtyped_apply_funname n exp_typ exps typs t1 exp
+        end
+
+  | Parsetree.Pexp_function (_) ->
+      print_illtyped_function ()
+
+  | Parsetree.Pexp_fun (_, _, _, _) ->
+      print_illtyped_function ()
+
+  | Parsetree.Pexp_match (exp, cases) ->
+  (* Pexp_match の補助変数 ------------------------------------------------ *)
+      (* body と guard を無効にした cases *)
+      let pattern_only_cases =
+        List.map (fun {pc_lhs = pat; } ->
+                    {pc_lhs = pat; pc_guard = None; pc_rhs = skeleton})
+                 cases in
+      (* body のみを無効にした cases *)
+      let pattern_and_guard_cases =
+        List.map (fun {pc_lhs = pat; pc_guard = g; } ->
+                    {pc_lhs = pat; pc_guard = g; pc_rhs = skeleton})
+                 cases in
+
+  (* Pexp_match の補助関数 ------------------------------------------------ *)
+      (* pattern の型が合っているかを調べる *)
+      (* pattern をひとつずつ加えて、型がつかなくなるところを探す *)
+      let rec patterns_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_match (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then patterns_ok exp wcases' rest
+            else begin match wcases with
+                [] -> (* 最初の case が型エラー。exp と case が合わない*)
+                  let case' = Exp.mk (Pexp_function ([case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match1:@.%a@."
+                      Pprintast.expression case';
+                  (* 最初のパターンの型 *)
+                  let (_, pat_typ) = judge ((case', cxt), env, prefix) in
+                  begin match split_arrow pat_typ with
+                    Some (t1, _) ->
+                      (* exp の型 *)
+                      let (_, exp_typ) = judge ((exp, cxt), env, prefix) in
+                      print_loc expr.pexp_loc;
+                      print_identified ();
+                      print_illtyped_match_exp exp_typ t1;
+                      false
+                  | None -> (* Can't happen *)
+                      failwith "TypeDebugger: match2 in make_message_illtyped."
+                  end
+              | _ :: _ -> (* case 同士で型エラー *)
+                  let wcases' = Exp.mk (Pexp_function (wcases)) in
+                  (* 型が合っている case の型 *)
+                  let (_, ok_typ) = judge ((wcases', cxt), env, prefix) in
+                  let case' = Exp.mk (Pexp_function ([case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match3:@.%a@."
+                      Pprintast.expression case';
+                  (* 型が合わない case の型 *)
+                  let (_, notok_typ) = judge ((case', cxt), env, prefix) in
+                  begin match (split_arrow ok_typ, split_arrow notok_typ) with
+                    (Some (ok1, _), Some (notok1, _)) ->
+                      print_loc case.pc_lhs.ppat_loc;
+                      print_identified ();
+                      print_illtyped_match_left notok1 ok1;
+                      false
+                  | (_, _) -> (* Can't happen *)
+                      failwith "TypeDebugger: match4 in make_message_illtyped."
+                  end
+            end in
+      (* guard が全て bool かどうかを調べる *)
+      let guards_all_bool cases =
+        List.for_all
+          (function {pc_guard = None} -> true
+            | {pc_guard = Some (g)} ->
+                if is_bool_expr ((g, cxt), env, prefix)
+                then true
+                else begin
+                  let (_, g_typ) = judge ((g, cxt), env, prefix) in
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard g_typ;
+                  false
+                end)
+          cases in
+      (* guard と exp で環境が衝突していないかを調べる *)
+      let rec guards_ok_with_exp exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_match (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then guards_ok_with_exp exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match case with
+                {pc_guard = None} -> (* Can't happen *)
+                  failwith "TypeDebugger: match5 in make_message_illtyped."
+              | {pc_guard = Some (g)} ->
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard_env ();
+                  false
+              end in
+      (* cases に型がつくかを順に調べる *)
+      (* 各ケースの型を独立に求め、その型が皆同じかを調べたい *)
+      (* すると、以後は、環境の衝突のみを考えれば良くなる *)
+      let rec cases_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_match (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then cases_ok exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match wcases with
+              | [] -> (* case がひとつ目からだめ *)
+                 (* exp と case で環境が conflict している *)
+                 (* print_loc expr.pexp_loc; *)
+                 (* print_identified (); *)
+                 (* print_illtyped_other (); (* メッセージを変えるべき *) *)
+                 (* false *)
+                 let progs = decompose_expr ((case.pc_rhs, cxt), env, prefix) Typed in
+                 List.iter (fun ((exp, _), _, _) -> Pprintast.expression ppf exp) progs;
+                 let loc = (case.pc_rhs).pexp_loc in
+                 print_loc loc;
+                 print_identified ();
+                 print_illtyped_case_env case.pc_rhs;
+                 false
+              | _ :: _ -> (* case の右辺の式、あるいは環境の衝突が原因 *)
+                  let wcases' = Exp.mk (Pexp_match (exp, wcases)) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match6:@.%a@."
+                      Pprintast.expression wcases';
+                  (* 型が合っている case の型 *)
+                  let (_, ok_typ) = judge ((wcases', cxt), env, prefix) in
+                  let case' = Exp.mk (Pexp_match (exp, [case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match7:@.%a@."
+                      Pprintast.expression case';
+                  (* 型が合わない case の型 *)
+                  begin try
+                    let (_, notok_typ) = judge ((case', cxt), env, prefix) in
+                    print_loc case.pc_rhs.pexp_loc;
+                    print_identified ();
+                    print_illtyped_match_right notok_typ ok_typ;
+                    false
+                  with _ -> (* 型エラーが起きた。環境が衝突している *)
+                    print_loc case.pc_rhs.pexp_loc;
+                    print_identified ();
+                    print_illtyped_match_right2 ();
+                    false
+                  end
+              end in
+
+  (* Pexp_match のメイン -------------------------------------------------- *)
+      if patterns_ok exp [] pattern_only_cases
+      && guards_all_bool pattern_and_guard_cases
+      && guards_ok_with_exp exp [] pattern_and_guard_cases
+      && cases_ok exp [] cases
+      then failwith "TypeDebugger: match is welltyped in make_message_illtyped."
+      else () (* error already reported in one of the predicates *)
+(*
+      (* exp は単独では型はついている。match 文全体では型はつかない *)
+      if debug land 8 = 8 then
+        Format.fprintf ppf "message illtyped match1:@.%a@."
+          Pprintast.expression exp;
+*)
+
+  | Parsetree.Pexp_try (exp, cases) ->
+  (* Pexp_try の補助変数 ------------------------------------------------ *)
+      (* body と guard を無効にした cases *)
+      let pattern_only_cases =
+        List.map (fun {pc_lhs = pat} ->
+                    {pc_lhs = pat; pc_guard = None; pc_rhs = skeleton})
+                 cases in
+      (* body のみを無効にした cases *)
+      let pattern_and_guard_cases =
+        List.map (fun {pc_lhs = pat; pc_guard = g} ->
+                    {pc_lhs = pat; pc_guard = g; pc_rhs = skeleton})
+                 cases in
+
+  (* Pexp_try の補助関数 ------------------------------------------------ *)
+      (* pattern の型が合っているかを調べる *)
+      (* pattern をひとつずつ加えて、型がつかなくなるところを探す *)
+      let rec patterns_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_try (skeleton, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then patterns_ok exp wcases' rest
+            else begin match wcases with
+                [] -> true
+              | _ :: _ -> (* case 同士で型エラー *)
+                  let wcases' = Exp.mk (Pexp_function (wcases)) in
+                  (* 型が合っている case の型 *)
+                  let (_, ok_typ) = judge ((wcases', cxt), env, prefix) in
+                  let case' = Exp.mk (Pexp_function ([case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match3:@.%a@."
+                      Pprintast.expression case';
+                  (* 型が合わない case の型 *)
+                  let (_, notok_typ) = judge ((case', cxt), env, prefix) in
+                  begin match (split_arrow ok_typ, split_arrow notok_typ) with
+                    (Some (_, _), Some (notok1, _)) ->
+                      print_loc case.pc_lhs.ppat_loc;
+                      print_identified ();
+                      print_illtyped_try_left notok1;
+                      false
+                  | (_, _) -> (* Can't happen *)
+                      failwith "TypeDebugger: match4 in make_message_illtyped."
+                  end
+            end in
+      (* guard が全て bool かどうかを調べる *)
+      let guards_all_bool cases =
+        List.for_all
+          (function {pc_guard = None} -> true
+            | {pc_guard = Some (g)} ->
+                if is_bool_expr ((g, cxt), env, prefix)
+                then true
+                else begin
+                  let (_, g_typ) = judge ((g, cxt), env, prefix) in
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard g_typ;
+                  false
+                end)
+          cases in
+      (* guard と exp で環境が衝突していないかを調べる *)
+      let rec guards_ok_with_exp exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_try (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then guards_ok_with_exp exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match case with
+                {pc_guard = None} -> (* Can't happen *)
+                  failwith "TypeDebugger: match5 in make_message_illtyped."
+              | {pc_guard = Some (g)} ->
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard_env ();
+                  false
+              end in
+      (* cases に型がつくかを順に調べる *)
+      (* 各ケースの型を独立に求め、その型が皆同じかを調べたい *)
+      (* すると、以後は、環境の衝突のみを考えれば良くなる *)
+      let rec cases_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_try (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then cases_ok exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match wcases with
+                [] | [_] | _ -> (* case がひとつ目からだめ *)
+                let case' = Exp.mk (Pexp_function ([case])) in
+                if debug land 8 = 8 then
+                  Format.fprintf ppf "message illtyped match1:@.%a@."
+                                 Pprintast.expression case';
+                (* 最初のパターンの型 *)
+                let (_, pat_typ) = judge ((case', cxt), env, prefix) in
+                begin match split_arrow pat_typ with
+                    Some (_, t2) ->
+                      (* exp の型 *)
+                      let (_, exp_typ) = judge ((exp, cxt), env, prefix) in
+                      let case_loc = (case.pc_rhs).pexp_loc in
+                      print_loc case_loc;
+                      print_identified ();
+                      (* 環境の衝突かどうかを確認 *)
+                      (try
+                          (Ctype.unify env exp_typ t2;
+                           print_illtyped_try_env ();
+                           false)
+                        with
+                          _ -> print_illtyped_try_right exp_typ t2;
+                      (* try文の式と矢印の右側の型が合わない *)
+                      false)
+                  | None -> (* Can't happen *)
+                      failwith "TypeDebugger: match2 in make_message_illtyped."
+                end
+              end in
+
+  (* Pexp_try のメイン -------------------------------------------------- *)
+      let exn_case =
+        [{ pc_lhs = { ppat_desc = Ppat_construct
+                                    ({txt = Longident.Lident ("Not_found");
+                                      loc = Location.none},
+                                     None);
+                      ppat_loc = Location.none;
+                      ppat_attributes = [] };
+           pc_guard = None;
+           pc_rhs = skeleton }] in
+      if (patterns_ok exp exn_case pattern_only_cases)
+      && (guards_all_bool pattern_and_guard_cases)
+      && (guards_ok_with_exp exp [] pattern_and_guard_cases)
+      && (cases_ok exp [] cases)
+      then failwith "TypeDebugger: match is welltyped in make_message_illtyped."
+      else () (* error already reported in one of the predicates *)
+
+  | Parsetree.Pexp_construct ({txt = lid}, e) ->
+      (* 引数の情報 *)
+      let args =
+        List.map (fun (e, t) ->
+                   if e = dummy_assertfalse e then None else Some (e, t))
+          (match e with
+            | Some (exp) ->
+               let typ = snd (judge ((exp, cxt), env, prefix)) in
+               begin
+                 (* 引数の数をチェック *)
+                 match (decode_tuple typ) with
+                 | Some (typs) ->
+                    let exps = match exp.pexp_desc with
+                      | Pexp_tuple (es) -> es
+                      | _ -> assert false in
+                    List.combine exps typs
+                 | None -> [(exp, typ)]
+               end
+            | None -> []) in
+
+      (* extract core type list from constructor arguments *)
+      (* extract_core_types : constructor_arguments -> core_type list *)
+      let extract_core_types carg = match carg with
+        | Pcstr_tuple (cts) -> cts
+        | Pcstr_record (_) -> assert false (* not supported yet *)
+      in
+
+      (* prefix の分解 *)
+      (* prefix -> (string * kind) list *)
+      let rec get_construct prefix = match prefix with
+        | [] -> []
+        | (first, _) :: rest ->
+            begin match first.pstr_desc with
+            | Pstr_type (_, tds) ->
+                (* 型の情報 *)
+                (* type_declaration list -> (string * type_kind) list *)
+                (List.map (fun {ptype_name = n; ptype_kind = k} ->
+                            (n.txt, get_type_value k)) tds) @
+                (get_construct rest)
+            | Pstr_exception ({pext_name = n; pext_kind = k}) ->
+                (* 例外の情報 *)
+                (n.txt, get_ext_value n.txt k) :: (get_construct rest)
+            | Pstr_module ({pmb_name = n; pmb_expr = e}) ->
+                (* モジュール名と中の式 *)
+                begin match e.pmod_desc with
+                  | Pmod_structure (strs) ->
+                    let pre_mod = get_construct
+                                    (List.map (fun x -> (x, Env.empty)) strs) in
+                    let a = List.map (fun (nk, kind) ->
+                                       (n.txt ^ "." ^ nk,
+                                        List.map (fun (nc, cts) ->
+                                                   (n.txt ^ "." ^ nc, cts))
+                                                 kind))
+                                     pre_mod in
+                    a @ (get_construct rest)
+                  | _ -> get_construct rest
+                end
+            | _ -> get_construct rest
+            end
+
+      (* kind の分解 *)
+      (* type_kind -> (string, core_type list) list *)
+      and get_type_value kind = match kind with
+        | Ptype_variant (cds) ->
+          List.map (fun {pcd_name = n; pcd_args = a} ->
+                     (n.txt, extract_core_types a)) cds
+        | _ -> []
+      (* extension_constructor_kind -> (string, core_type list) list *)
+      and get_ext_value name kind = match kind with
+        | Pext_decl (cts, None) ->
+          (* 引数を取る場合をとりあえず *)
+          [(name, extract_core_types cts)]
+        | _ -> [] in
+
+      print_loc expr.pexp_loc;
+      print_identified ();
+      print_illtyped_constructor lid (get_construct prefix) args
+
+  | Parsetree.Pexp_record (lst, None) -> (* illtyped *)
+      print_loc expr.pexp_loc;
+      print_identified ();
+(*
+      (* typs : エラーが出た箇所でのフィールドの型 *)
+      let typs = List.map (fun ({txt = t}, e) -> (snd (judge ((e, cxt), env, prefix))), t) lst in
+      (* exps : エラーが出た箇所での式 *)
+      let exps = List.map (fun (_, e) -> e) lst in
+ *)
+      (* 上記フィールドの名称を取得 *)
+
+      (* ダミーの型 *)
+      let dummy_exp =
+        { pexp_desc = Parsetree.Pexp_record
+                        (List.map (fun (lid, _) -> (lid, skeleton)) lst, None);
+          pexp_loc = Location.none;
+          pexp_attributes = [] } in
+      let dummy_t = snd (judge ((dummy_exp, cxt), env, prefix)) in
+
+      (* prefixからフィールドの中身を取り出す *)
+      let rec dummy_string d = match d with
+        | {desc = Tconstr (p, _, _)} -> Path.name p
+        | {desc = Tsubst (expr)} -> dummy_string expr
+        | {desc = Tlink (expr)} -> dummy_string expr (* #useで呼び出した場合 *)
+        | _ -> Format.fprintf ppf "%a@." Printtyp.type_expr d;  assert false in
+      let rec get_params tlst = match tlst with
+        | [] -> raise Not_found
+        | {ptype_name = {txt = t}; ptype_kind = Ptype_record llst} :: rest ->
+           if t = dummy_string dummy_t then llst else get_params rest
+        | _ :: rest -> get_params rest in
+      let rec search_rec p = match p with
+          [] -> assert false
+        | ({pstr_desc = Pstr_type (_, tlst)}, _) :: rest ->
+           begin
+             try get_params tlst with
+             Not_found -> search_rec rest
+           end
+        | _ :: rest -> search_rec rest in
+      (* 各フィールドの情報 *)
+      let fields =
+        List.map2 (fun ({txt = f}, e) ft ->
+                   ((f, ft), (e, snd (judge ((e, cxt), env, prefix)))))
+                  lst (search_rec prefix) in
+      print_illtyped_record dummy_t fields
+
+  | Parsetree.Pexp_constraint (exp, t) ->
+      print_loc expr.pexp_loc;
+      print_identified ();
+      let (_, typ1) = judge ((exp, cxt), env, prefix) in
+      let exp' = { pexp_desc = Parsetree.Pexp_constraint (skeleton, t);
+                   pexp_loc = Location.none;
+                   pexp_attributes = [] } in
+      let (_, typ2) = judge ((exp', cxt), env, prefix) in
+      print_illtyped_constraint typ1 typ2
+
+  | Parsetree.Pexp_array (es) ->
+      (* array に関するエラー *)
+      let typs =
+        List.map (fun exp -> snd (judge ((exp, cxt), env, prefix)))
+                 (List.filter (fun e -> e <> dummy_assertfalse e) es) in
+      let (typ1, typ2) = (List.nth typs 0, List.nth typs 1) in
+      print_loc expr.pexp_loc;
+      print_identified ();
+      print_illtyped_array typ1 typ2
+  | Parsetree.Pexp_let (flg, vs, _) ->
+      (* 再起関数の rec を忘れた場合 *)
+      print_loc expr.pexp_loc;
+      print_identified ();
+      if flg = Nonrecursive
+      then match vs with
+        | [] -> ()
+        | first :: rest -> print_illtyped_let first rest
+      else if List.length vs > 1
+      then print_illtyped_let_rec_many vs
+      else print_illtyped_let_rec1 (List.hd vs)
+  | _ -> (* illtyped *)
+       print_loc expr.pexp_loc;
+       print_identified ();
+       Format.fprintf ppf "default case of make_message_illtyped@.";
+       print_illtyped_other ()
+
+(* make_message_welltyped : expression context_t -> yes_no_list -> unit *)
+let make_message_welltyped ((expr, cxt), env, prefix) no =
+  (* 型エラーの原因と特定された式の型 *)
+  let (vartyps, t) = judge ((expr, cxt), env, prefix) in
+  let vartyps' = List.filter (fun (key, typ) -> answered_no key typ no env)
+                             vartyps in
+  print_loc expr.pexp_loc;
+  print_identified ();
+  match vartyps' with
+      [] -> (* 自由変数は意図通り *)
+        print_welltyped_expr t
+    | (((st, _), _, _), typ) :: [] -> (* 自由変数が意図通りでない *)
+        print_welltyped_env1 st typ
+    | (((st, _), _, _), typ) :: rest ->
+        print_welltyped_env_many st typ rest
+ *)
+
+(********** ask questions **********)
+
+(* ノード数カウント用の関数には全て node_count_ がついている *)
+
+(* node_count_ask_env :
+             (string context_t * type_expr) list -> Env.t ->
+             yes_no_list -> yes_no_list ->
+             int * yes_no_list * yes_no_list *)
+let rec node_count_ask_env vartyps env yes no = match vartyps with
+    [] -> (0, yes, no)
+  | (((st, _), _, _) as key, typ) :: rest ->
+      if Ctype.moregeneral env false typ (Btype.newgenvar ())
+      || answered_yes key typ yes env
+      then node_count_ask_env rest env yes no
+      else if answered_no key typ no env
+      then (0, yes, no)
+      else begin
+        (* 1 回聞き（yes を仮定してさらに）先を聞きにいく *)
+        if print_asked_expr then begin
+          Format.fprintf ppf "ask_env: %s@." st
+        end;
+        let (num, yes', no') =
+          node_count_ask_env rest env ((key, typ) :: yes) no in
+        (num + 1, yes', no')
+      end
+
+(* ask_env : expression -> (string context_t * type_expr) list -> Env.t ->
+             yes_no_list -> yes_no_list ->
+             bool * yes_no_list * yes_no_list *)
+(*
+let rec ask_env expr vartyps env yes no = match vartyps with
+    [] -> (true, yes, no)
+  | (((st, _), _, _) as key, typ) :: rest ->
+      if Ctype.moregeneral env false typ (Btype.newgenvar ())
+      || answered_yes key typ yes env
+      then ask_env expr rest env yes no
+      else if answered_no key typ no env
+      then (false, yes, no)
+      else (print_loc expr.pexp_loc;
+            print_ask_env st typ;
+            print_prompt ();
+            let input = read_line () in
+            Format.fprintf ppf "@.";
+            match input with
+                "y" | "y;;" -> ask_env expr rest env ((key, typ) :: yes) no
+              | "n" | "n;;"  -> (false, yes, (key, typ) :: no)
+              | _ -> raise DebuggerQuit)
+ *)
+let answer_and_write ?(scope = "") expr (b, yes, no) =  
+  Data.Buffer.write scope expr (if b then "y" else "n");
+  (b, yes, no)
+
+let answer_and_set ?(scope = "") expr ans = match !debugger_state with
+  | Evaluate _ ->
+      (* ユーザの回答を反映させていない *)
+      Data.Buffer.write scope expr (if ans then "y" else "n");
+      debugger_state := Interactive (expr.pexp_loc, None);
+      ans
+  | _ -> raise Not_found (* 例外Not_foundを発生させる *)
+
+let answer ?(scope = "null") expr typ =
+  (* 次の質問を出力 *)
+  Format.fprintf ppf
+    "{\"location\": %a,@,\
+     \"type\": \"%a\", \"scope\": %s}@."
+    Data.Loc.printJSON expr.pexp_loc
+    Printtyp.type_expr typ scope;
+  exit 100
+
+let rec ask_env expr vartyps env yes no = match vartyps with
+    [] -> (true, yes, no)
+  | (((st, _), _, _) as key, typ) :: rest ->
+      if Ctype.moregeneral env false typ (Btype.newgenvar ())
+      || answered_yes key typ yes env then
+        ask_env expr rest env yes no
+      else if answered_no key typ no env then
+        (false, yes, no)
+      else
+        try
+          (* buffer に回答があるかどうかを探す *)
+          let {attr_name = {txt}} =
+            List.find (
+              fun {attr_payload = payload} ->
+                match payload with
+                  PPat (p, _) -> Desc.Pat.find st p <> wildcard
+                | _ -> false
+            ) expr.pexp_attributes in
+          if txt = "yes" then
+            ask_env expr rest env ((key, typ) :: yes) no
+          else
+            (false, yes, (key, typ) :: no)
+        with
+          Not_found ->
+            (* なかった *)
+            if Data.express_mode < 0 then
+              begin
+                print_loc expr.pexp_loc;
+                print_ask_env st typ;
+                print_prompt ();
+                let input = read_line () in
+                Format.fprintf ppf "@.";
+                match input with
+                | "y" | "y;;" ->
+                    let (_, yes', _) =
+                      answer_and_write
+                        ~scope:st expr (true, ((key, typ) :: yes), no) in
+                    ask_env expr rest env yes' no
+                | "n" | "n;;" ->
+                    answer_and_write
+                      ~scope:st expr (false, yes, (key, typ) :: no)
+                | _ -> raise DebuggerQuit
+              end
+            else
+              try
+                let ans = bool_of_string
+                    (Sys.getenv "DEBUGGER_USER_ANSWER") in
+                let (yes', no') =
+                  if ans then
+                    (((key, typ) :: yes), no)
+                  else
+                    (yes, (key, typ) :: no) in
+                (answer_and_set ~scope:st expr ans, yes', no')
+              with
+                Not_found ->
+                  answer ~scope:("\"" ^ st ^ "\"") expr typ
+
+              (* ask_expr_helper : expression -> type_expr -> Env.t ->
+                 yes_no_list -> yes_no_list ->
+   bool * yes_no_list * yes_no_list *)
+
+
+(*    
+let ask_expr_helper expr t env yes no =
+  if Ctype.moregeneral env false t (Btype.newgenvar ())
+  then (true, yes, no)
+  else
+    begin
+      if auto then (
+        print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+        Format.fprintf ppf "@.";
+        (true, yes, no)
+      ) else (
+        print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+        let input = read_line () in
+        Format.fprintf ppf "@.";
+        match input with
+        | "y" | "y;;" -> (true, yes, no)
+        | "n" | "n;;" -> (false, yes, no)
+        | _ -> raise DebuggerQuit (* 終わらせないようにしたい *)
+      ) end
+ *)
+
+(*
+let ask_expr_helper expr t env yes no =
+  if Ctype.moregeneral env false t (Btype.newgenvar ())
+  then (true, yes, no)
+  else if auto then (
+    print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+    Format.fprintf ppf "@.";
+    (true, yes, no)
+  ) else (
+    print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+    let input = read_line () in
+    Format.fprintf ppf "@.";
+    match input with
+    | "y" | "y;;" ->
+        (* buffer.csv への記録 *)
+        Data.Buffer.write "" expr "y";
+        if Sys.file_exists "slice.csv" then
+          (* raise (DebuggerPaused (None, fn, sl, sc, el, ec, 1)) *)
+          raise (DebuggerPaused ((t, ""), expr, true))
+        else
+          (true, yes, no)
+    | "n" | "n;;" ->
+        (* buffer.csv への記録 *)
+        Data.Buffer.write "" expr "n";
+        if Sys.file_exists "slice.csv" then             
+          raise (DebuggerPaused ((t, ""), expr, false))
+        else
+          (false, yes, no)
+    | _ -> raise DebuggerQuit (* 終わらせないようにしたい *)
+  )
+
+let rec ask_expr_helper' attrs yes no = match attrs with
+    [] -> raise Not_found
+  | ({txt}, PPat (p, _)) :: _ when p = wildcard ->
+      if txt = "yes" then
+        (true, yes, no)
+      else
+        (false, yes, no)
+  | _ :: rest ->
+      ask_expr_helper' rest yes no
+
+(* ask_expr : expression context_t -> type_expr -> Env.t ->
+              yes_no_list -> yes_no_list -> bool * yes_no_list * yes_no_list *)
+let ask_expr ((expr, _), _, _) t env yes no =
+  try
+    ask_expr_helper' expr.pexp_attributes yes no
+  with Not_found ->
+    ask_expr_helper expr t env yes no
+
+(*
+  ask_expr_helper expr t env yes no
+ *)
+
+*)
+
+let ask_expr_helper expr t env yes no =
+  if Ctype.moregeneral env false t (Btype.newgenvar ()) then
+    (true, yes, no)
+  else if auto then
+    begin
+      print_loc expr.pexp_loc;
+      print_ask_expr t;
+      print_prompt ();
+      Format.fprintf ppf "@.";
+      (true, yes, no)
+    end
+  else if Data.express_mode < 0 then
+    begin
+      print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+      let input = read_line () in
+      Format.fprintf ppf "@.";
+      match input with
+      | "y" | "y;;" ->
+          answer_and_write expr (true, yes, no)
+      | "n" | "n;;" ->
+          answer_and_write expr (false, yes, no)
+      | _ -> raise DebuggerQuit (* 終わらせないようにしたい *)
+    end
+  else
+    try
+      let ans = bool_of_string (Sys.getenv "DEBUGGER_USER_ANSWER") in
+      (answer_and_set expr ans, yes, no)
+    with
+      Not_found -> answer expr t
+
+(*    
+    begin
+      try
+        if Array.length Sys.argv = 7 then
+          raise DebuggerQuit
+        else
+          match Sys.argv.(7) with
+          | "y" -> (ask_expr_helper' expr true, yes, no)
+          | "n" -> (ask_expr_helper' expr false, yes, no)
+          | _ -> (* Debug_core.Node.Input.ask expr t; *)
+              Data.Buffer.write "" expr "q";
+              exit 100
+      with
+        Invalid_argument _ ->
+
+      if auto then (
+        print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+        Format.fprintf ppf "@.";
+        (true, yes, no)
+      ) else (
+        print_loc expr.pexp_loc; print_ask_expr t; print_prompt ();
+        let input = read_line () in
+        Format.fprintf ppf "@.";
+        match input with
+        | "y" | "y;;" ->
+            answer_and_write "" expr (true, yes, no)
+        | "n" | "n;;" ->
+            answer_and_write "" expr (false, yes, no)
+        | _ -> raise DebuggerQuit (* 終わらせないようにしたい *)
+      ) end
+*)
+
+(* ask_expr : expression context_t -> type_expr -> Env.t ->
+              yes_no_list -> yes_no_list -> bool * yes_no_list * yes_no_list *)
+let ask_expr ((expr, _), _, _) t env yes no =
+  try
+    let {attr_name = {txt}} =
+      List.find (
+          fun {attr_name = {txt}} ->
+            txt = "yes" || txt = "no"
+        ) expr.pexp_attributes in
+    (txt = "yes", yes, no)
+  with
+    Not_found -> ask_expr_helper expr t env yes no
+
+
+(********** check whether expr has intended type **********)
+
+(* node_count_has_intended_type :
+     expression context_t -> yes_no_list -> yes_no_list ->
+     int * yes_no_list * yes_no_list *)
+let node_count_has_intended_type ((expr, cxt), env, prefix) yes no =
+  let (vartyps, typ) = judge ((expr, cxt), env, prefix) in
+  (* 以下は全部 yes と答えた場合のノード数を返す *)
+  let (num, yes', no') = node_count_ask_env vartyps env yes no in
+  (* 以下は ask_expr_helper に沿って書いてある *)
+  (* 全部 yes だと expr 自身も聞くので 1 を加えようとする *)
+  if Ctype.moregeneral env false typ (Btype.newgenvar ())
+  (* しかし型が 'a なら聞く必要がないので加えない *)
+  then (num, yes', no')
+  (* そうでなければ 1 加える *)
+  else begin
+    if print_asked_expr then begin
+      Format.fprintf ppf "has_intended_type:@.";
+      print_deb_exp ppf expr
+    end;
+    (num + 1, yes', no')
+    end
+
+
+(* 返す yes', no' は全部 yes と答えた場合の返答 *)
+(* has_intended_type : expression context_t -> yes_no_list -> yes_no_list ->
+                       bool * yes_no_list * yes_no_list *)
+let has_intended_type ((expr, cxt), env, prefix) yes no =
+  let (vartyps, typ) = judge ((expr, cxt), env, prefix) in
+  let (b, yes', no') = ask_env expr vartyps env yes no in
+  if b
+  then ask_expr ((expr, cxt), env, prefix) typ env yes' no'
+  else (false, yes', no')
+
+(********** find the source of the type error **********)
+
+(* node_count_walk_right_typed :
+        expression context_t list -> yes_no_list -> yes_no_list -> int -> int *)
+let rec node_count_walk_right_typed progs yes no acc =
+  if acc >= 1000 then acc else match progs with
+    [] -> acc
+  | ((expr', _), _, _) :: rest
+      when expr' = hole_of_exp expr' ->
+      (* □ の中は数えないで次に行く *)
+      node_count_walk_right_typed rest yes no acc
+  | ((expr', cxt'), env', prefix') :: rest ->
+      (* このノードの質問の回数 *)
+      let (n1, yes', no') =
+        node_count_has_intended_type ((expr', cxt'), env', prefix')  yes no in
+      (* 以下の yes', no' は全て yes と答えてきた場合のもの *)
+      let n2 =
+        node_count_walk_right_typed rest yes' no' (acc + n1) in
+      (* no と答えた場合は、どこで no と答えたかわからないので困る *)
+      (* 以下は古い yes, no を使っている *)
+      (* つまり、no と答えた際の答えは再利用していないことになる *)
+      node_count_walk_up_typed ((expr', cxt'), env', prefix') yes no n2
+      (*
+      num (* このノードの質問の回数 *)
+      (* 以下の yes', no' は全て yes と答えてきた場合のもの *)
+      + node_count_walk_right_typed rest yes' no'
+      (* no と答えた場合は、どこで no と答えたかわからないので困る *)
+      (* 以下は古い yes, no を使っている *)
+      (* つまり、no と答えた際の答えは再利用していないことになる *)
+      + node_count_walk_up_typed ((expr', cxt'), env', prefix') yes no
+      *)
+
+(* node_count_walk_up_typed :
+        expression context_t -> yes_no_list -> yes_no_list -> int -> int *)
+and node_count_walk_up_typed ((expr, cxt), env, prefix) yes no acc =
+  (* ((expr, cxt), env, prefix) は well-typed *)
+  if acc >= 1000 then acc else
+  let progs = decompose_expr ((expr, cxt), env, prefix) Typed in
+  node_count_walk_right_typed progs yes no acc
+
+(* make_message_welltyped : expression context_t -> yes_no_list -> unit *)
+let make_message_welltyped ((expr, cxt), env, prefix) no =
+  (* 型エラーの原因と特定された式の型 *)
+  let (vartyps, t) = judge ((expr, cxt), env, prefix) in
+  let vartyps' = List.filter (fun (key, typ) -> answered_no key typ no env)
+                             vartyps in
+  print_loc expr.pexp_loc;
+  print_identified ();
+  match vartyps' with
+      [] -> (* 自由変数は意図通り *)
+        print_welltyped_expr t
+    | (((st, _), _, _), typ) :: [] -> (* 自由変数が意図通りでない *)
+        print_welltyped_env1 st typ
+    | (((st, _), _, _), typ) :: rest ->
+        print_welltyped_env_many st typ rest
+
+(* walk_right_typed :
+        expression context_t list -> yes_no_list -> yes_no_list ->
+        expression context_t option * yes_no_list * yes_no_list *)
+let rec walk_right_typed progs yes no = match progs with
+    [] -> (* All the premises are as intended. *)
+          (* The current expr is the source of the type error. *)
+      (None, yes, no)
+  | ((expr', cxt'), env', prefix') :: rest ->
+     if auto then
+       Format.fprintf ppf "ノード：@.%a@."
+                      Pprintast.expression expr';
+      let (intended, yes', no') =
+        has_intended_type ((expr', cxt'), env', prefix')  yes no in
+      if intended
+      then walk_right_typed rest yes' no'
+      else (Some ((expr', cxt'), env', prefix'), yes', no')
+
+(* walk_up_typed : expression context_t -> yes_no_list -> yes_no_list -> unit *)
+let rec walk_up_typed ((expr, cxt), env, prefix) yes no =
+  (* ((expr, cxt), env, prefix) は well-typed *)
+  let progs = decompose_expr ((expr, cxt), env, prefix) Typed in
+  let (c, yes', no') = walk_right_typed progs yes no in
+  begin match c with
+      None ->
+        (* 部分式の型は意図通り *)
+        make_message_welltyped ((expr, cxt), env, prefix) no'
+    | Some ((expr', cxt'), env', prefix') ->
+        (* 部分式の型が意図に合わない *)
+        walk_up_typed ((expr', cxt'), env', prefix') yes' no'
+  end
+
+(********** find the smallest illtyped pattern **********)
+
+(* walk_right_illtyped_pattern : pattern list context_t -> pattern option *)
+let rec walk_right_illtyped_pattern ((pats, cxt), env, prefix) =
+  match pats with
+    [] -> None
+  | pat :: rest ->
+      let exp = Exp.mk (Pexp_fun (Nolabel, None, pat, skeleton)) in
+      if is_well_typed_expr ((exp, cxt), env, prefix)
+      then walk_right_illtyped_pattern ((rest, cxt), env, prefix)
+      else Some (pat)
+
+(* walk_up_illtyped_pattern : pattern context_t -> unit *)
+let rec walk_up_illtyped_pattern ((pat, cxt), env, prefix) =
+  let pats = decompose_pattern pat in
+  match walk_right_illtyped_pattern ((pats, cxt), env, prefix) with
+    None -> (* 部分パターンは型がつく *) (* pat が型エラーの原因 *)
+      make_message_pattern ((pat, cxt), env, prefix)
+  | Some (pat) ->
+      walk_up_illtyped_pattern ((pat, cxt), env, prefix)
+
+(********** find the smallest illtyped expression **********)
+
+(* walk_right_illtyped :
+        expression context_t list -> yes_no_list -> yes_no_list ->
+        expression context_t option * yes_no_list * yes_no_list *)
+let rec walk_right_illtyped progs yes no = match progs with
+    [] -> (* all the decomposed programs are well typed *)
+      (None, yes, no)
+  | ((expr', cxt'), env', prefix') :: rest ->
+      if debug land 2 = 2 then Format.fprintf ppf "walk right illtyped:@.%a@."
+                                Pprintast.expression expr';
+      if is_well_typed_expr ((expr', cxt'), env', prefix')
+      then walk_right_illtyped rest yes no
+      else (Some ((expr', cxt'), env', prefix'), yes, no)
+
+(* walk_up_illtyped : expression context_t -> yes_no_list -> yes_no_list ->
+                      unit *)
+let rec walk_up_illtyped ((expr, cxt), env, prefix) yes no =
+  let pats = extract_pattern expr in
+  (* pattern に型がつくかを最初にチェック *)
+  match walk_right_illtyped_pattern ((pats, cxt), env, prefix) with
+    Some (pat) -> (* pat is illtyped *)
+      walk_up_illtyped_pattern ((pat, cxt), env, prefix)
+  | None -> (* patterns are all welltyped *)
+      let progs = decompose_expr ((expr, cxt), env, prefix) Illtyped in
+      let (c, yes', no') = walk_right_illtyped progs yes no in
+      begin match c with
+        None ->
+          if debug land 1 = 1 then
+            Format.fprintf ppf "illtyped expression:@.%a@."
+              Pprintast.expression expr;
+          (* expr は illtyped だけど、子は全て welltyped になる *)          
+          start_typed ((expr, cxt), env, prefix) yes' no'
+      | Some ((expr', cxt'), env', prefix') ->
+          walk_up_illtyped ((expr', cxt'), env', prefix') yes' no'
+      end
+
+(* start_typed : expression context_t -> yes_no_list -> yes_no_list -> unit *)
+and start_typed ((expr, cxt), env, prefix) yes no =
+  (* ((expr, cxt), env, prefix) 自身は ill-typed *)
+  (* decompose 結果は well-typed *)
+  match expr.pexp_desc with
+      Pexp_let (rec_flg, bindings, exp) ->
+        let exp0 = Exp.mk (Pexp_let (rec_flg, bindings, skeleton)) in
+        if is_well_typed_expr ((exp0, cxt), env, prefix) then
+          (* bindings に型がついたので、in 以下に進む *)
+          walk_up_illtyped
+            ((exp, Let (rec_flg, bindings, cxt)), env, prefix) yes no
+        else if rec_flg = Recursive then begin (* bindings 中の再帰が原因 *)
+          if debug land 1 = 1 then
+            Format.fprintf ppf "make message recursive:@.%a@."
+              Pprintast.expression expr;
+          make_message_recursive ((bindings, cxt), env, prefix)
+        end else (* パターン pats = exps が型エラーの原因 *)
+          make_message_bindings ((bindings, cxt), env, prefix)
+    | _ when print_node_count -> (* ノード数カウントの場合 *)
+        (* ノード数を数えて、ノード数を表示して終了 *)
+        let num =
+          node_count_walk_up_typed ((expr, cxt), env, prefix) yes no 0 in
+        (* Format.fprintf ppf "Number of visited nodes = %d@." num *)
+        Format.fprintf ppf ", %d" num
+    | _ -> (* let 文以外の式 *)
+(*
+        (* walk_up_typed をノード数を数えるように変更済み *)
+        (* それを呼び出して、ノード数を表示して終了 *)
+        let num = walk_up_typed ((expr, cxt), env, prefix) yes no in
+        Format.fprintf ppf "Number of visited nodes = %d@." num
+ *)
+       if auto then
+       Format.fprintf ppf "頂点のノード：@.%a@."
+                      Pprintast.expression expr;
+(*       let progs =  ((expr, cxt), env, prefix) in *)
+       let progs = decompose_expr ((expr, cxt), env, prefix) Typed in
+       let (c, yes', no') = walk_right_typed progs yes no in
+        begin match c with
+            None ->
+              (* 部分式の型は意図通り *)
+              if debug land 1 = 1 then
+                Format.fprintf ppf "make message illtyped:@.%a@."
+                  Pprintast.expression expr;
+              make_message_illtyped ((expr, cxt), env, prefix) (* yes' no' *)
+          | Some ((expr', cxt'), env', prefix') ->
+              (* 部分式の型が意図に合わない *)
+              if debug land 1 = 1 then Format.fprintf ppf "typed started:@.%a@."
+                  Pprintast.expression expr';
+              walk_up_typed ((expr', cxt'), env', prefix') yes' no'
+        end
+
+(* make_message_illtyped : expression context_t -> unit *)
+and make_message_illtyped ((expr, cxt), env, prefix) (* yes no *) =
+  let expr =
+    Desc.Exp.map_all (fun e -> {e with pexp_attributes = []}) expr in
+
+  match expr.pexp_desc with
+    Parsetree.Pexp_ident (_) ->
+      print_loc expr.pexp_loc;
+      print_identified ();
+      print_illtyped_var_undefined ()
+  | Parsetree.Pexp_ifthenelse (exp1, exp2, None) ->
+      if not (is_bool_expr ((exp1, cxt), env, prefix)) then
+        (* predicate 部分が bool 型でない *)
+        let (_, typ1) = judge ((exp1, cxt), env, prefix) in begin
+          print_loc exp1.pexp_loc;
+          print_identified ();
+          print_illtyped_if_predicate typ1
+        end
+      else if not (is_unit_expr ((exp2, cxt), env, prefix)) then
+        (* then 部分が unit 型でない *)
+        let (_, typ2) = judge ((exp2, cxt), env, prefix) in begin
+          print_loc exp2.pexp_loc;
+          print_identified ();
+          print_illtyped_if_then typ2
+        end
+      else begin (* both are well_typed; conflicts in environment *)
+        print_loc expr.pexp_loc;
+        print_identified ();
+        print_illtyped_if_fv ()
+      end
+
+  | Parsetree.Pexp_ifthenelse (exp1, exp2, Some (exp3)) ->
+      if not (is_bool_expr ((exp1, cxt), env, prefix)) then
+        (* predicate 部分が bool 型でない *)
+        let (_, typ1) = judge ((exp1, cxt), env, prefix) in begin
+          print_loc exp1.pexp_loc;
+          print_identified ();
+          print_illtyped_if_predicate typ1
+        end
+      else (* [exp2; exp3] を同じリストに入れる *)
+        let mtloc = mknoloc (Longident.Lident "[]") in
+        let mt = Exp.mk (Pexp_construct (mtloc, None)) in
+        let consloc = mknoloc (Longident.Lident "::") in
+        let cons e1 e2 =
+          let e = Exp.mk (Pexp_tuple [e1; e2]) in
+          Exp.mk (Pexp_construct (consloc, Some e)) in
+        let exp' = cons exp2 (cons exp3 mt) in
+        if not (is_well_typed_expr ((exp', cxt), env, prefix)) then
+          (* then 部分と else 部分が同じ型でない *)
+          (* または then 部分と else 部分で環境の衝突が起きた *)
+          let (_, typ2) = judge ((exp2, cxt), env, prefix) in
+          let (_, typ3) = judge ((exp3, cxt), env, prefix) in begin
+            print_loc expr.pexp_loc;
+            print_identified ();
+            print_illtyped_if_then_else typ2 typ3
+          end
+        else begin (* if 文全体で環境の衝突が起きている *)
+          print_loc expr.pexp_loc;
+          print_identified ();
+          print_illtyped_if_fv ()
+        end
+
+  | Parsetree.Pexp_apply (exp, lexps) ->
+      let (_, exp_typ) = judge ((exp, cxt), env, prefix) in (* 関数の型 *)
+      let typs = List.map (fun (_, e) -> snd (judge ((e, cxt), env, prefix)))
+                          lexps in (* 引数の型 *)
+      let exps = List.map (fun (_, e) -> e) lexps in
+      if split_arrow exp_typ = None then begin
+        (* 関数部分が関数型になっていない *)
+        print_loc expr.pexp_loc;
+        print_identified ();
+        print_illtyped_apply_not_function exp_typ
+      end else
+        (* 型エラーを起こすことなく渡せる引数列と
+         * 型エラーを起こす最初の引数のペアを返す *)
+        let rec well_typed_args wargs lexps = match lexps with
+            [] ->
+              Format.fprintf ppf "check %a@."
+                Pprintast.expression expr;
+              failwith "TypeDebugger: Error: apply in make_message_illtyped."
+          | first :: rest ->
+              let wargs' = wargs @ [first] in
+              let exp' = Exp.mk (Pexp_apply (exp, wargs')) in
+              if is_well_typed_expr ((exp', cxt), env, prefix)
+              then well_typed_args wargs' rest
+              else (wargs, first) in
+(*        let (wargs, (_, arg)) = well_typed_args [] lexps in *)
+        let (wargs, _) = well_typed_args [] lexps in
+        (* 何番目の引数が型エラーを引き起こすか *)
+        let n = List.length wargs + 1 in
+        (* 型エラーになる直前までの型 *)
+        let typ = if n = 1 then exp_typ
+                  else let wexp = Exp.mk (Pexp_apply (exp, wargs)) in
+                       snd (judge ((wexp, cxt), env, prefix)) in
+                       (* wargs = [] だと judge が syntax error を起こす *)
+        begin match split_arrow typ with
+            None -> (* typ が関数型でなかった：引数が多かった場合 *)
+              print_loc expr.pexp_loc;
+              print_identified ();
+              print_illtyped_too_much_args n exp_typ typs exp
+          | Some (t1, _) -> (* n 番目の引数が型エラー *)
+              if Data.express_mode < 0 then
+                begin
+                  print_loc expr.pexp_loc;
+                  print_identified ()
+                end;
+
+              if language_level < 2 then
+                (* language_level < 2 では関数引数は不可 *)
+                (* let (_, n_typ) = judge ((arg, cxt), env, prefix) in *)
+                (* 型エラーの原因となっている引数の型 *)
+                let funtypes = find_funtype_args typs 1 in
+                (* 関数型になっている引数 *)
+                begin
+                  match funtypes with
+                  | [] -> (* 関数型になっている引数なし *)
+                      (*print_illtyped_apply_beginning2 n exp exp_typ n_typ*)
+                      print_illtyped_apply_beginning2 n exp_typ exps typs t1 exp
+                  | _ -> (* 関数型になっている引数あり *)
+                      print_illtyped_apply_beginning n exp exp_typ typs funtypes
+                end
+                (* language_level >= 2 は関数引数可 *)
+              else if Data.express_mode < 0 then
+                (* 17 *)
+                print_illtyped_apply_funname n exp_typ exps typs t1 exp
+              else
+                Format.fprintf ppf
+                  "{\"location\": %a, \"No.\": 17}@."
+                  Data.Loc.printJSON expr.pexp_loc
+
+        end
+
+  | Parsetree.Pexp_function (_) ->
+      print_illtyped_function ()
+
+  | Parsetree.Pexp_fun (_, _, p, e) ->
+     let case = {pc_lhs = p; pc_guard = None; pc_rhs = e} in
+     make_message_case ((case, cxt), env, prefix)
+
+  | Parsetree.Pexp_match (exp, cases) ->
+  (* Pexp_match の補助変数 ------------------------------------------------ *)
+      (* body と guard を無効にした cases *)
+      let pattern_only_cases =
+        List.map (fun {pc_lhs = pat; } ->
+                    {pc_lhs = pat; pc_guard = None; pc_rhs = skeleton})
+                 cases in
+      (* body のみを無効にした cases *)
+      let pattern_and_guard_cases =
+        List.map (fun {pc_lhs = pat; pc_guard = g; } ->
+                    {pc_lhs = pat; pc_guard = g; pc_rhs = skeleton})
+                 cases in
+
+  (* Pexp_match の補助関数 ------------------------------------------------ *)
+      (* pattern の型が合っているかを調べる *)
+      (* pattern をひとつずつ加えて、型がつかなくなるところを探す *)
+      let rec patterns_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_match (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then patterns_ok exp wcases' rest
+            else begin match wcases with
+                [] -> (* 最初の case が型エラー。exp と case が合わない*)
+                  let case' = Exp.mk (Pexp_function ([case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match1:@.%a@."
+                      Pprintast.expression case';
+                  (* 最初のパターンの型 *)
+                  let (_, pat_typ) = judge ((case', cxt), env, prefix) in
+                  begin match split_arrow pat_typ with
+                    Some (t1, _) ->
+                      (* exp の型 *)
+                      let (_, exp_typ) = judge ((exp, cxt), env, prefix) in
+                      print_loc expr.pexp_loc;
+                      print_identified ();
+                      print_illtyped_match_exp exp_typ t1;
+                      false
+                  | None -> (* Can't happen *)
+                      failwith "TypeDebugger: match2 in make_message_illtyped."
+                  end
+              | _ :: _ -> (* case 同士で型エラー *)
+                  let wcases' = Exp.mk (Pexp_function (wcases)) in
+                  (* 型が合っている case の型 *)
+                  let (_, ok_typ) = judge ((wcases', cxt), env, prefix) in
+                  let case' = Exp.mk (Pexp_function ([case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match3:@.%a@."
+                      Pprintast.expression case';
+                  (* 型が合わない case の型 *)
+                  let (_, notok_typ) = judge ((case', cxt), env, prefix) in
+                  begin match (split_arrow ok_typ, split_arrow notok_typ) with
+                    (Some (ok1, _), Some (notok1, _)) ->
+                      print_loc case.pc_lhs.ppat_loc;
+                      print_identified ();
+                      print_illtyped_match_left notok1 ok1;
+                      false
+                  | (_, _) -> (* Can't happen *)
+                      failwith "TypeDebugger: match4 in make_message_illtyped."
+                  end
+            end in
+      (* guard が全て bool かどうかを調べる *)
+      let guards_all_bool cases =
+        List.for_all
+          (function {pc_guard = None} -> true
+            | {pc_guard = Some (g)} ->
+                if is_bool_expr ((g, cxt), env, prefix)
+                then true
+                else begin
+                  let (_, g_typ) = judge ((g, cxt), env, prefix) in
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard g_typ;
+                  false
+                end)
+          cases in
+      (* guard と exp で環境が衝突していないかを調べる *)
+      let rec guards_ok_with_exp exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_match (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then guards_ok_with_exp exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match case with
+                {pc_guard = None} -> (* Can't happen *)
+                  failwith "TypeDebugger: match5 in make_message_illtyped."
+              | {pc_guard = Some (g)} ->
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard_env ();
+                  false
+              end in
+      (* cases に型がつくかを順に調べる *)
+      (* 各ケースの型を独立に求め、その型が皆同じかを調べたい *)
+      (* すると、以後は、環境の衝突のみを考えれば良くなる *)
+      let rec cases_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_match (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then cases_ok exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match wcases with
+              | [] -> (* case がひとつ目からだめ *)
+                 (* exp と case で環境が conflict している *)
+                 (* print_loc expr.pexp_loc; *)
+                 (* print_identified (); *)
+                 (* print_illtyped_other (); (* メッセージを変えるべき *) *)
+                 (* false *)
+                 make_message_case ((case, cxt), env, prefix);
+                 false
+              | _ :: _ -> (* case の右辺の式、あるいは環境の衝突が原因 *)
+                  let wcases' = Exp.mk (Pexp_match (exp, wcases)) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match6:@.%a@."
+                      Pprintast.expression wcases';
+                  (* 型が合っている case の型 *)
+                  let (_, ok_typ) = judge ((wcases', cxt), env, prefix) in
+                  let case' = Exp.mk (Pexp_match (exp, [case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match7:@.%a@."
+                      Pprintast.expression case';
+                  (* 型が合わない case の型 *)
+                  begin try
+                    let (_, notok_typ) = judge ((case', cxt), env, prefix) in
+                    print_loc case.pc_rhs.pexp_loc;
+                    print_identified ();
+                    print_illtyped_match_right notok_typ ok_typ;
+                    false
+                  with _ -> (* 型エラーが起きた。環境が衝突している *)
+                    print_loc case.pc_rhs.pexp_loc;
+                    print_identified ();
+                    print_illtyped_match_right2 ();
+                    false
+                  end
+              end in
+
+  (* Pexp_match のメイン -------------------------------------------------- *)
+      if patterns_ok exp [] pattern_only_cases
+      && guards_all_bool pattern_and_guard_cases
+      && guards_ok_with_exp exp [] pattern_and_guard_cases
+      && cases_ok exp [] cases
+      then failwith "TypeDebugger: match is welltyped in make_message_illtyped."
+      else () (* error already reported in one of the predicates *)
+(*
+      (* exp は単独では型はついている。match 文全体では型はつかない *)
+      if debug land 8 = 8 then
+        Format.fprintf ppf "message illtyped match1:@.%a@."
+          Pprintast.expression exp;
+*)
+
+  | Parsetree.Pexp_try (exp, cases) ->
+  (* Pexp_try の補助変数 ------------------------------------------------ *)
+      (* body と guard を無効にした cases *)
+      let pattern_only_cases =
+        List.map (fun {pc_lhs = pat} ->
+                    {pc_lhs = pat; pc_guard = None; pc_rhs = skeleton})
+                 cases in
+      (* body のみを無効にした cases *)
+      let pattern_and_guard_cases =
+        List.map (fun {pc_lhs = pat; pc_guard = g} ->
+                    {pc_lhs = pat; pc_guard = g; pc_rhs = skeleton})
+                 cases in
+
+  (* Pexp_try の補助関数 ------------------------------------------------ *)
+      (* pattern の型が合っているかを調べる *)
+      (* pattern をひとつずつ加えて、型がつかなくなるところを探す *)
+      let rec patterns_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_try (skeleton, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then patterns_ok exp wcases' rest
+            else begin match wcases with
+                [] -> true
+              | _ :: _ -> (* case 同士で型エラー *)
+                  let wcases' = Exp.mk (Pexp_function (wcases)) in
+                  (* 型が合っている case の型 *)
+                  let (_, ok_typ) = judge ((wcases', cxt), env, prefix) in
+                  let case' = Exp.mk (Pexp_function ([case])) in
+                  if debug land 8 = 8 then
+                    Format.fprintf ppf "message illtyped match3:@.%a@."
+                      Pprintast.expression case';
+                  (* 型が合わない case の型 *)
+                  let (_, notok_typ) = judge ((case', cxt), env, prefix) in
+                  begin match (split_arrow ok_typ, split_arrow notok_typ) with
+                    (Some (_, _), Some (notok1, _)) ->
+                      print_loc case.pc_lhs.ppat_loc;
+                      print_identified ();
+                      print_illtyped_try_left notok1;
+                      false
+                  | (_, _) -> (* Can't happen *)
+                      failwith "TypeDebugger: match4 in make_message_illtyped."
+                  end
+            end in
+      (* guard が全て bool かどうかを調べる *)
+      let guards_all_bool cases =
+        List.for_all
+          (function {pc_guard = None} -> true
+            | {pc_guard = Some (g)} ->
+                if is_bool_expr ((g, cxt), env, prefix)
+                then true
+                else begin
+                  let (_, g_typ) = judge ((g, cxt), env, prefix) in
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard g_typ;
+                  false
+                end)
+          cases in
+      (* guard と exp で環境が衝突していないかを調べる *)
+      let rec guards_ok_with_exp exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_try (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then guards_ok_with_exp exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match case with
+                {pc_guard = None} -> (* Can't happen *)
+                  failwith "TypeDebugger: match5 in make_message_illtyped."
+              | {pc_guard = Some (g)} ->
+                  print_loc g.pexp_loc;
+                  print_identified ();
+                  print_guard_env ();
+                  false
+              end in
+      (* cases に型がつくかを順に調べる *)
+      (* 各ケースの型を独立に求め、その型が皆同じかを調べたい *)
+      (* すると、以後は、環境の衝突のみを考えれば良くなる *)
+      let rec cases_ok exp wcases cases = match cases with
+          [] -> true (* すべての case を入れて型がついた *)
+        | case :: rest ->
+            let wcases' = wcases @ [case] in
+            let exp' = Exp.mk (Pexp_try (exp, wcases')) in
+            if is_well_typed_expr ((exp', cxt), env, prefix)
+            then cases_ok exp wcases' rest
+            else (* case に入っている guard で環境の衝突 *)
+              begin match wcases with
+                [] | [_] | _ -> (* case がひとつ目からだめ *)
+                let case' = Exp.mk (Pexp_function ([case])) in
+                if debug land 8 = 8 then
+                  Format.fprintf ppf "message illtyped match1:@.%a@."
+                                 Pprintast.expression case';
+                (* 最初のパターンの型 *)
+                let (_, pat_typ) = judge ((case', cxt), env, prefix) in
+                begin match split_arrow pat_typ with
+                    Some (_, t2) ->
+                      (* exp の型 *)
+                      let (_, exp_typ) = judge ((exp, cxt), env, prefix) in
+                      let case_loc = (case.pc_rhs).pexp_loc in
+                      print_loc case_loc;
+                      print_identified ();
+                      (* 環境の衝突かどうかを確認 *)
+                      (try
+                          (Ctype.unify env exp_typ t2;
+                           print_illtyped_try_env ();
+                           false)
+                        with
+                          _ -> print_illtyped_try_right exp_typ t2;
+                      (* try文の式と矢印の右側の型が合わない *)
+                      false)
+                  | None -> (* Can't happen *)
+                      failwith "TypeDebugger: match2 in make_message_illtyped."
+                end
+              end in
+
+  (* Pexp_try のメイン -------------------------------------------------- *)
+      let exn_case =
+        [{ pc_lhs = { ppat_desc = Ppat_construct
+                                    ({txt = Longident.Lident ("Not_found");
+                                      loc = Location.none},
+                                     None);
+                      ppat_loc = Location.none;
+                      ppat_loc_stack = [];
+                      ppat_attributes = [] };
+           pc_guard = None;
+           pc_rhs = skeleton }] in
+      if (patterns_ok exp exn_case pattern_only_cases)
+      && (guards_all_bool pattern_and_guard_cases)
+      && (guards_ok_with_exp exp [] pattern_and_guard_cases)
+      && (cases_ok exp [] cases)
+      then failwith "TypeDebugger: match is welltyped in make_message_illtyped."
+      else () (* error already reported in one of the predicates *)
+
+  | Parsetree.Pexp_construct ({txt = lid}, e) ->
+      (* 引数の情報 *)
+      let args =
+        List.map (fun (e, t) ->
+                   if e = hole_of_exp e then None else Some (e, t))
+          (match e with
+            | Some (exp) ->
+               let typ = snd (judge ((exp, cxt), env, prefix)) in
+               begin
+                 (* 引数の数をチェック *)
+                 match (decode_tuple typ) with
+                 | Some (typs) ->
+                    let exps = match exp.pexp_desc with
+                      | Pexp_tuple (es) -> es
+                      | _ -> assert false in
+                    List.combine exps typs
+                 | None -> [(exp, typ)]
+               end
+            | None -> []) in
+
+      (* extract core type list from constructor arguments *)
+      (* extract_core_types : constructor_arguments -> core_type list *)
+      let extract_core_types carg = match carg with
+        | Pcstr_tuple (cts) -> cts
+        | Pcstr_record (_) -> assert false (* not supported yet *)
+      in
+
+      (* prefix の分解 *)
+      (* prefix -> (string * kind) list *)
+      let rec get_construct prefix = match prefix with
+        | [] -> []
+        | (first, _) :: rest ->
+            begin match first.pstr_desc with
+            | Pstr_type (_, tds) ->
+                (* 型の情報 *)
+                (* type_declaration list -> (string * type_kind) list *)
+                (List.map (fun {ptype_name = n; ptype_kind = k} ->
+                            (n.txt, get_type_value k)) tds) @
+                (get_construct rest)
+            | Pstr_exception _ ->
+                failwith "not yet for 4.11.2"
+(*
+            | Pstr_exception ({pext_name = n; pext_kind = k}) ->
+                (* 例外の情報 *)
+                (n.txt, get_ext_value n.txt k) :: (get_construct rest)
+get_ext_value : definition on line 2405, temporarily commented out.
+*)
+            | Pstr_module ({pmb_name = {txt = Some (n)}; pmb_expr = e}) ->
+                (* モジュール名と中の式 *)
+                begin match e.pmod_desc with
+                  | Pmod_structure (strs) ->
+                    let pre_mod = get_construct
+                                    (List.map (fun x -> (x, Env.empty)) strs) in
+                    let a = List.map (fun (nk, kind) ->
+                                       (n ^ "." ^ nk,
+                                        List.map (fun (nc, cts) ->
+                                                   (n ^ "." ^ nc, cts))
+                                                 kind))
+                                     pre_mod in
+                    a @ (get_construct rest)
+                  | _ -> get_construct rest
+                end
+            | Pstr_module ({pmb_name = {txt = None}; pmb_expr = _e}) ->
+                get_construct rest (* asai: 大丈夫？ *)
+            | _ -> get_construct rest
+            end
+
+      (* kind の分解 *)
+      (* type_kind -> (string, core_type list) list *)
+      and get_type_value kind = match kind with
+        | Ptype_variant (cds) ->
+          List.map (fun {pcd_name = n; pcd_args = a} ->
+                     (n.txt, extract_core_types a)) cds
+        | _ -> []
+      (* extension_constructor_kind -> (string, core_type list) list *)
+(*
+      and get_ext_value name kind = match kind with
+        | Pext_decl (cts, None) ->
+          (* 引数を取る場合をとりあえず *)
+          [(name, extract_core_types cts)]
+        | _ -> [] *) in
+
+(*
+      Debug_core.Node.Input.result 25 ((expr, cxt), env, prefix);
+      Debug_core.Node.Output.f ();
+*)
+      print_loc expr.pexp_loc;
+      print_identified ();
+      print_illtyped_constructor lid (get_construct prefix) args
+
+  | Parsetree.Pexp_record (lst, None) -> (* illtyped *)
+      print_loc expr.pexp_loc;
+      print_identified ();
+
+(*
+      (* typs : エラーが出た箇所でのフィールドの型 *)
+      let typs = List.map (fun ({txt = t}, e) -> (snd (judge ((e, cxt), env, prefix))), t) lst in
+      (* exps : エラーが出た箇所での式 *)
+      let exps = List.map (fun (_, e) -> e) lst in
+ *)
+      (* 上記フィールドの名称を取得 *)
+
+      (* ダミーの型 *)
+      let dummy_exp =
+        { pexp_desc = Parsetree.Pexp_record
+                        (List.map (fun (lid, _) -> (lid, skeleton)) lst, None);
+          pexp_loc = Location.none;
+          pexp_loc_stack = [];
+          pexp_attributes = [] } in
+
+      let dummy_t = snd (judge ((dummy_exp, cxt), env, prefix)) in
+
+      (* prefixからフィールドの中身を取り出す *)
+(*
+      let rec dummy_string d = match d with
+        | {desc = Tconstr (p, _, _)} -> Path.name p
+        | {desc = Tsubst (expr)} -> dummy_string expr
+        | {desc = Tlink (expr)} -> dummy_string expr (* #useで呼び出した場合 *)
+        | _ -> Format.fprintf ppf "%a@." Printtyp.type_expr d;  assert false in
+      let rec get_params tlst = match tlst with
+        | [] -> raise Not_found
+        | {ptype_name = {txt = t}; ptype_kind = Ptype_record llst} :: rest ->
+           if t = dummy_string dummy_t then llst else get_params rest
+        | _ :: rest -> get_params rest in
+      let rec search_rec p = match p with
+          [] -> assert false
+        | ({pstr_desc = Pstr_type (_, tlst)}, _) :: rest ->
+           begin
+             try get_params tlst with
+             Not_found -> search_rec rest
+           end
+        | _ :: rest -> search_rec rest in
+ *)
+      (* 各フィールドの情報 *)
+      let fields =
+        List.map2 (fun ({txt = f}, e) ft ->
+                   ((f, ft), (e, snd (judge ((e, cxt), env, prefix)))))
+          lst (decode_labels dummy_t prefix) in
+      print_illtyped_record dummy_t fields
+
+  | Parsetree.Pexp_constraint (exp, t) ->
+      print_loc expr.pexp_loc;
+      print_identified ();
+      let (_, typ1) = judge ((exp, cxt), env, prefix) in
+      let exp' = { pexp_desc = Parsetree.Pexp_constraint (skeleton, t);
+                   pexp_loc = Location.none;
+                   pexp_loc_stack = [];
+                   pexp_attributes = [] } in
+      let (_, typ2) = judge ((exp', cxt), env, prefix) in
+      print_illtyped_constraint typ1 typ2
+
+  | Parsetree.Pexp_array (es) ->
+      (* array に関するエラー *)
+      let typs =
+        List.map (fun exp -> snd (judge ((exp, cxt), env, prefix)))
+                 (List.filter (fun e -> e <> hole_of_exp e) es) in
+      let (typ1, typ2) = (List.nth typs 0, List.nth typs 1) in
+      print_loc expr.pexp_loc;
+      print_identified ();
+      print_illtyped_array typ1 typ2
+  | Parsetree.Pexp_let (flg, vs, _) ->
+      (* 再起関数の rec を忘れた場合 *)
+      print_loc expr.pexp_loc;
+      print_identified ();
+      if flg = Nonrecursive
+      then match vs with
+        | [] -> ()
+        | first :: rest -> print_illtyped_let first rest
+      else if List.length vs > 1
+      then print_illtyped_let_rec_many vs
+      else print_illtyped_let_rec1 (List.hd vs)
+  | _ -> (* illtyped *)
+       print_loc expr.pexp_loc;
+       print_identified ();
+       Format.fprintf ppf "default case of make_message_illtyped@.";
+       print_illtyped_other ()
+
+(********** find the smallest illtyped structure **********)
+
+(* expr_of_structure : structure_item -> expression * expr_context *)
+let expr_of_structure structure_item = match structure_item with
+  | { pstr_desc = Pstr_eval (expr, _) } ->
+      (expr, Empty)
+  | { pstr_desc = Pstr_value (flg, bindings); pstr_loc = loc } ->
+      (* in なしの let 文 *)
+      ({ pexp_desc       = Pexp_let (flg, bindings, skeleton);
+         pexp_loc        = loc;
+         pexp_loc_stack  = [];
+         pexp_attributes = [] }, Empty)
+  | _ -> failwith "TypeDebugger: Error: this structure not supported."
+
+(* illtyped_expr : structure -> Env.t -> str_context -> expression context_t *)
+(* structure has to be ill-typed. *)
+let rec illtyped_expr structure env lst = match structure with
+    [] -> failwith "TypeDebugger: Error: structure is well typed."
+  | s :: rest ->
+      begin try
+        let (_, _, _, env') = Typemod.type_structure env [s] in
+        illtyped_expr rest env' ((s, env) :: lst)
+      with Typecore.Error (_, _, Typecore.Expr_type_clash (_))
+         | Typecore.Error (_, _, Typecore.Pattern_type_clash (_))
+         | _ (* Unbound value *)
+         -> (match s with 
+               { pstr_desc = Pstr_module ({pmb_expr = {pmod_desc =  Pmod_structure(structure)}})} -> illtyped_expr structure env lst
+             | _ -> (expr_of_structure s, env, lst))
+      end
+
+(********** main entry point **********)
+
+(* check_let_rec1 : value_binding -> Env.t -> value_binding list * int *)
+let check_let_rec1 vb env =
+  try
+    ignore(Typemod.type_structure env [{ pstr_desc = Pstr_value (Recursive, [vb]); pstr_loc  = Location.none }]);
+    (* エラーにならなければ単独再帰の rec つけ忘れ *)
+    if print_slice
+    then Format.fprintf ppf "@[This error is let_rec1.@]@.";
+    ([vb], 1)
+  with
+  | _ -> ([], 0)
+(* check_let_rec_many :
+     value_binding list -> Env.t -> value_binding list * int *)
+and check_let_rec_many vs_f env =
+  try
+    ignore(Typemod.type_structure env [{ pstr_desc = Pstr_value (Recursive, vs_f); pstr_loc  = Location.none }]);
+    (* 相互再帰の rec つけ忘れ *)
+    if print_slice
+    then Format.fprintf ppf "@[This error is let_rec_many.@]@.";
+    (vs_f, 2)
+  with
+  | _ -> ([], 0)
+(* check_let :
+     value_binding -> value_binding list -> Env.t -> value_binding list * int *)
+and check_let vb vs_b env =
+  try
+    ignore(Typemod.type_structure env [
+      { pstr_desc = Pstr_eval ({pexp_desc = Pexp_let (Nonrecursive, vs_b,
+          {pexp_desc = Pexp_let (Nonrecursive, [vb], skeleton);
+           pexp_loc = Location.none;
+           pexp_loc_stack = [];
+           pexp_attributes = []; });
+        pexp_loc = Location.none;
+        pexp_loc_stack = [];
+        pexp_attributes = []; }, []); pstr_loc  = Location.none }
+    ]);
+    (* and じゃなくて in で書くべき場面 *)
+    if print_slice
+    then Format.fprintf ppf "@[This error is let.@]@.";
+    (vb :: vs_b, 3)
+  with
+  | _ -> ([], 0)
+
+(* unbound_vb : value_binding list ->
+                value_binding list -> Env.t -> value_binding list * int *)
+let rec unbound_vb vs_f vs_b env = match vs_f with
+  (* エラーの原因になっている value binding を返す *)
+  | [] -> ([], 0)
+  | first :: rest ->
+     try
+       (* first の式部分がエラーになるかどうか *)
+       ignore(Typemod.type_structure env [{ pstr_desc = Pstr_eval (first.pvb_expr, []); pstr_loc  = Location.none }]);
+       (* エラーにならなければ次に進む *)
+       unbound_vb rest (first :: vs_b) env
+     with
+     | _ ->
+        (* let文のエラーをチェック *)
+        let (vs, num) =
+          check_let_rec1 first env in
+        let (vs, num) =
+          if num > 0 then (vs, num) else check_let_rec_many vs_f env in
+        let (vs, num) =
+          if num > 0 then (vs, num) else check_let first vs_b env in
+        (* 結果 *)
+        (vs, num)
+(* search : expression -> Env.t -> expression *)
+and search exp env = match exp.pexp_desc with
+  (* rec のつけ忘れがあれば該当する構文を返す *)
+  (* なければ □ を返す *)
+  | Pexp_let (flg, vs, e) ->
+     let exp' = search e env in
+     let (vs', num) =
+       if flg = Recursive then ([], 0) else unbound_vb vs [] env in
+     (* 結果を元に返す式を決める *)
+     if num > 0
+     then
+       let flg' =
+         if num = 3 then Nonrecursive else Recursive in
+       let d =
+         Pexp_let (flg', vs', e) in
+       {pexp_desc = d;
+        pexp_loc = exp.pexp_loc;
+        pexp_loc_stack = [];
+        pexp_attributes = exp.pexp_attributes; }
+     else if exp' = hole_of_exp exp'
+     then hole_of_exp exp
+     else exp'
+  | Pexp_ifthenelse (e1, e2, e') ->
+     let es = e1 :: e2 :: match e' with None -> [] | Some e3 -> [e3] in
+     search' skeleton es env
+  | Pexp_match (e, cs) ->
+     search' (search e env) (List.map (fun {pc_rhs = e} -> e) cs) env
+  | Pexp_try (e, cs) ->
+     search' (search e env) (List.map (fun {pc_rhs = e} -> e) cs) env
+  | Pexp_apply (e, les) ->
+     search' (search e env) (List.map (fun (_, e) -> e) les) env
+  | Pexp_function (cs) ->
+     search' skeleton (List.map (fun {pc_rhs = e} -> e) cs) env
+  | Pexp_record (les, _) ->
+     search' skeleton (List.map (fun (_, e) -> e) les) env
+  | Pexp_tuple (es) -> search' skeleton es env
+  | Pexp_array (es) -> search' skeleton es env
+  | Pexp_construct (_, Some e) -> search e env
+  | Pexp_fun (_, None, _, e) -> search e env
+  | Pexp_constraint (e, _) -> search e env
+  | _ -> hole_of_exp exp
+(* search' : expression -> expression list -> Env.t -> expression *)
+and search' dummy lst env =
+  List.fold_left (
+      fun e' fst ->
+      if e' = hole_of_exp e' then search fst env else e'
+    ) dummy lst
+
+(*
+let get_type_expr ((expr, cxt), env, prefix) =
+  try
+    (* expr(fun文)の型を求める *)
+    let (_, typ) = judge ((expr, cxt), env, prefix) in
+    begin
+      match split_arrow typ with
+      | Some (t, _) -> Some (t)
+      | None -> Some (typ)
+    end
+  with _ -> None
+
+(* レコードの補完 *)
+(* complete_pat_record : expression context_t
+   -> (Longident.t loc * pattern) list -> pattern_desc *)
+let complete_pat_record ((expr, cxt), env, prefix) (lps, flg) =
+  match get_type_expr ((expr, cxt), env, prefix) with
+  | None -> Ppat_any
+  | Some (dummy_t) ->
+     (* レコードのパターンの置き換えを行う *)
+     (* 各フィールドのダミーを作る *)
+     let dummy_lps =
+       List.map (
+           fun {pld_name = {txt = t; loc = l}} ->
+           ({txt = Longident.parse t; loc = l}, Debug_core.wildcard)
+         ) (decode_labels dummy_t prefix) in
+     (* lps の要素を順に dummy_lps に当てはめていく *)
+     let lps' =
+       List.fold_left (
+           (* lst : 置き換えの対象 *)
+           (* (ln, pn) : パターン中の一要素 *)
+           fun lst (ln, pn) ->
+           List.map (
+               fun (lm, pm) ->
+               if Longident.last lm.txt = Longident.last ln.txt
+               then (ln, pn) else (lm, pm)) lst
+         ) dummy_lps lps in
+     (* record の desc を返す *)
+     Ppat_record (lps', flg)
+
+let dummy_fun pat =
+  Debug_core.desc_to_exp (Pexp_fun (Nolabel, None, pat, skeleton)) skeleton
+
+let complete_pat ((expr, cxt), env, prefix) pat =
+  match pat.ppat_desc with
+  | Ppat_record (lps, flg) ->
+     (* レコード *)
+     (* 足りないフィールドを補う *)
+     Debug_core.desc_to_pat (complete_pat_record ((expr, cxt), env, prefix) (lps, flg)) pat
+  | _ -> pat
+
+(* パターンの補完を行う関数 *)
+let rec complete ((expr, cxt), env, prefix) =  match expr.pexp_desc with
+  | Pexp_fun (l, eop, pat, exp) ->
+     (* fun P -> E *)
+     (* Pの型をチェックする *)
+     let exp' = complete ((exp, cxt), env, prefix) in
+     let pat' = complete_pat ((exp, cxt), env, prefix) pat in
+
+(*
+     let pat' = match pat.ppat_desc with
+       | Ppat_record (lps, flg) ->
+          (* E を □ に置き換える *)
+          let d = Pexp_fun (Nolabel, None, pat, skeleton) in
+          let dummy_e = Debug_core.desc_to_exp d expr in
+          (* Pのフィールドを補完する *)
+          Debug_core.desc_to_pat (complete_pat_record ((dummy_e, cxt), env, prefix) (lps, flg)) pat
+       | _ -> pat in
+ *)
+     let d' = Pexp_fun (l, eop, pat', exp') in
+     Debug_core.desc_to_exp d' expr
+(*     Debug_core.compare_expr (Debug_core.desc_to_exp d') expr *)
+  | Pexp_apply (e0, les) ->
+     (* E0 E1 E2 ... *)
+     let e0' = complete ((e0, cxt), env, prefix) in
+     let les' =
+       List.map (
+           fun (l, en) -> (l, complete ((en, cxt), env, prefix))) les in
+     let d' = Pexp_apply (e0', les') in
+(*     Debug_core.compare_expr (Debug_core.desc_to_exp d') expr *)
+     Debug_core.desc_to_exp d' expr
+  | Pexp_match (e, cs) ->
+     (* match E0 with P1 -> E1 | ... *)
+     (* csに含まれるパターン全てに対して同じように処理する *)
+     let cs' =
+       List.map (
+           fun ({pc_lhs = pat; pc_guard = g; pc_rhs = exp}) ->
+           let exp' = dummy_fun pat in
+           let pat' = complete_pat ((exp', cxt), env, prefix) pat in
+           {pc_lhs = pat'; pc_guard = g; pc_rhs = exp}
+         ) cs in
+     let d' = Pexp_match (e, cs') in
+     Debug_core.desc_to_exp d' expr
+(*
+     Debug_core.compare_expr (Debug_core.desc_to_exp d') expr
+ *)
+  | _ -> expr
+*)
+
+(* algo : structure -> Env.t -> unit *)
+(* structure contains all the program to be compiled *)
+(* toplevel_env is always the clean initial environment *)
+let algo structure toplevel_env =
+(*
+  if Debug_core.print_slice
+  then (
+    Format.fprintf ppf "@[algo: \n @.%a@.@]@." Pprintast.structure structure
+  );
+ *)
+  Warnings.parse_options false "-A";
+  if not print_node_count && false (* exists mode *) then print_initial_message ();
+(*
+  match phr with
+    Ptop_dir (_, _) ->
+      failwith "TypeDebugger: Error: Ptop_dir is passed to algo."
+  | Ptop_def (structure) ->
+*)
+  (* obtain the smallest illtyped structure *)
+
+  let ((expr, cxt), env, prefix) =
+    illtyped_expr structure toplevel_env [] in
+  if debug land 1 = 1 then Format.fprintf ppf "starting structure:@.%a@." Pprintast.structure structure;
+  if debug land 1 = 1 then Format.fprintf ppf "illtyped structure:@.%a@." Pprintast.expression expr;
+(*
+  if false (* !Debug_core.error_kind = "Typetexp" *)
+  then
+    (* let 文のエラー判定 *)
+    let expr' = search expr env in
+    if expr' = dummy_assertfalse expr'
+    then make_message_illtyped ((expr, cxt), env, prefix) (* [] [] *)
+    else make_message_illtyped ((expr', cxt), env, prefix) (* [] [] *)
+  else
+ *)
+  (* 通常のデバッグ *)
+  try
+    (* デバッガ起動 *)
+    (* 簡単なエラーでなければ、パターンの補完を行う *)
+    (*
+    if print_slice
+    then Format.fprintf ppf 
+                        "@[~algo~\
+                         @.  %a @]@." Pprintast.expression expr;
+     *)
+
+    walk_up_illtyped ((expr, cxt), env, prefix) [] [];
+
+    Warnings.parse_options false Warnings.defaults_w
+  with
+  | DebuggerQuit ->
+     Warnings.parse_options false Warnings.defaults_w
+
+  | Syntaxerr.Error (Syntaxerr.Unclosed _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Expecting _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Not_expecting _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Applicative_path _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Variable_in_scope _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Expert_exp _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.InfixOP0 _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Other _) -> assert false
+  | Syntaxerr.Error (Syntaxerr.Ill_formed_ast _) -> assert false
+  | err ->
+      Warnings.parse_options false Warnings.defaults_w;
+      raise err
+
+(* illtyped_structure_prefix : structure -> Env.t -> structure * structure *)
+(* structure has to be ill-typed. *)
+(* toplevel_env is always the clean initial environment *)
+(* returns (str, rev_str) where rev_str is well typed but str is ill typed *)
+let illtyped_structure_prefix structure toplevel_env =
+  let ((expr, cxt), _, prefix) = illtyped_expr structure toplevel_env [] in
+  (plug_str (expr, cxt), List.map fst prefix)
+
+(* handle_simple_errors : exn -> structure -> (unit -> Env.t) -> bool *)
+(* 簡単なエラーはここで処理して true を返す *)
+(* 処理しなかった場合は false を返す *)
+
+let handler loc error f =
+  try
+    f loc error;
+    true
+  with
+    Failure msg -> msg <> "Typecore"
+
+(* typecore のエラー *)
+let typecore loc error = match error with
+  | Typecore.Wrong_name (_, {ty = typ}, {kind = kind; name = {txt = name}}) ->
+      (* レコードもしくはコンストラクタに属していない引数がある *)
+      print_loc loc;
+      Debug_message.print_wrong_name kind typ name
+  | Typecore.Label_missing (labels) ->
+      (* フィールド不足 *)
+      print_loc loc;
+      Debug_message.print_label_missing labels
+  | Typecore.Label_multiply_defined (name) ->
+      (* 同一レコード内のフィールド多重定義 *)
+      print_loc loc;
+      Debug_message.print_label_mul name
+  | Typecore.Undefined_method (_, "use", _) ->
+      (* #useが文の途中にある *)
+      print_loc loc;
+      Debug_message.print_no_method_use ()
+  | Typecore.Orpat_vars (_) ->
+      (* 変数を含む複数のパターンが同じ式に至る *)
+      print_loc loc;
+      Debug_message.print_orpad_vars ()
+  | Typecore.Multiply_bound_variable (s) ->
+      (* ひとつのパターンマッチに同じ変数が複数回現れている *)
+      print_loc loc;
+      Debug_message.print_multiply_bound_variable s
+  | _ -> failwith "Typecore"
+
+(* typedecl のエラー *)
+and typedecl loc error = match error with
+  | Typedecl.Duplicate_constructor s ->
+      (* 二重定義・コンストラクタ *)
+      print_loc loc;
+      Debug_message.print_identified ();
+      Debug_message.print_duplicate_name "constructor" s
+  | Typedecl.Duplicate_label s ->
+      (* 二重定義・レコード *)
+      print_loc loc;
+      Debug_message.print_identified ();
+      Debug_message.print_duplicate_name "record" s
+  | _ -> failwith "Typedecl"
+
+(* env (lookup) のエラー *)
+and env_lookup loc error = match error with
+  | Env.Unbound_constructor (lid) ->
+      (* 未定義：コンストラクタ *)
+      print_loc loc;
+      Debug_message.print_identified ();
+      Debug_message.print_unbound_name "construct" lid
+  | Env.Unbound_label (lid) ->
+      (* 未定義：フィールド *)
+      print_loc loc;
+      Debug_message.print_identified ();
+      Debug_message.print_unbound_name "record" lid
+  | Env.Unbound_module (lid) ->
+      (* 未定義：モジュール *)
+      print_loc loc;
+      Debug_message.print_identified ();
+      Debug_message.print_unbound_name "module" lid
+  | _ -> failwith "Env (lookup)"
+
+let handle_simple_errors x structure init_env =
+
+  if Data.express_mode < 0 && print_ocaml_error then
+    Location.report_exception ppf x;
+
+  match x with
+  | Env.Error (Lookup_error (loc, _, Env.Unbound_value (_))) ->
+      (* 未定義：変数（再帰関数で rec をつけ忘れた場合のみ） *)
+      let ((expr, cxt), env, prefix) =
+        illtyped_expr structure (init_env ()) [] in
+      let expr' = search expr env in
+      if expr' = hole_of_exp expr' then
+        false
+      else
+        handler loc expr'
+          (fun l e ->
+             print_loc l;
+             make_message_illtyped ((e, cxt), env, prefix))
+  | Typecore.Error (loc, _, error) when handler loc error typecore -> true
+  | Typedecl.Error (loc, error) when handler loc error typedecl -> true
+  | Env.Error (Lookup_error (loc, _, error))
+      when handler loc error env_lookup -> true
+  | _ -> setCompileError x
+
+(* launch : structure -> (unit -> Env.t) -> unit *)
+let launch strs initial_env =
+  (* structure *)
+  if print_node_count then begin
+      let (last_str, rev_str) =
+        illtyped_structure_prefix ([hole_str]@strs) (initial_env ()) in
+      let strs = List.rev_append rev_str last_str in
+
+      (* スライス前のノード数も数える *)
+      algo strs (initial_env ());
+      (* パターン以外のスライス後のノード数も数える *)
+      on_pat_slice := false;
+      let slice = Debug_slice.get_slice_top strs (initial_env ()) in
+
+      let strs = List.rev_append rev_str slice in
+      algo strs (initial_env ());
+      on_pat_slice := true
+    end;
+  (* スライスの有無を切り替える *)
+
+  let strs = 
+    if on_slice then
+      (* スライスを求める *)
+      Debug_slice.get_slice_top strs (initial_env ())
+    else
+      strs in
+
+  if print_slice then
+    Format.fprintf ppf
+      "structure : %a@."
+      Pprintast.structure strs;
+
+  (* error の形式が 4.04.0 から大きく変更になっているので保留 *)
+  (*
+  let {msg; loc} = getCompileError () in
+
+  if Data.express_mode = 99 then
+    let message =
+      String.split_on_char '\n' msg (* 改行コードの除去 *)
+      |> List.map (String.split_on_char ' ') (* 空白の除去 *)
+      |> List.concat
+      |> List.filter (fun word -> word <> "") (* 空文字列の除去 *)
+      |> String.concat " " (* 改行をのぞいて復元 *) in
+    (* コンパイラのメッセージをJSON形式で表示 *)
+    Format.fprintf ppf
+      "{\"location\": %a, \"message\": \"%s\"}@."
+      Data.Loc.printJSON loc message;
+    exit 99
+
+  else if Data.express_mode = 98 then
+    let structure =
+      List.filter (fun item -> item <> Hole.item) strs in
+    (* スライス結果を表示する *)
+    Pprintast.structure ppf structure;
+    exit 98
+
+  else (* 保留ここまで *) *)
+    (* その他 *)
+    algo strs (initial_env ())
+
+(* launch : exn -> structure -> (unit -> Env.t) -> unit *)
+let launch x strs initial_env =
+  if handle_simple_errors x strs initial_env
+  then ()
+  else launch (hole_str :: strs) initial_env
diff --git a/typing/debug_main.mli b/typing/debug_main.mli
new file mode 100644
index 0000000..789cb13
--- /dev/null
+++ b/typing/debug_main.mli
@@ -0,0 +1,3 @@
+open Parsetree
+
+val launch : exn -> structure -> (unit -> Env.t) -> unit
diff --git a/typing/debug_message.ml b/typing/debug_message.ml
new file mode 100644
index 0000000..f9a6c81
--- /dev/null
+++ b/typing/debug_message.ml
@@ -0,0 +1,1081 @@
+open Format
+open Printtyp
+open Parsetree
+open Syntaxerr (* for language_t, language *)
+
+let ppf = std_formatter
+
+let nth n = match n with
+    1 -> "1st"
+  | 2 -> "2nd"
+  | 3 -> "3rd"
+  | _ -> string_of_int n ^ "th"
+
+let print_loc loc =
+  Location.print_loc ppf loc;
+  fprintf ppf ":@."
+
+let rec string_of_longident t = match t with
+    Longident.Lident (l) -> l
+  | Longident.Ldot (t, l) -> (string_of_longident t) ^ "." ^ l
+  | _ -> assert false;;
+
+let print_initial_message () =
+  match language with
+| English -> fprintf ppf
+    "@[The above type error was raised.  Type debugger started.@]@.@."
+| Japanese -> fprintf ppf
+    "@[上記の型エラーが起こりました。デバッガを起動します。@]@.@."
+
+let print_prompt () =
+  fprintf ppf "@[(y/n/q) > @]@?"
+
+let print_ask_env st typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[In this scope, do you intend '%s' to be of type:@ %a ?@]@."
+    st Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[ハイライトされた部分のスコープで %s を@ %a@ 型だと意図していますか？@]@."
+    st Printtyp.type_expr typ
+
+let print_ask_expr typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[Do you intend this expression to be of type:@ %a ?@]@."
+    Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[ハイライトされた部分の型を@ %a@ だと意図していますか？@]@."
+    Printtyp.type_expr typ
+
+let print_identified () =
+  match language with
+| English -> fprintf ppf
+    "@[The source of the type error is highlighted.@]@."
+| Japanese -> fprintf ppf
+    "@[ハイライトされた部分に特定されました。@]@."
+
+let check_duplicate typ1 typ2 =
+  (* type_expr を Ident.t list にする *)
+  (* idents_of_typexp : type_expr -> Ident.t list *)
+  let rec idents_of_typexp {Types.desc = desc} =
+    match desc with
+      Types.Tconstr (path, tyl, _) ->
+       let rec get_id p = match p with
+           Path.Pident (id) -> [id] (* path の情報がある *)
+         | Path.Pdot (p, _) -> get_id p
+         | Path.Papply (p1, p2) -> (get_id p1) @ (get_id p2) in
+       List.fold_left (fun il ty -> il @ idents_of_typexp ty) (get_id path) tyl
+    | Types.Tlink (ty) -> idents_of_typexp ty
+    | Types.Tsubst (ty) -> idents_of_typexp ty
+    | Types.Tarrow (_, ty1, ty2, _) ->
+       (idents_of_typexp ty1) @ (idents_of_typexp ty2)
+    | Types.Ttuple (tyl) ->
+       List.fold_left (fun il ty -> il @ idents_of_typexp ty) [] tyl
+    | Types.Tvar _ | Types.Tobject _
+    | Types.Tfield _ | Types.Tnil | Types.Tvariant _ | Types.Tunivar _
+    | Types.Tpoly _ | Types.Tpackage _ -> [] in
+  let is_duplicate i1 i2 =
+    (* equal = true,  same = true  : 同一の型 *)
+    (* equal = true,  same = false : 同じ名前だが別の型 *)
+    (* equal = false, same = false : 全く異なる型 *)
+    if (Ident.equal i1 i2) <> (Ident.same i1 i2) then
+      fprintf ppf "@[（%s が二重に定義されています。）@]@." (Ident.name i1) in
+  let print_duplicate typ1 typ2 =
+    let idl1 = idents_of_typexp typ1 in
+    let idl2 = idents_of_typexp typ2 in
+    try List.iter2 is_duplicate idl1 idl2 with
+      Invalid_argument _ -> () in
+  print_duplicate typ1 typ2
+
+(*** print error massage ***)
+(*
+
+特定される構文ごとに分類
+・式
+<Pexp_ifthenelse>
+  Error12 -- Error15
+<Pexp_apply>
+  Error17 -- Error19, Error27 -- Error28
+<Pexp_function><Pexp_fun>
+  Error20
+<Pexp_match>
+  Error21 -- Error24, Error33
+<Pexp_try>
+  Error53 -- Error55
+<Pexp_construct>
+  Error25, Error56, print_duplicate_name (共通)
+<Pexp_record>
+  Error34 -- Error35, Error51 -- Error52, Error56, print_duplicate_name (共通)
+
+<Pexp_constraint>
+  Error36
+
+<Pexp_array>
+  Error38
+・パターン変数
+Error30
+Error39
+Error40
+
+  print_recursive as
+  Error1  : 再帰関数の定義と呼び出しで型が合わない
+  print_patexps as
+  Error2  : パターンと式の型が合わない
+  (print_patexps2 as Error3)
+  print_welltyped_expr as
+  Error4  : 式の型がプログラマの意図と異なる
+  print_welltyped_env1 as
+  Error5  : 環境の変数のうち一つが別の型として使われている
+  print_welltyped_env_many as
+  Error6  : 環境の変数のうち複数が別の型として使われている
+  (print_welltyped_if_bool as Error7)
+  (print_welltyped_if_unit as Error8)
+  (print_welltyped_if_then_else as Error9)
+  (print_welltyped_match_pattern as Error10)
+  (print_welltyped_match_expression as Error11)
+  print_illtyped_if_predicate as
+  Error12 : 条件部分が bool 型でない
+  print_illtyped_if_then as
+  Error13 : else 部分がない
+  print_illtyped_if_fv as
+  Error14 : if 文の中で同じ変数が別の型として扱われている
+  print_illtyped_if_then_else as
+  Error15 : then 部分と else 部分で型が異なる
+  (print_illtyped_apply as Error16)
+  print_illtyped_apply_funname as
+  Error17 : 関数呼び出しの引数の型が合わない
+  (print_illtyped_apply_beginning as Error18)
+  (print_illtyped_apply_beginning2 as Error19)
+  print_illtyped_function as
+  Error20 : function 文の型エラー
+  print_illtyped_match_exp as
+  Error21 : パターンと match する式の型が異なる
+  print_illtyped_match_left as
+  Error22 : match 文のパターンに複数の型が混在している
+  print_illtyped_match_right as
+  Error23 : match 文の結果に複数の型が混在している
+  (print_illtyped_match_fv as Error24)
+  print_illtyped_constructor as
+  Error25 : コンストラクタのエラー
+  print_illtyped_other as
+  Error26 : デフォルトケース
+  print_illtyped_too_much_args as
+  Error27 : 関数に渡す引数が多い
+  print_illtyped_apply_not_function as
+  Error28 : 関数部分が関数でない
+  print_illtyped_var_undefined as
+  Error29 : 変数が未定義、もしくはstructure_item における区切りがない
+  print_pattern as
+  Error30 : パターンのエラー
+  print_guard as
+  Error32 : ガードのエラー
+  (print_guard_env as Error33)
+  print_illtyped_match_right2 as
+  Error33 : match 文の中で同じ変数が別の型として扱われている
+  print_illtyped_record as
+  Error34 : レコード内の要素の型が定義と異なる
+  print_label_mul as
+  Error35 : レコード内であるフィールドが複数回現れている
+  print_illtyped_constraint as
+  Error36 : (expr : core_type) の左右で型が一致しない
+  print_no_method_use as
+  Error37 : #use の前に区切りがない
+  print_illtyped_array as
+  Error38 : 配列のエラー
+
+  Error41 : let文のエラー(nonrec)
+  Error42 : let文のエラー(rec 1)
+  Error43 : let文のエラー(rec many)
+
+  print_label_mismatch as
+  Error51 : 複数のレコードに定義されたフィールドが混在している
+  print_label_missing as
+  Error52 : 使われていないフィールドがある
+  print_illtyped_try_right as
+  Error53 : try 文の結果に複数の型が混在している
+  print_illtyped_try_left as
+  Error54 : try 文のパターンに複数の型が混在している
+  print_illtyped_try_env as
+  Error55 : try 文の中で同じ変数が別の型として扱われている
+  print_wrong_name as
+  Error56 : 未定義のコンストラクタ/フィールドが存在する
+
+↓並べ替えるなら↓
+・デフォルトケース
+・未定義
+・welltyped のやつ
+・関数適用
+・fun文、function文
+・if文
+・パターンマッチ
+・try文
+・パターン
+・ガード
+・再帰
+・コンストラクタ
+・コンストラクタ/レコード共通
+・レコード
+・#use、constraint、配列
+
+
+*)
+
+let print_recursive typ st typ' =
+  Printtyp.reset_and_mark_loops typ;
+  Printtyp.reset_and_mark_loops typ';
+  match language with
+| English -> fprintf ppf
+    "@[Error1 : The function %s has type@ %a,\
+     @ but '%s' is used at type@ %a in this recursive call.@]@."
+    st Printtyp.type_expr typ st Printtyp.type_expr typ'
+| Japanese -> fprintf ppf
+    "@[Error1 : 関数 %s は@ %a@ 型ですが、@,\
+     再帰呼び出しで %s を %a@ 型として使っています。@,\
+     （再帰呼び出し時の引数の数や型は合っていますか？）@]@."
+    st Printtyp.type_expr typ st Printtyp.type_expr typ'
+
+let print_patexps typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[Error2 : This expression has type:@ %a,\
+     @ but it conflicts with the type of the pattern.@]@."
+    Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[Error2 : この式は@ %a@ 型で、@,\
+     期待されるパターンの型と合いません。@]@."
+    Printtyp.type_expr typ
+
+let print_patexps2 () =
+ (* Printtyp.reset_and_mark_loops pattyp;*)
+  match language with
+| English -> fprintf ppf
+    "@[Error3 : This expression has constant type,@,\
+     but it conflicts with the type of the pattern.@]@."
+| Japanese -> fprintf ppf
+    "@[Error3 : この式は定数になっていますが、@,\
+     let 文で束縛する式は変数もしくはパターンでなければなりません。@]@."
+
+let print_welltyped_expr typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[Error4 : This expression has type@ %a.@]@."
+    Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[Error4 : この式の型は@ %a@ 型です。@]@."
+    Printtyp.type_expr typ
+
+let print_welltyped_env1 st typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[Error5 : The variable '%s' is used as an expression of type:@ %a.@]@."
+    st Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[Error5 : 変数 %s は@ %a@ 型として使われています。@]@."
+    st Printtyp.type_expr typ
+
+let print_welltyped_env_many st typ rest =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "@[Error6 : Following variables are used as expressions of types:@]@."
+| Japanese -> fprintf ppf
+    "@[Error6 : 次の変数は示される型として使われています。@]@."
+  end;
+  fprintf ppf "  @[%s : %a" st Printtyp.type_expr typ;
+  List.iter (fun (((st, _), _, _), typ) ->
+              (* Printtyp.reset_and_mark_loops typ; *)
+              fprintf ppf ",@ %s : %a" st Printtyp.type_expr typ)
+            rest;
+  fprintf ppf "@]@."
+
+let print_welltyped_if_bool st typ rest =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "Error7 : Expressions at the following variables need the following types.\
+     @. The predicate of a conditional expression needs to have type bool.@."
+| Japanese -> fprintf ppf
+    "Error7 : 次の変数が示される型になっています。@,\
+     if 文の条件部は bool 型でなければなりません。@."
+  end;
+  fprintf ppf "  @[%s : %a" st Printtyp.type_expr typ;
+  List.iter (fun (((st, _), _, _), typ) ->
+              (* Printtyp.reset_and_mark_loops typ; *)
+              fprintf ppf ",@ %s : %a" st Printtyp.type_expr typ)
+            rest;
+  fprintf ppf "@]@."
+
+let print_welltyped_if_unit st typ rest =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "Error8 : Expressions at the following variables need the following types.\
+     @. Since the conditional expression does not have else branch,@,\
+     then branch needs to have type unit.@. (or you might forgot else branch)@."
+| Japanese -> fprintf ppf
+    "Error8 : 次の変数が示される型になっています。@,\
+     else 部分がないため if 文の then 部分は unit 型でなければなりません。@,\
+     （もしくは else 部分を忘れていませんか？）@."
+  end;
+  fprintf ppf "  @[%s : %a" st Printtyp.type_expr typ;
+  List.iter (fun (((st, _), _, _), typ) ->
+              (* Printtyp.reset_and_mark_loops typ; *)
+              fprintf ppf ",@ %s : %a" st Printtyp.type_expr typ)
+            rest;
+  fprintf ppf "@]@."
+
+let print_welltyped_if_then_else st typ rest =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "Error9 : Expressions at the following variables need the following types.\
+     @. Then branch and else branch of a conditional expression need to be \
+     the same type.@."
+| Japanese -> fprintf ppf
+    "Error9 : 次の変数が示される型になっています。@,\
+     if 文の then 部分と else 部分は同じ型でなければなりません。@."
+  end;
+  fprintf ppf "  @[%s : %a" st Printtyp.type_expr typ;
+  List.iter (fun (((st, _), _, _), typ) ->
+              (* Printtyp.reset_and_mark_loops typ; *)
+              fprintf ppf ",@ %s : %a" st Printtyp.type_expr typ)
+            rest;
+  fprintf ppf "@]@."
+
+(* TODO : English messages *)
+let print_welltyped_match_pattern st typ rest =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "Error10 : Expressions at the following variables need the following types:\
+     @."
+| Japanese -> fprintf ppf
+    "Error10 : 次の変数が示される型になっています。@,\
+     match 文の矢印の左側は同じ型でなければなりません。@."
+  end;
+  fprintf ppf "  @[%s : %a" st Printtyp.type_expr typ;
+  List.iter (fun (((st, _), _, _), typ) ->
+              (* Printtyp.reset_and_mark_loops typ; *)
+              fprintf ppf ",@ %s : %a" st Printtyp.type_expr typ)
+            rest;
+  fprintf ppf "@]@."
+
+let print_welltyped_match_expression st typ rest =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "Error11 : Expressions at the following variables need the following types:\
+     @."
+| Japanese -> fprintf ppf
+    "Error11 : 次の変数が示される型になっています。@,\
+     match 文の矢印の右側は同じ型でなければなりません。@."
+  end;
+  fprintf ppf "  @[%s : %a" st Printtyp.type_expr typ;
+  List.iter (fun (((st, _), _, _), typ) ->
+              (* Printtyp.reset_and_mark_loops typ; *)
+              fprintf ppf ",@ %s : %a" st Printtyp.type_expr typ)
+            rest;
+  fprintf ppf "@]@."
+
+let print_illtyped_var_undefined () =
+  match language with
+| English -> fprintf ppf
+    "@[Error29 : This variable is undefined.@]@."
+| Japanese -> fprintf ppf
+    "@[Error29 : この変数は未定義です。@]@."
+
+let print_illtyped_if_predicate typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[Error12 : The type of the predicate part is:@ %a,@,\
+     but it has to be bool.]@."
+    Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[Error12 : 条件部分の型は@ %a@ ですが bool 型でなくてはなりません。@]@."
+    Printtyp.type_expr typ
+
+let print_illtyped_if_then typ =
+  Printtyp.reset_and_mark_loops typ;
+  begin match language with
+| English -> fprintf ppf
+    "@[Error13 : The type of the then branch is:@ %a,@,\
+     but it has to be unit.]@."
+    Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[Error13 : then 部分が@ %a @ 型になっていますが@ \
+     else 部分がないため unit 型でなくてはなりません。@]@."
+    Printtyp.type_expr typ
+  end;
+  begin match language with
+| English -> fprintf ppf
+    "@[(Or, you forgot the else branch perhaps?)@]@."
+| Japanese -> fprintf ppf
+    "@[（もしくは else 部分を書き忘れていませんか？）@]@."
+  end
+
+let print_illtyped_if_fv () =
+  match language with
+| English -> fprintf ppf
+    "@[Error14 : Some variables are used at different types.@]@."
+| Japanese -> fprintf ppf
+    "@[Error14 : 同じ変数が別の場所で別の型として使われています。@]@."
+
+let print_illtyped_if_then_else typ2 typ3 =
+  Printtyp.reset_and_mark_loops typ2;
+  Printtyp.reset_and_mark_loops typ3;
+  begin match language with
+| English -> fprintf ppf
+    "@[Error15 : The types of the then and else branches are:@ %a@ and@ %a,@,\
+     but they have to be the same.@,\
+     (Or, some variables are used at different types.)@]@."
+    Printtyp.type_expr typ2 Printtyp.type_expr typ3
+| Japanese -> fprintf ppf
+    "@[Error15 : then 部分が@ %a@ 型で else 部分が@ %a@ 型になっていますが、@,\
+     これらは同じ型でなくてはなりません。@,\
+     （または同じ変数が別の場所で別の型として使われています。）@]@."
+    Printtyp.type_expr typ2 Printtyp.type_expr typ3
+  end;
+  check_duplicate typ2 typ3
+
+let rec print_illtyped_apply_args typs n = match typs with
+    [] -> ()
+  | typ :: rest ->
+      begin match language with
+      | English -> fprintf ppf
+          " @[<2>%s argument :@ %a@]@." (nth n) Printtyp.type_expr typ
+      | Japanese -> fprintf ppf
+          " @[<2>%d 番目の引数の型：@,%a@]@." n Printtyp.type_expr typ
+      end;
+      print_illtyped_apply_args rest (n + 1)
+
+(* 関数名なし *)
+let print_illtyped_apply n exp_typ typs well_typ =
+  match language with
+| English ->
+    fprintf ppf
+      "@[Error16 : The type conflict occurs at the %s argument.@,\
+       The types of function and arguments, required type of %s argument are:@]"
+      (nth n) (nth n);
+    fprintf ppf
+      "@[Function :@ %a@]@."
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1;
+    fprintf ppf
+      " @[Required type of %s argument :@ %a@.@]"
+      (nth n) Printtyp.type_expr well_typ
+| Japanese ->
+    fprintf ppf
+      "@[Error16 : この関数呼び出しの %d 番目の引数で型が合いません。@,\
+       関数、引数、%d 番目の引数に要求される型は以下の通りです。@]@."
+      n n;
+    fprintf ppf
+      "@[関数部分：@,%a@]@."
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1;
+    fprintf ppf
+      " @[%d 番目の引数に要求される型：@,%a@.@]"
+      n Printtyp.type_expr well_typ
+
+(* 関数名あり *)
+let print_illtyped_apply_funname n exp_typ exps typs well_typ name =
+  if 7 <= Array.length Sys.argv then
+    fprintf ppf
+      "@[Function %a :@ %a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+
+  match language with
+| English ->
+    fprintf ppf
+      "@[Error17 : The type conflict occurs at the %s argument.@,\
+       The types of function and %s argument, required type of %s argument are:@]"
+      (nth n) (nth n) (nth n);
+    fprintf ppf
+      "@[Function %a :@ %a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    fprintf ppf
+      " @[<2>%s argument :@ %a@]@."
+      (nth n) Printtyp.type_expr (List.nth typs (n - 1));
+    fprintf ppf
+      " @[Required type of %s argument :@ %a@.@]"
+      (nth n) Printtyp.type_expr well_typ
+| Japanese -> fprintf ppf
+    "@[Error17 : この関数呼び出しの %d 番目の引数で型が合いません。@,\
+     関数、%d 番目の引数、%d 番目の引数に要求される型は以下の通りです。@]@." n n n;
+    fprintf ppf
+      "@[関数部分 %a：@,%a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    fprintf ppf
+      " @[<2>%d 番目の引数 %a：@,%a@]@."
+      n Pprintast.expression (List.nth exps (n - 1)) Printtyp.type_expr (List.nth typs (n - 1));
+    fprintf ppf
+      " @[%d 番目の引数に要求される型：@,%a@.@]"
+      n Printtyp.type_expr well_typ;
+    check_duplicate (List.nth typs (n - 1)) well_typ
+
+(*
+let print_illtyped_apply_funname n exp_typ typs well_typ name =
+  match language with
+| English ->
+    fprintf ppf
+      "@[Error17 : The type conflict occurs at the %s argument.@,\
+       The types of function and arguments, required type of %s argument are:@]"
+      (nth n) (nth n);
+    fprintf ppf
+      "@[Function %a :@ %a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1;
+    fprintf ppf
+      " @[Required type of %s argument :@ %a@.@]"
+      (nth n) Printtyp.type_expr well_typ
+| Japanese -> fprintf ppf
+    "@[Error17 : この関数呼び出しの %d 番目の引数で型が合いません。@,\
+     関数、引数、%d 番目の引数に要求される型は以下の通りです。@]@." n n;
+    fprintf ppf
+      "@[関数部分 %a：@,%a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1;
+    fprintf ppf
+      " @[%d 番目の引数に要求される型：@,%a@.@]"
+      n Printtyp.type_expr well_typ;
+    check_duplicate (List.nth typs (n - 1)) well_typ
+    *)
+
+let rec print_funtypes n funtypes =
+  match language with
+| English ->
+    begin match funtypes with
+        [] -> fprintf ppf
+          "@[(some arguments might be missing.)@]@."
+      | (m, typ) :: rest ->
+          fprintf ppf
+            " @[Type of %s argument :@ %a@]@."
+            (nth m) Printtyp.type_expr typ;
+          print_funtypes n rest
+    end
+| Japanese ->
+    begin match funtypes with
+        [] -> fprintf ppf
+          "@[これらに引数を渡すのを忘れていませんか？@]@."
+      | (m, typ) :: rest ->
+          fprintf ppf
+            " @[%d 番目の引数の型：@,%a@]@."
+            m Printtyp.type_expr typ;
+          print_funtypes n rest
+    end
+
+let print_illtyped_apply_beginning n name exp_typ typs funtype_args =
+  match language with
+| English ->
+    fprintf ppf
+      "@[Error18 : The type conflict occurs at the %s argument.@]@."
+      (nth n);
+    fprintf ppf
+      "@[Function %a :@ %a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1;
+    fprintf ppf
+      "@[The following arguments have function type.@]@.";
+    print_funtypes n funtype_args
+| Japanese ->
+    fprintf ppf
+      "@[Error18 : この関数呼び出しの %d 番目の引数で型が合いません。@]@."
+      n;
+    fprintf ppf
+      "@[関数部分 %a の型：@,%a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1;
+    fprintf ppf "@[以下の引数が関数型になっています。@]@.";
+    print_funtypes n funtype_args
+
+(* 関数型になっている引数がないとき *)
+let print_illtyped_apply_beginning2 =
+  print_illtyped_apply_funname
+(*
+let print_illtyped_apply_beginning2 n name exp_typ n_typ =
+  match language with
+| English ->
+    fprintf ppf
+      "@[Error19 : The type conflict occurs at the %s argument.@]@."
+      (nth n);
+| Japanese ->
+    fprintf ppf
+      "@[Error19 : この関数呼び出しの %d 番目の引数で型が合いません。@]@."
+      n;
+    fprintf ppf
+      "@[関数部分 %a の型：@,%a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    fprintf ppf
+      " @[%d 番目の引数の型：@,%a@.@]@."
+      n Printtyp.type_expr n_typ
+ *)
+
+let print_illtyped_function () =
+  match language with
+  | English ->
+      fprintf ppf
+        "@[Error20 : The pattern forces some variable an unintended type.@]@."
+  | Japanese ->
+      fprintf ppf
+        "@[Error20 : パターンによって変数の型が意図しないものに\
+         強制されています。@]@."
+
+let print_illtyped_match () =
+  match language with
+| English -> fprintf ppf
+    "@[Somewhere in this match expression is wrong.@]@."
+| Japanese -> fprintf ppf
+    "@[この match 文のどこかがおかしいです。@]@."
+
+let print_illtyped_match_exp typ1 typ2 =
+  match language with
+  | English ->
+      fprintf ppf
+        "@[Error21 : Somewhere in this match expression is wrong.@]@." (* 英語 *)
+| Japanese ->
+    fprintf ppf
+      "@[Error21 : match する式が@ %a@ 型でパターンが@ %a@ 型になっていますが、\
+       @,これらは同じ型でなくてはなりません。@]@."
+      Printtyp.type_expr typ1 Printtyp.type_expr typ2;
+    check_duplicate typ1 typ2
+
+let print_illtyped_match_left typ1 typ2 =
+  match language with
+| English -> fprintf ppf
+    "@[Error22 : Somewhere in this match expression is wrong.@]@." (* 英語 *)
+| Japanese -> fprintf ppf
+    "@[Error22 : ハイライト部分が@ %a@ 型でそれ以前までの矢印の左側が\
+     @ %a@ 型になっていますが、@,これらは同じ型でなくてはなりません。@]@."
+    Printtyp.type_expr typ1 Printtyp.type_expr typ2;
+              check_duplicate typ1 typ2
+
+let print_illtyped_match_right typ1 typ2 =
+  match language with
+| English -> fprintf ppf
+    "@[Error23 : The type of this expression is:@ %a,@,\
+     but the type of the preceeding clause is:@ %a.@,\
+     They must be the same type.@]@."
+    Printtyp.type_expr typ1 Printtyp.type_expr typ2
+| Japanese -> fprintf ppf
+    "@[Error23 : ハイライト部分が@ %a@ 型でそれ以前までの矢印の右側が\
+     @ %a@ 型になっていますが、@,これらは同じ型でなくてはなりません。@]@."
+    Printtyp.type_expr typ1 Printtyp.type_expr typ2;
+              check_duplicate typ1 typ2
+
+let print_illtyped_match_right2 () =
+  match language with
+| English -> fprintf ppf
+    "@[Error33 : Some variables in this expression is used at different type@ \
+     at different place.@]@."
+| Japanese -> fprintf ppf
+    "@[Error33 : ハイライト部分の変数が\
+     別の場所で別の型として使われています。@]@."
+
+let print_illtyped_match_fv () =
+  match language with
+| English -> fprintf ppf
+    "@[Error24 : Some variables are used at different types.@]@."
+| Japanese -> fprintf ppf
+    "@[Error24 : 同じ変数が別の場所で別の型として使われています。@]@."
+
+let rec print_type lid plst args =
+    match plst with
+    | [] ->
+       begin
+         if Longident.last lid = "::"
+         then
+           begin
+             match args with
+             | [Some (e1, t1); Some (e2, t2)] -> print_list_clash e1 t1 e2 t2
+             | [_; Some (_, typ)] -> print_list_mismatch typ
+             | _ -> ()
+           end
+         else
+           begin
+             print_constructor_name "'a option" lid;
+             if Longident.last lid = "Some"
+             then print_no_args "Some"
+             else print_arity_mismatch (List.length args) 0
+           end
+       end
+    | (name, vs) :: rest ->
+       try
+         print_args lid (name, vs) args
+       with
+         Not_found -> print_type lid rest args
+
+and print_args lid (name, vlst) args =
+  match vlst with
+  | [] -> raise Not_found
+  | (value, cts) :: rest ->
+     let a_sum = List.length args and c_sum = List.length cts in
+     let rec num t = match t with
+         [] -> 0
+       | first :: rest ->
+          if first = None
+          then num rest
+          else a_sum - (List.length rest) in
+     let n = num args in
+     if value <> string_of_longident lid
+     then
+       (* コンストラクタ名が一致しない場合は次へ進む *)
+       print_args lid (name, rest) args
+     else
+       begin
+         (* 該当するコンストラクタ名を表示 *)
+         print_constructor_name name lid;
+         if a_sum = 0
+         then
+           (* 引数が見つからない *)
+           print_no_args (string_of_longident lid)
+         else
+           begin
+             if a_sum = c_sum
+             then
+               (* 引数の数が同じ *)
+               let (en, tn) = match (List.nth args (n - 1)) with
+                 | Some (e, t) -> (e, t)
+                 | _ -> assert false in
+               begin
+                 print_arg_type_clash n (en, tn) (List.nth cts (n - 1));
+                 print_constuctor_type lid cts
+               end
+             else
+               (* 引数の数が異なる *)
+               print_arity_mismatch a_sum c_sum
+           end
+       end
+
+and print_list_clash e1 t1 e2 t2 =
+
+
+  fprintf ppf
+          "@[ハイライト部分のリストで、先頭の要素と末尾のリストの型が合いません。@ \
+           先頭の要素、末尾のリストは以下の通りです。@]@.";
+  fprintf ppf
+          " @[　先頭の要素 %a：@,%a @]@."
+          Pprintast.expression e1 Printtyp.type_expr t1;
+  fprintf ppf
+          " @[末尾のリスト %a：@,%a @]@."
+          Pprintast.expression e2 Printtyp.type_expr t2
+
+and print_list_mismatch typ =
+  fprintf ppf
+          "@[ハイライト部分の末尾が %a 型になっていますが、@ \
+           :: の右側はリストでなければなりません。@]@."
+          Printtyp.type_expr typ
+and print_constructor_name tname lid =
+  match lid with
+  | Longident.Ldot (t, l) ->
+     fprintf ppf
+             "@[ハイライトされた部分では、モジュール %s の中に定義された %s 型のコンストラクタ %s の、" (string_of_longident t) tname l
+  | _ ->
+     fprintf ppf
+             "@[%s 型のコンストラクタ %s の" tname (string_of_longident lid)
+
+and print_arg_type_clash n (e, t) c =
+  (* 引数の数が同じ *)
+  fprintf ppf
+          "%d 番目の引数で型が合いません。@ \
+           %d 番目の引数、%d 番目の引数に要求される型、コンストラクタの定義は以下の通りです。@]@."
+          n n n;
+  fprintf ppf
+          " @[<2>%d 番目の引数 %a：@,%a@]@."
+          n Pprintast.expression e Printtyp.type_expr t;
+  fprintf ppf
+          " @[<2>%d 番目の引数に要求される型：@,%a@.@]"
+          n Pprintast.core_type c;
+and print_constuctor_type lid cts =
+      fprintf ppf
+      " @[コンストラクタの定義：@,%s " (string_of_longident lid);
+     let rec print_core ct = match ct with
+         [] -> ()
+       | [first] ->
+          (* 引数が一つしかない場合 *)
+          fprintf ppf "%a" Pprintast.core_type first
+       | first :: rest ->
+          fprintf ppf "%a * " Pprintast.core_type first;
+          print_core rest in
+     if cts <> []
+     then (fprintf ppf "of ";  print_core cts);
+     fprintf ppf "@]@."
+
+and print_arity_mismatch n m =
+  (* 引数の数が異なる *)
+  fprintf ppf
+          "引数の数が違います。@ \
+           ハイライトされた部分では %d 個になっていますが、定義では %d 個です。@]@." n m
+and print_no_args l =
+  (* 引数が見つからない *)
+  fprintf ppf
+          "引数が見つかりません。@ \
+           （もしくは、 (%s ...) のようにかっこをつけましょう。）@]@." l
+
+let print_illtyped_constructor lid plst args =
+  match language with
+| English -> fprintf ppf
+    "@[Error25 : The constructor is given a wrong type of argument(s).@]@."
+| Japanese ->
+   fprintf ppf
+    "@[Error25 : コンストラクタの引数の型が合っていません。@]@.";
+   print_type lid plst args
+
+let print_illtyped_other () =
+  match language with
+| English -> fprintf ppf
+    "@[Error26 : This expression is ill-typed.@]@."
+| Japanese -> fprintf ppf
+    "@[Error26 : この部分に型がつきません。@]@."
+
+let print_illtyped_too_much_args n exp_typ typs name =
+  match language with
+| English ->
+    fprintf ppf
+      "@[The type conflict occurs at the %s argument.@]@."
+      (nth n)
+| Japanese ->
+    fprintf ppf
+      "@[Error27 : この関数呼び出しで渡されている引数が多いようです。@,\
+       関数と引数の型は以下の通りです。@]@.";
+    fprintf ppf
+      "@[関数部分 %a：@,%a@]@."
+      Pprintast.expression name
+      Printtyp.type_expr exp_typ;
+    print_illtyped_apply_args typs 1
+
+let print_illtyped_apply_not_function exp =
+  match language with
+| English -> fprintf ppf
+    "@[Error28 : This is not a function@]@.";
+| Japanese ->
+    fprintf ppf
+      "@[Error28 : ハイライトされた部分が関数呼び出しになっているのに、@,\
+       関数部分が@ %a@ 型になっています。@]@."
+       Printtyp.type_expr exp
+
+(* Error29 is already defined above *)
+
+let print_pattern () =
+  match language with
+| English -> fprintf ppf
+    "@[Error30 : This pattern is ill-formed.@]@."
+| Japanese -> fprintf ppf
+    "@[Error30 : ハイライトされたパターンに型がつきません@]@."
+
+let print_guard typ =
+  Printtyp.reset_and_mark_loops typ;
+  match language with
+| English -> fprintf ppf
+    "@[Error31 : The type of this expression is:@ %a,@,\
+     but it has to be bool.@]@."
+    Printtyp.type_expr typ
+| Japanese -> fprintf ppf
+    "@[Error31 : ハイライトされた部分の型は@ %a@ ですが@ \
+     bool 型でなくてはなりません。@]@."
+    Printtyp.type_expr typ
+
+let print_guard_env () =
+  match language with
+| English -> fprintf ppf
+    "@[Error32 : A variable in this expression is used at different type@ \
+     at different place.@]@."
+| Japanese -> fprintf ppf
+    "@[Error32 : この式の中の変数が、別のところで別の型で使われています。@]@."
+
+(* Error33 is already defined above *)
+
+let print_illtyped_record typ fields =
+  (* 式が □ でないフィールドの情報だけを取る *)
+  List.iter (
+    fun ((f, ft), (e, et)) ->
+      if e.pexp_desc <> Debug_core.skeleton'.pexp_desc then
+        begin
+          fprintf ppf
+                  "@[Error34 : レコード %a のフィールド %s の型が合っていません。@ \
+                   ハイライト部分、定義上の型は以下の通りです。@]@."
+                  type_expr typ (Longident.last f);
+          fprintf ppf
+                  "@[ハイライト部分：@,(%a : %a)@]@."
+                  Pprintast.expression e type_expr et;
+          fprintf ppf
+                  "    @[定義上の型：@,%a@.@]"
+                  Pprintast.core_type ft.pld_type
+        end
+    ) fields
+
+let print_label_mul fname =
+  match language with
+| English -> fprintf ppf
+    "@[Error35 : The record field label %s@ is defined several times.@]@." fname
+| Japanese -> fprintf ppf
+    "@[Error35 : ハイライトされた部分で、レコードのフィールド %s が複数回使われています。@ \
+     (レコードのフィールド名はすべて異なる必要があります。)@]@." fname
+
+let print_illtyped_constraint typ1 typ2 =
+  Format.fprintf ppf
+    "@[Error36 : ハイライトされた部分で、: の左側の式は %a 型ですが、@ \
+     : の右側の型は %a 型です。これらは同じ型でなくてはなりません。@]@."
+    Printtyp.type_expr typ1 Printtyp.type_expr typ2;
+  check_duplicate typ1 typ2
+
+let print_no_method_use () =
+  Format.fprintf ppf
+    "@[Error37 : #use はファイルの先頭に書きましょう。@]@."
+
+let print_illtyped_array typ1 typ2 =
+  Format.fprintf ppf
+                 "@[Error38 : ハイライトされた部分は %a 型の配列ですが、@ \
+                  %a 型の要素が含まれています。 @ \
+                  配列の各要素の型は、すべて同じである必要があります。@]@."
+                 Printtyp.type_expr typ1 Printtyp.type_expr typ2;
+  check_duplicate typ1 typ2
+
+let print_orpad_vars () =
+  fprintf ppf
+          "@[Error39 : 変数を含むパターンは、| で矢印の左側にまとめることができません。@,\
+           すべてのパターンに式をつけるか、パターンに変数を含まないようにしましょう。@]@."
+
+let print_multiply_bound_variable s =
+  fprintf ppf
+          "@[Error40 : ハイライトされた部分で、パターン変数 %s が多重に定義されています。@,\
+           (ひとつのパターンの中に定義する変数の名前はすべて異なる必要があります。)@]@." s
+
+(* let文のエラー *)
+let print_illtyped_let_rec1 v =
+  fprintf ppf
+          "@[Error41 : ハイライト部分の関数定義 %a に再帰があります。@,\
+           let の後に rec を書きましょう。@]@."
+          Pprintast.pattern v.pvb_pat
+
+let print_illtyped_let_rec_many vs =
+  fprintf ppf
+          "@[Error42 : ハイライト部分の関数定義 ";
+  List.iter (fun v' -> fprintf ppf "%a " Pprintast.pattern v'.pvb_pat) vs;
+  fprintf ppf "@,\
+           に相互再帰があります。let の後に rec を書きましょう。@]@."
+
+let print_illtyped_let v vs =
+  fprintf ppf
+          "@[Error43 : ハイライト部分の関数定義 %a の中で、@,\
+           and で同時に定義された他の関数 "
+          Pprintast.pattern v.pvb_pat;
+  List.iter (fun v' -> fprintf ppf "%a " Pprintast.pattern v'.pvb_pat) vs;
+  fprintf ppf
+          "@,\
+           が1つ以上呼び出されています。in や ;; を使って各定義を独立させましょう。@]@."
+
+let print_illtyped_case exp =
+  fprintf ppf
+          "@[Error44 : ハイライト部分のパターン変数 %a が @,\
+           式中で異なる型として使われています。@]@." Pprintast.expression exp
+
+let print_label_mismatch env lid trace =
+  match language with
+| English -> report_unification_error ppf env trace
+        (function ppf ->
+           fprintf ppf "@[Error51 : The record field %a@ belongs to the type"
+                   longident lid)
+        (function ppf ->
+           fprintf ppf "but is mixed here with fields of type");
+             fprintf ppf "@]@."
+| Japanese -> report_unification_error ppf env trace
+        (function ppf ->
+           fprintf ppf "@[Error51 : フィールド %a@ が属する型は"
+                   longident lid)
+        (function ppf ->
+           fprintf ppf "ですが、それを含む全体のレコード型は");
+              fprintf ppf " です。@]@."
+
+let print_label_missing labels =
+  match language with
+| English ->
+   let print_labels ppf =
+     List.iter (fun lbl -> fprintf ppf "@ %s" (Ident.name lbl)) in
+   fprintf ppf "@[<hov>Some record fields are undefined:%a@]"
+           print_labels labels
+| Japanese ->
+   let print_labels ppf =
+     List.iter (fun lbl -> fprintf ppf " %s" (Ident.name lbl)) in
+   fprintf ppf "@[Error52 : ハイライトされた部分で、レコードのフィールド%a が足りません。@]@." print_labels labels
+
+let print_illtyped_try_right typ1 typ2 =
+  begin match language with
+| English -> fprintf ppf
+    "@[Error53 : Somewhere in this try expression is wrong.@]@." (* 英語 *)
+| Japanese -> fprintf ppf
+    "@[Error53 : try する式が@ %a@ 型で矢印の右側が@ %a@ 型になっていますが、\
+     @,これらは同じ型でなくてはなりません。@]@."
+    Printtyp.type_expr typ1 Printtyp.type_expr typ2
+  end;
+  check_duplicate typ1 typ2
+
+let print_illtyped_try_left typ =
+  match language with
+| English -> fprintf ppf
+    "@[Error54 : Somewhere in this try expression is wrong.@]@." (* 英語 *)
+| Japanese -> fprintf ppf
+    "@[Error54 : try 文のパターンが @ %a@ 型になっていますが、\
+     @,これは例外でなくてはなりません。@]@."
+    Printtyp.type_expr typ
+
+let print_illtyped_try_env () =
+  match language with
+| English -> fprintf ppf
+    "@[Error55 : Some variables in this expression is used at different type@ \
+     at different place.@]@."
+| Japanese -> fprintf ppf
+    "@[Error55 : ハイライト部分の変数が\
+     別の場所で別の型として使われています。@]@."
+
+
+let print_wrong_name kind typ name =
+  match language with
+  | English ->
+     fprintf ppf
+	     "@[Error56 : The %s %s does not belong to type %a.@]@."
+	     (if kind = Typecore.Datatype_kind.Record then "field" else "constructor") name Printtyp.type_expr typ
+  | Japanese ->
+     fprintf ppf
+	     "@[Error56 : %s %s は %a の中で定義されていません。@]@."
+	     (if kind = Typecore.Datatype_kind.Record then "フィールド" else "コンストラクタ") name Printtyp.type_expr typ
+
+let print_unbound_name kind lid =
+
+  let var_name = Longident.last lid in (* 変数名 *)
+  let mod_names = (* モジュールの名前リスト *)
+    List.filter (fun v -> v <> var_name)
+                (List.rev (Longident.flatten lid)) in
+
+  fprintf ppf
+          "@[Error57 : %s という名前の%sは、%s定義されていません。@]@."
+          var_name
+          (if kind = "record"
+           then "フィールドを持つレコード"
+           else if kind = "module"
+           then "モジュール"
+           else "コンストラクタ")
+          (if mod_names = [] then ""
+           else "モジュール" ^ List.hd mod_names ^ "の中で")
+
+let print_duplicate_name kind name =
+  match language with
+  | English ->
+     fprintf ppf "@[Two constructors are named %s@]@." name
+  | Japanese ->
+     let kind' = (if kind = "record" then "フィールド" else "コンストラクタ") in
+     fprintf ppf "@[Error58 : %s %s が複数あります。@,\
+                  定義する%sの名前は、すべて異なる必要があります。@]@." kind' name kind'
diff --git a/typing/debug_slice.ml b/typing/debug_slice.ml
new file mode 100644
index 0000000..55b0611
--- /dev/null
+++ b/typing/debug_slice.ml
@@ -0,0 +1,990 @@
+(* open Misc *)
+(* open Path *)
+open Asttypes
+open Ast_helper
+
+(* open Types *)
+open Typedtree
+(* open Ctype *)
+(* open Format *)
+
+open Parsetree
+open Debug_core
+
+(* Size を payload の PStr に埋め込み *)
+(* Size n を my_size n にする *)
+let my_size n =
+  let attr = (* see Debug_core.Attr.of_size *)
+    {attr_name = mknoloc "size";
+     attr_payload = PPat (Pat.constant (Const.int n), None);
+     attr_loc = Location.none} in
+  let exp = Exp.construct (mknoloc (Longident.Lident "_my_size_")) None in
+  PStr ([Str.eval ~attrs:[attr] exp])
+
+(* Size ここまで *)
+
+type structure_cxt = (structure_item * Env.t) list -> structure -> structure
+
+(* go *)
+(* 'a context_t を引数に持つ関数を、最後に 'a 型で受け取る形にする。 *)
+(* かっこを減らせる, 'a 型の引数で再帰する関数に渡すときに便利。 *)
+let go f prefix env cxt x = f ((x, cxt), env, prefix)
+
+(* id : 'a -> 'a *)
+let id = fun x -> x
+
+(* ここから *)
+module type Go =
+  sig
+    type t
+    val go : unit -> t
+  end
+
+module type InitTop =
+  sig
+    type t = structure
+    val name : string
+    val context : ((structure_item * structure) * structure_cxt) context_t
+  end
+
+module type InitSlice =
+  sig
+    type t
+    (*    val f : t -> structure *)
+    val slice : t
+    val cxt : expr_context
+    val typed_set : ((t -> t) -> t -> structure) * Env.t (* item_cxt *)
+  end
+
+module type Init =
+  sig
+    type t
+    val env : Env.t
+  end
+
+module type Slicer =
+  sig
+    type t
+    val get : (t * (t -> t)) * ((t -> t) -> t -> structure) -> expr_context ->t
+  end
+
+module type MakeSlicer =
+sig
+  (* init を渡すと slice型 の Slicer が生成されるファンクタ *)
+  (* string でスライサの種類を指定する *)
+  type slice
+  module type Init = Init with type t = slice
+    module type Slicer = Slicer with type t = slice
+    module type Make = functor (_ : Init) -> Slicer
+    val get : (module InitSlice with type t = slice) -> string -> slice
+  end
+
+module Generate = struct
+
+    (* context_t の生成 *)
+    let rec context' structure env prefix = match structure with
+        [] -> failwith "TypeDebugger: Error: structure is well typed."
+      | s :: rest ->
+         try
+           let (_, _, _, env') = Typemod.type_structure env [s] in
+           context' rest env' ((s, env) :: prefix)
+         with _ ->
+           ((((s, []), fun _ x -> x), Empty), env, prefix)
+
+    (* init の生成 *)
+    let init (type s) env =
+      (module
+         struct
+           type t = s
+           let env = env
+         end : Init with type t = s)
+
+    let initTop name structure env =
+      (* Data.Infer.init name; *)
+      (module
+         struct
+           type t = structure
+           let name = name
+           let context = context' structure env []
+         end : InitTop)
+
+    let initSlice (type s) skeleton ((((f, slice), str_cxt), cxt), env, prefix) = 
+        let item_cxt' prefix str slice_cxt slice' =
+          str_cxt prefix (str @ f (slice_cxt slice')) in
+
+        (module
+           struct
+             type t = s
+             let f = f
+             let slice = slice
+             let cxt = cxt
+             let typed_set = match prefix with
+                 [] -> (item_cxt' prefix [], env)
+               | (s', env') :: prefix' ->
+                  try
+                    ignore (Typemod.type_structure env (f skeleton));
+                    (* □に置き換えて welltyped: *)
+                    (item_cxt' prefix [], env)
+                  with _ ->
+                    (* □に置き換えて illtyped: *)
+                    (item_cxt' prefix' [s'], env')
+           end : InitSlice with type t = s)
+
+    (* スライスを求める *)
+    let slice (type s) slice item_cxt cxt (module S : Slicer with type t = s) =
+      S.get ((slice, id), item_cxt) cxt
+
+    (* Slicer モジュールを返す *)
+    let slicer (type s) name skeleton context
+               (module M : MakeSlicer with type slice = s) =
+      (module
+         struct
+           type t = s
+           let go () =
+             let slice =
+               M.get (initSlice skeleton context) name in             
+             slice
+         end : Go with type t = s)
+
+    let f (type s) (module F : Go with type t = s) = F.go ()
+
+  end
+
+module ExprSlicer :
+sig
+  open Parsetree
+  val search : string -> bool
+  val top : string ->
+    (((expression -> structure) * expression) *
+     ((structure_item * Env.t) list -> structure_item list -> structure))
+      context_t -> expression
+end = struct
+  
+  module Make =
+  struct
+    type slice = expression
+    module type Slicer = Slicer with type t = expression
+    module type Init = Init with type t = expression
+    module type Make = functor (_ : Init) -> Slicer
+
+    let print = print_deb_exp
+    let term e = Size.Exp.reset 0 e
+    let hole e = term (hole_of_exp e)
+    let make_slicer (module M : Make) (module I : Init) = (module M (I) : Slicer)
+
+    module Slicer0 (I : Init) = struct
+      include I
+
+      let wrap_expr expr_cxt' expr_cxt expr =
+        expr_cxt' (expr_cxt expr)
+      let wrap_item item_cxt expr_cxt' expr_cxt expr =
+        item_cxt (wrap_expr expr_cxt' expr_cxt) expr
+
+      let dummy_apply expr es =
+        if List.exists (fun e -> e = hole e) es then []
+        else
+          [{expr with
+            pexp_desc =
+              Pexp_apply (hole expr, List.map (fun e -> (Nolabel, e)) es)}]
+
+      let abst sel e' e = match Desc.Exp.comp e' e with
+          1 -> if sel then e else hole e
+        | 0 -> e'
+        | _ -> if sel then hole e else e
+                                     
+      let make_expr expr e' =
+        Desc.Exp.map (abst false e') expr
+                         
+      let selected_expr expr expr_cxt' e' =
+        if Desc.Exp.comp e' expr < 0 then expr_cxt' e' else e'
+                                                                      
+      (* dummy apply *)
+      let getChildren'' expr = match expr.pexp_desc with
+        | Pexp_tuple es ->
+            dummy_apply expr es
+        | Pexp_array es ->
+            dummy_apply expr es
+        | Pexp_construct (_, Some {pexp_desc = Pexp_tuple es}) ->
+            dummy_apply expr es
+        | _ -> []
+  
+      (* □以外の子ノード全て *)
+      let getChildren' expr = match expr.pexp_desc with
+        | Pexp_construct (_, Some {pexp_desc = Pexp_tuple es}) ->
+            List.filter (fun e -> e <> hole e) es
+        | _ ->
+            Desc.Exp.fold (
+              fun acc e ->
+                if Size.Exp.comp e < 1 then e :: acc else acc
+            ) [] expr
+              
+      let getChildren expr = getChildren'' expr @ getChildren' expr
+            
+      let rec search (slices, expr_cxt, item_cxt, f) cxt = match slices with
+        | [] -> f ()
+        | first :: rest ->
+            if print_slice then
+              Format.fprintf ppf "@[  search: %a @]@."
+                print first;
+
+            if Data.typed env item_cxt expr_cxt first then
+              (* welltyped *)
+              search (rest, expr_cxt, item_cxt, f) cxt
+            else
+              (* illtyped *)
+              get ((expr_cxt first, id), item_cxt) cxt
+                
+      and get ((expr, expr_cxt), item_cxt) cxt =
+        
+        if print_slice then
+          Format.fprintf ppf "@[  get: %a @]@."
+            print expr;
+        
+        let children = getChildren expr in
+        
+        match expr.pexp_desc with
+        
+        | Pexp_construct (lid, Some ({pexp_desc = Pexp_tuple es} as expr')) ->
+            
+            (* Construct *)
+            let fold es' e' =
+              {expr with
+               pexp_desc =
+                 Pexp_construct (
+                   lid,
+                   Some {expr' with
+                         pexp_desc =
+                           Pexp_tuple (List.map (abst false e') es')})} in
+            let f () =
+              let slice =
+                let fold' es' e' = fold es' (term e') in
+                let es' =
+                  Desc.Exp.fold (
+                    fun es' e ->
+                      let slice =
+                        get' ((e, id), wrap_item item_cxt (fold' es')) cxt in
+                      List.map (
+                        fun e ->
+                          if Desc.Exp.comp slice e < 0 then e else slice) es'
+                  ) es expr' in
+                fold' es' Hole.exp in
+              wrap_expr expr_cxt term slice in
+            
+            (* search *)
+            search (
+              children,
+              wrap_expr expr_cxt (selected_expr expr (fold es)),
+              item_cxt, f) cxt
+              
+        | _ ->
+            
+            let f () =
+              let slice =
+                let item_cxt' = wrap_item item_cxt expr_cxt in
+                Desc.Exp.fold (
+                  fun expr' e ->
+                    let expr_cxt'' = make_expr expr' in
+                    let item_cxt'' = wrap_item item_cxt' expr_cxt'' in          
+                    get' ((e, id), item_cxt'') cxt |> expr_cxt''
+                ) expr expr in
+              wrap_expr expr_cxt term slice in
+            
+            (* search *)
+            search (
+              children,
+              wrap_expr expr_cxt (selected_expr expr (make_expr expr)),
+              item_cxt, f) cxt
+              
+      (* get' *)
+      and get' ((expr, expr_cxt), item_cxt) cxt =
+        if Desc.Exp.leaf expr then wrap_expr expr_cxt term expr
+        else get ((expr, expr_cxt), item_cxt) cxt
+
+    end
+
+
+
+    module SelectiveSlicer (S : sig val selector : bool end) (I : Init) = struct
+      include I
+
+      let rec search (child, sel, expr_cxt, slice_cxt) item_cxt cxt =
+
+        if print_slice then
+          Format.fprintf ppf "@[  search / abst %s: %a @]@."
+            (if sel then "expect" else "one")
+            print child;
+        
+        let sel' =
+          Data.typed env item_cxt (slice_cxt sel expr_cxt) child in
+        if sel' && sel then
+          (* welltyped : abst expect *)
+          search (child, false, expr_cxt, slice_cxt) item_cxt cxt
+            
+        else
+          let g pair = get (pair, item_cxt) cxt in
+          if sel' && Size.Exp.comp child = 0 then
+            (* welltyped : is1 *)
+            g (slice_cxt false expr_cxt (term child), id)
+              
+          else if sel' || sel then
+            (* welltyped : greater1 *)
+            (* illtyped : abst expect *)
+            g (child, slice_cxt sel expr_cxt)
+              
+          else
+            (* illtyped : abst one *)
+            g (slice_cxt sel id child , expr_cxt)
+              
+      and get ((expr, expr_cxt), item_cxt) cxt =
+
+        if print_slice then
+          Format.fprintf ppf "@[  get: %a @]@."
+            print expr;
+        
+        if Size.Exp.comp expr < 0 then
+          let (expr', slice_cxt) =
+            if S.selector then
+              Size.getChildSet expr
+            else
+              Size.getChildSet2 expr in
+          search (expr',
+                  slice_cxt true id expr' <> expr, expr_cxt,
+                  slice_cxt) item_cxt cxt
+        else
+          get' ((expr, expr_cxt), item_cxt) cxt
+
+      and get' ((expr, expr_cxt), item_cxt) cxt =
+        let slice = expr_cxt expr in
+        if Size.Exp.comp slice < 0 then
+          get ((slice, id), item_cxt) cxt
+        else
+          slice
+    end
+
+    module Slicer3 (I : Init) = struct
+      include I
+          
+      let rec resize expr =
+        if Desc.Exp.leaf expr then expr (* そのまま *)
+        else
+          let n_sum = ref 0 in
+          let expr' =
+            Desc.Exp.map (
+              fun e ->
+                let e' = resize e in
+                let n' = Size.Exp.get e' in
+                n_sum := !n_sum + n';
+                e'
+            ) expr in
+          if !n_sum = 0 then
+            (* expr も 0 になる *)
+            term expr'
+          else
+            Size.Exp.reset (!n_sum + 1) expr'
+              
+      let rec make_expr_cxt0 expr piv =
+        match (expr.pexp_desc, piv.pexp_desc) with
+        | (Pexp_apply (e, (_, e0) :: les0),
+           Pexp_apply (e1, les1)) when
+            e.pexp_desc = Hole.exp.pexp_desc
+            && e0.pexp_loc = piv.pexp_loc
+            && e1.pexp_desc = Hole.exp.pexp_desc->
+            
+            let attrs =
+              List.fold_left (
+                fun attrs' {attr_name = str; attr_payload; attr_loc} ->
+                  match (attrs', attr_payload) with
+                    ({attr_name = str'; attr_payload = PStr structure} :: rest,
+                     PStr structure')
+                    when str.txt = "app" && str'.txt = "app" ->
+                      (* mergeする *)
+                      let attr_payload = PStr (structure @ structure') in
+                      {attr_name = str'; attr_payload; attr_loc} :: rest
+                  | _ ->
+                      attrs'
+              ) piv.pexp_attributes expr.pexp_attributes in
+            
+            {expr with pexp_desc = Pexp_apply (e, les0 @ les1);
+                       pexp_attributes = attrs}
+        | _ ->
+            if print_slice then
+              Format.fprintf ppf "@[  make0(expr): %a @]@."
+                print_deb_exp expr;
+
+            if piv.pexp_loc = expr.pexp_loc then
+              piv
+            else
+              Desc.Exp.map (
+                fun e ->
+                  if Desc.Exp.internal e piv then
+                    make_expr_cxt0 e piv
+                  else
+                    e
+              ) expr
+                
+      let rec make_expr_cxt1 piv expr =
+        if piv = expr then
+          hole piv
+        else if piv.pexp_loc = expr.pexp_loc then
+          piv
+        else
+          Desc.Exp.map (
+            fun e ->
+              if Desc.Exp.internal e piv then
+                make_expr_cxt1 piv e
+              else
+                e
+          ) expr
+            
+      let dummy_apply expr es =
+        {expr with
+         pexp_desc =
+           Pexp_apply
+             (hole expr, List.map (fun e -> (Nolabel, e)) es)}
+        
+      
+      let rec make_expr_cxt2 piv expr =
+        if piv.pexp_loc = expr.pexp_loc then
+          piv
+        else
+          match expr.pexp_desc with
+          | Pexp_construct (_, Some {pexp_desc = Pexp_tuple es}) ->
+              make_dummy_apply_cxt es piv expr
+          | Pexp_tuple es ->
+              make_dummy_apply_cxt es piv expr
+          | Pexp_array es ->
+              make_dummy_apply_cxt es piv expr
+          | Pexp_record (les, eop) ->
+              let es' = match eop with
+                  None ->
+                    List.map (
+                      fun (_, e) -> make_expr_cxt2' piv e
+                    ) les
+                | Some e' ->
+                    List.map
+                      (make_expr_cxt2' piv)
+                      (e' :: List.map snd les) in
+              dummy_apply expr es'
+          | Pexp_ifthenelse (e1, e2, eop) ->
+              let es = e1 :: e2 ::
+                       match eop with None -> [] | Some e' -> [e'] in
+              let es' = List.map (make_expr_cxt2' piv) es in
+              dummy_apply expr es'
+                
+          | Pexp_apply (e, les)
+            when 0 < Size.Exp.get e
+              && not (Desc.Exp.internal e piv) ->
+              let expr' =
+                make_skeleton_apply_cxt ([], (Nolabel, e) :: les) piv expr in
+              if print_slice then
+                Format.fprintf ppf "@[  skeleton apply: %a @]@."
+                  print_deb_exp expr';
+              
+              make_expr_cxt2' piv {expr' with pexp_loc = expr.pexp_loc}
+                
+          | Pexp_apply (e, (_, {pexp_loc;
+                                pexp_attributes;
+                                pexp_desc =
+                                  Pexp_apply (e', (l0, e0) :: les0)}) :: les1)
+            when
+              (* 入れ子になっているが、pivは関数適用ではない *)
+              Desc.Exp.internal {skeleton' with pexp_loc = pexp_loc} piv && pexp_loc <> piv.pexp_loc
+              (* hole あるいは抽象化される式 *)
+              && (e.pexp_desc = Hole.exp.pexp_desc
+                  || (0 < Size.Exp.get e
+                      && not (Desc.Exp.internal e piv)))
+              && (e'.pexp_desc = Hole.exp.pexp_desc
+                  || (0 < Size.Exp.get e'
+                      && not (Desc.Exp.internal e' piv))) ->
+              
+              let expr' =
+                let les =
+                  List.filter (
+                    fun (_, e_) ->
+                      (* 抽象化できない式 or 既に抽象化された式を除外 *)
+                      e_.pexp_desc <> Hole.exp.pexp_desc
+                      && 0 = Size.Exp.get e_
+                  ) (les0 @ les1) in
+                
+                let attrs =
+                  List.fold_left (
+                    fun attrs' {attr_name = str; attr_payload; attr_loc} ->
+                      match (attrs', attr_payload) with
+                        ({attr_name = str'; attr_payload = PStr structure}
+                           :: rest,
+                         PStr structure')
+                        when str.txt = "app" && str'.txt = "app" ->
+                          (* mergeする *)
+                          let attr_payload = PStr (structure @ structure') in
+                          {attr_name = str'; attr_payload; attr_loc} :: rest
+                      | _ ->
+                          attrs'
+                  ) pexp_attributes expr.pexp_attributes in
+                Desc.Exp.map
+                  (make_expr_cxt2' piv)
+                  {expr
+                   with pexp_desc = Pexp_apply (Hole.exp, (l0, e0) :: les);
+                        pexp_attributes = attrs} in
+              
+              if print_slice then
+                Format.fprintf ppf "@[  nested apply: %a @]@."
+                  print_deb_exp expr';
+
+              make_expr_cxt2' piv expr'
+                
+          | _ ->
+              (* その他 *)
+              Desc.Exp.map (make_expr_cxt2' piv) expr
+                
+      and make_expr_cxt2' piv expr =
+        if Desc.Exp.internal expr piv then
+          (* 部分木の一部：再帰 *)
+          make_expr_cxt2 piv expr
+        else if Size.Exp.get expr = 0 then
+          (* 確定 *)
+          expr
+        else
+          (* 抽象化 *)
+          hole expr
+            
+      (* dummy apply の生成 *)
+      and make_dummy_apply_cxt es piv expr =
+        let expr' =
+          make_skeleton_apply_cxt
+            ([], List.map (fun e -> (Nolabel, e)) es) piv expr in
+        if print_slice then
+          Format.fprintf ppf "@[  dummy apply: %a @]@."
+            print_deb_exp expr';
+        make_expr_cxt2 piv expr'
+
+      and make_skeleton_apply_cxt (acc, les) piv expr = match les with
+        | [] ->
+            (* 元の関数適用 *)
+            let payload =
+              {attr_name = {txt = "app"; loc = expr.pexp_loc};
+               attr_payload = PStr [Str.eval (Desc.Exp.map_all (
+                   fun e -> {e with pexp_attributes = []}
+                 ) expr)];
+               attr_loc = Location.none } in
+            {expr with
+             pexp_desc =
+               Pexp_apply (hole expr, acc);
+             pexp_attributes =
+               payload :: expr.pexp_attributes}
+            
+        | (l, e) :: rest ->
+            let acc' =
+              let e' = make_expr_cxt2' piv e in
+              if e' = hole_of_exp e then
+                (* 抽象化される *)
+                acc
+              else
+                (* 抽象化されない *)
+                acc @ [(l, e')] in
+            make_skeleton_apply_cxt (acc', rest) piv expr
+              
+      let make_slice_cxt' slice expr = match slice.pexp_desc with
+          Pexp_construct (_, Some {pexp_desc = Pexp_tuple es})
+          when Desc.Exp.fold (
+              fun b e ->
+                if e <> slice && 0 = Size.Exp.get e then
+                  b
+                else if b then
+                  e = slice
+                else
+                  b
+            ) true expr ->
+            let slice' =
+              let es' =
+                List.filter (
+                  fun {pexp_desc} -> pexp_desc <> Hole.exp.pexp_desc
+                ) es in
+              dummy_apply slice es' in
+            
+            let expr' =
+              Desc.Exp.map (
+                fun e' ->
+                  if e' = slice then
+                    slice'
+                  else
+                    e'
+              ) expr in
+            
+            if print_slice then
+              Format.fprintf ppf "@[  skip expected : %a@]@."
+                print_deb_exp expr';
+            expr'
+        | _ ->
+            make_expr_cxt2 slice expr
+              
+      let make_slice_cxt expr sel f slice =
+        f (resize (
+            if sel then
+              make_expr_cxt1 slice expr
+            else
+              make_slice_cxt' slice expr))
+          
+      let rec search f (child, sel, expr_cxt, slice_cxt) item_cxt cxt =
+
+        let sel' =
+          (* 呼び出し時に時間を記録 *)
+          Data.typed env item_cxt (slice_cxt sel expr_cxt) child in
+        
+        if print_slice then
+          Format.fprintf ppf "@[  search / abst %s is %s @]@."
+            (if sel then "one" else "expect")
+            (if sel' then "welltyped" else "illtyped");
+
+        let expr' = slice_cxt sel expr_cxt child in
+        if sel' && sel && 0 = Size.Exp.get expr' then
+          f ()
+        else if sel' && sel then
+          search f (child, false, expr_cxt, slice_cxt) item_cxt cxt
+        else
+          let g pair = get (pair, item_cxt) cxt in
+          if sel then
+            (* illtyped : abst one *)
+            begin
+              if print_slice then
+                Format.fprintf ppf "@[illtyped one : %a@]@."
+                  print_deb_exp expr';
+              g (resize (slice_cxt sel id child), expr_cxt)
+            end
+          else if sel' = sel then
+            (* illtyped : abst expected *)
+            begin
+              if print_slice then
+                Format.fprintf ppf "@[illtyped expected : %a@]@."
+                  print_deb_exp expr';
+              g (child, make_expr_cxt0 expr')
+            end
+          else
+            f ()
+              
+      and pick m expr =
+        if Desc.Exp.leaf expr then
+          (* leaf の場合は、そのまま返す *)
+          expr
+        else
+          Desc.Exp.fold (
+            fun piv node ->
+              if Size.Exp.get node < 1 then
+                (* node が確定している *)
+                piv                        
+              else
+                let n' = Size.Exp.get piv in
+                let m1 = abs (m - Size.Exp.get node) and m2 = abs (m - n') in
+                match compare m1 m2 with
+                  1 -> piv (* piv の方が適切 *)
+                | 0 when
+                    Desc.Exp.fold (
+                      fun b e ->
+                        if b && e <> node then true
+                        else if b && e = hole_of_exp e then true
+                        else false (* node が piv の子ノード *)
+                    ) true piv ->
+                    piv
+                | _ ->
+                    match expr.pexp_desc with
+                    | Pexp_construct (_, Some ({pexp_desc = Pexp_tuple (e :: es)} as e0))
+                      when e0 = node ->
+                        let p = pick m e in
+                        List.fold_left (
+                          fun p' e' ->
+                            if Size.Exp.get p' = 0 then
+                              e'
+                            else if hole_of_exp e' = e' then
+                              p'
+                            else
+                              let p'' = pick m e' in
+                              if 0 < compare m1 (abs (m - Size.Exp.get p'')) then
+                                p''
+                              else
+                                p'
+                        ) p es
+                    | _ ->
+                        if print_slice then
+                          Format.fprintf ppf "@[pick (node) : %a@]@."
+                            print_deb_exp node;
+                        pick m node
+          ) expr expr
+            
+      and get ((expr, expr_cxt), item_cxt) cxt =
+        
+        if Size.Exp.get expr = 0 || Desc.Exp.leaf expr then
+          get' ((expr, expr_cxt), item_cxt) cxt
+        else
+          let piv =                  
+            let m = (1 + Size.Exp.get expr) / 2 in
+            pick m expr in
+          
+          let f () =
+            
+            let terminate () =
+              if print_slice then
+                Format.fprintf ppf "@[welltyped terminated : %a@]@."
+                  print_deb_exp piv;
+              resize (make_expr_cxt0 expr (term piv)) in
+            if Size.Exp.get piv = 1 then
+              (* piv is size 1 : terminated *)
+              get ((terminate (), expr_cxt), item_cxt) cxt
+            else
+              let child_cxt expr_cxt' expr' =
+                make_slice_cxt expr true expr_cxt (expr_cxt' expr') in
+              let item_cxt' expr_cxt' expr' =
+                item_cxt (child_cxt expr_cxt') expr' in
+              begin
+                if print_slice then
+                  Format.fprintf ppf "@[welltyped sub-slice : %a@]@."
+                    print_deb_exp piv;
+                let piv' =
+                  get ((piv, id), item_cxt') cxt in
+                get ((child_cxt id piv', expr_cxt), item_cxt) cxt
+              end in
+          
+          begin
+            if print_slice then
+              begin
+                Format.fprintf ppf "@[  get: %a @]@."
+                  print expr;
+                Format.fprintf ppf "@[  pivot: %a @]@."
+                  print piv;
+              end
+            else
+              Data.Infer.read expr.pexp_loc;
+            
+            search f (piv, true, expr_cxt, make_slice_cxt expr) item_cxt cxt
+          end
+          
+      and get' ((expr, expr_cxt), item_cxt) cxt =
+        let slice = resize (expr_cxt expr) in
+        if print_slice then
+          Format.fprintf ppf "@[  get': %a @]@."
+            print (expr_cxt expr);
+        
+        (* size が 0 になった時点で終了 *)
+        if Size.Exp.get slice = 0 then
+          slice
+        else
+          get ((slice, id), item_cxt) cxt
+            
+    end
+
+    (* list *)
+    (* スライサーリスト *)
+    let list : (string * (module Make)) list =
+      ["original", (module Slicer0);
+       "resize1", (module SelectiveSlicer (struct let selector = true end));
+       "resize2", (module SelectiveSlicer (struct let selector = false end));
+       "resize3", (module Slicer3)]
+      
+    (* search *)
+    (* スライサーを探す *)
+    let search name = List.exists (fun (name', _) -> name = name') list
+        
+    (* get_one *)
+    (* 1種類のスライサを起動 *)
+    let get_one (module S : InitSlice with type t = expression) (name, make) =
+      let open S in
+      if print_slice then
+        Format.fprintf ppf "@[[%s slicer] @]@." name;
+
+      (* スライスを求める *)
+      if not (Data.typed (snd typed_set) (fst typed_set) hole slice) then
+        hole slice (* expr が不要 *)
+      else if Desc.Exp.leaf slice then
+        term slice (* expr が必要かつ leaf *)
+      else
+        Generate.init (snd typed_set) (* その他 *)
+        |> make_slicer make
+        |> Generate.slice slice (fst typed_set) cxt
+
+    (* get_all *)
+    (* 全ての複数のスライサを起動 *)
+    let get_all init = List.map (get_one init) list
+        
+    (* get *)
+    (* 外部から呼び出される。スライスを求める関数。 *)
+    let get init name =
+      try
+        get_one init (name, List.assoc name list)
+      with
+        Not_found -> List.hd (get_all init)
+                       
+  end
+
+  let search = Make.search
+                 
+  (* top *)
+  (* 外部から呼び出される。スライサの入口 *)
+  let top name ((((expr_cxt, expr), structure_cxt), cxt), env, prefix) =
+    
+    (* 初期状態の生成 *)
+    let expr =
+      Data.init ((expr, cxt), env, prefix) in
+
+    Data.Infer.write [] expr false;
+    let time0 = Sys.time () in
+    let slice =
+      Generate.f (
+        Generate.slicer name Hole.exp
+          ((((expr_cxt, expr), structure_cxt), cxt), env, prefix)
+          (module Make : MakeSlicer with type slice = expression)) in
+    let time1 = Sys.time () in
+    Data.Infer.write [] slice true;
+
+    (* スライスの出力をしていない場合、データを記録する *)
+    if print_slice then
+      slice
+    else
+      Data.finally slice (time1 -. time0)
+end
+
+(* 共通部分 *)
+module Top (I : InitTop) =
+  struct
+    type t = structure
+
+    (* search *)
+    (* structure のスライスを1行ずつ求める。 *)
+    let rec search (str_cxt, prefix, slice_str) cxt = match prefix with
+        [] -> str_cxt [] slice_str
+      | (next_str, env) :: rest ->
+         go get rest env cxt ((next_str, slice_str), str_cxt)
+
+    (* get *)
+    (* 着目している行のスライスを求める。 *)
+    and get ((((item, slice_str), str_cxt), cxt), env, prefix) =
+      match item with
+        {pstr_desc = d; pstr_loc = loc} ->
+          (* item をスライシングして、slice_str を更新する。 *)
+          let slice_str' = match d with
+            | Pstr_eval (expr, _) ->
+                (* eval *)
+                (* expr;; *)
+                let eval_cxt e = (Str.eval ~loc e) :: slice_str in
+                go eval prefix env cxt
+                  (str_cxt, eval_cxt, expr)
+            | Pstr_value (flg, vs) when item <> hole_str ->
+                (* value *)
+                (* let (flg) P0=E0 and ... Pn=En *)
+                let value_cxt vs = (Str.value ~loc flg vs) :: slice_str in
+                go value prefix env cxt
+                  (str_cxt, value_cxt, go Desc.Vb.complete prefix env cxt vs)
+
+            | Pstr_module ({pmb_loc; pmb_name = name;
+                            pmb_expr = {pmod_loc;
+                                        pmod_attributes = [];
+                                        pmod_desc =
+                                          Pmod_structure (mod_str)}}) ->
+                (* module *)
+                (* module MODULENAME = struct ... end *)
+                let me_cxt str =
+                  Mod.structure
+                    ~loc:pmod_loc
+                    ~attrs:[{attr_name = mkloc "mod" loc;
+                             attr_payload = PStr mod_str;
+                             attr_loc = Location.none};
+                            {attr_name = mknoloc "size";
+                             attr_payload = my_size (List.length mod_str);
+                             attr_loc = Location.none}] str in
+                let mb_cxt str =
+                  Mb.mk ~loc:pmb_loc name (me_cxt str) in
+                let mod_cxt str =
+                  (Str.module_ ~loc (mb_cxt str)) :: slice_str in
+                go module_
+                  [] env cxt
+                  (mod_str,
+                   fun prefix' structure' ->
+                     mod_cxt (
+                       List.fold_left (
+                         fun str (s', _) ->
+                           s' :: str) structure' prefix'))
+            | _ ->
+                (* その他は特に何もしない *)
+                item :: slice_str in
+          
+          (* search に移動 *)
+          search (str_cxt, prefix, slice_str') cxt
+
+    (* Eval : (structure_cxt * (expression -> structure) * expression) context_t
+     -> structure *)
+    (* eval のスライシング *)
+    and eval (((str_cxt, eval_cxt, expr), cxt), env, prefix) =
+      let slice =
+        go get' prefix env cxt ((eval_cxt, expr), str_cxt) in
+
+      if print_slice then
+        Format.fprintf ppf "@[get_slice_eval: %a @]@."
+                       print_deb_strs (eval_cxt slice);
+      eval_cxt slice
+
+    (* value *)
+    (* value のスライシング *)
+    and value (((str_cxt, value_cxt, vs), cxt), env, prefix) = match vs with
+        [] -> value_cxt []
+      | vn :: rest ->
+         (* vn のスライスを求める *)
+         let value_cxt' e vs' = value_cxt ((Map.set_exp Map.v1 vn e) :: vs') in
+         let vb_cxt e = value_cxt' e rest in
+         let slice =
+           go get' prefix env cxt ((vb_cxt, vn.pvb_expr), str_cxt) in
+         if print_slice then
+           Format.fprintf ppf "@[get_slice_value: %a @]@."
+                          Pprintast.structure (value_cxt' (Meta.clean "all" slice) []);
+         go value prefix env cxt (str_cxt, value_cxt' slice, rest)
+
+    (* module *)
+    (* (structure_cxt * (structure -> structure) * structure) context_t
+     -> structure *)
+    (* module のスライシング *)
+    and module_ (((structure, structure_cxt), cxt), env, prefix) =
+      match structure with
+        [] -> search (structure_cxt, prefix, []) cxt
+      | s :: rest ->
+         try
+           (* rest のみ無視したモジュールで型がつくかどうかチェックする *)
+           ignore (
+               Typemod.type_structure
+                 env [List.hd (structure_cxt prefix [s])]);
+           (* prefix に積んで再帰 *)
+           go module_ ((s, env) :: prefix) env cxt (rest, structure_cxt)
+         with _ ->
+           (* モジュールの中で型エラー *)
+           go get prefix env cxt ((s, []), structure_cxt)
+
+    (* get' *)
+    (* Expression_slicing に行く *)
+    (* ひとつ前の行の環境があれば使う。なければ現在の環境を使う。 *)
+    and get' context = ExprSlicer.top I.name context
+
+    (* ここから呼び出す *)
+    let go () =
+      let structure = get I.context in
+      if Debug_core.on_file_output then Data.Slice.Exp.outputs ();
+
+      if ExprSlicer.search I.name then
+        (* アルゴリズムの指定があればそのまま返す *)
+        structure
+      else
+        (* それ以外ではデバッガの起動は不要 *)
+        failwith "Slicer: debug mode"
+
+  end
+(* ここまで：デバッグ用のスライス書き込み *)
+
+(* スライスのトップ *)
+let get_slice_top structure env =
+  Warnings.parse_options false "-A";
+
+  let (module I : InitTop) =
+    (* アルゴリズムの種類を環境変数で指定 *)
+    try
+      let name = Sys.getenv "DEBUGGER_SELECTED_SLICER" in
+      Generate.initTop name structure env
+    with
+    (* なければデフォルトの設定 *)
+      Not_found -> Generate.initTop "resize3" structure env in
+
+  (* スライサの処理に進む *)
+  Generate.f (module Top (I) : Go with type t = structure)
diff --git a/typing/debug_slice.mli b/typing/debug_slice.mli
new file mode 100644
index 0000000..a2ccfd9
--- /dev/null
+++ b/typing/debug_slice.mli
@@ -0,0 +1,3 @@
+open Parsetree
+
+val get_slice_top : structure -> Env.t -> structure
